import java.awt.Rectangle; import java.util.ArrayList;

public class Collision {

Driver driver;

// Arrayliste für die Spriteobjekte anlegen
ArrayList<WorldObject> spriteListWorld;

// kleine Korrektion für genauere grafische Darstellung
int collisionCorrection = 6;

// Checksummen für Anzahl der Kollisionen
int checkSumRight = 0;
int checkSumLeft = 0;


// Konstruktor für die Sprites
public Collision(Driver driver, ArrayList<WorldObject> spriteListWorld) {
    this.driver = driver;
    this.spriteListWorld = spriteListWorld;

    // Erstellen der Objekt Rechtecke
    for (WorldObject sprite : spriteListWorld) {
        sprite.rectangle = new Rectangle((int)sprite.x, (int)sprite.y, sprite.width, sprite.height);
    }
}

// Kollisionsabfrage für Objekte
public void collisionObjects() {

    // Kollisionsabfragen des Driverobjekts mit den Worldobjekten
    for (WorldObject sprite : spriteListWorld) {

// // wechselt Kollisionsabfragen bei Imagewechsel // driver.DriverFlipImage();

        // Erstellen des Driver Rechtecks
        driver.rectangle = new Rectangle((int)driver.x, (int)driver.y, driver.width, driver.height);


        // Abfrage Driver kollidiert mit oberer Kante eines Objekts und fährt auf dem Objekt weiter
        if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMinY(),
                                               sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMinY())) {
            driver.y = sprite.rectangle.getMinY() - driver.height - collisionCorrection;
            driver.landing = true;
        }

        // Abfrage Driver kollidiert mit unterer Kante eines Objekts
        if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMaxY(), 
                                               sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMaxY())) {
            driver.jumping = false;
        }

        // Kollisionsabfrage rechte Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Links)
        if (sprite.rectangle.intersectsLine(driver.rectangle.getMinX(), driver.rectangle.getMinY() + collisionCorrection, 
                                            driver.rectangle.getMinX(), driver.rectangle.getMaxY() - collisionCorrection)) {
            driver.collideLeft = true;
            sprite.collideRight = true;
        }

        // Kollisionsabfrage linke Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Rechts)
        if (sprite.rectangle.intersectsLine(driver.rectangle.getMaxX(), driver.rectangle.getMinY() + collisionCorrection, 
                                            driver.rectangle.getMaxX(), driver.rectangle.getMaxY() - collisionCorrection)) {
            driver.collideRight = true;
            sprite.collideLeft = true;
        }

        checkSum();
    }
}

// Kollisionsabfrage für Gegner
public void collisionEnemy() {

}

// benötigte Checksumme der Kolisionen durch generierte Objekte
private void checkSum() {

    // Gegenrechnen der Checksummen für Rechts und Links (erst wenn die Checksumme 0 ergibt kann der Driver in diese Richtung weiterfahren)
    for (WorldObject sprite : spriteListWorld) {

        // Checksumme Rechts
        if (sprite.collideRight == true) {
            checkSumRight++;
        }

        // Checksumme Links
        if (sprite.collideLeft == true) {
            checkSumLeft++;
        }

        // Reset der boolschen Checkvariablen
        sprite.collideRight = false;
        sprite.collideLeft = false;
    }

    // Wenn Checksumme gleich 0 darf der Driver weiterfahren (links)
    if (checkSumRight == 0) {
        driver.collideLeft = false; 
    }
    else {
        checkSumRight = 0;
    }

    // Wenn Checksumme gleich 0 darf der Driver weiterfahren (rechts)
    if (checkSumLeft == 0) {
        driver.collideRight = false;    
    }
    else {
        checkSumLeft = 0;
    }
}

}


goto line:
Compare with:
text copy window edit this code post new code