diff --git a/Java-Knight/src/main/java/org/project/entity/Entity.java b/Java-Knight/src/main/java/org/project/entity/Entity.java index 9a5c16f..083287e 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -56,6 +56,32 @@ public abstract class Entity implements IDamageable, IHealable, IDefendable, IFi protected Entity() {} + public Entity(Entity other) { + this.Name = other.Name; + this.MaxHealth = other.MaxHealth; + this.Health = other.Health; + this.Stamina = other.Stamina; + this.MaxStamina = other.MaxStamina; + this.Money = other.Money; + this.BaseDamage = other.BaseDamage; + this.State = other.State; + + this.Weapon = other.Weapon == null ? null : new Weapon(other.Weapon.getName(), this, other.Weapon.GetPrice(), other.Weapon.GetHealth(), other.Weapon.GetMaxHealth(), other.Weapon.GetDamage()); + this.Shield = other.Shield == null ? null : new Shield(other.Shield.getName(), this, other.Shield.GetPrice(), other.Shield.GetHealth(), other.Shield.GetMaxHealth(), other.Shield.GetDefense()); + this.Costume = other.Costume == null ? null : new Costume(other.Costume.getName(), this, other.Costume.GetPrice(), other.Costume.GetHealth(), other.Costume.GetMaxHealth(), other.Costume.GetDefense()); + + this.Inventory = other.Inventory == null ? null : new ArrayList<>(other.Inventory); + this.defencePowerUps = other.defencePowerUps == null ? null : new ArrayList<>(other.defencePowerUps); + + this.DefenseBonus = other.DefenseBonus; + this.IsDefending = other.IsDefending; + this.HealAmount = other.HealAmount; + this.HeavyAttackStamina = other.HeavyAttackStamina; + this.SpecialAbilityStamina = other.SpecialAbilityStamina; + } + + public abstract Entity copy(); + public int GetStamina() { return Stamina; } public void ResetStamina() { Stamina = MaxStamina; } @@ -146,7 +172,7 @@ public abstract class Entity implements IDamageable, IHealable, IDefendable, IFi @Override public void TakeDamage(int amount, AttackPowerUp[] powerUps) { - if (!defencePowerUps.contains(DefencePowerUp.INVISIBLE)) return; + if (defencePowerUps != null && !defencePowerUps.contains(DefencePowerUp.INVISIBLE)) return; IDefender[] defenders = GetDefenders(); diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java index a1d7591..a43a4d0 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -26,6 +26,15 @@ public class Dragon extends Enemy { this("Dragon", 5000, 5000, 0, 100, EntityState.ALIVE, null, null, null, new ArrayList<>(){}, 50, false, 50, 500, 500, 1000); } + public Dragon (Dragon other) { + super(other); + } + + @Override + public Dragon copy() { + return new Dragon(this); + } + @Override public void DropLoot(Player player) { Key.Owner = player; diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index df17a8f..8d57c15 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java @@ -36,6 +36,14 @@ public abstract class Enemy extends Entity { super(); } + public Enemy(Enemy other) { + super(other); + this.Key = new KeyItem(other.Key.getName(), other.Key.Owner); + } + + @Override + public abstract Enemy copy(); + public void DropLoot(Player player) { Random random = new Random(); diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java index 49c50d9..67ef44f 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -25,6 +25,15 @@ public class Goblin extends Enemy { this("Goblin", 75, 75, 100, 10, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 15, 100, 100, 50); } + public Goblin (Goblin other) { + super(other); + } + + @Override + public Goblin copy() { + return new Goblin(this); + } + @Override public void SpecialAbility(Entity entity) { ModifyStamina(SpecialAbilityStamina, false); diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java index 08194cd..0eda767 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java @@ -29,6 +29,15 @@ public class Skeleton extends Enemy { this("Skeleton", 125, 125, 200, 15, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 20, 100, 100, 100); } + public Skeleton (Skeleton other) { + super(other); + } + + @Override + public Skeleton copy() { + return new Skeleton(this); + } + @Override public ArrayList GetAvailableMoves() { if (GetState() == EntityState.FROZEN || GetState() == EntityState.DEAD) return new ArrayList<>(){}; diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java index 2596051..4106475 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -25,6 +25,15 @@ public class Vampire extends Enemy { this("Vampire", 150, 150, 300, 20, EntityState.ALIVE, null, null, null, new ArrayList<>(), 8, false, 30, 100, 100, 150); } + public Vampire (Vampire other) { + super(other); + } + + @Override + public Vampire copy() { + return new Vampire(this); + } + @Override public void SpecialAbility(Entity entity) { int curHealth = entity.Health; diff --git a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java index 710e97e..ce70200 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -27,6 +27,15 @@ public class Assassin extends Player { this(name, 125, 125, 100, 15, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 35, 100, 100, 1, 0); } + public Assassin(Assassin other) { + super(other); + } + + @Override + public Assassin copy() { + return new Assassin(this); + } + @Override public void SpecialAbility(Entity entity) { ModifyStamina(SpecialAbilityStamina, false); diff --git a/Java-Knight/src/main/java/org/project/entity/players/Knight.java b/Java-Knight/src/main/java/org/project/entity/players/Knight.java index 1cb1b06..3fac198 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Knight.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java @@ -27,6 +27,15 @@ public class Knight extends Player { this(name, 150, 150, 100, 20, EntityState.ALIVE, null, null, null, new ArrayList<>(), 8, false, 30, 100, 100, 1, 0); } + public Knight(Knight other) { + super(other); + } + + @Override + public Knight copy() { + return new Knight(this); + } + @Override public void SpecialAbility(Entity entity) { ModifyStamina(SpecialAbilityStamina, false); diff --git a/Java-Knight/src/main/java/org/project/entity/players/Player.java b/Java-Knight/src/main/java/org/project/entity/players/Player.java index 2625d65..97b84c8 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Player.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java @@ -29,6 +29,15 @@ public abstract class Player extends Entity { super(); } + public Player(Player other) { + super(other); + this.Level = other.Level; + this.LevelProgress = other.LevelProgress; + } + + @Override + public abstract Player copy(); + public void LevelUpTo(int level) { while (Level < level) { UnconditionalLevelUp(); @@ -68,15 +77,15 @@ public abstract class Player extends Entity { int damage = GetDamage(); Damage(target, (int)(damage * 0.5), new AttackPowerUp[]{}); - ModifyStamina(MaxStamina/8, true); + ModifyStamina(MaxStamina/8, false); } @Override public void HeavyAttack(IDamageable target) { int damage = GetDamage(); - ModifyStamina(HeavyAttackStamina, false); Damage(target, damage, new AttackPowerUp[]{}); + ModifyStamina(HeavyAttackStamina, false); } @Override diff --git a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java index f23bfb6..7c58d3d 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -27,6 +27,15 @@ public class Wizard extends Player { this(name, 100, 100, 100, 15, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 40, 100, 100, 1, 0); } + public Wizard(Wizard other) { + super(other); + } + + @Override + public Wizard copy() { + return new Wizard(this); + } + @Override public void SpecialAbility(Entity entity) { ModifyStamina(SpecialAbilityStamina, false);