internal BattleStageSide ToBattleSide() { List <BattalionState> newStates = new List <BattalionState>(); for (int x = 0; x < columns; x++) { for (int y = 0; y < rows; y++) { BattalionState oldState = grid[x, y]; if (oldState != null) { BattalionState newState = GetRepositionedState(oldState, x, y); newStates.Add(newState); } } } return(new BattleStageSide(newStates)); }
public override BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies) { BattalionEffectsBuilder builder = new BattalionEffectsBuilder(this); int reloadingState = self.GetAttribute(BattalionAttribute.ReloadingState); if (reloadingState > 0) { builder.Add(self.Id, BattalionAttribute.ReloadingState, -1); } else { if (IsWithinAttackingRange(self.Position)) { DoAttack(builder, self, enemies); } } return(builder.ToEffects()); }
private void BringAdvancersForward() { for (int x = 1; x < columns; x++) { for (int y = 0; y < rows; y++) { BattalionState state = grid[x, y]; if (state != null && GetIsAdvancer(state)) { BattalionState targetPos = grid[x - 1, y]; if (targetPos == null) { grid[x, y] = null; grid[x - 1, y] = state; RepositioningHappend = true; } } } } }
private void DoAttack(BattalionEffectsBuilder builder, BattalionState self, BattleStageSide enemies) { BattalionState target = enemies.GetTargetFor(self.Position); BattalionAttribute damageAttribute = GetDamageAttributeFor(damageType); builder.Add(target.Id, damageAttribute, weaponStrength); if (splashDamage > 0) { IEnumerable <BattalionState> splashTargets = GetSplashTargets(target, enemies).ToArray(); foreach (BattalionState splashTarget in splashTargets) { builder.Add(splashTarget.Id, damageAttribute, splashDamage); } } int reloadingSpeed = self.GetAttribute(BattalionAttribute.ReloadingSpeed); builder.Add(self.Id, BattalionAttribute.ReloadingState, reloadingSpeed); }
public override BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies) { BattalionEffectsBuilder builder = new BattalionEffectsBuilder(this); if (self.Position.X == 0) { BattalionState target = enemies.GetTargetFor(self.Position); if (attackType == MeleeAttackType.Regular || attackType == MeleeAttackType.Charging) { DoMeleeAttack(builder, self, target); } if (attackType == MeleeAttackType.Charging) { IEnumerable <BattalionState> chargeTargets = GetChargeTargets(enemies, target); foreach (BattalionState chargeTarget in chargeTargets) { DoMeleeAttack(builder, self, chargeTarget); } } } return(builder.ToEffects()); }
public abstract BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies);
public BattalionStateVisuals(BattalionState state, BattleRound round) { State = state; Side = round.InitialState.LeftSide.Any(unit => unit.Id == state.Id) ? BattleSide.Left : BattleSide.Right; }
internal void InsertState(BattalionState state, BattleRound battleRound, int index) { states[index] = new BattalionStateVisuals(state, battleRound); }
private bool GetIsAdvancer(BattalionState state) { int advancing = state.GetAttribute(BattalionAttribute.Advancing); return(advancing > 0); }
private static bool IsAntiCharge(BattalionState state) { return(state.GetAttribute(BattalionAttribute.AntiCharge) > 0); }
public EffectsBuilder(BattalionState initialState) { this.initialState = initialState; }