public bool manageArrival(StateGameLayer.Troop troop, int Target) { bool troopDie = true; if (troop.ObjectType != stateGame.factory.factories[Target].ObjectType) { int beforeBattleFactoryHP = stateGame.factory.factories[Target].HitPoints; int beforeBattleTroopHP = troop.HitPoints; int attackTroop = Math.Max(troop.Damage - stateGame.factory.factories[Target].Defense, 0); int shieldsFactory = stateGame.factory.factories[Target].Shields + (stateGame.factory.factories[Target].Shields / 20) * stateGame.factory.factories[Target].Elements; stateGame.factory.factories[Target].Shields = Math.Max(stateGame.factory.factories[Target].Shields - attackTroop, 0); attackTroop = Math.Max(attackTroop - shieldsFactory, 0); stateGame.factory.factories[Target].HitPoints = stateGame.factory.factories[Target].HitPoints - attackTroop; int attackFactory = Math.Max(stateGame.factory.factories[Target].Damage + (stateGame.factory.factories[Target].Damage / 20) * stateGame.factory.factories[Target].Elements - troop.Defense, 0); int shieldsTroop = troop.Shields; troop.Shields = Math.Max(troop.Shields - attackFactory, 0); attackFactory = Math.Max(attackFactory - shieldsTroop, 0); troop.HitPoints = troop.HitPoints - attackFactory; stateGame.factory.factories[Target].recalculateElements(beforeBattleFactoryHP); troop.recalculateElements(beforeBattleTroopHP); if (stateGame.factory.factories[Target].isDead() && !troop.isDead()) { stateGame.factory.factories[Target].Elements = troop.Elements; stateGame.factory.factories[Target].Elements = Math.Min(stateGame.factory.factories[Target].Elements, stateGame.factory.factories[Target].MaxElements); stateGame.factory.factories[Target].ObjectType = troop.ObjectType; stateGame.factory.factories[Target].HitPoints = stateGame.factory.factories[Target].MaxHitPoints; stateGame.factory.factories[Target].Shields = stateGame.factory.factories[Target].MaxShields; stateGame.factory.factories[Target].Selected = false; troop.HitPoints = 0; troopDie = false; stateGame.factory.change = true; } else if (stateGame.factory.factories[Target].isDead() && troop.isDead()) { stateGame.factory.factories[Target].HitPoints = stateGame.factory.factories[Target].MaxHitPoints / 10; troopDie = true; } } else { stateGame.factory.factories[Target].Elements += troop.Elements; stateGame.factory.factories[Target].Elements = Math.Min(stateGame.factory.factories[Target].Elements, stateGame.factory.factories[Target].MaxElements); troop.HitPoints = 0; troopDie = false; } if (troop.isDead()) { stateGame.factory.factories[Target].UnderAttack = false; if(troopDie) return true; } return false; }
public void manageArrival(StateGameLayer.Troop troop) { if (!troop.EnemyTroop.isDead()) { int beforeBattleTroopHP = troop.HitPoints; int beforeBattleEnemyHP = troop.EnemyTroop.HitPoints; int attackTroop = Math.Max(troop.Damage - troop.EnemyTroop.Defense, 0); int shieldsEnemy = troop.EnemyTroop.Shields; troop.EnemyTroop.Shields = Math.Max(troop.EnemyTroop.Shields - attackTroop, 0); attackTroop = Math.Max(attackTroop - shieldsEnemy, 0); troop.EnemyTroop.HitPoints = troop.EnemyTroop.HitPoints - attackTroop; int attackEnemy = Math.Max(troop.EnemyTroop.Damage - troop.Defense, 0); int shieldsTroop = troop.Shields; troop.Shields = Math.Max(troop.Shields - attackEnemy, 0); attackEnemy = Math.Max(attackEnemy - shieldsTroop, 0); troop.HitPoints = troop.HitPoints - attackEnemy; troop.EnemyTroop.recalculateElements(beforeBattleEnemyHP); troop.recalculateElements(beforeBattleTroopHP); troop.EnemyTroop.StartTime = 0; } if (troop.EnemyTroop.isDead()) { removeLaser(troop.EnemyTroop); troop.Fighting = false; troop.EnemyTroop = null; troop.EnemyEngaged = false; } }