diff --git a/src/engine/Engine.java b/src/engine/Engine.java index 731a4c1..0eeaf5b 100644 --- a/src/engine/Engine.java +++ b/src/engine/Engine.java @@ -232,8 +232,12 @@ public class Engine { this); } - public void cameraTrackingBetweenTwoObjectGl(){ - if (this.tracking == null) System.out.println("Utilisez setCameraTrackingBetweenTwoObjectGl avant cameraTrackingBetweenTwoObjectGl"); + public void setCameraTrackingSF3ThirdStrike(ObjectGl obj1, ObjectGl obj2){ + this.tracking = new TrackingSF3ThirdStrick(obj1, obj2, this); + } + + public void cameraTracking(){ + if (this.tracking == null) System.out.println("Define a tracking first"); else { Vector3f trackingVector = this.tracking.getViewVector(); this.translateView(trackingVector); diff --git a/src/engine/TestEngine.java b/src/engine/TestEngine.java index 4aef00e..edfc1c8 100644 --- a/src/engine/TestEngine.java +++ b/src/engine/TestEngine.java @@ -59,7 +59,7 @@ public class TestEngine { zangief2.translate(new Vector3f(1000.0f, 200.0f, 0.0f)); zangief2.flipTextureWrapH(); - engine.setCameraTrackingBetweenTwoObjectGl(zangief, zangief2, 1000.0f); + engine.setCameraTrackingSF3ThirdStrike(zangief, zangief2); //Create background ObjectGl background = new ObjectGl(0f,1f,1f,10f, pathToBG, null); @@ -128,7 +128,7 @@ public class TestEngine { } // engine.cameraTrackingObjectGl(zangief, -250.0f); - engine.cameraTrackingBetweenTwoObjectGl(); + engine.cameraTracking(); uiTextCoordP1.setText("X: " + zangief.getXPos() + " Y: " + zangief.getYPos()); diff --git a/src/engine/camera/TrackingSF3ThirdStrick.java b/src/engine/camera/TrackingSF3ThirdStrick.java new file mode 100644 index 0000000..f2f6df6 --- /dev/null +++ b/src/engine/camera/TrackingSF3ThirdStrick.java @@ -0,0 +1,43 @@ +package engine.camera; + +import engine.Engine; +import engine.math.Vector3f; +import engine.object.ObjectGl; + +public class TrackingSF3ThirdStrick implements TrackingDummy { + + private final ObjectGl obj1; + private final ObjectGl obj2; + private final Engine engine; + + /** + * Un tracking ou les personnages "pousse" la camera + */ + public TrackingSF3ThirdStrick(ObjectGl obj1, ObjectGl obj2, Engine engine){ + this.obj1 = obj1; + this.obj2 = obj2; + this.engine = engine; + } + + @Override + public Vector3f getViewVector() { + Vector3f vec = new Vector3f(); + + float viewXPos = -this.engine.getViewXPos(); + float dimension = this.engine.getCamera().getDimension(); + + ObjectGl left = obj1.getXPos() >= obj2.getXPos() ? obj2 : obj1; + ObjectGl right = obj1.getXPos() < obj2.getXPos() ? obj2 : obj1; + + System.out.println(viewXPos); + + if ((right.getXPos() + right.getWidth() * right.getScalingFactor()) > viewXPos + dimension){ + vec.x = - Math.abs((right.getXPos() + right.getWidth() * right.getScalingFactor()) - (viewXPos + dimension)); + } else if (left.getXPos() < viewXPos - dimension){ + vec.x = Math.abs(left.getXPos() - (viewXPos - dimension)); + } + + return vec; + + } +} diff --git a/src/engine/camera/TrackingTore.java b/src/engine/camera/TrackingTore.java index 87b6261..c4b4618 100644 --- a/src/engine/camera/TrackingTore.java +++ b/src/engine/camera/TrackingTore.java @@ -4,6 +4,9 @@ import engine.Engine; import engine.math.Vector3f; import engine.object.ObjectGl; +/** + * Pas fini et c'est de la merde + */ public class TrackingTore implements TrackingDummy { private float rayonExt; @@ -12,6 +15,13 @@ public class TrackingTore implements TrackingDummy { private final ObjectGl obj2; private final Engine engine; + /** + * Centre la camera entre les deux objets assure un niveau de zoom suffisant pour voir les deux objets //TODO ajouter une zone morte + interpolation + * @param offset + * @param obj1 + * @param obj2 + * @param engine + */ public TrackingTore(float offset, ObjectGl obj1, ObjectGl obj2, Engine engine){ this.rayonExt = offset; this.offset = offset;