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); }
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; }
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)); }