diff --git a/g.py b/g.py index 27e786a..3004c7e 100644 --- a/g.py +++ b/g.py @@ -24,6 +24,12 @@ screens: list[Screen] = [] console: tcod.console.Console """The current main console.""" +foreground: tcod.console.Console +"""The foreground console""" + +background: tcod.console.Console +"""The background console""" + tileset: tcod.tileset.Tileset """The tileset to use""" diff --git a/game/screens/__init__.py b/game/screens/__init__.py index 79a5498..bfbb516 100644 --- a/game/screens/__init__.py +++ b/game/screens/__init__.py @@ -50,10 +50,16 @@ def main_draw() -> None: """Render and present the active screen.""" if not g.screens: return - g.console.clear() - g.screens[-1].on_draw(g.console) + g.background.clear() + g.foreground.clear() + g.screens[-1].on_draw(g.background) # g.context.present(g.console) - g.sdl_renderer.copy(g.console_render.render(g.console)) + + g.sdl_renderer.copy(g.console_render.render(g.background)) + + # g.sdl_renderer.copy(g.console_render.render(g.foreground)) + g.foreground.blit(g.background, fg_alpha=1.0, bg_alpha=0.0) + g.sdl_renderer.copy(g.console_render.render(g.background)) g.sdl_renderer.present() diff --git a/game/screens/game_screens.py b/game/screens/game_screens.py index eb2445d..96997b5 100644 --- a/game/screens/game_screens.py +++ b/game/screens/game_screens.py @@ -62,7 +62,7 @@ def _draw_entity(entity: tcod.ecs.Entity, camera_pos, camera_radius_x, camera_ra map_pos = world_pos_to_map_pos(pos) if g.world[None].components[Map].fov[map_pos.y, map_pos.x]: graphic = entity.components[Graphic] - g.console.rgb[["ch", "fg"]][screen_pos.y + camera_radius_y, screen_pos.x + camera_radius_x] = graphic.ch, graphic.fg + g.foreground.rgb[["ch", "fg"]][screen_pos.y + camera_radius_y, screen_pos.x + camera_radius_x] = graphic.ch, graphic.fg @attrs.define() diff --git a/main.py b/main.py index 8a59ea8..23690db 100755 --- a/main.py +++ b/main.py @@ -18,10 +18,11 @@ def main() -> None: #tcod.tileset.procedural_block_elements(tileset=tileset) g.screens = [MainMenu()] - g.console = tcod.console.Console(80, 35) + g.background = tcod.console.Console(80, 35) + g.foreground = tcod.console.Console(80, 35) g.sdl_window = tcod.sdl.video.new_window( - g.console.width * g.tileset.tile_width, - g.console.height * g.tileset.tile_height, + g.background.width * g.tileset.tile_width, + g.background.height * g.tileset.tile_height, flags=tcod.lib.SDL_WINDOW_RESIZABLE, ) @@ -30,7 +31,7 @@ def main() -> None: g.console_render = tcod.render.SDLConsoleRender(atlas=g.atlas) - with tcod.context.new(console=g.console, tileset=g.tileset) as g.context: + with tcod.context.new(console=g.background, tileset=g.tileset) as g.context: game.screens.main_loop()