feat: add initial classes for entities package
This commit is contained in:
		
							
								
								
									
										68
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Character.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Character.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,68 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import com.uulm.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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Entity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Entity.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import com.uulm.marvelous.gamelibrary.IntVector2;
 | 
			
		||||
 | 
			
		||||
/** Represents an abstract entity.
 | 
			
		||||
 */
 | 
			
		||||
public abstract class Entity {
 | 
			
		||||
    /** Whether or not the entity is currently active in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private boolean active = true;
 | 
			
		||||
 | 
			
		||||
    /** The position of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    private IntVector2 position;
 | 
			
		||||
 | 
			
		||||
    /** The {@link EntityID} of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    public final EntityID id;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link Entity}.
 | 
			
		||||
     * @param id The {@link EntityID} of the entity.
 | 
			
		||||
     * @param position The position of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    protected Entity(EntityID id, IntVector2 position) {
 | 
			
		||||
        this.position = position;
 | 
			
		||||
        this.id = id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isActive() {
 | 
			
		||||
        return active;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setActive(boolean active) {
 | 
			
		||||
        this.active = active;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public IntVector2 getPosition() {
 | 
			
		||||
        return position;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPosition(IntVector2 position) {
 | 
			
		||||
        this.position = position;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								src/com/uulm/marvelous/gamelibrary/entities/EntityID.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/com/uulm/marvelous/gamelibrary/entities/EntityID.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Represents a distinct identification for every {@link Entity} in a game.
 | 
			
		||||
 */
 | 
			
		||||
public class EntityID {
 | 
			
		||||
    /** The index of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    public final int id;
 | 
			
		||||
 | 
			
		||||
    /** The type of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    public final EntityType type;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link Entity}-{@link EntityID} based on the given index and {@link EntityType}.
 | 
			
		||||
     * @param id The index of the entity.
 | 
			
		||||
     * @param type The type of the entity.
 | 
			
		||||
     */
 | 
			
		||||
    public EntityID(int id, EntityType type) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.type = type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Checks if the id has the same {@link EntityType} as the given one.
 | 
			
		||||
     * @param other The type to compare to.
 | 
			
