Added ai player and fixed so player kan create units
This commit is contained in:
parent
e7403858f8
commit
c83605d5c4
22 changed files with 373 additions and 123 deletions
|
|
@ -75,7 +75,7 @@ public abstract class GameEntity{
|
|||
* Sets a unit to be selected or not.
|
||||
* @param b true or false.
|
||||
*/
|
||||
public abstract void setSelected(boolean b);
|
||||
public abstract void setSelected(boolean b, boolean playSound);
|
||||
|
||||
/**
|
||||
* Set if the mouse is over the unit or not
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ import java.util.LinkedList;
|
|||
import ei.engine.math.Vector2f;
|
||||
import ei.engine.math.Vector2i;
|
||||
import ei.engine.math.Vector3f;
|
||||
import ei.engine.scene.Box;
|
||||
import ei.engine.scene.Entity;
|
||||
import ei.engine.scene.Node;
|
||||
import ei.engine.scene.Sprite;
|
||||
import ei.engine.util.MultiPrintStream;
|
||||
|
|
@ -112,8 +114,8 @@ public class Map {
|
|||
}
|
||||
}
|
||||
|
||||
private Sprite getPosSprite(int x, int y, String file){
|
||||
Sprite s = new Sprite("MapPos("+x+","+y+")", file);
|
||||
private Entity getPosSprite(int x, int y, String file){
|
||||
Box s = new Box("MapPos("+x+","+y+")", file);
|
||||
s.setLocation(new Vector3f(x*POS_SIZE,y*POS_SIZE,0));
|
||||
s.setSize(new Vector2f(POS_SIZE,POS_SIZE));
|
||||
return s;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ import ei.engine.scene.Node;
|
|||
import ei.engine.texture.Texture;
|
||||
|
||||
public class SelectBox {
|
||||
public static final int COLOR_GREEN = 0;
|
||||
public static final int COLOR_RED = 1;
|
||||
private static final float height = 3;
|
||||
private Node selectNode;
|
||||
private Node mouseOverNode;
|
||||
|
|
@ -20,12 +22,17 @@ public class SelectBox {
|
|||
* @param y The size of the selection box
|
||||
* @param max The max health of the object
|
||||
*/
|
||||
public SelectBox(float x, float y, int max){
|
||||
public SelectBox(int color, float x, float y, int max){
|
||||
selectNode = new Node("SelectionNode");
|
||||
mouseOverNode = new Node("MouseOverNode");
|
||||
|
||||
Texture tex = new Texture();
|
||||
tex.setColor(new Vector4f(0.5f, 1.0f, 0.5f,1));
|
||||
if(color == COLOR_RED){
|
||||
tex.setColor(new Vector4f(1.0f, 0.5f, 0.5f,1));
|
||||
}
|
||||
else{
|
||||
tex.setColor(new Vector4f(0.5f, 1.0f, 0.5f,1));
|
||||
}
|
||||
|
||||
bar = new ProgressBar("Health",x,height,max);
|
||||
bar.getNode().setLocation(new Vector2f(0,-x/2+height/2));
|
||||
|
|
@ -37,8 +44,7 @@ public class SelectBox {
|
|||
|
||||
Box select = new Box("select",tex);
|
||||
select.setSize(new Vector2f(x,y));
|
||||
selectNode.add(select);
|
||||
|
||||
selectNode.add(select);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package ei.game.scene.buildings;
|
|||
|
||||
import java.util.LinkedList;
|
||||
|
||||
import ei.engine.math.Vector2f;
|
||||
import ei.engine.math.Vector2i;
|
||||
import ei.engine.scene.Entity;
|
||||
import ei.engine.scene.Node;
|
||||
import ei.game.gamestate.InGameState;
|
||||
import ei.game.player.Player;
|
||||
|
|
@ -20,6 +22,8 @@ public abstract class Building extends GameEntity{
|
|||
private int buildTime;
|
||||
private Node unitNode;
|
||||
private Vector2i oldPos;
|
||||
private Vector2f moveFrom;
|
||||
private Vector2f moveTo;
|
||||
private int size;
|
||||
|
||||
|
||||
|
|
@ -30,9 +34,11 @@ public abstract class Building extends GameEntity{
|
|||
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);
|
||||
}
|
||||
|
||||
public void setSelected(boolean b) {
|
||||
public void setSelected(boolean b, boolean playSound) {
|
||||
if(b) {
|
||||
unitNode.add(getSelection().getSelectNode());
|
||||
}
|
||||
|
|
@ -110,8 +116,14 @@ public abstract class Building extends GameEntity{
|
|||
*
|
||||
*/
|
||||
public int getBuildProgress(){
|
||||
// TODO return the procentage of completion of the unit
|
||||
return 50;
|
||||
if(buildQueue.isEmpty()){
|
||||
return 0;
|
||||
}
|
||||
int progress = (int)(((float)buildTime/buildQueue.peekFirst().getBuildTime())*100);
|
||||
if(progress > 100){
|
||||
progress = 100;
|
||||
}
|
||||
return progress;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -128,10 +140,50 @@ public abstract class Building extends GameEntity{
|
|||
* Updating the unit
|
||||
*/
|
||||
public void update() {
|
||||
if(getLife()<=0) {
|
||||
if(getLife() <= 0) {
|
||||
destroyed();
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract Entity getGroundSprite();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package ei.game.scene.buildings;
|
|||
|
||||
import ei.engine.math.Vector2f;
|
||||
import ei.engine.math.Vector2i;
|
||||
import ei.engine.scene.Entity;
|
||||
import ei.engine.scene.Sprite;
|
||||
import ei.game.player.Player;
|
||||
import ei.game.scene.SelectBox;
|
||||
|
|
@ -15,7 +16,8 @@ import ei.game.scene.weapons.WeaponHandler;
|
|||
*/
|
||||
public class CommandCenter extends Building{
|
||||
private SelectBox selectionBox;
|
||||
private Sprite sprite;
|
||||
private Sprite building;
|
||||
private Sprite ground;
|
||||
|
||||
public CommandCenter(Player p) {
|
||||
this(0, 0, p);
|
||||
|
|
@ -23,46 +25,60 @@ public class CommandCenter extends Building{
|
|||
|
||||
public CommandCenter(int x, int y, Player p){
|
||||
super(1000, new Vector2i(x,y), p, 4);
|
||||
this.sprite = new Sprite("APU", "data/buildings/cc/cc.png");
|
||||
sprite.setSize(new Vector2f(200,200));
|
||||
getNode().add(sprite);
|
||||
ground = new Sprite("CC_Ground", "data/buildings/cc/cc_ground.png");
|
||||
ground.setSize(new Vector2f(200,200));
|
||||
getNode().add(ground);
|
||||
building = new Sprite("CC", "data/buildings/cc/cc_building.png");
|
||||
building.setSize(new Vector2f(200,200));
|
||||
getNode().add(building);
|
||||
|
||||
selectionBox = new SelectBox(200,200,getMaxLife());
|
||||
selectionBox = new SelectBox(0,200,200,getMaxLife());
|
||||
}
|
||||
|
||||
protected SelectBox getSelection() {
|
||||
return selectionBox;
|
||||
}
|
||||
|
||||
/**
|
||||
* This unit type is now destroyed.
|
||||
*/
|
||||
public void destroyed(){
|
||||
WeaponHandler.getInstance().addWeapon(new Explotion(new Vector2f(getNode().getLocation().getX(), getNode().getLocation().getY())));
|
||||
}
|
||||
|
||||
/**
|
||||
* Doesnt matter anyway. Since buildings cant attack.
|
||||
*/
|
||||
public void attack(Vector2i target, boolean play) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Manages the sprite connected to this unit.
|
||||
*
|
||||
* @param s
|
||||
*/
|
||||
public void setSprite(Sprite s) {
|
||||
this.sprite = s;
|
||||
building = s;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the sprite connected to this type
|
||||
* of unit.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Sprite getSprite() {
|
||||
return this.sprite;
|
||||
public Entity getSprite() {
|
||||
return building;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaintenanceCost() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entity getGroundSprite() {
|
||||
return ground;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,9 +22,13 @@ public class Stone extends MapEntity{
|
|||
|
||||
public Stone(Vector2i pos, Player p) {
|
||||
super(10000, pos, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
stone = new Sprite("Stone",img[(int)(Math.random()*img.length)]);
|
||||
stone.setSize(new Vector2f(40,40));
|
||||
getNode().add(stone);
|
||||
getNode().add(stone);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -35,7 +39,6 @@ public class Stone extends MapEntity{
|
|||
@Override
|
||||
public int getMaintenanceCost() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,23 +21,27 @@ public class APU extends Unit{
|
|||
private Sprite sprite;
|
||||
|
||||
private Sound gunSound;
|
||||
private Sound moveSound[] = new Sound[2];
|
||||
private Sound[] moveSound;
|
||||
private Sound attackSound;
|
||||
private Sound selectSound;
|
||||
|
||||
public APU(Player p) {
|
||||
this(0, 0, p);
|
||||
super(70, p);
|
||||
}
|
||||
|
||||
public APU(int x, int y, Player p){
|
||||
super(70, new Vector2i(x,y), p);
|
||||
this.sprite = new Sprite("APU", "data/units/apu/apu0000.png");
|
||||
}
|
||||
|
||||
public void init(){
|
||||
sprite = new Sprite("APU", "data/units/apu/apu0000.png");
|
||||
sprite.setSize(new Vector2f(40,40));
|
||||
getNode().add(sprite);
|
||||
setBuildTime(20);
|
||||
setBuildTime(200);
|
||||
setPrice(200);
|
||||
|
||||
gunSound = new Sound("gunSound", "data/sounds/machinegun.wav");
|
||||
moveSound = new Sound[2];
|
||||
moveSound[0] = new Sound("moveSound", "data/sounds/APUmove1.wav");
|
||||
moveSound[1] = new Sound("moveSound", "data/sounds/APUmove2.wav");
|
||||
selectSound = new Sound("selectSound", "data/sounds/APUselect.wav");
|
||||
|
|
@ -49,7 +53,7 @@ public class APU extends Unit{
|
|||
selectSound.setLocation(getNode().getLocation());
|
||||
attackSound.setLocation(getNode().getLocation());
|
||||
|
||||
selectionBox = new SelectBox(40,40,getMaxLife());
|
||||
selectionBox = new SelectBox(0,40,40,getMaxLife());
|
||||
}
|
||||
|
||||
protected SelectBox getSelection() {
|
||||
|
|
|
|||
|
|
@ -22,16 +22,19 @@ public class Bomber extends Unit{
|
|||
private Sprite sprite;
|
||||
|
||||
private Sound gunSound;
|
||||
private Sound[] moveSound = new Sound[2];
|
||||
private Sound[] moveSound;
|
||||
private Sound attackSound;
|
||||
private Sound selectSound;
|
||||
|
||||
public Bomber(Player p) {
|
||||
this(0, 0, p);
|
||||
super(200, p);
|
||||
}
|
||||
|
||||
public Bomber(int x, int y, Player p){
|
||||
super(200, new Vector2i(x,y), p);
|
||||
}
|
||||
|
||||
public void init(){
|
||||
AnimatedTexture tex = new AnimatedTexture("BomberTexture");
|
||||
tex.addAnimation("normal", new String[]{
|
||||
"data/units/bomber/bomber0000.png",
|
||||
|
|
@ -43,10 +46,11 @@ public class Bomber extends Unit{
|
|||
sprite = new Sprite("Bomber",tex);
|
||||
sprite.setSize(new Vector2f(50,60));
|
||||
getNode().add(sprite);
|
||||
setBuildTime(40);
|
||||
setBuildTime(400);
|
||||
setPrice(800);
|
||||
|
||||
gunSound = new Sound("gunSound", "data/sounds/bomberweapon.wav");
|
||||
moveSound = new Sound[2];
|
||||
moveSound[0] = new Sound("moveSound", "data/sounds/BOMBERmove1.wav");
|
||||
moveSound[1] = new Sound("moveSound", "data/sounds/BOMBERmove2.wav");
|
||||
selectSound = new Sound("selectSound", "data/sounds/BOMBERselect.wav");
|
||||
|
|
@ -58,7 +62,7 @@ public class Bomber extends Unit{
|
|||
selectSound.setLocation(getNode().getLocation());
|
||||
attackSound.setLocation(getNode().getLocation());
|
||||
|
||||
selectionBox = new SelectBox(40,40,getMaxLife());
|
||||
selectionBox = new SelectBox(0,40,40,getMaxLife());
|
||||
}
|
||||
|
||||
protected SelectBox getSelection() {
|
||||
|
|
|
|||
|
|
@ -21,35 +21,39 @@ public class Tank extends Unit{
|
|||
private Sprite sprite;
|
||||
|
||||
private Sound gunSound;
|
||||
private Sound[] moveSound = new Sound[2];
|
||||
private Sound[] moveSound;
|
||||
private Sound attackSound;
|
||||
private Sound selectSound;
|
||||
|
||||
public Tank(Player p) {
|
||||
this(0, 0, p);
|
||||
super(100, p);
|
||||
}
|
||||
|
||||
public Tank(int x, int y, Player p){
|
||||
super(100, new Vector2i(x,y), p);
|
||||
this.sprite = new Sprite("Tank", "data/units/tank/tank0000.png");
|
||||
}
|
||||
|
||||
public void init(){
|
||||
sprite = new Sprite("Tank", "data/units/tank/tank0000.png");
|
||||
sprite.setSize(new Vector2f(40,40));
|
||||
getNode().add(sprite);
|
||||
setBuildTime(30);
|
||||
setBuildTime(300);
|
||||
setPrice(400);
|
||||
|
||||
gunSound = new Sound("gunSound", "data/sounds/tankweapon.wav");
|
||||
moveSound = new Sound[2];
|
||||
moveSound[0] = new Sound("moveSound", "data/sounds/TANKmove1.wav");
|
||||
moveSound[1] = new Sound("moveSound", "data/sounds/TANKmove2.wav");
|
||||
selectSound = new Sound("selectSound", "data/sounds/TANKselect.wav");
|
||||
attackSound = new Sound("attackSound", "data/sounds/TANKattack.wav");
|
||||
|
||||
|
||||
gunSound.setLocation(getNode().getLocation());
|
||||
moveSound[0].setLocation(getNode().getLocation());
|
||||
moveSound[1].setLocation(getNode().getLocation());
|
||||
selectSound.setLocation(getNode().getLocation());
|
||||
attackSound.setLocation(getNode().getLocation());
|
||||
|
||||
selectionBox = new SelectBox(40,40,getMaxLife());
|
||||
selectionBox = new SelectBox(0,40,40,getMaxLife());
|
||||
}
|
||||
|
||||
protected SelectBox getSelection() {
|
||||
|
|
|
|||
|
|
@ -49,11 +49,23 @@ public abstract class Unit extends GameEntity{
|
|||
unitNode = new Node("UnitNode");
|
||||
unitNode.setLocation(Map.getPixelByPos(pos.getX(), pos.getY()));
|
||||
setPos(pos.getX(), pos.getY());
|
||||
init();
|
||||
}
|
||||
|
||||
public void setSelected(boolean b) {
|
||||
/**
|
||||
* Creates a empty unit
|
||||
*
|
||||
* @param l The max life of the unit
|
||||
*/
|
||||
public Unit(int l, Player p) {
|
||||
super(l, p);
|
||||
unitNode = new Node("UnitNode");
|
||||
init();
|
||||
}
|
||||
|
||||
public void setSelected(boolean b,boolean playSound) {
|
||||
if(b) {
|
||||
getSelectSound().play();
|
||||
if(playSound)getSelectSound().play();
|
||||
unitNode.add(getSelection().getSelectNode());
|
||||
}
|
||||
else{
|
||||
|
|
@ -93,6 +105,14 @@ public abstract class Unit extends GameEntity{
|
|||
InGameState.getMap().setPos(this, x, y);
|
||||
}
|
||||
|
||||
public void forcePos(int x, int y){
|
||||
if(oldPos!=null) {
|
||||
InGameState.getMap().removePos(oldPos.getX(), oldPos.getY());
|
||||
}
|
||||
oldPos = new Vector2i(x, y);
|
||||
InGameState.getMap().setPos(this, x, y);
|
||||
unitNode.setLocation(Map.getPixelByPos(x, y));
|
||||
}
|
||||
|
||||
/**
|
||||
* Moving a unit to the given pos
|
||||
|
|
@ -164,6 +184,8 @@ public abstract class Unit extends GameEntity{
|
|||
|
||||
public abstract Sound getMoveSound();
|
||||
|
||||
public abstract void init();
|
||||
|
||||
|
||||
public void removeUnit(){
|
||||
unitNode.remove(getSprite());
|
||||
|
|
@ -204,8 +226,7 @@ public abstract class Unit extends GameEntity{
|
|||
|
||||
if(moveVect.getY() > oldVect.getY() && divideX==1) {
|
||||
getSprite().setRotation(new Vector3f(0, 0, 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Diagonally.
|
||||
if(moveVect.getX() > oldVect.getX() && moveVect.getY() > oldVect.getY()
|
||||
|
|
@ -298,4 +319,12 @@ public abstract class Unit extends GameEntity{
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getBuildTime(){
|
||||
return buildTime;
|
||||
}
|
||||
|
||||
public int getPrice(){
|
||||
return price;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue