Exemplo n.º 1
0
        private PhysX.Shape CreateTrimeshShape(PhysX.RigidActor actor, PhysX.Material material, ref PhysX.Math.Matrix localPose)
        {
            PhysX.Shape shape = actor.CreateShape(_triMesh, material, localPose);
            shape.RestOffset = REST_OFFSET;

            return(shape);
        }
Exemplo n.º 2
0
        private void SwapGroundActor(Tuple <PhysX.RigidActor, PhysX.Shape, PhysX.TriangleMesh> groundActor)
        {
            if (_groundActor != null)
            {
                _scene.RemoveActor(_groundActor);
                _groundActor.Dispose();

                if (!_groundShape.Disposed)
                {
                    _groundShape.Dispose();
                }

                _mesh.Dispose();
            }

            _groundActor = groundActor.Item1;
            _groundShape = groundActor.Item2;
            _mesh        = groundActor.Item3;

            _groundActor.UserData = this;

            CollisionGroup.SetCollisionGroup(CollisionGroupFlag.Ground, _groundShape);

            _scene.AddActor(_groundActor);
        }
Exemplo n.º 3
0
        public static void SetCollisionGroup(CollisionGroupFlag group, PhysX.Shape shape)
        {
            PhysX.FilterData newFilterData = CollisionGroup.GetFilterData(shape.SimulationFilterData.Word0,
                                                                          shape.SimulationFilterData.Word1, group);

            shape.SimulationFilterData = newFilterData;
            shape.QueryFilterData      = newFilterData;
        }
Exemplo n.º 4
0
        private bool IsRideOnPrim(PhysX.Shape shape)
        {
            if (_standingOnPrim == null)
            {
                return(false);
            }

            PhysxPrim shapePrim = shape.Actor.UserData as PhysxPrim;

            return(IsRideOnPrim(shapePrim));
        }
Exemplo n.º 5
0
 public override PhysX.ControllerBehaviorFlag GetBehaviorFlags(PhysX.Shape shape)
 {
     if (IsRideOnPrim(shape))
     {
         return(PhysX.ControllerBehaviorFlag.CctCanRideOnObject);
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 6
0
        private PhysX.Shape CreatePrimitiveShape(PhysX.RigidActor actor, PhysX.Material material, ref PhysX.Math.Matrix localPose,
                                                 bool physical)
        {
            PhysX.Shape shape = actor.CreateShape(_primitiveGeom, material, localPose);
            shape.RestOffset = REST_OFFSET;

            if (physical && Settings.Instance.UseCCD)
            {
                //enable CCD
                shape.Flags |= PhysX.ShapeFlag.UseSweptBounds;
            }

            return(shape);
        }
Exemplo n.º 7
0
        private List <PhysX.Shape> AssignHullsToActor(PhysX.RigidActor actor, PhysX.Material material, PhysX.Math.Matrix localPose,
                                                      bool physical)
        {
            List <PhysX.Shape> hulls = new List <PhysX.Shape>();

            foreach (PhysX.ConvexMeshGeometry geom in _convexHulls)
            {
                PhysX.Shape shape = actor.CreateShape(geom, material, localPose);
                shape.RestOffset = REST_OFFSET;

                if (physical && Settings.Instance.UseCCD)
                {
                    //enable CCD
                    shape.Flags |= PhysX.ShapeFlag.UseSweptBounds;
                }

                hulls.Add(shape);
            }

            return(hulls);
        }
Exemplo n.º 8
0
        private void SwapGroundActor(Tuple<PhysX.RigidActor, PhysX.Shape, PhysX.TriangleMesh> groundActor)
        {
            if (_groundActor != null)
            {
                _scene.RemoveActor(_groundActor);
                _groundActor.Dispose();

                if (!_groundShape.Disposed)
                {
                    _groundShape.Dispose();
                }

                _mesh.Dispose();
            }

            _groundActor = groundActor.Item1;
            _groundShape = groundActor.Item2;
            _mesh = groundActor.Item3;

            _groundActor.UserData = this;

            CollisionGroup.SetCollisionGroup(CollisionGroupFlag.Ground, _groundShape);

            _scene.AddActor(_groundActor);
        }
Exemplo n.º 9
0
        private void GenerateActorsFromTrimesh(PhysX.TriangleMeshGeometry triangleMeshShapeDesc, out PhysX.RigidActor hfActor, out PhysX.Shape shape)
        {
            //PhysX.Math.Matrix.RotationYawPitchRoll(0f, (float)Math.PI / 2, 0f) * PhysX.Math.Matrix.Translation(0f, 0f, 0f)

            //PhysX.RigidDynamic dynActor = _scene.Physics.CreateRigidDynamic();
            //dynActor.Flags |= PhysX.RigidDynamicFlags.Kinematic;
            //hfActor = dynActor;

            hfActor = _scene.Physics.CreateRigidStatic();

            shape = hfActor.CreateShape(triangleMeshShapeDesc, Material.GROUND.PhyMaterial);
        }
Exemplo n.º 10
0
        private void GenerateActorsFromMeshStream(Stream ms, out PhysX.TriangleMesh triangleMesh, out PhysX.RigidActor hfActor, out PhysX.Shape shape)
        {
            triangleMesh = _scene.Physics.CreateTriangleMesh(ms);
            PhysX.TriangleMeshGeometry triangleMeshShapeDesc = new PhysX.TriangleMeshGeometry(triangleMesh);

            GenerateActorsFromTrimesh(triangleMeshShapeDesc, out hfActor, out shape);
        }