public UnitEntity(string name, Vector3Int initialPosition, int maxHealth, int sight, bool isPlayerControlled, int movementSpeed, IWorld world, UnitEntityCombatData combatData) { //ID = id; Name = name; Position = initialPosition; Level = 0; Experience = 0; MaxHealth = maxHealth; Health = maxHealth; IsAlive = true; this.sight = sight; this.world = world; IsPlayerControlled = isPlayerControlled; movement = new UnitEntityMovement(this, world, movementSpeed); combat = new UnitEntityCombat(this, world, movement, combatData); inventory = new Inventory(100); //TODO: placeholder UnitEntity inventory weight // TODO: placeholder UnitEntity initialization inventory.AddItem(new Items.UtilityItems.UtilityItem("health_potion", "Health Potion", 1, 1, 1, "Potion", 1, 0, new Abilities.AbilityEffect[] { new Abilities.HealAbilityEffect(10) }, new Abilities.HexAbilityAOE(0), true, false)); UpdateVision(); world.UnitManager.AddUnit(this); }
private int CalculatePhysicalDamage(float baseDamage, IUnitEntityCombat attacker, float combatModifier) { float reduction = Mathf.Max(0, combatModifier * (defence - attacker.Piercing)); reduction *= (float)combatModifier * defence / (attacker.Piercing + 1); int damage = (int)(baseDamage - reduction); return(damage); }
public UnitEntityCombatGraphics(UnitEntityGraphics graphics) { this.world = graphics.World; this.combat = graphics.Unit.Combat; this.config = graphics.Config; combat.OnAttack += OnAttack; ShownAttackables = new HashSet <Vector3Int>(); }
public void DealDamage(float baseDamage, IUnitEntityCombat attacker, bool isPhysicalDamage = true) { if (baseDamage < 0) { return; } float combatModifier = world.GetCombatModifierAt(Unit.Position); int damage; if (isPhysicalDamage) { damage = CalculatePhysicalDamage(baseDamage, attacker, combatModifier); } else { damage = CalculateMagicalDamage(baseDamage, combatModifier); } Unit.Damage(damage); }
public bool IsEnemy(IUnitEntityCombat other) { return(other.Unit.IsPlayerControlled != Unit.IsPlayerControlled); }
public UnitEntityDeath(IUnitEntityCombat combat) { //combat.OnDeath += OnDeath; }