RaycasterTest/object_renderer.py
2023-01-28 13:40:12 +00:00

44 lines
No EOL
1.7 KiB
Python

import pygame as pg
from settings import *
class ObjectRenderer:
def __init__(self, game):
self.game = game
self.screen = self.game.screen
self.wall_textures = self.load_wall_textures()
self.sky_texture = self.get_texture('resources/textures/sky.png', (WIDTH, HALF_HEIGHT))
self.sky_offset = 0
def draw(self):
self.draw_background()
self.render_game_objects()
def draw_background(self):
# Sky
self.sky_offset = (self.sky_offset + 4.5 * self.game.player.rel) % WIDTH
self.screen.blit(self.sky_texture, (-self.sky_offset, 0))
self.screen.blit(self.sky_texture, (-self.sky_offset + WIDTH, 0))
# Ground
pg.draw.rect(self.screen, FLOOR_COLOR, (0, HALF_HEIGHT, WIDTH, HALF_HEIGHT))
def render_game_objects(self):
list_objects = sorted(self.game.raycasting.objects_to_render, key=lambda t: t[0], reverse=True)
for depth, image, pos in list_objects:
colour = [255 / (1 + depth ** 3.2 * 0.0002)] * 3
image.fill(colour, special_flags=pg.BLEND_MULT)
self.screen.blit(image, pos)
@staticmethod
def get_texture(path, res=(TEXTURE_SIZE, TEXTURE_SIZE)):
texture = pg.image.load(path).convert_alpha()
texture = pg.transform.scale(texture, res)
return texture
def load_wall_textures(self):
return {
1: self.get_texture('resources/textures/1.png'),
2: self.get_texture('resources/textures/2.png'),
3: self.get_texture('resources/textures/3.png'),
4: self.get_texture('resources/textures/4.png'),
5: self.get_texture('resources/textures/1.png'),
}