Esempio n. 1
0
        public float LineTriangle(Primatives.Triangle Triangle, Primatives.Line Line)
        {
            float x = -Vector3.Dot((Line.Vertices[0] - Triangle.Vertices[0]), Triangle.Normal) / Vector3.Dot(Line.Vertices[1] - Line.Vertices[0], Triangle.Normal);

            if (x < 0 || x > 1)
            {
                return(-1);
            }
            else
            {
                Vector3 intersection = Line.Vertices[0] + x * Vector3.Normalize(Line.Vertices[1] - Line.Vertices[0]);
                if (PointInTriangle(intersection, Triangle.Vertices[0], Triangle.Vertices[1], Triangle.Vertices[2]))
                {
                    return(x);
                }
                else
                {
                    return(-1);
                }
            }
        }
Esempio n. 2
0
        /// <param name="State">0 - standing, 1 - walking, 2 running, 3 - sprinting</param>
        /// <param name="MoveDirection">The Direction the player is moving as a Vector2, eg. a for a player running forwards, use Vector2.Forward</param>

        public void Update(Vector2 MoveDirection, int State, bool Jump)
        {
            if (Jump == false)
            {
                wasJumping = false;
            }

            switch (State)
            {
            case 0:
                speed *= 0.8f;
                break;

            case 1:
                speed += (walkSpeed - speed) * 0.8f;
                break;

            case 2:
                speed += (runSpeed - speed) * 0.8f;
                break;

            case 3:
                speed += (sprintSpeed - speed) * 0.8f;
                break;
            }

            oldPosition = position;

            velocity.X  = MoveDirection.X * speed;
            velocity.Z  = MoveDirection.Y * speed;
            velocity.Y += Gravity;

            position += Vector3.Transform(Velocity, Matrix.CreateRotationY(rotation));

            intersection = new Intersection();

            Primatives.Line Line = new Primatives.Line(position - boundingBoxSize.Y * Vector3.UnitY / 2, position + boundingBoxSize.Y * Vector3.UnitY / 2);

            Stack <Primatives.Triangle> triangles = world.OctMesh(Line.Vertices[0]);

            //for (int i = 0; i < world.Mesh.Triangles.Length; i++)
            foreach (Primatives.Triangle triangle in triangles)
            {
                float intersectionPoint = intersection.LineTriangle(triangle, Line);
                if (intersectionPoint != -1)
                {
                    velocity.Y = 0f;
                    if (intersectionPoint < 0.3f)
                    {
                        position.Y += intersectionPoint * boundingBoxSize.Y;
                        if (Jump == true && wasJumping == false)
                        {
                            velocity.Y = jumpVelocity;
                            wasJumping = true;
                        }
                    }
                    else
                    {
                        position = oldPosition;
                    }
                }
            }
        }
Esempio n. 3
0
        /// <param name="State">0 - standing, 1 - walking, 2 running, 3 - sprinting</param>
        /// <param name="MoveDirection">The Direction the player is moving as a Vector2, eg. a for a player running forwards, use Vector2.Forward</param>
        public void Update(Vector2 MoveDirection, int State, bool Jump)
        {
            if (Jump == false)
                wasJumping = false;

            switch (State)
            {
                case 0:
                    speed *= 0.8f;
                    break;
                case 1:
                    speed += (walkSpeed - speed) * 0.8f;
                    break;
                case 2:
                    speed += (runSpeed - speed) * 0.8f;
                    break;
                case 3:
                    speed += (sprintSpeed - speed) * 0.8f;
                    break;
            }

            oldPosition = position;

            velocity.X = MoveDirection.X * speed;
            velocity.Z = MoveDirection.Y * speed;
            velocity.Y += Gravity;

            position += Vector3.Transform(Velocity, Matrix.CreateRotationY(rotation));

            intersection = new Intersection();

                Primatives.Line Line = new Primatives.Line(position - boundingBoxSize.Y * Vector3.UnitY / 2, position + boundingBoxSize.Y * Vector3.UnitY / 2);

                Stack<Primatives.Triangle> triangles = world.OctMesh(Line.Vertices[0]);

                //for (int i = 0; i < world.Mesh.Triangles.Length; i++)
                foreach(Primatives.Triangle triangle in triangles)
                {
                    float intersectionPoint = intersection.LineTriangle(triangle, Line);
                    if (intersectionPoint != -1)
                    {
                        velocity.Y = 0f;
                        if (intersectionPoint < 0.3f)
                        {
                            position.Y += intersectionPoint * boundingBoxSize.Y;
                            if (Jump == true && wasJumping == false)
                            {
                                velocity.Y = jumpVelocity;
                                wasJumping = true;
                            }
                        }
                        else
                        {
                            position = oldPosition;
                        }
                    }
                }
        }