public PhysicsSystem(PhysicsLayersDescription layers) { _collisionGroups = new PhysicsCollisionGroups(layers); CollisionRules.CollisionRuleCalculator = CustomCollisionRuleCalculator; _looper = new ParallelLooper(); for (int g = 0; g < Environment.ProcessorCount - 1; g++) { _looper.AddThread(); } Space = new Space(_looper); Space.ForceUpdater.Gravity = s_defaultGravity; Space.BufferedStates.Enabled = true; Space.BufferedStates.InterpolatedStates.Enabled = true; }
public PhysicsCollisionGroups(PhysicsLayersDescription layers) { _layers = layers; int layerCount = layers.GetLayerCount(); _collisionGroupsByLayer = new CollisionGroup[layerCount]; for (int i = 0; i < layerCount; i++) { _collisionGroupsByLayer[i] = new CollisionGroup(); } for (int i = 0; i < layerCount; i++) { CollisionGroup group = _collisionGroupsByLayer[i]; for (int g = i + 1; g < layerCount; g++) { bool collides = layers.GetDoLayersCollide(i, g); if (!collides) { CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(group, _collisionGroupsByLayer[g]), CollisionRule.NoBroadPhase); } } } }
public void SetPhysicsLayerRules(PhysicsLayersDescription layers) { _collisionGroups = new PhysicsCollisionGroups(layers); }