public static void Simulate() { simulationCount--; if (simulationCount <= 0) { simulationCount = SimulationSpread; } else { return; } for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.EarlySimulate(); } } Partition.CheckAndDistributeCollisions(); for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.Simulate(); } } }
public static void Simulate() { for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.EarlySimulate(); } } Partition.CheckAndDistributeCollisions(); for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.Simulate(); } } }
public static void Simulate() { simulationCount--; if (simulationCount <= 0) { simulationCount = SimulationSpread; } else { return; } for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.EarlySimulate (); } } Partition.CheckAndDistributeCollisions (); for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.Simulate (); } } }
public static void LateSimulate() { //TODO: Look into this int inactiveFrameThreshold = LockstepManager.FrameRate * 8; for (int i = 0; i < RanCollisionPairs.PeakCount; i++) { if (RanCollisionPairs.arrayAllocation[i]) { var instancePair = RanCollisionPairs[i]; var pair = RanCollisionPairs[i].Pair; if (instancePair.Version != instancePair.Pair._Version) { //pair is removed at Deactivate so no longer possible } else { if (pair._ranIndex >= 0) { RanCollisionPairs.RemoveAt(pair._ranIndex); pair._ranIndex = -1; InactiveCollisionPairs.Add(instancePair); } } } } //Clear the buffer of collision pairs to turn off and pool while (InactiveCollisionPairs.Count > 0) { var instancePair = InactiveCollisionPairs.Peek(); var pair = instancePair.Pair; if (pair.Active) { //It's active again! Get it out of inactives and move on to the next guy. InactiveCollisionPairs.Remove(); } var passedFrames = LockstepManager.FrameCount - pair.LastFrame; if (passedFrames >= inactiveFrameThreshold) { InactiveCollisionPairs.Remove(); FullDeactivateCollisionPair(pair); } else { break; } } for (int i = 0; i < DynamicSimObjects.PeakCount; i++) { LSBody b1 = DynamicSimObjects.innerArray[i]; if (b1.IsNotNull()) { b1.Simulate(); } } ResetAccumulation = true; }
public static void Simulate() { for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.EarlySimulate (); } } Partition.CheckAndDistributeCollisions (); for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { b1 = SimObjects [i]; b1.Simulate (); } } }
public static void LateSimulate() { //2 seconds before turning off int inactiveFrameThreshold = 0; for (int i = 0; i < RanCollisionPairs.PeakCount; i++) { if (RanCollisionPairs.arrayAllocation[i]) { var instancePair = RanCollisionPairs[i]; var pair = RanCollisionPairs[i].Pair; if (instancePair.Version != instancePair.Pair._Version) { RanCollisionPairs.RemoveAt(i); pair._ranIndex = -1; } else { if (pair.LastFrame == LockstepManager.FrameCount) { } else if (pair._ranIndex >= 0) { #if false if (!RanCollisionPairs.SafeRemoveAt(pair._ranIndex, instancePair)) { Debug.Log("Removal Failed"); } #else RanCollisionPairs.RemoveAt(pair._ranIndex); #endif pair._ranIndex = -1; InactiveCollisionPairs.Add(instancePair); } } } } while (InactiveCollisionPairs.Count > 0) { var instancePair = InactiveCollisionPairs.Peek(); var pair = instancePair.Pair; if (instancePair.Version != pair._Version) { InactiveCollisionPairs.Remove(); } else { int dif = LockstepManager.FrameCount - pair.LastFrame; if (dif == 0) { InactiveCollisionPairs.Remove(); } else { if (dif >= inactiveFrameThreshold) { FullDeactivateCollisionPair(pair); InactiveCollisionPairs.Remove(); } else { break; } } } } for (int i = 0; i < DynamicSimObjects.PeakCount; i++) { LSBody b1 = DynamicSimObjects.innerArray[i]; if (b1.IsNotNull()) { b1.Simulate(); } } }
public static void Simulate() { CollisionIterationRemain = (CollisionPairCount) / CollisionIterationSpread + 1; if (CollisionIterationCount == CollisionIterationSpread) { CollisionIterationCount = 0; CollisionIterationMark = 0; } else { CollisionIterationMark += CollisionIterationRemain; } CurCount = 0; for (i = 0; i < FastCollisionPairs.Count; i++) { pair = FastCollisionPairs[i]; CurCount++; if (CollisionIterationRemain == 0 || CurCount < CollisionIterationMark) { pair.DistributeCollision(); } else { pair.CheckAndDistributeCollision(); CollisionIterationRemain--; } } if (CollisionIterationCount == 0) { for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { LSBody b1 = SimObjects [i]; b1.EarlySimulate(); if (b1.PositionChanged) { Partition.Body = b1; Partition.PartitionObject(); } b1.Simulate(); } } Partition.EstablishPartitions(); } else { for (i = 0; i < PeakCount; i++) { if (SimObjectExists [i]) { LSBody b1 = SimObjects [i]; b1.EarlySimulate(); b1.Simulate(); } } } CollisionIterationCount++; }