evil-inside/src/ei/game/scene/buildings/Building.java

190 lines
5.3 KiB
Java
Raw Normal View History

package ei.game.scene.buildings;
2007-04-23 13:58:47 +00:00
import java.util.LinkedList;
import ei.engine.math.Vector2f;
2007-04-23 13:58:47 +00:00
import ei.engine.math.Vector2i;
import ei.engine.scene.Entity;
2007-04-23 13:58:47 +00:00
import ei.engine.scene.Node;
import ei.game.gamestate.InGameState;
2007-04-18 17:02:58 +00:00
import ei.game.player.Player;
import ei.game.scene.GameEntity;
2007-04-23 13:58:47 +00:00
import ei.game.scene.Map;
import ei.game.scene.units.Unit;
2007-04-24 12:57:38 +00:00
/**
* The Building class, handles buildings, this case CommandCenter class.
* @author Jesper Lundin
*
*/
public abstract class Building extends GameEntity{
private LinkedList<Unit> buildQueue;
private int buildTime;
2007-04-23 13:58:47 +00:00
private Node unitNode;
private Vector2i oldPos;
private Vector2f moveFrom;
private Vector2f moveTo;
2007-04-23 13:58:47 +00:00
private int size;
public Building(int l, Vector2i pos, Player p, int size) {
super(l, p);
this.size = size;
buildQueue = new LinkedList<Unit>();
2007-04-23 13:58:47 +00:00
unitNode = new Node("UnitNode");
unitNode.setLocation(Map.getPixelByPos(pos.getX(), pos.getY(), this.size));
setPos(pos.getX(), pos.getY(), this.size);
moveFrom = Map.getPixelByPos(oldPos.getX()+size-2, oldPos.getX()+size-1);
moveTo = Map.getPixelByPos( oldPos.getX()+size-2, oldPos.getX()+size);
2007-04-23 13:58:47 +00:00
}
public void setSelected(boolean b, boolean playSound) {
2007-04-23 13:58:47 +00:00
if(b) {
unitNode.add(getSelection().getSelectNode());
}
else{
unitNode.remove(getSelection().getSelectNode());
}
}
public void setMouseOver(boolean b) {
if(b) {
unitNode.add(getSelection().getMouseOverNode());
}
else{
unitNode.remove(getSelection().getMouseOverNode());
}
}
/**
* Sets the size of the building.
* @param size
*/
public void setSize(int size) {
this.size = size;
}
/**
* Returns the sprite for the unit
*
* @return The sprite for the unit
*/
public Node getNode(){
return unitNode;
}
/**
* Changes the pos of the unit in the map
*
* @param x The x pos to move to
* @param y The y pos to move to
*/
public void setPos(int x, int y, int size) {
if(oldPos!=null) {
InGameState.getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), size);
}
oldPos = new Vector2i(x, y);
InGameState.getMap().setBuildPos(this, x, y, size);
}
/**
* Adds a unit to the build queue
* @param u The unit to build
*/
public void buildUnit(Unit u){
buildQueue.addLast(u);
}
/**
* Returns the size of the build queue
* @return The size of the build queue
*/
public int getBuildQueueSize(){
return buildQueue.size();
}
/**
* Removes the last unit in the build queue
*
*/
public void removeLast(){
if(!buildQueue.isEmpty()){
buildQueue.removeLast();
}
}
/**
* Returns the procentage of completion of the unit
*
*/
public int getBuildProgress(){
if(buildQueue.isEmpty()){
return 0;
}
int progress = (int)(((float)buildTime/buildQueue.peekFirst().getBuildTime())*100);
if(progress > 100){
progress = 100;
}
return progress;
}
2007-04-23 13:58:47 +00:00
/**
2007-04-23 16:25:27 +00:00
* Removes this building from the game.
2007-04-23 13:58:47 +00:00
*
*/
2007-04-23 16:25:27 +00:00
public void removeBuilding(){
2007-04-23 13:58:47 +00:00
unitNode.remove(getSprite());
getPlayer().removeUnit(this);
2007-04-23 16:25:27 +00:00
InGameState.getMap().removeBuildPos(oldPos.getX(), oldPos.getY(), this.size);
2007-04-23 13:58:47 +00:00
}
/**
* Updating the unit
*/
public void update() {
if(getLife() <= 0) {
destroyed();
2007-04-23 16:25:27 +00:00
removeBuilding();
}
if(!buildQueue.isEmpty() && getPlayer().getKredits() >= buildQueue.peekFirst().getPrice()){
if(buildTime == 0){
getPlayer().addKredits(-buildQueue.peekFirst().getPrice());
}
buildTime++;
if(buildTime >= buildQueue.peekFirst().getBuildTime()){
if(!unitNode.contains(buildQueue.peekFirst().getNode())){
System.out.println(buildQueue.peekFirst().getNode());
unitNode.add(buildQueue.peekFirst().getNode(),unitNode.size()/2);
buildQueue.peekFirst().getNode().setLocation(moveFrom);
}
Vector2i temp = Map.getPosByPixel(moveTo.getX(), moveTo.getY());
if(InGameState.getMap().isPosEmpty(temp.getX(),temp.getY())){
//The moving is done here.
if(moveTo.getX() > buildQueue.peekFirst().getNode().getLocation().getX()) {
buildQueue.peekFirst().getNode().getLocation().add(buildQueue.peekFirst().getVelocity(), 0f, 0f);
}
if(moveTo.getX() < buildQueue.peekFirst().getNode().getLocation().getX()) {
buildQueue.peekFirst().getNode().getLocation().add(-buildQueue.peekFirst().getVelocity(), 0f, 0f);
}
if(moveTo.getY() > buildQueue.peekFirst().getNode().getLocation().getY()) {
buildQueue.peekFirst().getNode().getLocation().add(0f, buildQueue.peekFirst().getVelocity(), 0f);
}
if(moveTo.getY() < buildQueue.peekFirst().getNode().getLocation().getY()) {
buildQueue.peekFirst().getNode().getLocation().add(0f, -buildQueue.peekFirst().getVelocity(), 0f);
}
System.out.println(buildQueue.peekFirst().getNode().getLocation());
if(Math.abs(moveTo.getX() - buildQueue.peekFirst().getNode().getLocation().getX()) < buildQueue.peekFirst().getVelocity()+1
&& Math.abs(moveTo.getY() - buildQueue.peekFirst().getNode().getLocation().getY())< buildQueue.peekFirst().getVelocity()+1 ){
buildTime = 0;
unitNode.remove(buildQueue.peekFirst().getNode());
buildQueue.peekFirst().forcePos(temp.getX(),temp.getY());
getPlayer().addUnit(buildQueue.poll());
}
}
}
}
2007-04-23 13:58:47 +00:00
}
public abstract Entity getGroundSprite();
}
2007-04-23 13:58:47 +00:00