Ejemplo n.º 1
0
        public void ScheduleOffensiveFire(int shipId, OffensiveFireDeclaration offensiveFireDeclaration)
        {
            var nextFiringOpportunity = SimulationTimeStamp.GetNextFiringOppporunity();
            var turnToModify          = GetOrCreateTurn(nextFiringOpportunity.TurnNumber);

            turnToModify.ImpulseProcessActions.SetOffensiveFire(shipId, nextFiringOpportunity, offensiveFireDeclaration);
        }
Ejemplo n.º 2
0
 public SimulationTimeStampBuilder(SimulationTimeStamp ts)
 {
     TurnNumber  = ts.TurnNumber;
     TurnStep    = ts.TurnStep;
     ImpulseStep = ts.ImpulseStep;
     Impulse     = ts.Impulse;
     SubPulse    = ts.SubPulse;
 }
Ejemplo n.º 3
0
        public OffensiveFireDeclaration GetOffensiveFire(int shipId, SimulationTimeStamp ts)
        {
            var key = new Tuple <SimulationTimeStamp, int>(ts, shipId);

            if (OffensiveFireSchedule.ContainsKey(key))
            {
                return(OffensiveFireSchedule[key]);
            }

            return(null);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        public void SetOffensiveFire(int shipId, SimulationTimeStamp ts, OffensiveFireDeclaration offensiveFireDeclaration)
        {
            var key = new Tuple <SimulationTimeStamp, int>(ts, shipId);

            OffensiveFireSchedule[key] = offensiveFireDeclaration;
        }
Ejemplo n.º 7
0
        public void SetDeclaredNavigation(int shipId, SimulationTimeStamp ts, DeclaredNavigation navigation)
        {
            var key = new Tuple <SimulationTimeStamp, int>(ts, shipId);

            NavigationSchedule[key] = navigation;
        }
Ejemplo n.º 8
0
        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;
            }
        }