Browse Source

TargetedProjectile

Tankernn 8 years ago
parent
commit
23e501bd0d

+ 3 - 2
src/main/java/eu/tankernn/gameEngine/entities/BasicProjectile.java

@@ -4,13 +4,14 @@ import org.lwjgl.util.vector.Vector3f;
 
 import eu.tankernn.gameEngine.loader.models.AABB;
 import eu.tankernn.gameEngine.particles.ParticleSystem;
+import eu.tankernn.gameEngine.terrains.TerrainPack;
 
 public class BasicProjectile extends Projectile {
 	
 	private Entity3D creator;
 	
-	public BasicProjectile(Entity3D creator, Vector3f position, Vector3f velocity, float range, ParticleSystem particleSystem) {
-		super(null, position, velocity, range, new AABB(new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)), particleSystem);
+	public BasicProjectile(TerrainPack terrain, Entity3D creator, Vector3f position, Vector3f velocity, float range, ParticleSystem particleSystem) {
+		super(terrain, null, position, velocity, range, new AABB(new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)), particleSystem);
 		this.creator = creator;
 	}
 	

+ 10 - 2
src/main/java/eu/tankernn/gameEngine/entities/Projectile.java

@@ -8,25 +8,33 @@ import eu.tankernn.gameEngine.loader.models.AABB;
 import eu.tankernn.gameEngine.loader.models.TexturedModel;
 import eu.tankernn.gameEngine.particles.ParticleSystem;
 import eu.tankernn.gameEngine.renderEngine.DisplayManager;
+import eu.tankernn.gameEngine.terrains.TerrainPack;
 
 public abstract class Projectile extends Entity3D {
 	
-	private Vector3f velocity;
+	protected Vector3f velocity;
 	private ParticleSystem particleSystem;
 	private final float range;
 	private final Vector3f startPosition;
+	private TerrainPack terrain;
 	
-	public Projectile(TexturedModel model, Vector3f position, Vector3f velocity, float range, AABB boundingBox, ParticleSystem particleSystem) {
+	public Projectile(TerrainPack terrain, TexturedModel model, Vector3f position, Vector3f velocity, float range, AABB boundingBox, ParticleSystem particleSystem) {
 		super(model, position, new Vector3f(0, 0, 0), 1, boundingBox);
 		this.particleSystem = particleSystem;
 		this.velocity = velocity;
 		this.range = range;
 		this.startPosition = new Vector3f(position);
+		this.terrain = terrain;
 	}
 	
 	public void update() {
 		this.increasePosition((Vector3f) new Vector3f(velocity).scale(DisplayManager.getFrameTimeSeconds()));
 		particleSystem.setPosition(this.getPosition());
+		
+		if (this.terrain != null) {
+			this.position.y = Math.max(this.position.y, 5 + terrain.getTerrainHeightByWorldPos(position.x, position.z));
+		}
+		
 		Vector3f distance = Vector3f.sub(position, startPosition, null);
 		if (distance.length() > range) {
 			kill();

+ 35 - 0
src/main/java/eu/tankernn/gameEngine/entities/TargetedProjectile.java

@@ -0,0 +1,35 @@
+package eu.tankernn.gameEngine.entities;
+
+import org.lwjgl.util.vector.Vector3f;
+
+import eu.tankernn.gameEngine.loader.models.AABB;
+import eu.tankernn.gameEngine.loader.models.TexturedModel;
+import eu.tankernn.gameEngine.particles.ParticleSystem;
+import eu.tankernn.gameEngine.terrains.TerrainPack;
+import eu.tankernn.gameEngine.util.IPositionable;
+
+public class TargetedProjectile extends Projectile {
+
+	private IPositionable target;
+	private float speed;
+
+	public TargetedProjectile(TerrainPack terrain, TexturedModel model, Vector3f position, IPositionable target,
+			float speed, AABB boundingBox, ParticleSystem particleSystem) {
+		super(terrain, model, position, new Vector3f(0, 0, 0), Float.MAX_VALUE, boundingBox, particleSystem);
+		this.target = target;
+		this.speed = speed;
+	}
+
+	@Override
+	public void update() {
+		Vector3f direction = (Vector3f) Vector3f.sub(target.getPosition(), this.getPosition(), null).normalise();
+		this.velocity = (Vector3f) direction.scale(speed);
+		super.update();
+	}
+
+	@Override
+	public void onCollision(Entity3D entity) {
+		this.kill();
+	}
+
+}