		||||
     * @return Whether or not the id has the same type.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSameType(EntityType other) {
 | 
			
		||||
        return type == other;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Serializes the id for debugging.
 | 
			
		||||
     * @return A debug string containing all the necessary information about the id.
 | 
			
		||||
     */
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return "["+type.toString()+":"+id+"]";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								src/com/uulm/marvelous/gamelibrary/entities/EntityType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/com/uulm/marvelous/gamelibrary/entities/EntityType.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Specifies the type of an {@link Entity}.
 | 
			
		||||
 */
 | 
			
		||||
public enum EntityType {
 | 
			
		||||
    /** Represents an NPC entity.
 | 
			
		||||
     */
 | 
			
		||||
    NPC,
 | 
			
		||||
    /** Represents the first Player.
 | 
			
		||||
     */
 | 
			
		||||
    P1,
 | 
			
		||||
    /** Represents the second Player.
 | 
			
		||||
     */
 | 
			
		||||
    P2,
 | 
			
		||||
    /** Represents a Rock entity.
 | 
			
		||||
     */
 | 
			
		||||
    Rocks,
 | 
			
		||||
    /** Represents an InfinityStone entity.
 | 
			
		||||
     */
 | 
			
		||||
    InfinityStones
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,21 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import com.uulm.marvelous.gamelibrary.IntVector2;
 | 
			
		||||
 | 
			
		||||
/** Represents an infinity stone {@link Entity}. Can only exist on the map.
 | 
			
		||||
 */
 | 
			
		||||
public class InfinityStone extends Entity {
 | 
			
		||||
    /** The {@link StoneType} of the infinity stone.
 | 
			
		||||
     */
 | 
			
		||||
    public final StoneType type;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link InfinityStone}.
 | 
			
		||||
     * @param id The {@link EntityID} of the stone.
 | 
			
		||||
     * @param position The position of the stone.
 | 
			
		||||
     * @param type The {@link StoneType} of the stone.
 | 
			
		||||
     */
 | 
			
		||||
    public InfinityStone(EntityID id, IntVector2 position, StoneType type) {
 | 
			
		||||
        super(id, position);
 | 
			
		||||
        this.type = type;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Inventory.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Inventory.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
 | 
			
		||||
/** Represents an inventory of 6 slots of {@link StoneType}s that can be manipulated.
 | 
			
		||||
 */
 | 
			
		||||
public class Inventory implements Iterable<StoneType> {
 | 
			
		||||
    /** The size of the inventory.
 | 
			
		||||
     */
 | 
			
		||||
    private final int size = 6;
 | 
			
		||||
 | 
			
		||||
    /** The content of the inventory.
 | 
			
		||||
     */
 | 
			
		||||
    private final HashSet<StoneType> content = new HashSet<>(size);
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link Inventory}.
 | 
			
		||||
     * @param content The starting content of the inventory.
 | 
			
		||||
     */
 | 
			
		||||
    public Inventory(ArrayList<StoneType> content) {
 | 
			
		||||
        if(content.size() > size) {
 | 
			
		||||
            throw new IllegalArgumentException("Attempted to construct an inventory with more than "+size+" initial stones.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(StoneType stone : content) {
 | 
			
		||||
            if(content.contains(stone)) {
 | 
			
		||||
                throw new IllegalArgumentException("Attempted to construct an inventory with duplicate entries.");
 | 
			
		||||
            }
 | 
			
		||||
            content.add(stone);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new empty {@link Inventory}.
 | 
			
		||||
     */
 | 
			
		||||
    public Inventory() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Returns the number of free slots the inventory has.
 | 
			
		||||
     */
 | 
			
		||||
    public int getFreeSlots() {
 | 
			
		||||
        return size - content.size();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Checks if the inventory contains the given stone.
 | 
			
		||||
     * @param stone The {@link StoneType} to check for.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean hasStone(StoneType stone) {
 | 
			
		||||
        return content.contains(stone);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Adds a stone to the inventory.
 | 
			
		||||
     * @param stone The {@link StoneType} to add.
 | 
			
		||||
     */
 | 
			
		||||
    public void addStone(StoneType stone) {
 | 
			
		||||
        if(content.contains(stone)) {
 | 
			
		||||
            throw new IllegalArgumentException("Attempted to add a duplicate stone to an inventory.");
 | 
			
		||||
        }
 | 
			
		||||
        if(content.size() == size) {
 | 
			
		||||
            throw new IllegalArgumentException("Attempted to add a stone to a full inventory.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        content.add(stone);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Removes a stone from the inventory.
 | 
			
		||||
     * @param stone The {@link StoneType} to remove.
 | 
			
		||||
     */
 | 
			
		||||
    public void removeStone(StoneType stone) {
 | 
			
		||||
        if(!content.contains(stone)) {
 | 
			
		||||
            throw new IllegalArgumentException("Attempted to remove a nonexistent stone from an inventory.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        content.remove(stone);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Iterates over the inventory.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public Iterator<StoneType> iterator() {
 | 
			
		||||
        return content.iterator();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								src/com/uulm/marvelous/gamelibrary/entities/NPC.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/com/uulm/marvelous/gamelibrary/entities/NPC.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import com.uulm.marvelous.gamelibrary.IntVector2;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
/** Represents an NPC inside the game.
 | 
			
		||||
 */
 | 
			
		||||
public class NPC extends Entity {
 | 
			
		||||
    /** The {@link Inventory} of the NPC.
 | 
			
		||||
     */
 | 
			
		||||
    public final Inventory inventory;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link NPC}.
 | 
			
		||||
     * @param id The {@link EntityID} of the NPC.
 | 
			
		||||
     * @param position The position of the NPC.
 | 
			
		||||
     * @param inventory The starting inventory the NPC should have.
 | 
			
		||||
     */
 | 
			
		||||
    public NPC(EntityID id, IntVector2 position, ArrayList<StoneType> inventory) {
 | 
			
		||||
        super(id, position);
 | 
			
		||||
        this.inventory = new Inventory(inventory);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link NPC} with an empty inventory.
 | 
			
		||||
     * @param id The {@link EntityID} of the NPC.
 | 
			
		||||
     * @param position The position of the NPC.
 | 
			
		||||
     */
 | 
			
		||||
    public NPC(EntityID id, IntVector2 position) {
 | 
			
		||||
        super(id, position);
 | 
			
		||||
        this.inventory = new Inventory();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								src/com/uulm/marvelous/gamelibrary/entities/NPCType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/com/uulm/marvelous/gamelibrary/entities/NPCType.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Specifies the type of an {@link NPC}.
 | 
			
		||||
 */
 | 
			
		||||
public enum NPCType {
 | 
			
		||||
    /** Represents the Goose.
 | 
			
		||||
     */
 | 
			
		||||
    Goose,
 | 
			
		||||
    /** Represents Stan Lee.
 | 
			
		||||
     */
 | 
			
		||||
    Stan,
 | 
			
		||||
    /** Represents Thanos.
 | 
			
		||||
     */
 | 
			
		||||
    Thanos
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Rock.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Rock.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
import com.uulm.marvelous.gamelibrary.IntVector2;
 | 
			
		||||
 | 
			
		||||
/** Represents a rock entity on the map.
 | 
			
		||||
 */
 | 
			
		||||
public class Rock extends Entity {
 | 
			
		||||
    /** The maximum hp of the rock.
 | 
			
		||||
     */
 | 
			
		||||
    public final int maxHP;
 | 
			
		||||
 | 
			
		||||
    /** The current hp of the rock.
 | 
			
		||||
     */
 | 
			
		||||
    private int hp;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link Rock}.
 | 
			
		||||
     * @param id The {@link EntityID} of the rock.
 | 
			
		||||
     * @param position The position of the rock.
 | 
			
		||||
     * @param hp The hp of the rock.
 | 
			
		||||
     */
 | 
			
		||||
    public Rock(EntityID id, IntVector2 position, int hp) {
 | 
			
		||||
        super(id, position);
 | 
			
		||||
        this.maxHP = hp;
 | 
			
		||||
        this.hp = hp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHp() {
 | 
			
		||||
        return hp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void decreaseHp(int damage) {
 | 
			
		||||
        this.hp -= damage;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Stat.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/com/uulm/marvelous/gamelibrary/entities/Stat.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Represents a stat property of a {@link Character}.
 | 
			
		||||
 */
 | 
			
		||||
public class Stat {
 | 
			
		||||
    /** The {@link StatType} of the stat.
 | 
			
		||||
     */
 | 
			
		||||
    public final StatType type;
 | 
			
		||||
 | 
			
		||||
    /** The maximum value of the stat.
 | 
			
		||||
     */
 | 
			
		||||
    public final int max;
 | 
			
		||||
 | 
			
		||||
    /** The current value of the stat.
 | 
			
		||||
     */
 | 
			
		||||
    private int value;
 | 
			
		||||
 | 
			
		||||
    /** Constructs a new {@link Stat} with the initial value set to the maximum value.
 | 
			
		||||
     * @param type The {@link StatType} of the stat.
 | 
			
		||||
     * @param max The maximum value of the stat.
 | 
			
		||||
     */
 | 
			
		||||
    public Stat(StatType type, int max) {
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        this.max = max;
 | 
			
		||||
        this.value = max;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getValue() {
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setValue(int value) {
 | 
			
		||||
        this.value = value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void increaseValue(int value) {
 | 
			
		||||
        this.value += value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void decreaseValue(int value) {
 | 
			
		||||
        this.value -= value;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								src/com/uulm/marvelous/gamelibrary/entities/StatType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/com/uulm/marvelous/gamelibrary/entities/StatType.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Specifies the type of a {@link Stat}.
 | 
			
		||||
 */
 | 
			
		||||
public enum StatType {
 | 
			
		||||
    /** Represents the life points of a character.
 | 
			
		||||
     */
 | 
			
		||||
    HP,
 | 
			
		||||
    /** Represents the mana points of a character.
 | 
			
		||||
     */
 | 
			
		||||
    MP,
 | 
			
		||||
    /** Represents thr action points of a character.
 | 
			
		||||
     */
 | 
			
		||||
    AP
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								src/com/uulm/marvelous/gamelibrary/entities/StoneType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/com/uulm/marvelous/gamelibrary/entities/StoneType.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
package com.uulm.marvelous.gamelibrary.entities;
 | 
			
		||||
 | 
			
		||||
/** Specifies the type of an {@link InfinityStone}.
 | 
			
		||||
 */
 | 
			
		||||
public enum StoneType {
 | 
			
		||||
    SpaceStone,
 | 
			
		||||
    MindStone,
 | 
			
		||||
    RealityStone,
 | 
			
		||||
    PowerStone,
 | 
			
		||||
    TimeStone,
 | 
			
		||||
    SoulStone
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user