public void SimulationTicksDoFireAtCorrectIntervalsRelativeToRenderTick(float mockTickrate) { // Create new tick core system, override with custom simulation tick CoreTickSystemConfigData coreTickConfigData = TickSystemConstructionUtility.BlankCoreTickSystemConfigData(); coreTickConfigData.simulationTicks = TickSystemConstructionUtility.SimulationTickDataGroup( 1, 1, mockTickrate, float.MaxValue); var _ = new CoreTick(coreTickConfigData); // Create simulation tick instance DemoSimulationTickClientIntervalsTest simTick = new DemoSimulationTickClientIntervalsTest(); Core.Tick.Register(simTick); Random r = new Random(); float elapsedSinceLastTick = 0; for (int i = 0; i < 100; i++) { // Tick float mockDelta = (float)r.NextDouble(); Core.Tick.OnUpdate(mockDelta); elapsedSinceLastTick += mockDelta; // Collect target ticks int targetTicks = 0; float mockSimAccumulator = elapsedSinceLastTick; while (mockSimAccumulator >= mockTickrate) { mockSimAccumulator -= mockTickrate; targetTicks++; } elapsedSinceLastTick = mockSimAccumulator; // Detect ticks if (simTick.ticksSinceLastCheck < targetTicks) { Assert.Fail( "Simulation tick client is not ticking enough based on render tickrate: " + "TARGET: " + targetTicks + " RESULT: " + simTick.ticksSinceLastCheck); } else if (simTick.ticksSinceLastCheck > targetTicks) { Assert.Fail( "Simulation tick client is ticking too frequently based on render tickrate: " + "TARGET: " + targetTicks + " RESULT: " + simTick.ticksSinceLastCheck); } else { simTick.ticksSinceLastCheck = 0; } } }
public void SimulationTicksetsAreExecutedInOrderCreated(int ticks, int ticksetsPerTick) { // Tick data const float tRate = 0.035f; const float tMax = 0.05f; // Construct data with additional simulation ticks/ticksets CoreTickSystemConfigData coreTickConfigData = TickSystemConstructionUtility.BlankCoreTickSystemConfigData(); coreTickConfigData.simulationTicks = TickSystemConstructionUtility.SimulationTickDataGroup( ticks, ticksetsPerTick, tRate, tMax); new CoreTick(coreTickConfigData); // Create clients in order DemoOrderedSimulationTickClient.tickOrderCounter = 0; List <DemoOrderedSimulationTickClient> clients = new List <DemoOrderedSimulationTickClient>(); int count = 0; for (int i = 0; i < coreTickConfigData.simulationTicks.Length; i++) { for (int e = 0; e < coreTickConfigData.simulationTicks[i].ticksets.Length; e++) { clients.Add(new DemoOrderedSimulationTickClient( coreTickConfigData.simulationTicks[i].ticksets[e], count)); count++; } } // Tick; make sure the delta is long enough to tick simulation float diff = tMax - tRate; Core.Tick.OnUpdate(tMax - (diff / 2)); // Client tick indices should match their tick keys foreach (var c in clients) { Assert.AreEqual(c.targetOrder, c.thisOrderedEntryResult, "Simulation ticksets are not executing in the order they were created."); } }
public void SimulationTicksDoInitializeWithCorrectNumberOfTicksets(int ticks, int ticksetsPerTick) { // Construct data with additional simulation ticks/ticksets CoreTickSystemConfigData coreTickConfigData = TickSystemConstructionUtility.BlankCoreTickSystemConfigData(); coreTickConfigData.simulationTicks = TickSystemConstructionUtility.SimulationTickDataGroup(ticks, ticksetsPerTick); var _ = new CoreTick(coreTickConfigData); // Total simulation ticksets should be equal to ticks + ticksets per (simulation ticks have no defaults) int count = 0; foreach (var tick in Core.Tick.simulationTicks) { count += tick.ticksets.Count; } Assert.AreEqual(ticks * ticksetsPerTick, count, "Simulation tickset count is not correct!"); }