示例#1
0
        int obj_find_wall(float objNewX, float objY, float objNewZ, float objVelX, float objVelZ)
        {
            List <TriangleDataModel> wallTris = CellSnapshot.GetTrianglesAtPosition(objNewX, objNewZ, true, TriangleClassification.Wall);
            int numCollisions = WallDisplacementCalculator.GetNumWallCollisions(
                objNewX, objY, objNewZ, wallTris, 60, 50);

            return(numCollisions > 0 ? 0 : 1);
        }
示例#2
0
        private static void perform_ground_quarter_step(
            MutableMarioState marioState, float intendedPosX, float intendedPosY, float intendedPosZ,
            TriangleDataModel floor, List <TriangleDataModel> walls)
        {
            (intendedPosX, intendedPosZ) =
                WallDisplacementCalculator.HandleWallDisplacement(
                    intendedPosX, intendedPosY, intendedPosZ, walls, 50, 60);

            float floorHeight = floor.GetTruncatedHeightOnTriangle(intendedPosX, intendedPosZ);

            marioState.X = intendedPosX;
            marioState.Y = floorHeight;
            marioState.Z = intendedPosZ;
        }
示例#3
0
        public static MarioState AirMove(MarioState initialState, int numQSteps = 4, List <TriangleDataModel> wallTris = null, List <MarioState> quarterSteps = null, bool resetHSpeedOnWalls = false)
        {
            bool resetHSpeed = false;

            float newX = initialState.X;
            float newY = initialState.Y;
            float newZ = initialState.Z;

            if (wallTris != null)
            {
                bool collidedWithWall;
                (newX, newZ, collidedWithWall) = WallDisplacementCalculator.HandleWallDisplacement2(newX, newY, newZ, wallTris, 50, 60);
                if (collidedWithWall && resetHSpeedOnWalls)
                {
                    resetHSpeed = true;
                }
            }

            for (int i = 0; i < numQSteps; i++)
            {
                newX += initialState.XSpeed / 4;
                newY += initialState.YSpeed / 4;
                newZ += initialState.ZSpeed / 4;

                if (wallTris != null)
                {
                    bool collidedWithWall1;
                    bool collidedWithWall2;
                    (newX, newZ, collidedWithWall1) = WallDisplacementCalculator.HandleWallDisplacement2(newX, newY, newZ, wallTris, 50, 150);
                    (newX, newZ, collidedWithWall2) = WallDisplacementCalculator.HandleWallDisplacement2(newX, newY, newZ, wallTris, 50, 30);
                    if (collidedWithWall1 && resetHSpeedOnWalls)
                    {
                        resetHSpeed = true;
                    }
                    if (collidedWithWall2 && resetHSpeedOnWalls)
                    {
                        resetHSpeed = true;
                    }
                }

                if (quarterSteps != null)
                {
                    quarterSteps.Add(
                        new MarioState(
                            newX,
                            newY,
                            newZ,
                            initialState.XSpeed,
                            initialState.YSpeed,
                            initialState.ZSpeed,
                            initialState.HSpeed,
                            initialState.SlidingSpeedX,
                            initialState.SlidingSpeedZ,
                            initialState.SlidingAngle,
                            initialState.MarioAngle,
                            initialState.CameraAngle,
                            initialState.PreviousState,
                            initialState.LastInput,
                            initialState.Index));
                }
            }

            return(new MarioState(
                       newX,
                       newY,
                       newZ,
                       initialState.XSpeed,
                       initialState.YSpeed,
                       initialState.ZSpeed,
                       resetHSpeed ? 0 : initialState.HSpeed,
                       initialState.SlidingSpeedX,
                       initialState.SlidingSpeedZ,
                       initialState.SlidingAngle,
                       initialState.MarioAngle,
                       initialState.CameraAngle,
                       initialState.PreviousState,
                       initialState.LastInput,
                       initialState.Index));
        }