diff --git a/src/ei/game/algo/AStarPathFinder.java b/src/ei/game/algo/AStarPathFinder.java index cdb935e..2c3e8d3 100644 --- a/src/ei/game/algo/AStarPathFinder.java +++ b/src/ei/game/algo/AStarPathFinder.java @@ -74,13 +74,20 @@ public strictfp class AStarPathFinder implements PathFinder { * @see org.newdawn.util.map.PathFinder#findPath(int, int, int, int, int) */ public synchronized Path findPath(int sx,int sy,int dx,int dy,int maxsearch) { - this.sx = sx; - this.sy = sy; - this.maxsearch = maxsearch; - - Step step = new Step(null,dx,dy); - open.add(step); + + if(findNearest){ + this.sx = dx; + this.sy = dy; + Step step = new Step(null,sx,sy); + open.add(step); + } + else{ + this.sx = sx; + this.sy = sy; + Step step = new Step(null,dx,dy); + open.add(step); + } return processNodes(); } @@ -105,8 +112,8 @@ public strictfp class AStarPathFinder implements PathFinder { if (validNode(xp,yp)) { Step s = new Step(step,xp,yp); open.add(s); - if(nearest == null || s.h < nearest.h){ - nearest = s; + if(findNearest && (nearest == null || step.h < nearest.h)){ + nearest = step; } } } @@ -133,13 +140,29 @@ public strictfp class AStarPathFinder implements PathFinder { Path path = new Path(); - while (step.parent != null) { - path.addPoint(step.x,step.y); - step = step.parent; + if(findNearest){ + Path temp = new Path(); + while (step.parent != null) { + temp.addPoint(step.x,step.y); + step = step.parent; + } + temp.addPoint(step.x,step.y); + + for(int i=temp.getSize()-1; i>=0 ;i--){ + path.addPoint(temp.getX(i), temp.getY(i)); + System.out.println(temp.getX(i)+", "+temp.getY(i)); + } } - path.addPoint(step.x,step.y); + else{ + System.out.println(step.x+", "+step.y); + while (step.parent != null) { + path.addPoint(step.x,step.y); + step = step.parent; + System.out.println(step.x+", "+step.y); + } + path.addPoint(step.x,step.y); + } - System.out.println(); ArrayList lol = path.getArray(); for(int y=0; y(); } @@ -43,13 +44,13 @@ public class AiPlayer extends NetworkPlayer{ if(getKredits() >= 800 && cc.getBuildQueueSize()==0) { int unitToBuild = (int)(Math.random()*2); if(unitToBuild==0) { - cc.buildUnit(new APU(this)); + cc.buildUnit(new APU(this, getInGameState())); } else if(unitToBuild==1) { - cc.buildUnit(new Tank(this)); + cc.buildUnit(new Tank(this, getInGameState())); } else if(unitToBuild==2) { - cc.buildUnit(new Bomber(this)); + cc.buildUnit(new Bomber(this, getInGameState())); } } if((unitCount()>=10 || attackingUnits.size()>=2) && timer%100==0) { diff --git a/src/ei/game/player/GaiaPlayer.java b/src/ei/game/player/GaiaPlayer.java index 1c93c1f..b00e56e 100644 --- a/src/ei/game/player/GaiaPlayer.java +++ b/src/ei/game/player/GaiaPlayer.java @@ -1,5 +1,6 @@ package ei.game.player; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkPlayer; import ei.game.scene.buildings.Building; @@ -11,6 +12,10 @@ import ei.game.scene.buildings.Building; */ public class GaiaPlayer extends NetworkPlayer{ + public GaiaPlayer(InGameState inGameState) { + super(inGameState); + } + @Override public Building getCC() { return null; diff --git a/src/ei/game/player/HumanPlayer.java b/src/ei/game/player/HumanPlayer.java index 481d24b..ce4d922 100644 --- a/src/ei/game/player/HumanPlayer.java +++ b/src/ei/game/player/HumanPlayer.java @@ -2,6 +2,7 @@ package ei.game.player; import ei.engine.state.GameStateManager; import ei.game.gamestate.EndGameState; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkPlayer; import ei.game.scene.buildings.Building; import ei.game.scene.buildings.CommandCenter; @@ -9,9 +10,9 @@ import ei.game.scene.buildings.CommandCenter; public class HumanPlayer extends NetworkPlayer{ private CommandCenter cc; - public HumanPlayer(){ - super(); - cc = new CommandCenter(10,5,this); + public HumanPlayer(InGameState inGameState){ + super(inGameState); + cc = new CommandCenter(10,5,this,getInGameState()); addUnit(cc); } @@ -29,7 +30,7 @@ public class HumanPlayer extends NetworkPlayer{ @Override public void endGame(int s) { - GameStateManager.getInstance().addState(new EndGameState("EndGameState",s)); + GameStateManager.getInstance().addState(new EndGameState("EndGameState", s, getInGameState())); GameStateManager.getInstance().setActive("EndGameState"); } diff --git a/src/ei/game/player/Player.java b/src/ei/game/player/Player.java index 55026af..0995ab5 100644 --- a/src/ei/game/player/Player.java +++ b/src/ei/game/player/Player.java @@ -3,6 +3,7 @@ package ei.game.player; import java.util.ArrayList; import ei.engine.scene.Node; +import ei.game.gamestate.InGameState; import ei.game.scene.GameEntity; import ei.game.scene.buildings.Building; @@ -10,8 +11,10 @@ public abstract class Player { private ArrayList units; private Node unitsNode; private int kredits; + private InGameState inGameState; - public Player(){ + public Player(InGameState inGameState){ + this.inGameState = inGameState; units = new ArrayList(); unitsNode = new Node("HumanPlayerNode"); kredits = 1000; @@ -64,6 +67,10 @@ public abstract class Player { } } + public InGameState getInGameState(){ + return inGameState; + } + public abstract Building getCC(); public abstract boolean defeated(); diff --git a/src/ei/game/player/PlayerHandler.java b/src/ei/game/player/PlayerHandler.java index 598cbd1..f5ef7bb 100644 --- a/src/ei/game/player/PlayerHandler.java +++ b/src/ei/game/player/PlayerHandler.java @@ -7,7 +7,7 @@ import ei.game.gamestate.EndGameState; public class PlayerHandler { // The instance of this class - private static PlayerHandler instance; + //private static PlayerHandler instance; // The player list private ArrayList players; private Node playerNode; @@ -104,13 +104,13 @@ public class PlayerHandler { * Returns the instance of this class * * @return The instance - */ + public static PlayerHandler getInstance(){ if(instance == null){ instance = new PlayerHandler(); } return instance; - } + }*/ public void clear(){ players.clear(); diff --git a/src/ei/game/scene/GameEntity.java b/src/ei/game/scene/GameEntity.java index aa8e584..8f3ef2b 100644 --- a/src/ei/game/scene/GameEntity.java +++ b/src/ei/game/scene/GameEntity.java @@ -2,16 +2,19 @@ package ei.game.scene; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; +import ei.game.gamestate.InGameState; import ei.game.player.Player; public abstract class GameEntity{ private int max_life; private int life; private Player player; + private InGameState inGameState; - public GameEntity(int l, Player p){ + public GameEntity(int l, Player p, InGameState inGameState){ setLife(l); player = p; + this.inGameState = inGameState; } /** @@ -70,6 +73,11 @@ public abstract class GameEntity{ public Player getPlayer(){ return player; } + + public InGameState getInGameState(){ + return inGameState; + } + /** * Sets a unit to be selected or not. * @param b true or false. diff --git a/src/ei/game/scene/Map.java b/src/ei/game/scene/Map.java index 54c8c97..fb45126 100644 --- a/src/ei/game/scene/Map.java +++ b/src/ei/game/scene/Map.java @@ -15,9 +15,9 @@ import ei.engine.util.MultiPrintStream; import ei.game.algo.PathFinderCallback; import ei.game.algo.TileMap; import ei.game.algo.TileSet; +import ei.game.gamestate.InGameState; import ei.game.player.GaiaPlayer; import ei.game.player.Player; -import ei.game.player.PlayerHandler; import ei.game.scene.map.Factory; import ei.game.scene.map.Prison; import ei.game.scene.map.Stone; @@ -38,6 +38,8 @@ public class Map implements TileMap, TileSet, PathFinderCallback{ public static final int OBJ_WATER = 4; public static final int POS_SIZE = 50; + + private InGameState inGameState; private int width; private int hight; private GameEntity[][] map; @@ -55,7 +57,8 @@ public class Map implements TileMap, TileSet, PathFinderCallback{ }; private int parkingIndex; - public Map(int w, int h){ + public Map(int w, int h, InGameState inGameState){ + this.inGameState = inGameState; this.width = w; this.hight = h; //init(); @@ -79,10 +82,10 @@ public class Map implements TileMap, TileSet, PathFinderCallback{ } } - Player gaia = new GaiaPlayer(); - PlayerHandler.getInstance().addPlayer(gaia); + Player gaia = new GaiaPlayer(getInGameState()); + inGameState.getPlayerHandler().addPlayer(gaia); for(int i=0; i<5 ;i++){ - gaia.addUnit(new Stone(new Vector2i((int)(Math.random()*width),(int)(Math.random()*hight)),gaia)); + gaia.addUnit(new Stone(new Vector2i((int)(Math.random()*width),(int)(Math.random()*hight)), gaia, getInGameState())); } } @@ -141,22 +144,22 @@ public class Map implements TileMap, TileSet, PathFinderCallback{ } // init the gaia player and stones etc... - Player gaia = new GaiaPlayer(); - PlayerHandler.getInstance().setGaiaPlayer(gaia); + Player gaia = new GaiaPlayer(getInGameState()); + inGameState.getPlayerHandler().setGaiaPlayer(gaia); for(int i=0; i buildQueue; + // -1 not counting over 0 starts to count private int buildTime; private Node unitNode; private Vector2i oldPos; @@ -28,8 +29,8 @@ public abstract class Building extends GameEntity{ private int size; - public Building(int l, Vector2i pos, Player p, int size) { - super(l, p); + public Building(int l, Vector2i pos, Player p, int size, InGameState inGameState) { + super(l, p, inGameState); this.size = size; buildQueue = new LinkedList(); unitNode = new Node("BuildingNode"); @@ -41,6 +42,8 @@ public abstract class Building extends GameEntity{ moveFrom.sub(unitNode.getLocation().getX()-20,unitNode.getLocation().getY()); moveTo.sub(unitNode.getLocation().getX(),unitNode.getLocation().getY()); + buildTime = -1; + initGraphics(); } @@ -108,10 +111,10 @@ public abstract class Building extends GameEntity{ */ public void setPos(int x, int y, int size) { if(oldPos!=null) { - InGameState.getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), size); + getInGameState().getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), size); } oldPos = new Vector2i(x, y); - InGameState.getMap().setBuildPos(this, x, y, size); + getInGameState().getMap().setBuildPos(this, x, y, size); } /** @@ -136,7 +139,12 @@ public abstract class Building extends GameEntity{ */ public void removeLast(){ if(!buildQueue.isEmpty()){ - buildQueue.removeLast(); + Unit unit = buildQueue.removeLast(); + + if(buildQueue.isEmpty()){ + buildTime = -1; + getPlayer().addKredits(unit.getPrice()); + } } } @@ -162,7 +170,7 @@ public abstract class Building extends GameEntity{ public void remove(){ unitNode.remove(getSprite()); getPlayer().removeUnit(this); - InGameState.getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), this.size); + getInGameState().getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), this.size); } /** @@ -174,11 +182,15 @@ public abstract class Building extends GameEntity{ remove(); } - if(!buildQueue.isEmpty() && getPlayer().getKredits() >= buildQueue.peek().getPrice()){ - if(buildTime == 0){ + if(!buildQueue.isEmpty()){ + if(buildTime < 0 && getPlayer().getKredits() >= buildQueue.peek().getPrice()){ getPlayer().addKredits(-buildQueue.peek().getPrice()); + buildTime = 0; } - buildTime++; + + if(buildTime >= 0) + buildTime++; + if(buildTime >= buildQueue.peek().getBuildTime()){ if(!unitNode.contains(buildQueue.peek().getNode())){ unitNode.add(buildQueue.peek().getNode(),unitNode.size()/2); @@ -186,8 +198,8 @@ public abstract class Building extends GameEntity{ } Vector2i temp = Map.getPosByPixel(moveTo.getX()+unitNode.getLocation().getX(), moveTo.getY()+unitNode.getLocation().getY()); - if(!InGameState.getMap().isPosEmpty(temp.getX(),temp.getY())){ - InGameState.getMap().getPos(temp.getX(),temp.getY()).move(false, oldPos.getX()+(size/2), oldPos.getY()-(size/2)); + if(!getInGameState().getMap().isPosEmpty(temp.getX(),temp.getY())){ + getInGameState().getMap().getPos(temp.getX(),temp.getY()).move(false, oldPos.getX()+(size/2), oldPos.getY()-(size/2)); } else{ //The moving is done here. @@ -206,7 +218,7 @@ public abstract class Building extends GameEntity{ if(Math.abs(moveTo.getX() - buildQueue.peek().getNode().getLocation().getX()) < buildQueue.peek().getVelocity()+1 && Math.abs(moveTo.getY() - buildQueue.peek().getNode().getLocation().getY())< buildQueue.peek().getVelocity()+1 ){ - buildTime = 0; + buildTime = -1; unitNode.remove(buildQueue.peek().getNode()); buildQueue.peek().forcePos(temp.getX(),temp.getY()); getPlayer().addUnit(buildQueue.poll()); diff --git a/src/ei/game/scene/buildings/CommandCenter.java b/src/ei/game/scene/buildings/CommandCenter.java index 3ebb59a..21d93b1 100644 --- a/src/ei/game/scene/buildings/CommandCenter.java +++ b/src/ei/game/scene/buildings/CommandCenter.java @@ -4,10 +4,10 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; import ei.engine.scene.Sprite; +import ei.game.gamestate.InGameState; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.weapons.Explotion; -import ei.game.scene.weapons.WeaponHandler; /** * @@ -19,12 +19,12 @@ public class CommandCenter extends Building{ private Sprite building; private Sprite ground; - public CommandCenter(Player p) { - this(0, 0, p); + public CommandCenter(Player p, InGameState inGameState) { + this(0, 0, p, inGameState); } - public CommandCenter(int x, int y, Player p){ - super(1000, new Vector2i(x,y), p, 4); + public CommandCenter(int x, int y, Player p, InGameState inGameState){ + super(1000, new Vector2i(x,y), p, 4, inGameState); } public void initGraphics(){ @@ -46,7 +46,7 @@ public class CommandCenter extends Building{ * This unit type is now destroyed. */ public void destroyed(){ - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } /** diff --git a/src/ei/game/scene/map/Factory.java b/src/ei/game/scene/map/Factory.java index 15f9c4c..a3b727e 100644 --- a/src/ei/game/scene/map/Factory.java +++ b/src/ei/game/scene/map/Factory.java @@ -4,11 +4,11 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; import ei.engine.scene.Sprite; +import ei.game.gamestate.InGameState; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.buildings.Building; import ei.game.scene.weapons.Explotion; -import ei.game.scene.weapons.WeaponHandler; public class Factory extends Building{ private static final String[] img = { @@ -18,8 +18,8 @@ public class Factory extends Building{ private SelectBox selectionBox; private Sprite factory; - public Factory(Vector2i pos, Player p) { - super(500, pos, p, 4); + public Factory(Vector2i pos, Player p, InGameState inGameState) { + super(500, pos, p, 4, inGameState); } public void initGraphics(){ @@ -52,7 +52,7 @@ public class Factory extends Building{ @Override public void destroyed() { - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } @Override diff --git a/src/ei/game/scene/map/MapEntity.java b/src/ei/game/scene/map/MapEntity.java index d18e6f3..07ce639 100644 --- a/src/ei/game/scene/map/MapEntity.java +++ b/src/ei/game/scene/map/MapEntity.java @@ -3,6 +3,7 @@ package ei.game.scene.map; import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.sound.Sound; +import ei.game.gamestate.InGameState; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.units.Unit; @@ -10,8 +11,8 @@ import ei.game.scene.weapons.Weapon; public abstract class MapEntity extends Unit{ - public MapEntity(int l, Vector2i pos, Player p) { - super(l, pos, p); + public MapEntity(int l, Vector2i pos, Player p, InGameState inGameState) { + super(l, pos, p, inGameState); } public void update() { diff --git a/src/ei/game/scene/map/Prison.java b/src/ei/game/scene/map/Prison.java index ed39273..dd393e7 100644 --- a/src/ei/game/scene/map/Prison.java +++ b/src/ei/game/scene/map/Prison.java @@ -4,11 +4,11 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; import ei.engine.scene.Sprite; +import ei.game.gamestate.InGameState; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.buildings.Building; import ei.game.scene.weapons.Explotion; -import ei.game.scene.weapons.WeaponHandler; public class Prison extends Building{ private static final String[] img = { @@ -17,8 +17,8 @@ public class Prison extends Building{ private SelectBox selectionBox; private Sprite prison; - public Prison(Vector2i pos, Player p) { - super(2000, pos, p, 6); + public Prison(Vector2i pos, Player p, InGameState inGameState) { + super(2000, pos, p, 6, inGameState); } public void initGraphics(){ @@ -51,7 +51,7 @@ public class Prison extends Building{ @Override public void destroyed() { - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } @Override diff --git a/src/ei/game/scene/map/Stone.java b/src/ei/game/scene/map/Stone.java index 34691cc..a0ed4c8 100644 --- a/src/ei/game/scene/map/Stone.java +++ b/src/ei/game/scene/map/Stone.java @@ -4,6 +4,7 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; import ei.engine.scene.Sprite; +import ei.game.gamestate.InGameState; import ei.game.player.Player; public class Stone extends MapEntity{ @@ -20,8 +21,8 @@ public class Stone extends MapEntity{ private Sprite stone; - public Stone(Vector2i pos, Player p) { - super(500, pos, p); + public Stone(Vector2i pos, Player p, InGameState inGameState) { + super(500, pos, p, inGameState); } @Override diff --git a/src/ei/game/scene/map/Water.java b/src/ei/game/scene/map/Water.java index 19a1405..2d05850 100644 --- a/src/ei/game/scene/map/Water.java +++ b/src/ei/game/scene/map/Water.java @@ -4,6 +4,7 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Entity; import ei.engine.scene.Sprite; +import ei.game.gamestate.InGameState; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.buildings.Building; @@ -14,8 +15,8 @@ public class Water extends Building{ }; private Sprite water; - public Water(Vector2i pos, Player p) { - super(Integer.MAX_VALUE, pos, p, 6); + public Water(Vector2i pos, Player p, InGameState inGameState) { + super(Integer.MAX_VALUE, pos, p, 6, inGameState); } public void initGraphics(){ diff --git a/src/ei/game/scene/units/APU.java b/src/ei/game/scene/units/APU.java index 37fb41c..da6bdae 100644 --- a/src/ei/game/scene/units/APU.java +++ b/src/ei/game/scene/units/APU.java @@ -4,13 +4,13 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Sprite; import ei.engine.sound.Sound; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkUnit; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.weapons.Explotion; import ei.game.scene.weapons.MachineGun; import ei.game.scene.weapons.Weapon; -import ei.game.scene.weapons.WeaponHandler; /** * @@ -26,12 +26,12 @@ public class APU extends NetworkUnit{ private Sound attackSound; private Sound selectSound; - public APU(Player p) { - super(70, p); + public APU(Player p, InGameState inGameState) { + super(70, p, inGameState); } - public APU(int x, int y, Player p){ - super(70, new Vector2i(x,y), p); + public APU(int x, int y, Player p, InGameState inGameState){ + super(70, new Vector2i(x,y), p, inGameState); } public void init(){ @@ -68,13 +68,13 @@ public class APU extends NetworkUnit{ * of unit. */ public Weapon getWeapon(Vector2f startPos) { - return new MachineGun(startPos); + return new MachineGun(startPos, getInGameState()); } /** * This unit type is now destroyed. */ public void destroyed(){ - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } public Sound getGunSound() { return gunSound; diff --git a/src/ei/game/scene/units/Bomber.java b/src/ei/game/scene/units/Bomber.java index 81a8a9b..c606909 100644 --- a/src/ei/game/scene/units/Bomber.java +++ b/src/ei/game/scene/units/Bomber.java @@ -5,13 +5,13 @@ import ei.engine.math.Vector2i; import ei.engine.scene.Sprite; import ei.engine.sound.Sound; import ei.engine.texture.AnimatedTexture; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkUnit; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.weapons.BomberWeapon; import ei.game.scene.weapons.Explotion; import ei.game.scene.weapons.Weapon; -import ei.game.scene.weapons.WeaponHandler; /** * @@ -27,21 +27,18 @@ public class Bomber extends NetworkUnit{ private Sound attackSound; private Sound selectSound; - public Bomber(Player p) { - super(200, p); + public Bomber(Player p, InGameState inGameState) { + super(200, p, inGameState); } - public Bomber(int x, int y, Player p){ - super(200, new Vector2i(x,y), p); + public Bomber(int x, int y, Player p, InGameState inGameState){ + super(200, new Vector2i(x,y), p, inGameState); } public void init(){ - getNode().add(sprite); setBuildTime(400); setPrice(800); autoAttack(false); - - } public void initGraphics(){ @@ -55,6 +52,7 @@ public class Bomber extends NetworkUnit{ tex.setDelay(5); sprite = new Sprite("Bomber",tex); sprite.setSize(new Vector2f(50,60)); + getNode().add(sprite); gunSound = new Sound("gunSound", "data/sounds/bomberweapon.wav"); moveSound = new Sound[2]; @@ -80,13 +78,13 @@ public class Bomber extends NetworkUnit{ * of unit. */ public Weapon getWeapon(Vector2f startPos) { - return new BomberWeapon(startPos); + return new BomberWeapon(startPos, getInGameState()); } /** * This unit type is now destroyed. */ public void destroyed(){ - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } public Sound getGunSound() { return gunSound; diff --git a/src/ei/game/scene/units/Tank.java b/src/ei/game/scene/units/Tank.java index 0976d35..26c999b 100644 --- a/src/ei/game/scene/units/Tank.java +++ b/src/ei/game/scene/units/Tank.java @@ -4,13 +4,13 @@ import ei.engine.math.Vector2f; import ei.engine.math.Vector2i; import ei.engine.scene.Sprite; import ei.engine.sound.Sound; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkUnit; import ei.game.player.Player; import ei.game.scene.SelectBox; import ei.game.scene.weapons.CannonBall; import ei.game.scene.weapons.Explotion; import ei.game.scene.weapons.Weapon; -import ei.game.scene.weapons.WeaponHandler; /** * @@ -26,12 +26,12 @@ public class Tank extends NetworkUnit{ private Sound attackSound; private Sound selectSound; - public Tank(Player p) { - super(100, p); + public Tank(Player p, InGameState inGameState) { + super(100, p, inGameState); } - public Tank(int x, int y, Player p){ - super(100, new Vector2i(x,y), p); + public Tank(int x, int y, Player p, InGameState inGameState){ + super(100, new Vector2i(x,y), p, inGameState); } public void init(){ @@ -68,7 +68,7 @@ public class Tank extends NetworkUnit{ * of unit. */ public Weapon getWeapon(Vector2f startPos) { - return new CannonBall(startPos); + return new CannonBall(startPos, getInGameState()); } public Sound getGunSound() { return gunSound; @@ -86,7 +86,7 @@ public class Tank extends NetworkUnit{ * This unit type is now destroyed. */ public void destroyed(){ - WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()))); + getInGameState().getWeaponHandler().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY()), getInGameState())); } /** * returns the velocity of the unit type. diff --git a/src/ei/game/scene/units/Unit.java b/src/ei/game/scene/units/Unit.java index 61013cd..4eb5bec 100644 --- a/src/ei/game/scene/units/Unit.java +++ b/src/ei/game/scene/units/Unit.java @@ -16,7 +16,6 @@ import ei.game.scene.GameEntity; import ei.game.scene.Map; import ei.game.scene.SelectBox; import ei.game.scene.weapons.Weapon; -import ei.game.scene.weapons.WeaponHandler; /** * The Unit class, handles the units in the game. @@ -50,14 +49,14 @@ public abstract class Unit extends GameEntity{ * * @param l The max life of the unit */ - public Unit(int l, Vector2i pos, Player p) { - super(l, p); + public Unit(int l, Vector2i pos, Player p, InGameState inGameState) { + super(l, p, inGameState); unitNode = new Node("UnitNode"); unitNode.setLocation(Map.getPixelByPos(pos.getX(), pos.getY())); setPos(pos.getX(), pos.getY()); autoAttack = true; if(pathfinder == null){ - pathfinder = new AStarPathFinder(InGameState.getMap(),InGameState.getMap(),InGameState.getMap()); + pathfinder = new AStarPathFinder(getInGameState().getMap(),getInGameState().getMap(),getInGameState().getMap()); } init(); initGraphics(); @@ -68,8 +67,8 @@ public abstract class Unit extends GameEntity{ * * @param l The max life of the unit */ - public Unit(int l, Player p) { - super(l, p); + public Unit(int l, Player p, InGameState inGameState) { + super(l, p, inGameState); unitNode = new Node("UnitNode"); autoAttack = true; init(); @@ -133,18 +132,18 @@ public abstract class Unit extends GameEntity{ */ public void setPos(int x, int y) { if(oldPos!=null) { - InGameState.getMap().removePos(oldPos.getX(), oldPos.getY()); + getInGameState().getMap().removePos(oldPos.getX(), oldPos.getY()); } oldPos = new Vector2i(x, y); - InGameState.getMap().setPos(this, x, y); + getInGameState().getMap().setPos(this, x, y); } public void forcePos(int x, int y){ if(oldPos!=null) { - InGameState.getMap().removePos(oldPos.getX(), oldPos.getY()); + getInGameState().getMap().removePos(oldPos.getX(), oldPos.getY()); } oldPos = new Vector2i(x, y); - InGameState.getMap().setPos(this, x, y); + getInGameState().getMap().setPos(this, x, y); unitNode.setLocation(Map.getPixelByPos(x, y)); } @@ -198,8 +197,8 @@ public abstract class Unit extends GameEntity{ attack = null; } - System.out.println(oldPos.getX()+" "+oldPos.getY()+"-"+x+" "+y); - Path p = pathfinder.findPath(oldPos.getX(),oldPos.getY(),x,y,600); + System.out.println(oldPos.getX()+","+oldPos.getY()+" -> "+x+","+y); + Path p = pathfinder.findPath(oldPos.getX(),oldPos.getY(), x, y, 200); pathfinder.reset(); if(p != null) path = p.getList(); else path = null; @@ -220,7 +219,7 @@ public abstract class Unit extends GameEntity{ getAttackSound().play(); } this.target = target; - attack = InGameState.getMap().getPos(target.getX(),target.getY()); + attack = getInGameState().getMap().getPos(target.getX(),target.getY()); } public void autoAttack(boolean auto) { @@ -244,7 +243,7 @@ public abstract class Unit extends GameEntity{ public void remove(){ unitNode.remove(getSprite()); getPlayer().removeUnit(this); - InGameState.getMap().removePos(oldPos.getX(), oldPos.getY()); + getInGameState().getMap().removePos(oldPos.getX(), oldPos.getY()); } /** @@ -332,14 +331,13 @@ public abstract class Unit extends GameEntity{ if(temp.getX() == oldPos.getX() && temp.getY() == oldPos.getY()){ temp = path.poll(); } - if(InGameState.getMap().isPosEmpty(temp.getX(), temp.getY())){ + if(temp != null && getInGameState().getMap().isPosEmpty(temp.getX(), temp.getY())){ oldVect = new Vector2i((int)moveTo.getX(), (int)moveTo.getY()); moveTo = Map.getPixelByPos(temp.getX(), temp.getY()); setPos(temp.getX(), temp.getY()); } else if(!path.isEmpty()){ //path = null; - System.out.println("lol: "+temp); move(false, path.getLast().getX(), path.getLast().getY()); } } @@ -351,8 +349,8 @@ public abstract class Unit extends GameEntity{ else if(attack != null){ Weapon wepon = getWeapon(new Vector2f(unitNode.getLocation().getX(), unitNode.getLocation().getY())); Vector2i enamyPos; - if(InGameState.getMap().getPos(target.getX(), target.getY())!=attack) { - enamyPos = InGameState.getMap().getPosIndex(attack); + if(getInGameState().getMap().getPos(target.getX(), target.getY())!=attack) { + enamyPos = getInGameState().getMap().getPosIndex(attack); } else{ enamyPos = target.getCopy(); @@ -367,7 +365,7 @@ public abstract class Unit extends GameEntity{ if(weponTimer >= wepon.getReload()){ wepon.launch(enamyPos); getGunSound().play(); - WeaponHandler.getInstance().addWeapon(wepon); + getInGameState().getWeaponHandler().addWeapon(wepon); weponTimer = 0; } @@ -383,9 +381,9 @@ public abstract class Unit extends GameEntity{ for(int j=oldPos.getY()-(wep.getRange()/50); j<=oldPos.getY()+(wep.getRange()/50); j++) { //System.out.println("i :"+i+" j: "+j); - if(InGameState.getMap().posExist(i, j)&& !InGameState.getMap().isPosEmpty(i, j) - && getPlayer()!=InGameState.getMap().getPos(i, j).getPlayer() && wep.onRange(Map.getPixelByPos(i, j)) - && InGameState.getMap().getPos(i, j).isTerrain()==false) { + if(getInGameState().getMap().posExist(i, j)&& !getInGameState().getMap().isPosEmpty(i, j) + && getPlayer()!=getInGameState().getMap().getPos(i, j).getPlayer() && wep.onRange(Map.getPixelByPos(i, j)) + && getInGameState().getMap().getPos(i, j).isTerrain()==false) { //System.out.println("ziver is shit"); attack(new Vector2i(i, j), false); i = oldPos.getX()+(wep.getRange()/50)+1; diff --git a/src/ei/game/scene/weapons/BomberWeapon.java b/src/ei/game/scene/weapons/BomberWeapon.java index 3fdceb9..70d83ef 100644 --- a/src/ei/game/scene/weapons/BomberWeapon.java +++ b/src/ei/game/scene/weapons/BomberWeapon.java @@ -17,8 +17,8 @@ public class BomberWeapon extends NetworkWepon{ private boolean hit; private Vector2i position; - public BomberWeapon(Vector2f startPos) { - super(startPos); + public BomberWeapon(Vector2f startPos, InGameState inGameState) { + super(startPos, inGameState); setVelocity(4); setRange(100); setDamage(40); @@ -52,16 +52,16 @@ public class BomberWeapon extends NetworkWepon{ for(int i=position.getX()-1; i<=position.getX()+1; i++ ) { for(int j=position.getY()-1; j<=position.getY()+1; j++) { System.out.println("i :"+i+" j: "+j); - if(InGameState.getMap().posExist(i, j)&& !InGameState.getMap().isPosEmpty(i, j)) { + if(getInGameState().getMap().posExist(i, j)&& !getInGameState().getMap().isPosEmpty(i, j)) { System.out.println("Damaged"); - InGameState.getMap().getPos(i, j).damaged(getDamage()); + getInGameState().getMap().getPos(i, j).damaged(getDamage()); } } } hit = true; } if(part.isDead()) { - WeaponHandler.getInstance().removeWeapon(this); + getInGameState().getWeaponHandler().removeWeapon(this); } } diff --git a/src/ei/game/scene/weapons/CannonBall.java b/src/ei/game/scene/weapons/CannonBall.java index 1d80f93..3cbdc53 100644 --- a/src/ei/game/scene/weapons/CannonBall.java +++ b/src/ei/game/scene/weapons/CannonBall.java @@ -2,6 +2,7 @@ package ei.game.scene.weapons; import ei.engine.effects.Particles; import ei.engine.math.Vector2f; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkWepon; /** @@ -10,8 +11,8 @@ import ei.game.network.entities.NetworkWepon; */ public class CannonBall extends NetworkWepon{ - public CannonBall(Vector2f startPos) { - super(startPos); + public CannonBall(Vector2f startPos, InGameState inGameState) { + super(startPos, inGameState); setVelocity(4); setRange(500); setDamage(15); diff --git a/src/ei/game/scene/weapons/Explotion.java b/src/ei/game/scene/weapons/Explotion.java index b2aed1c..43ee894 100644 --- a/src/ei/game/scene/weapons/Explotion.java +++ b/src/ei/game/scene/weapons/Explotion.java @@ -2,6 +2,7 @@ package ei.game.scene.weapons; import ei.engine.effects.Particles; import ei.engine.math.Vector2f; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkWepon; /** @@ -12,8 +13,8 @@ import ei.game.network.entities.NetworkWepon; public class Explotion extends NetworkWepon{ private Particles part; - public Explotion(Vector2f startPos) { - super(startPos); + public Explotion(Vector2f startPos, InGameState inGameState) { + super(startPos, inGameState); setVelocity(4); setRange(Integer.MIN_VALUE); setDamage(Integer.MIN_VALUE); @@ -41,7 +42,7 @@ public class Explotion extends NetworkWepon{ public void update() { if(part.isDead()) { - WeaponHandler.getInstance().removeWeapon(this); + getInGameState().getWeaponHandler().removeWeapon(this); } } diff --git a/src/ei/game/scene/weapons/MachineGun.java b/src/ei/game/scene/weapons/MachineGun.java index 292e666..493b806 100644 --- a/src/ei/game/scene/weapons/MachineGun.java +++ b/src/ei/game/scene/weapons/MachineGun.java @@ -2,6 +2,7 @@ package ei.game.scene.weapons; import ei.engine.effects.Particles; import ei.engine.math.Vector2f; +import ei.game.gamestate.InGameState; import ei.game.network.entities.NetworkWepon; /** @@ -11,8 +12,8 @@ import ei.game.network.entities.NetworkWepon; */ public class MachineGun extends NetworkWepon{ - public MachineGun(Vector2f startPos) { - super(startPos); + public MachineGun(Vector2f startPos, InGameState inGameState) { + super(startPos, inGameState); setVelocity(4); setRange(500); setDamage(2); diff --git a/src/ei/game/scene/weapons/Weapon.java b/src/ei/game/scene/weapons/Weapon.java index b21ca15..5239bbf 100644 --- a/src/ei/game/scene/weapons/Weapon.java +++ b/src/ei/game/scene/weapons/Weapon.java @@ -23,6 +23,7 @@ public abstract class Weapon { private Vector2f startPos; private int reload; + private InGameState inGameState; /** * Constructor for the class Weapon. Initializes the weapon. @@ -30,10 +31,11 @@ public abstract class Weapon { * @param startPos * @param velocity */ - public Weapon(Vector2f startPos) { + public Weapon(Vector2f startPos, InGameState inGameState) { this.startPos = startPos; this.minVelocity = 10; this.hit = false; + this.inGameState = inGameState; part = getWeapon(); part.setLocation(startPos); part.reset(); @@ -118,17 +120,17 @@ public abstract class Weapon { } if(Math.abs(part.getLocation().getX()-vect.getX()) < 15 && Math.abs(part.getLocation().getY()-vect.getY()) < 15) { part.regenerate = false; - if(!hit && !InGameState.getMap().isPosEmpty(target.getX(), target.getY())) { - InGameState.getMap().getPos(target.getX(), target.getY()).damaged(damage); + if(!hit && !getInGameState().getMap().isPosEmpty(target.getX(), target.getY())) { + getInGameState().getMap().getPos(target.getX(), target.getY()).damaged(damage); hit = true; } if(part.isDead()) { - WeaponHandler.getInstance().removeWeapon(this); + inGameState.getWeaponHandler().removeWeapon(this); } } } else{ - WeaponHandler.getInstance().removeWeapon(this); + inGameState.getWeaponHandler().removeWeapon(this); } } /** @@ -139,6 +141,10 @@ public abstract class Weapon { return part; } + public InGameState getInGameState(){ + return inGameState; + } + protected abstract Particles getWeapon(); } diff --git a/src/ei/game/scene/weapons/WeaponHandler.java b/src/ei/game/scene/weapons/WeaponHandler.java index b8d0781..138da9e 100644 --- a/src/ei/game/scene/weapons/WeaponHandler.java +++ b/src/ei/game/scene/weapons/WeaponHandler.java @@ -11,7 +11,7 @@ import ei.engine.scene.Node; * */ public class WeaponHandler { - private static WeaponHandler instance; + //private static WeaponHandler instance; private Node weaponNode; private ArrayList weapons; @@ -71,13 +71,13 @@ public class WeaponHandler { * Returns the instance of this class * * @return The instance - */ + public static WeaponHandler getInstance(){ if(instance == null){ instance = new WeaponHandler(); } return instance; - } + } */ public void clear(){ weapons.clear();