public static void CheckAndDistributeCollisions() { _Version++; for (i = 0; i < Count * Count; i++) { node = Nodes [i]; ListLength = node.Count; if (ListLength == 0) { continue; } for (j = 0; j < ListLength; j++) { id1 = node.innerArray [j]; for (k = j + 1; k < ListLength; k++) { id2 = node.innerArray [k]; if (id1 < id2) { pair = PhysicsManager.CollisionPairs [id1 * PhysicsManager.MaxSimObjects + id2]; } else { pair = PhysicsManager.CollisionPairs [id2 * PhysicsManager.MaxSimObjects + id1]; } if (System.Object.ReferenceEquals(null, pair) == false && (pair.PartitionVersion != _Version)) { pair.CheckAndDistributeCollision(); pair.PartitionVersion = _Version; } } } } }
public void Distribute() { int nodePeakCount = PeakCount; for (int j = 0; j < nodePeakCount; j++) { if (ContainedObjects.arrayAllocation[j]) { id1 = this[j]; for (int k = j + 1; k < nodePeakCount; k++) { if (ContainedObjects.arrayAllocation[k]) { id2 = this [k]; if (id1 < id2) { pair = PhysicsManager.CollisionPairs [id1 * PhysicsManager.MaxSimObjects + id2]; } else { pair = PhysicsManager.CollisionPairs [id2 * PhysicsManager.MaxSimObjects + id1]; } if (System.Object.ReferenceEquals(null, pair) == false && (pair.PartitionVersion != Partition._Version)) { pair.CheckAndDistributeCollision(); pair.PartitionVersion = Partition._Version; } } } } } }
void ProcessPair() { pair = PhysicsManager.GetCollisionPair(id1, id2); if (pair.IsNotNull()) { if (pair.PartitionVersion != Partition._Version) { pair.PartitionVersion = Partition._Version; pair.CheckAndDistributeCollision(); } } }
void ProcessPair() { Partition.count++; pair = PhysicsManager.GetCollisionPairRaw(id1, id2); if (pair.IsNotNull()) { //Ensures collision pairs are not run twice if (pair.PartitionVersion != Partition._Version) { pair.PartitionVersion = Partition._Version; pair.CheckAndDistributeCollision(); } } }
public void Distribute() { int nodePeakCount = PeakCount; for (int j = 0; j < nodePeakCount; j++) { id1 = ContainedObjects [j]; for (int k = j + 1; k < nodePeakCount; k++) { id2 = ContainedObjects [k]; pair = PhysicsManager.GetCollisionPair(id1, id2); if (System.Object.ReferenceEquals(null, pair) == false && (pair.PartitionVersion != Partition._Version)) { pair.CheckAndDistributeCollision(); pair.PartitionVersion = Partition._Version; } } } }
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++; }
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++; }