public void Bombard(CombatPlanet planet) { foreach (var unit in this.game.Combatants) { var unitStats = this.mainGame.Derivates[unit.Owner].DesignStats[unit.Ships.Design]; for (int i = 0; i < unit.AbilityCharges.Length; i++) { var spent = attackPlanet(unitStats.Abilities[i], unit.AbilityCharges[i], planet); unit.AbilityCharges[i] -= spent; if (!double.IsInfinity(unit.AbilityAmmo[i])) { unit.AbilityAmmo[i] -= spent; } } } this.game.PlayOrder.Dequeue(); if (this.game.PlayOrder.Count == 0) { this.nextRound(); } }
public void UseAbility(int index, double quantity, CombatPlanet planet) { var unit = this.game.PlayOrder.Peek(); var abilityStats = this.mainGame.Derivates.Of(unit.Owner).DesignStats[unit.Ships.Design].Abilities[index]; var chargesLeft = quantity; var spent = 0.0; if (!abilityStats.TargetColony || Methods.HexDistance(planet.Position, unit.Position) > abilityStats.Range) { return; } if (abilityStats.IsInstantDamage && planet.Colony != null) { var killsPerShot = abilityStats.FirePower / planet.PopulationHitPoints; var casualties = Math.Min(quantity * killsPerShot, planet.Colony.Population); //TODO(later) factor in shields and armor //TODO(later) roll for target, building or population planet.Colony.Population -= casualties; spent = Math.Ceiling(casualties / killsPerShot); } unit.AbilityCharges[index] -= spent; if (!double.IsInfinity(unit.AbilityAmmo[index])) { unit.AbilityAmmo[index] -= spent; } }
/*TODO(later) add methods for attacking other kind of targets, * extrude functionality form UseAbiliy methods in SpaceBattleProcessor */ protected double attackPlanet(AbilityStats abilityStats, double quantity, CombatPlanet planet) { var spent = 0.0; if (abilityStats.IsInstantDamage && planet.Colony != null) { var killsPerShot = abilityStats.FirePower / planet.PopulationHitPoints; var casualties = Math.Min(quantity * killsPerShot, planet.Colony.Population); //TODO(later) factor in shields and armor //TODO(later) roll for target, building or population planet.Colony.Population -= casualties; spent = Math.Ceiling(casualties / killsPerShot); } return(spent); }
public void UseAbility(int index, double quantity, CombatPlanet planet) { var unit = this.game.PlayOrder.Peek(); var abilityStats = this.mainGame.Derivates[unit.Owner].DesignStats[unit.Ships.Design].Abilities[index]; if (planet.Colony != null && !this.mainGame.Processor.IsAtWar(unit.Owner, planet.Colony.Owner) || !abilityStats.TargetColony || Methods.HexDistance(planet.Position, unit.Position) > abilityStats.Range) { return; } var spent = attackPlanet(abilityStats, quantity, planet); unit.AbilityCharges[index] -= spent; if (!double.IsInfinity(unit.AbilityAmmo[index])) { unit.AbilityAmmo[index] -= spent; } }
internal CombatPlanetInfo(CombatPlanet data) { this.Data = data; }
internal CombatPlanetInfo(CombatPlanet data, MainGame mainGame) { this.Data = data; this.mainGame = mainGame; }