package com.gandalf1209.yamanu.physics; import com.gandalf1209.yamanu.game.GameObject; import com.gandalf1209.yamanu.util.Debug; public class PhysicsHandler { public Thread pThread; private int gravity = 10; public PhysicsHandler() { pThread = new Thread("Physics Handler Thread") { public void run() { while (true) { runPhysics(); } } }; pThread.start(); } private void runPhysics() { try { for (int i = 0; i < GameObject.getCount(); i++) { GameObject current = null; if (GameObject.getObjects().get(i).isSmart()) { current = GameObject.getObjects().get(i); } if (current != null) { for (int j = 0; j < GameObject.getCount(); j++) { GameObject target = GameObject.getObjects().get(j); if (i != j && target.canCollide() && current.canCollide()) { if ((current.getX() - 1) + current.getWidth() > target.getX() && (current.getX() + 1) - current.getWidth() < target.getX() && (current.getY() - 1) + current.getHeight() > target.getY() && (current.getY() + 1) - current.getHeight() < target.getY()) { if (current.getX() + current.getWidth() > target.getX() && current.getX() - current.getWidth() < target.getX() && current.getY() + current.getHeight() > target.getY() && current.getY() - current.getHeight() < target.getY()) { current.setSpeed(current.getOriginalSpeed() - (target.getFriction() / getGravity())); target.setSpeed(current.getSpeed()); target.move(current.getXDir(), current.getYDir(), true); } } if (current.getXDir() == 0 && current.getYDir() == 0) { current.setSpeed(current.getOriginalSpeed()); } } } } } } catch (Exception e) { Debug.pst(e); } } public int getGravity() { return this.gravity; } public void setGravity(int gravity) { this.gravity = gravity; } }