Skip to content
Snippets Groups Projects
Select Git revision
  • 0a57b4e183591927b3cacf5f2ce84af7fd9ffe53
  • master default
2 results

PhysicEngine.java

Blame
  • 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();
        }
    
    }