public void RenderTicksetsAreExecutedInOrderCreated(int ticksetCount) { // Create tick system with render ticksets CoreTickSystemConfigData coreTickConfigData = TickSystemConstructionUtility.BlankCoreTickSystemConfigData(); coreTickConfigData.renderTicksets = new TicksetConfigData[ticksetCount]; for (int i = 0; i < ticksetCount; i++) { coreTickConfigData.renderTicksets[i] = new TicksetConfigData { ticksetName = i.ToString() }; } new CoreTick(coreTickConfigData); // Create clients in order DemoOrderedRenderTickClient.tickOrderCounter = 0; DemoOrderedRenderTickClient[] clients = new DemoOrderedRenderTickClient[coreTickConfigData.renderTicksets.Length]; for (int i = 0; i < clients.Length; i++) { clients[i] = new DemoOrderedRenderTickClient(coreTickConfigData.renderTicksets[i], i); } // Tick Core.Tick.OnUpdate(0.0334f); // Client tick indices should match their tick keys foreach (var c in clients) { Assert.AreEqual(c.targetOrder, c.thisOrderedEntryResult, "Render ticksets are not executing in the order they were created."); } }
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; } } }
/// <summary> /// Returns tick system config data with null simulation tick data /// </summary> /// <returns></returns> public static CoreTickSystemConfigData TickSystemDataWithNullSimulationTicks() { CoreTickSystemConfigData data = new CoreTickSystemConfigData { renderTicksets = BlankTicksetGroup(), simulationTicks = null }; return(data); }
/// <summary> /// Creates a blank set of tick system config data for testing purposes (NOT NULL). /// </summary> /// <returns></returns> public static CoreTickSystemConfigData BlankCoreTickSystemConfigData() { CoreTickSystemConfigData data = new CoreTickSystemConfigData { renderTicksets = BlankTicksetGroup(), simulationTicks = BlankSimulationTickDataGroup() }; return(data); }
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!"); }
public void RenderTickDoesInitializeWithCorrectNumberOfTicksets(int additionalTicksets) { // Construct data with additoinal render ticksets CoreTickSystemConfigData coreTickConfigData = TickSystemConstructionUtility.BlankCoreTickSystemConfigData(); coreTickConfigData.renderTicksets = new TicksetConfigData[additionalTicksets]; for (int i = 0; i < additionalTicksets; i++) { coreTickConfigData.renderTicksets[i] = new TicksetConfigData { ticksetName = "testTick_" + i }; } var _ = new CoreTick(coreTickConfigData); // Total render ticksets should be equal to addtional ticksets plus 1 (the default tickset) Assert.AreEqual(additionalTicksets + 1, Core.Tick.renderTick.ticksets.Count, "Render tickset count is not correct!"); }