diff --git a/src/ei/game/scene/GameEntity.java b/src/ei/game/scene/GameEntity.java index c244370..2e4d61b 100644 --- a/src/ei/game/scene/GameEntity.java +++ b/src/ei/game/scene/GameEntity.java @@ -1,5 +1,7 @@ package ei.game.scene; +import ei.engine.math.Vector2f; +import ei.engine.math.Vector2i; import ei.engine.scene.Entity; public abstract class GameEntity{ @@ -75,4 +77,7 @@ public abstract class GameEntity{ public abstract void update(); public abstract Entity getNode(); + + public abstract void attack(Vector2i target); } + diff --git a/src/ei/game/scene/Map.java b/src/ei/game/scene/Map.java index 1becce1..13ed0e3 100644 --- a/src/ei/game/scene/Map.java +++ b/src/ei/game/scene/Map.java @@ -3,6 +3,7 @@ package ei.game.scene; import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.math.Vector3f; +import ei.engine.scene.Box; import ei.engine.scene.Node; import ei.engine.scene.Sprite; diff --git a/src/ei/game/scene/units/Unit.java b/src/ei/game/scene/units/Unit.java index 5baf744..4c4330f 100644 --- a/src/ei/game/scene/units/Unit.java +++ b/src/ei/game/scene/units/Unit.java @@ -13,6 +13,7 @@ import ei.game.gamestate.InGameState; import ei.game.scene.GameEntity; import ei.game.scene.Map; import ei.game.scene.weapons.Weapon; +import ei.game.scene.weapons.WeaponHandler; /** * The Unit class, handles the units in the game. @@ -92,6 +93,14 @@ public abstract class Unit extends GameEntity{ setPos(temp.getX(), temp.getY()); } } + /** + * Lets a unit attack another unit or object in the world; + */ + public void attack(Vector2i target) { + Weapon wep = new Weapon(10, new Vector2f(unitNode.getLocation().getX(), unitNode.getLocation().getY())); + wep.launch(target); + WeaponHandler.getInstance().addWeapon(wep); + } /** * Updating the unit @@ -100,13 +109,12 @@ public abstract class Unit extends GameEntity{ if(moveTo != null) { Vector2i moveVect = new Vector2i((int)moveTo.getX(),(int)moveTo.getY()); - //Vector2i currentVect = new Vector2i((int)unitNode.getLocation().getX(), (int)unitNode.getLocation().getY()); int moveXminus = moveVect.getX()-oldVect.getX(); int moveYminus = moveVect.getY()-oldVect.getY(); - float divideY = (moveVect.getY()+1)/(oldVect.getY()+1); - float divideX = (moveVect.getX()+1)/(oldVect.getX()+1); + float divideY = (moveVect.getY()+2)/(oldVect.getY()+2); + float divideX = (moveVect.getX()+2)/(oldVect.getX()+2); //The rotation animation is done here. if(moveVect.getX() < oldVect.getX() && divideY==1) { diff --git a/src/ei/game/scene/weapons/Weapon.java b/src/ei/game/scene/weapons/Weapon.java index e33ca27..0c8dda4 100644 --- a/src/ei/game/scene/weapons/Weapon.java +++ b/src/ei/game/scene/weapons/Weapon.java @@ -1,5 +1,63 @@ package ei.game.scene.weapons; -public abstract class Weapon { +import ei.engine.effects.Particles; +import ei.engine.math.Vector2f; +import ei.engine.math.Vector2i; +import ei.engine.scene.Entity; +import ei.game.scene.Map; + +public class Weapon { + private int range; + private Vector2i target; + private int velocity; + private Particles part; + private Vector2f startPos; + + public Weapon(int range, Vector2f startPos) { + this.range = range; + this.startPos = startPos; + part = new Particles("weapon"); + part.setLocation(startPos); + part.MaxSpeedX=500; + part.MaxSpeedY=400; + part.MaxSpeedZ=600; + + part.size=5; + + } + public void launch(Vector2i target) { + this.target = target; + + + } + public void update() { + System.out.println("target getx :"+target.getX()); + System.out.println("startpos getx :"+startPos.getX()); + System.out.println("target getx :"+target.getY()); + System.out.println("startpos gety :"+startPos.getY()); + + System.out.println("part getLoc: "+part.getLocation().getX()); + + Vector2f vect = Map.getPixelByPos(target.getX(), target.getY()); + float percentage = (vect.getX()-startPos.getX()) / (vect.getY()-startPos.getY()); + System.out.println("Percentage; "+percentage); + + if(target.getX() > part.getLocation().getX()) { + part.getLocation().add(4f*percentage, 0f, 0f); + } + if(target.getX() < part.getLocation().getX()) { + part.getLocation().add(-4.0f*percentage, 0f, 0f); + } + if(target.getY() > part.getLocation().getY()) { + part.getLocation().add(0f, 4.0f, 0f); + } + if(target.getY() < part.getLocation().getY()) { + part.getLocation().add(0f, -4.0f, 0f); + } + + } + public Entity getNode() { + return part; + } } diff --git a/src/ei/game/scene/weapons/WeaponHandler.java b/src/ei/game/scene/weapons/WeaponHandler.java new file mode 100644 index 0000000..202fdd9 --- /dev/null +++ b/src/ei/game/scene/weapons/WeaponHandler.java @@ -0,0 +1,84 @@ +package ei.game.scene.weapons; + +import java.util.ArrayList; + +import ei.engine.scene.Entity; +import ei.engine.scene.Node; +import ei.game.player.Player; +import ei.game.player.PlayerHandler; + +/** + * The WeaponHandler class handles weapons. + * @author Jesper Lundin + * + */ +public class WeaponHandler { + private Node weaponNode; + private ArrayList weapons; + private static WeaponHandler instance; + + /** + * Created a weaponhandler. + * + */ + public WeaponHandler() { + weapons = new ArrayList(); + weaponNode = new Node("weapon"); + + } + public boolean addWeapon(Weapon w){ + if(!weapons.contains(w)){ + weapons.add(w); + weaponNode.add(w.getNode()); + return true; + } + return false; + } + + /** + * Removes a player from the handler + * @param p The player to remove + * @return true if succesful else false + */ + public boolean removeWeapon(Weapon w){ + if(weapons.contains(w)){ + weapons.remove(w); + weaponNode.remove(w.getNode()); + return true; + } + return false; + } + /** + * Updates all the weapons. + * + */ + public void update(){ + for(int i=0; i