示例#1
0
        public IntPtr AddCharacterController(PxCapsuleController controller)
        {
            IntPtr controllerPtr = Physics.AddCharacterController(this.scenePtr, controller);

            this.Colliders.Add(controllerPtr, controller);
            return(controllerPtr);
        }
示例#2
0
        public void OnHitShape(IntPtr controllerPtr, IntPtr colliderPtr)
        {
            NLog.Log.Assert(this.Colliders.TryGetValue(controllerPtr, out PxCollider collider));
            NLog.Log.Assert(this.Colliders.TryGetValue(colliderPtr, out PxCollider targetCollider));
            PxCapsuleController controller = collider as PxCapsuleController;

            controller.HitReport.OnHitShape(targetCollider);
        }
示例#3
0
        public bool OnFilterWorld(IntPtr p1, IntPtr p2)
        {
            this.Colliders.TryGetValue(p1, out PxCollider collider1);
            this.Colliders.TryGetValue(p2, out PxCollider collider2);
            PxCapsuleController controller1 = collider1 as PxCapsuleController;

            if (controller1.IsFilterEnabled && controller1.Filter != null)
            {
                return(controller1.Filter.OnFilterWorld(collider2));
            }
            return(true);
        }
示例#4
0
        public bool OnFilterController(IntPtr p1, IntPtr p2)
        {
            this.Colliders.TryGetValue(p1, out PxCollider collider1);
            this.Colliders.TryGetValue(p2, out PxCollider collider2);
            PxCapsuleController controller1 = collider1 as PxCapsuleController;
            PxCapsuleController controller2 = collider2 as PxCapsuleController;

            if (!controller2.CanQuery)
            {
                return(false);
            }

            if (controller1.IsFilterEnabled && controller1.Filter != null)
            {
                return(controller1.Filter.OnFilterController(controller2));
            }
            return(true);
        }
示例#5
0
        public static IntPtr AddCharacterController(IntPtr scene, PxCapsuleController controller)
        {
            PhysXDll.OnFilterCallback filterWorld      = null;
            PhysXDll.OnFilterCallback filterController = null;

            PhysXDll.OnHitCallback hitShape      = null;
            PhysXDll.OnHitCallback hitController = null;

            if (controller.Filter != null)
            {
                filterWorld      = onFilterWorld;
                filterController = onFilterController;
            }

            if (controller.HitReport != null)
            {
                hitShape      = onHitShape;
                hitController = onHitController;
            }

            return(PhysXDll.AddCharacterController(scene, controller.ControllerData,
                                                   filterWorld, filterController, hitShape, hitController));
        }