Did some stuff

This commit is contained in:
Jesper Lundin 2007-04-18 16:08:10 +00:00
parent c6ba0ea532
commit af1a23b5af
6 changed files with 142 additions and 64 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

View file

@ -6,6 +6,7 @@ import ei.game.input.InGameMouseInput;
import ei.game.player.HumanPlayer; import ei.game.player.HumanPlayer;
import ei.game.player.PlayerHandler; import ei.game.player.PlayerHandler;
import ei.game.scene.Map; import ei.game.scene.Map;
import ei.game.scene.units.Bomber;
import ei.game.scene.units.Tank; import ei.game.scene.units.Tank;
import ei.game.scene.weapons.WeaponHandler; import ei.game.scene.weapons.WeaponHandler;
@ -24,13 +25,14 @@ public class InGameState extends GameState{
super.getInput().addInput(mouse); super.getInput().addInput(mouse);
HumanPlayer player = new HumanPlayer(); HumanPlayer player = new HumanPlayer();
Tank t1 = new Tank(); Tank t1 = new Tank(player);
t1.setLife(10); t1.setLife(10);
player.addUnit(t1); player.addUnit(t1);
Tank t2 = new Tank(1,0); Tank t2 = new Tank(1,0, player);
t2.setLife(30); t2.setLife(30);
player.addUnit(t2); player.addUnit(t2);
player.addUnit(new Tank(2,0)); player.addUnit(new Tank(2,0, player));
player.addUnit(new Bomber(3, 0, player));
rootNode.add(player.getNode()); rootNode.add(player.getNode());
PlayerHandler.getInstance().addPlayer(player); PlayerHandler.getInstance().addPlayer(player);

View file

@ -2,13 +2,16 @@ package ei.game.scene;
import ei.engine.math.Vector2i; import ei.engine.math.Vector2i;
import ei.engine.scene.Entity; import ei.engine.scene.Entity;
import ei.game.player.Player;
public abstract class GameEntity{ public abstract class GameEntity{
private int max_life; private int max_life;
private int life; private int life;
private Player player;
public GameEntity(int l){ public GameEntity(int l, Player p){
setLife(l); setLife(l);
player = p;
} }
/** /**
@ -32,7 +35,18 @@ public abstract class GameEntity{
} }
if(getSelection() != null)getSelection().setValue(l); if(getSelection() != null)getSelection().setValue(l);
} }
/**
* The unit looses life.
* @param l
*/
public void damaged(int l) {
setLife(life-l);
}
/**
* The unit is destroyed.
*
*/
public abstract void destroyed();
/** /**
* Returns the max life * Returns the max life
* *
@ -51,6 +65,12 @@ public abstract class GameEntity{
max_life = l; max_life = l;
} }
/**
* Returns the player.
*/
public Player getPlayer(){
return player;
}
/** /**
* Sets a unit to be selected or not. * Sets a unit to be selected or not.
* @param b true or false. * @param b true or false.
@ -74,5 +94,7 @@ public abstract class GameEntity{
public abstract Entity getNode(); public abstract Entity getNode();
public abstract void attack(Vector2i target); public abstract void attack(Vector2i target);
public abstract Entity getSprite();
} }

View file

@ -3,19 +3,23 @@ package ei.game.scene.units;
import ei.engine.math.Vector2f; import ei.engine.math.Vector2f;
import ei.engine.math.Vector2i; import ei.engine.math.Vector2i;
import ei.engine.scene.Sprite; import ei.engine.scene.Sprite;
import ei.game.player.Player;
import ei.game.scene.SelectBox; import ei.game.scene.SelectBox;
import ei.game.scene.weapons.CannonBall;
import ei.game.scene.weapons.Weapon;
public class Tank extends Unit{ public class Tank extends Unit{
private SelectBox selectionBox; private SelectBox selectionBox;
public Tank() { private Sprite sprite;
this(0, 0); public Tank(Player p) {
this(0, 0, p);
} }
public Tank(int x, int y){ public Tank(int x, int y, Player p){
super(100, new Vector2i(x,y)); super(100, new Vector2i(x,y), p);
Sprite sp = new Sprite("Tank", "data/units/tank.png"); this.sprite = new Sprite("Tank", "data/units/tank/tank0000.png");
sp.setSize(new Vector2f(50,37)); sprite.setSize(new Vector2f(40,40));
getNode().add(sp); getNode().add(sprite);
selectionBox = new SelectBox(40,40,getMaxLife()); selectionBox = new SelectBox(40,40,getMaxLife());
setLife(50); setLife(50);
@ -24,6 +28,32 @@ public class Tank extends Unit{
protected SelectBox getSelection() { protected SelectBox getSelection() {
return selectionBox; return selectionBox;
} }
/**
* Returns the weapon connected to this type
* of unit.
*/
public Weapon getWeapon(Vector2f startPos) {
return new CannonBall(startPos);
}
/**
* This unit type is now destroyed.
*/
public void destroyed(){
}
/**
* Manages the sprite connected to this unit.
* @param s
*/
public void setSprite(Sprite s) {
this.sprite = s;
}
/**
* returns the sprite connected to this type
* of unit.
* @return
*/
public Sprite getSprite() {
return this.sprite;
}
} }

View file

@ -10,8 +10,10 @@ import ei.engine.scene.Node;
import ei.game.algo.AStar; import ei.game.algo.AStar;
import ei.game.algo.AStarNode; import ei.game.algo.AStarNode;
import ei.game.gamestate.InGameState; import ei.game.gamestate.InGameState;
import ei.game.player.Player;
import ei.game.scene.GameEntity; import ei.game.scene.GameEntity;
import ei.game.scene.Map; import ei.game.scene.Map;
import ei.game.scene.weapons.CannonBall;
import ei.game.scene.weapons.Weapon; import ei.game.scene.weapons.Weapon;
import ei.game.scene.weapons.WeaponHandler; import ei.game.scene.weapons.WeaponHandler;
@ -37,8 +39,8 @@ public abstract class Unit extends GameEntity{
* *
* @param l The max life of the unit * @param l The max life of the unit
*/ */
public Unit(int l, Vector2i pos) { public Unit(int l, Vector2i pos, Player p) {
super(l); super(l, p);
unitNode = new Node("unit"); unitNode = new Node("unit");
unitNode.setLocation(Map.getPixelByPos(pos.getX(), pos.getY())); unitNode.setLocation(Map.getPixelByPos(pos.getX(), pos.getY()));
setPos(pos.getX(), pos.getY()); setPos(pos.getX(), pos.getY());
@ -85,6 +87,7 @@ public abstract class Unit extends GameEntity{
System.out.println(oldPos); System.out.println(oldPos);
} }
/** /**
* Moving a unit to the given pos * Moving a unit to the given pos
* *
@ -105,17 +108,21 @@ public abstract class Unit extends GameEntity{
* Lets a unit attack another unit or object in the world; * Lets a unit attack another unit or object in the world;
*/ */
public void attack(Vector2i target) { public void attack(Vector2i target) {
Weapon wep = new Weapon(10, new Vector2f(unitNode.getLocation().getX(), unitNode.getLocation().getY()), 4.0f); Weapon wep = getWeapon(new Vector2f(unitNode.getLocation().getX(), unitNode.getLocation().getY()));
wep.launch(target); wep.launch(target);
WeaponHandler.getInstance().addWeapon(wep); WeaponHandler.getInstance().addWeapon(wep);
} }
public abstract Weapon getWeapon(Vector2f startPos);
/** /**
* Updating the unit * Updating the unit
*/ */
public void update() { public void update() {
if(getLife()<=0) {
unitNode.remove("Tank");
getPlayer().removeUnit(this);
}
if(moveTo != null) { else if(moveTo != null) {
Vector2i moveVect = new Vector2i((int)moveTo.getX(),(int)moveTo.getY()); Vector2i moveVect = new Vector2i((int)moveTo.getX(),(int)moveTo.getY());
int moveXminus = moveVect.getX()-oldVect.getX(); int moveXminus = moveVect.getX()-oldVect.getX();
@ -126,19 +133,19 @@ public abstract class Unit extends GameEntity{
//The rotation animation is done here. //The rotation animation is done here.
if(moveVect.getX() < oldVect.getX() && divideY==1) { if(moveVect.getX() < oldVect.getX() && divideY==1) {
unitNode.get("Tank").setRotation(new Vector3f(0, 0, 90)); getSprite().setRotation(new Vector3f(0, 0, 90));
} }
if(moveVect.getX() > oldVect.getX() && divideY==1) { if(moveVect.getX() > oldVect.getX() && divideY==1) {
unitNode.get("Tank").setRotation(new Vector3f(0, 0, -90)); getSprite().setRotation(new Vector3f(0, 0, -90));
} }
if(moveVect.getY() < oldVect.getY() && divideX==1) { if(moveVect.getY() < oldVect.getY() && divideX==1) {
unitNode.get("Tank").setRotation(new Vector3f(0, 0, 180)); getSprite().setRotation(new Vector3f(0, 0, 180));
} }
if(moveVect.getY() > oldVect.getY() && divideX==1) { if(moveVect.getY() > oldVect.getY() && divideX==1) {
unitNode.get("Tank").setRotation(new Vector3f(0, 0, 0)); getSprite().setRotation(new Vector3f(0, 0, 0));
} }

View file

@ -4,6 +4,8 @@ import ei.engine.effects.Particles;
import ei.engine.math.Vector2f; import ei.engine.math.Vector2f;
import ei.engine.math.Vector2i; import ei.engine.math.Vector2i;
import ei.engine.scene.Entity; import ei.engine.scene.Entity;
import ei.engine.scene.Node;
import ei.game.gamestate.InGameState;
import ei.game.scene.Map; import ei.game.scene.Map;
/** /**
* The weapon class. * The weapon class.
@ -11,11 +13,13 @@ import ei.game.scene.Map;
* *
*/ */
public class Weapon { public abstract class Weapon {
private int range; private int range;
private int damage;
private Vector2i target; private Vector2i target;
private float velocity; private float velocity;
private float minVelocity; private float minVelocity;
private boolean hit;
private Particles part; private Particles part;
private Vector2f startPos; private Vector2f startPos;
@ -26,20 +30,22 @@ public class Weapon {
* @param startPos * @param startPos
* @param velocity * @param velocity
*/ */
public Weapon(int range, Vector2f startPos, float velocity) { public Weapon(Vector2f startPos) {
this.range = range;
this.startPos = startPos; this.startPos = startPos;
this.velocity = velocity;
this.minVelocity = 5; this.minVelocity = 5;
part = new Particles("weapon"); this.hit = false;
part = getWeapon();
part.setLocation(startPos); part.setLocation(startPos);
part.MaxSpeedX=500;
part.MaxSpeedY=400;
part.MaxSpeedZ=600;
part.rainbow = false;
part.size=5;
part.reset(); part.reset();
}
public void setRange(int range) {
this.range = range;
}
public void setVelocity(float velocity) {
this.velocity = velocity;
}
public void setDamage(int damage) {
this.damage = damage;
} }
/** /**
* Launches the weapon type. * Launches the weapon type.
@ -50,46 +56,55 @@ public class Weapon {
} }
/** /**
* updates the weapons movement and positions, also the behaviour of * updates the weapons movement and positions, also the behaviour of
* the weapon. * the weapon.
* *
*/ */
public void update() { public void update() {
Vector2f vect = Map.getPixelByPos(target.getX(), target.getY()); Vector2f vect = Map.getPixelByPos(target.getX(), target.getY());
float yVelocity = (Math.abs((vect.getY()-startPos.getY()) / velocity))/10;
float xVelocity = (Math.abs((vect.getX()-startPos.getX()) / velocity))/10;
System.out.println("xVel: "+xVelocity);
//System.out.println("xVel: "+Math.abs(part.getLocation().getX()-vect.getX())); if(Math.sqrt(Math.pow((vect.getX()-startPos.getX()), 2) + Math.pow((vect.getY()-startPos.getY()), 2))<=range) {
if(xVelocity < minVelocity && xVelocity < yVelocity) { float yVelocity = (Math.abs((vect.getY()-startPos.getY()) / velocity))/10;
yVelocity = (yVelocity/xVelocity)*minVelocity; float xVelocity = (Math.abs((vect.getX()-startPos.getX()) / velocity))/10;
xVelocity = minVelocity; System.out.println("xVel: "+xVelocity);
}
if(yVelocity < minVelocity && yVelocity < xVelocity) { //System.out.println("xVel: "+Math.abs(part.getLocation().getX()-vect.getX()));
xVelocity = (xVelocity/yVelocity)*minVelocity; if(xVelocity < minVelocity && xVelocity < yVelocity) {
yVelocity = minVelocity; yVelocity = (yVelocity/xVelocity)*minVelocity;
} xVelocity = minVelocity;
if(vect.getX() > part.getLocation().getX()) { }
part.getLocation().add(xVelocity, 0f, 0f); if(yVelocity < minVelocity && yVelocity < xVelocity) {
} xVelocity = (xVelocity/yVelocity)*minVelocity;
if(vect.getX() < part.getLocation().getX()) { yVelocity = minVelocity;
part.getLocation().add(-xVelocity, 0f, 0f); }
} if(vect.getX() > part.getLocation().getX()) {
if(vect.getY() > part.getLocation().getY()) { part.getLocation().add(xVelocity, 0f, 0f);
part.getLocation().add(0f, yVelocity, 0f); }
} if(vect.getX() < part.getLocation().getX()) {
if(vect.getY() < part.getLocation().getY()) { part.getLocation().add(-xVelocity, 0f, 0f);
part.getLocation().add(0f, -yVelocity, 0f); }
} if(vect.getY() > part.getLocation().getY()) {
if(Math.abs(part.getLocation().getX()-vect.getX()) < 10 && Math.abs(part.getLocation().getY()-vect.getY()) < 10) { part.getLocation().add(0f, yVelocity, 0f);
part.regenerate = false; }
if(part.isDead()) { if(vect.getY() < part.getLocation().getY()) {
WeaponHandler.getInstance().removeWeapon(this); part.getLocation().add(0f, -yVelocity, 0f);
}
if(Math.abs(part.getLocation().getX()-vect.getX()) < 10 && Math.abs(part.getLocation().getY()-vect.getY()) < 10) {
part.regenerate = false;
if(!hit) {
InGameState.getMap().getPos(target.getX(), target.getY()).damaged(damage);
hit = true;
}
if(part.isDead()) {
WeaponHandler.getInstance().removeWeapon(this);
}
} }
} }
else{
WeaponHandler.getInstance().removeWeapon(this);
}
} }
/** /**
* Returns the node with the weapon. * Returns the node with the weapon.
@ -98,5 +113,7 @@ public class Weapon {
public Entity getNode() { public Entity getNode() {
return part; return part;
} }
protected abstract Particles getWeapon();
} }