public void ScheduleOffensiveFire(int shipId, OffensiveFireDeclaration offensiveFireDeclaration) { var nextFiringOpportunity = SimulationTimeStamp.GetNextFiringOppporunity(); var turnToModify = GetOrCreateTurn(nextFiringOpportunity.TurnNumber); turnToModify.ImpulseProcessActions.SetOffensiveFire(shipId, nextFiringOpportunity, offensiveFireDeclaration); }
public SimulationTimeStampBuilder(SimulationTimeStamp ts) { TurnNumber = ts.TurnNumber; TurnStep = ts.TurnStep; ImpulseStep = ts.ImpulseStep; Impulse = ts.Impulse; SubPulse = ts.SubPulse; }
public OffensiveFireDeclaration GetOffensiveFire(int shipId, SimulationTimeStamp ts) { var key = new Tuple <SimulationTimeStamp, int>(ts, shipId); if (OffensiveFireSchedule.ContainsKey(key)) { return(OffensiveFireSchedule[key]); } return(null); }
public DeclaredNavigation GetDeclaredNavigation(int shipId, SimulationTimeStamp ts) { var key = new Tuple <SimulationTimeStamp, int>(ts, shipId); if (NavigationSchedule.ContainsKey(key)) { return(NavigationSchedule[key]); } return(default(DeclaredNavigation)); }
public void ScheduleNextEnergyAllocation(int shipId, EnergyAllocationDeclaration energyAllocationDeclarationChange) { SimulationTurn turnToModify; if (SimulationTimeStamp.CanScheduleEnergyAllocationOnThisTurn()) { turnToModify = GetOrCreateTurn(SimulationTimeStamp.TurnNumber); } else { turnToModify = GetOrCreateTurn(SimulationTimeStamp.TurnNumber + 1); } turnToModify.EnergyAllocations[shipId] = energyAllocationDeclarationChange; }
public void SetOffensiveFire(int shipId, SimulationTimeStamp ts, OffensiveFireDeclaration offensiveFireDeclaration) { var key = new Tuple <SimulationTimeStamp, int>(ts, shipId); OffensiveFireSchedule[key] = offensiveFireDeclaration; }
public void SetDeclaredNavigation(int shipId, SimulationTimeStamp ts, DeclaredNavigation navigation) { var key = new Tuple <SimulationTimeStamp, int>(ts, shipId); NavigationSchedule[key] = navigation; }
public void AdvanceGame() { var turn = this.GetOrCreateTurn(this.SimulationTimeStamp.TurnNumber); if (this.SimulationTimeStamp.TurnStep == TurnStep.EnergyAllocation) { AllShips.ForEach(x => { if (turn.EnergyAllocations.ContainsKey(x.ShipId)) { var energyAllocation = turn.EnergyAllocations[x.ShipId]; x.ExecuteDeclaredEnergyAllocation(energyAllocation); } else { var energyAllocation = x.CreateDefaultEnergyAllocation(); x.ExecuteDeclaredEnergyAllocation(energyAllocation); } }); this.SimulationTimeStamp = SimulationTimeStamp.Increment(); return; } if (this.SimulationTimeStamp.TurnStep == TurnStep.ImpulseProcess) { if (this.SimulationTimeStamp.ImpulseStep == ImpulseStep.SpeedChange) { this.SimulationTimeStamp = SimulationTimeStamp.Increment(); return; } if (this.SimulationTimeStamp.ImpulseStep == ImpulseStep.Movement) { AllShips.ForEach(x => { var declaredNavigation = turn.ImpulseProcessActions.GetDeclaredNavigation(x.ShipId, this.SimulationTimeStamp); ExecutePlottedNavigation(x, declaredNavigation); }); this.SimulationTimeStamp = SimulationTimeStamp.Increment(); return; } if (this.SimulationTimeStamp.ImpulseStep == ImpulseStep.OffensiveFire) { var fireDeclarations = AllShips.Select(x => turn.ImpulseProcessActions.GetOffensiveFire(x.ShipId, this.SimulationTimeStamp)) .Where(x => x != null).ToList(); ExecuteSimultaneousFireDeclarations(fireDeclarations); this.SimulationTimeStamp = SimulationTimeStamp.Increment(); return; } } if (this.SimulationTimeStamp.TurnStep == TurnStep.RepairPhase) { AllShips.ForEach(x => x.RolloverExcessEnergyIntoBatteries()); AllShips.ForEach(x => x.RechargeWeapons()); this.SimulationTimeStamp = SimulationTimeStamp.Increment(); return; } }