Select Git revision
PhysicEngine.java
Forked from
LABOUREL Arnaud / Game engine template
65 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
PhysicEngine.java 3.88 KiB
package engine.physic;
import engine.Engine;
import engine.Kernel;
import pong.PongObject;
import java.util.HashMap;
import java.util.Random;
public class PhysicEngine implements Engine {
int i = 0;
public HashMap<PongObject, Entity> pongObjectEntityHashMap; // Map of the pong objects and their associated entity
//private HashMap<Coordinates2D, PongObject> positions; // Map of the positions and the associated pong object
public PhysicEngine(){
restart();
}
@Override
public void update(){
for (PongObject pongObject: Kernel.gameObjects) {
Coordinates2D previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition();
pongObjectEntityHashMap.get(pongObject).updatePosition();// Updating of the associated movable position
if(pongObject.getName().equals("Ball")){
//System.out.println("Ball position: " + pongObjectEntityHashMap.get(pongObject).getPosition().getX() + " ; " + pongObjectEntityHashMap.get(pongObject).getPosition().getY());
//System.out.println("Ball init position: " + pongObjectEntityHashMap.get(pongObject).getInitPosition());
for (PongObject po2: pongObjectEntityHashMap.keySet()
) {
if(!po2.getName().equals("Ball")){
if(checkCollision(pongObjectEntityHashMap.get(pongObject), pongObjectEntityHashMap.get(po2))){
i++;
//String collisionPath = "src/main/resources/Sound/collision.wav";
//Sound.playMusic(collisionPath);
Kernel.isCollision = true;
System.out.println("Collision " + i);
pongObjectEntityHashMap.get(pongObject).setPosition(previousPosition);
if(i % 10 == 0){
pongObjectEntityHashMap.get(pongObject).getSpeed().mul(2);
}
pongObject.setSpeed(pongObjectEntityHashMap.get(pongObject).getSpeed());
//pongObjectEntityHashMap.get(pongObject).getSpeed().mul(-1);
pongObject.updateSpeed(po2.doItHitHalf(pongObject.getPosition()), po2.isLeftRacket());
pongObjectEntityHashMap.get(pongObject).setSpeed(pongObject.getSpeed());
pongObjectEntityHashMap.get(pongObject).updatePosition();
}
}
}
}
//checkCollision();
pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
}
}
@Override
public void restart() {
pongObjectEntityHashMap = new HashMap<>();
//positions = new HashMap<>();
for (PongObject pongObject: Kernel.gameObjects) {
Coordinates2D speed = new Coordinates2D(0, 0);
if(pongObject.getName().equals("Ball")){
//pongObject.setPosition(pongObject.getInitPosition());
speed = new Coordinates2D(2, 2);
}
//Coordinates2D speed = new Coordinates2D(random.nextInt(2) - 1, random.nextInt(2) - 1);
pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), speed, new Coordinates2D(0, 0), pongObject.getWidth(), pongObject.getHeight()));
}
}
public boolean checkCollision(Entity firstObject, Entity secondObject){
Coordinates2D pos1 = firstObject.getPosition();
Coordinates2D pos2 = secondObject.getPosition();
return pos1.getX() < pos2.getX() + secondObject.getWidth() &&
pos1.getX() + firstObject.getWidth() > pos2.getX() &&
pos1.getY() < pos2.getY() + secondObject.getHeight() &&
firstObject.getHeight() + pos1.getY() > pos2.getY();
}
}