Exemple #1
0
        public bool PointRaycast(PhysicsObject me, Vector3 origin, Vector3 direction, float maxDist, out Vector3 contactPoint, out PhysicsObject didHit)
        {
            contactPoint = Vector3.Zero;
            didHit       = null;
            ClosestRayResultCallback cb;
            var from = origin.Cast();
            var to   = (origin + direction * maxDist).Cast();

            if (me != null)
            {
                cb = new KinematicClosestNotMeRayResultCallback(me.RigidBody);
                cb.RayFromWorld = from;
                cb.RayToWorld   = to;
            }
            else
            {
                cb = new ClosestRayResultCallback(ref from, ref to);
            }
            using (cb)
            {
                btWorld.RayTestRef(ref from, ref to, cb);
                if (cb.HasHit)
                {
                    didHit       = cb.CollisionObject.UserObject as PhysicsObject;
                    contactPoint = cb.HitPointWorld.Cast();
                    return(true);
                }
                return(false);
            }
        }
Exemple #2
0
        new void Update()
        {
            var rayCalback = new KinematicClosestNotMeRayResultCallback(_ghostObject);

            rayCalback.CollisionFilterMask  = (int)CollisionFilleters.Look;
            rayCalback.CollisionFilterGroup = (int)CollisionFilleters.Look;
            //var test1 = Vector3.Cross(new Vector3(-6.84475f, 1.5930859f, 11.550375f) -  camera.GetPos, (camera.GetLook * 10 * -Vector4.UnitZ).Xyz);
            //Console.WriteLine("{0} {1} {2}", camera.GetPos.Convert(), (camera.GetLook * 10 * -Vector4.UnitZ).Xyz.Convert(), test1.Length / (camera.GetLook * 10 * -Vector4.UnitZ).Xyz.Length);
            world.RayTest(camera.GetPos.Convert(), (camera.GetLook * 10 * new Vector4(0, 0, -1, 1)).Xyz.Convert(), rayCalback);
            if (rayCalback.HasHit)
            {
                // Console.WriteLine("Hit ON {0}",rayCalback.HitNormalWorld);
                if (rayCalback.CollisionObject.UserIndex == 1)
                {
                    if (activeObject != rayCalback.CollisionObject)
                    {
                        activeObject = rayCalback.CollisionObject;
                        lookCallback?.Invoke(null);
                        lookCallback = (Action <SceneNode>)activeObject.UserObject;
                    }
                    lookCallback(camera.Node);
                }
            }

            /*
             * else if (activeObject != null)
             * {
             *  //reset look
             *  lookCallback(Vector3.Zero);
             *  lookCallback = null;
             *  activeObject = null;
             * }
             */

            var keyState = GLWindow.gLWindow.KeyboardState;

            if (game.IsFocused && keyState.IsKeyDown(Keys.Up))
            {
                Walk(-Vector3.UnitZ);
            }
            else if (game.IsFocused && keyState.IsKeyDown(Keys.Down))
            {
                Walk(Vector3.UnitZ);
            }
            else if (game.IsFocused && keyState.IsKeyDown(Keys.Left))
            {
                Walk(-Vector3.UnitX);
            }
            else if (game.IsFocused && keyState.IsKeyDown(Keys.Right))
            {
                Walk(Vector3.UnitX);
            }
            else if (game.IsFocused && keyState.IsKeyDown(Keys.Space))
            {
                Jump();
            }
            else
            {
                Stop();
            }

            base.Update();
        }