public void HandleMovementRequest( MovementXzRequest request )
        {
            Environment.Environment env = m_Scene.Objects.GetFirstOfType< Environment.Environment >( );
            IEnvironmentCollisions collisions = env.EntityCollisions;

            Vector3 move = new Vector3( request.DeltaX, 0, request.DeltaZ );
            Collision col = collisions.CheckMovement( Travel.EndPosition, move );
            if ( col == null )
            {
                Travel.EndPosition += move;
            }
            else
            {
                //	Slide...
                Point3 stopPt = col.CollisionPoint + col.CollisionNormal * 0.1f;
                Point3 slidePt = stopPt;

                Vector3 perpCollisionNormal = new Vector3( col.CollisionNormal.Z, col.CollisionNormal.Y, -col.CollisionNormal.X );

                float dp = move.MakeNormal( ).Dot( perpCollisionNormal );
                float slideBias = 0.4f;
                float mod = ( dp < 0 ) ? -Functions.Pow( -dp, slideBias ) : Functions.Pow( dp, slideBias );
                slidePt += perpCollisionNormal * ( move.Length * ( 1 - col.T ) * mod );

                if ( !collisions.IsPointInObstacle( slidePt ) )
                {
                    Travel.EndPosition = slidePt;
                }
                else
                {
                    Travel.EndPosition = stopPt;
                }
            }
        }
 public void HandleMovement( MovementXzRequest movement )
 {
     NextPosition += new Vector3( movement.DeltaX, 0, movement.DeltaZ );
 }