Exemple #1
0
        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;
        }
Exemple #2
0
        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);
                    }
                }
            }
        }
Exemple #3
0
 public void SetPhysicsLayerRules(PhysicsLayersDescription layers)
 {
     _collisionGroups = new PhysicsCollisionGroups(layers);
 }