Gamelib/src/main/java/uulm/teamname/marvelous/gamelibrary/entities/Character.java

74 lines
2.4 KiB
Java

package uulm.teamname.marvelous.gamelibrary.entities;
import uulm.teamname.marvelous.gamelibrary.IntVector2;
/** Represents a playable character inside a match. */
public class Character extends Entity {
/** The name of the character */
public final String name;
/** The hp stat of the character */
public final Stat hp;
/** The mp stat of the character */
public final Stat mp;
/** The ap stat of the character */
public final Stat ap;
/** The ranged attack range of the character */
public final int attackRange;
/** The ranged attack damage of the character */
public final int rangedDamage;
/** The melee attack damage of the character */
public final int meleeDamage;
/** The {@link Inventory} of the character */
public final Inventory inventory = new Inventory();
/**
* Constructs a new {@link Character} with an empty inventory.
* @param id The {@link EntityID} of the character
* @param position The position of the character
* @param name The name of the character
* @param hp The maximum hp of the character
* @param mp The maximum mp of the character
* @param ap The maximum ap of the character
* @param attackRange The ranged attack range of the character
* @param rangedDamage The ranged damage of the character
* @param meleeDamage The melee damage of the character
*/
public Character(EntityID id, IntVector2 position, String name, int hp, int mp, int ap, int attackRange, int rangedDamage, int meleeDamage) {
super(id, position);
this.name = name;
this.hp = new Stat(StatType.HP, hp);
this.mp = new Stat(StatType.MP, mp);
this.ap = new Stat(StatType.AP, ap);
this.attackRange = attackRange;
this.rangedDamage = rangedDamage;
this.meleeDamage = meleeDamage;
}
/**
* Checks if the character is still alive.
* @return Whether or not the characters hp is greater than 0
*/
public boolean isAlive() {
return hp.getValue() > 0;
}
@Override
public Character clone() {
Character clone = new Character(id, position, name, hp.max, mp.max, ap.max, attackRange, rangedDamage, meleeDamage);
for(StoneType stone: inventory) {
clone.inventory.addStone(stone);
}
clone.hp.setValue(hp.getValue());
clone.mp.setValue(mp.getValue());
clone.ap.setValue(ap.getValue());
return clone;
}
}