This commit is contained in:
Daniele Verducci (Slimpenguin) 2023-01-11 10:36:01 +01:00
parent 2e650bae26
commit ef80c7d091

View File

@ -31,9 +31,9 @@ TEXTURES = [
TEXTURE_SIZE = 64 TEXTURE_SIZE = 64
# Raycast cfg # Raycast cfg
RAYCAST_WIN_WIDTH = 1000 RAYCAST_WIN_WIDTH = 600
RAYCAST_WIN_HEIGHT = 1000 RAYCAST_WIN_HEIGHT = 600
RAYCAST_RESOLUTION_SCALING = 1 RAYCAST_RESOLUTION_SCALING = 4
RAYCAST_RENDER_WIDTH = int(RAYCAST_WIN_WIDTH / RAYCAST_RESOLUTION_SCALING) RAYCAST_RENDER_WIDTH = int(RAYCAST_WIN_WIDTH / RAYCAST_RESOLUTION_SCALING)
RAYCAST_RENDER_HEIGHT = int(RAYCAST_WIN_HEIGHT / RAYCAST_RESOLUTION_SCALING) RAYCAST_RENDER_HEIGHT = int(RAYCAST_WIN_HEIGHT / RAYCAST_RESOLUTION_SCALING)
DOF = 2*MAP_SIZE # Depth Of Field DOF = 2*MAP_SIZE # Depth Of Field
@ -84,6 +84,9 @@ MAP = [
class Main: class Main:
def __init__(self): def __init__(self):
# Print instructions
print('RAYCASTER by penguin86\n\nMovement: up, down, left, right\nOpen door: space\n\nFPS:')
# Check valid map # Check valid map
if len(MAP) != MAP_SIZE * MAP_SIZE: if len(MAP) != MAP_SIZE * MAP_SIZE:
raise ValueError("Map size is {}, but should be a power of {}".format(len(MAP), MAP_SIZE)) raise ValueError("Map size is {}, but should be a power of {}".format(len(MAP), MAP_SIZE))
@ -153,6 +156,10 @@ class Main:
if self.player_position["r"] < 0: if self.player_position["r"] < 0:
self.player_position["r"] = 2*math.pi self.player_position["r"] = 2*math.pi
# Open doors
if keystate[sdl2.SDL_SCANCODE_SPACE]:
self.openDoor()
self.draw() self.draw()
if not MAP_HIDDEN: if not MAP_HIDDEN:
self.mapWindow.refresh() self.mapWindow.refresh()
@ -419,6 +426,37 @@ class Main:
converted.append(pixels[i+2] + (pixels[i+1] << 8) + (pixels[i] << 16)) # BGR converted.append(pixels[i+2] + (pixels[i+1] << 8) + (pixels[i] << 16)) # BGR
return converted return converted
def openDoor(self):
# Opens a door near the user
# Works by modifying the map (removing the door)
# Find where is the user
mapX = int(self.player_position["x"] / MAP_SCALE)
mapY = int(self.player_position["y"] / MAP_SCALE)
mapArrayPosition = mapY * MAP_SIZE + mapX
# Find in which direction the user is looking
playerAngle = self.player_position["r"]
lookingAtMapArrayPosition = 0
if playerAngle > math.pi / 4 and playerAngle <= 3 * math.pi / 4:
# Looking up
lookingAtMapArrayPosition = mapArrayPosition - MAP_SIZE
elif playerAngle > 3 * math.pi / 4 and playerAngle <= 5 * math.pi / 4:
# Looking left
lookingAtMapArrayPosition = mapArrayPosition - 1
elif playerAngle > 5 * math.pi / 4 and playerAngle <= 7 * math.pi / 4:
# Looking down
lookingAtMapArrayPosition = mapArrayPosition + MAP_SIZE
else:
# Looking right
lookingAtMapArrayPosition = mapArrayPosition + 1
if MAP[lookingAtMapArrayPosition] == MAP_DOOR_CELL_TYPE:
# Player looking at a door: open it ("remove" it, leaving an empty space)
MAP[lookingAtMapArrayPosition] = 0
else:
print("Player looking at cell #{} of type {}: nothing to do".format(lookingAtMapArrayPosition, MAP[lookingAtMapArrayPosition]))
if __name__ == '__main__': if __name__ == '__main__':