moved render stuff
This commit is contained in:
parent
733c6ec30e
commit
5b2a68ff2c
6 changed files with 109 additions and 100 deletions
84
game/render.py
Normal file
84
game/render.py
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
"""All rendering stuff"""
|
||||
|
||||
|
||||
from tcod.sdl.video import new_window
|
||||
from tcod.console import Console
|
||||
from tcod.sdl.video import WindowFlags, Window
|
||||
from tcod.render import SDLConsoleRender, SDLTilesetAtlas
|
||||
from tcod.sdl.render import new_renderer, TextureAccess, Renderer, Texture
|
||||
from tcod.tileset import Tileset
|
||||
from tcod.event import Event, MouseState
|
||||
|
||||
import g
|
||||
|
||||
|
||||
class Renderer():
|
||||
foreground: Console
|
||||
"""The foreground console"""
|
||||
background: Console
|
||||
"""The background console"""
|
||||
console_render1: SDLConsoleRender
|
||||
console_render2: SDLConsoleRender
|
||||
"""The console renderer"""
|
||||
|
||||
sdl_window: Window
|
||||
"""The SDL window"""
|
||||
sdl_renderer: Renderer
|
||||
"""The SDL renderer"""
|
||||
target_texture: Texture
|
||||
"""The final texture that is rendered"""
|
||||
atlas: SDLTilesetAtlas
|
||||
"""The tileset atlas"""
|
||||
tileset: Tileset
|
||||
"""The tileset to use"""
|
||||
|
||||
def __init__(self, w, h, tileset):
|
||||
self.background = Console(w, h)
|
||||
self.foreground = Console(w, h)
|
||||
self.tileset = tileset
|
||||
w, h = self.background.width * tileset.tile_width, self.background.height * tileset.tile_height
|
||||
self.sdl_window = new_window(w,h, flags=WindowFlags.RESIZABLE)
|
||||
|
||||
self.sdl_renderer = new_renderer(self.sdl_window, target_textures=True)
|
||||
self.target_texture = self.sdl_renderer.new_texture(w, h, access=TextureAccess.TARGET)
|
||||
self.atlas = SDLTilesetAtlas(self.sdl_renderer, self.tileset)
|
||||
|
||||
self.console_render1 = SDLConsoleRender(atlas=self.atlas)
|
||||
self.console_render2 = SDLConsoleRender(atlas=self.atlas)
|
||||
|
||||
def main_draw(self) -> None:
|
||||
"""Render and present the active screen."""
|
||||
if not g.screens:
|
||||
return
|
||||
self.background.clear()
|
||||
self.foreground.clear()
|
||||
self.foreground.rgba["bg"][:] = 0
|
||||
self.foreground.rgba["fg"][:] = 0
|
||||
g.screens[-1].on_draw()
|
||||
|
||||
bg_tex = self.console_render1.render(self.background)
|
||||
bg_tex.blend_mode = 1
|
||||
|
||||
fg_tex = self.console_render2.render(self.foreground)
|
||||
fg_tex.blend_mode = 1
|
||||
|
||||
with self.sdl_renderer.set_render_target(self.target_texture):
|
||||
self.sdl_renderer.clear()
|
||||
self.sdl_renderer.copy(bg_tex)
|
||||
self.sdl_renderer.copy(fg_tex)
|
||||
|
||||
self.sdl_renderer.copy(self.target_texture)
|
||||
self.sdl_renderer.present()
|
||||
|
||||
def convert_event(self, event: Event):
|
||||
match event:
|
||||
case MouseState(position=pos):
|
||||
width, height = self.tileset.tile_width, self.tileset.tile_height
|
||||
event.position = (pos[0]//width, pos[1]//height)
|
||||
return event
|
||||
|
||||
def dim(self):
|
||||
self.foreground.rgb["fg"] //= 4
|
||||
self.foreground.rgb["bg"] //= 4
|
||||
self.background.rgb["fg"] //= 4
|
||||
self.background.rgb["bg"] //= 4
|
||||
Loading…
Add table
Add a link
Reference in a new issue