diff --git a/GEMINI.md b/GEMINI.md index 33c3002..d7533a9 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -39,7 +39,7 @@ Based on the analysis of `mranderson.lua`, the following regularities and conven 11. **`spr()` for Sprites:** Individual sprites should be rendered using the `spr()` function. 12. **`map()` for Maps:** Tilemaps should be drawn using the `map()` function. -13. **`print()` for Text:** Text display should utilize the `print()` function. +13. **`Print.text()` for Text:** Text display should utilize the `Print.text()` function. ## Code Style diff --git a/inc/entity/entity.item.lua b/inc/entity/entity.item.lua index d6f0a33..1d3e9cb 100644 --- a/inc/entity/entity.item.lua +++ b/inc/entity/entity.item.lua @@ -1,5 +1,5 @@ function Item.use() - print("Used item: " .. Context.dialog.active_entity.name) + Print.text("Used item: " .. Context.dialog.active_entity.name) GameWindow.set_state(WINDOW_INVENTORY) end function Item.look_at() diff --git a/inc/init/init.modules.lua b/inc/init/init.modules.lua index 0279f90..6cd9e3c 100644 --- a/inc/init/init.modules.lua +++ b/inc/init/init.modules.lua @@ -7,6 +7,7 @@ local InventoryWindow = {} local ConfigurationWindow = {} local UI = {} +local Print = {} local Input = {} local NPC = {} local Item = {} diff --git a/inc/system/system.print.lua b/inc/system/system.print.lua new file mode 100644 index 0000000..9fdbb13 --- /dev/null +++ b/inc/system/system.print.lua @@ -0,0 +1,8 @@ + +function Print.text(text, x, y, color, fixed, scale) + local shadow_color = Config.colors.black + if color == shadow_color then shadow_color = Config.colors.light_grey end + scale = scale or 1 + print(text, x + 1, y + 1, shadow_color, fixed, scale) + print(text, x, y, color, fixed, scale) +end \ No newline at end of file diff --git a/inc/system/system.ui.lua b/inc/system/system.ui.lua index 9fb4a1b..879939f 100644 --- a/inc/system/system.ui.lua +++ b/inc/system/system.ui.lua @@ -1,6 +1,6 @@ function UI.draw_top_bar(title) rect(0, 0, Config.screen.width, 10, Config.colors.dark_grey) - print(title, 3, 2, Config.colors.green) + Print.text(title, 3, 2, Config.colors.green) end function UI.draw_dialog() @@ -11,9 +11,9 @@ function UI.draw_menu(items, selected_item, x, y) for i, item in ipairs(items) do local current_y = y + (i-1)*10 if i == selected_item then - print(">", x - 8, current_y, Config.colors.green) + Print.text(">", x - 8, current_y, Config.colors.green) end - print(item.label, x, current_y, Config.colors.green) + Print.text(item.label, x, current_y, Config.colors.green) end end diff --git a/inc/window/window.configuration.lua b/inc/window/window.configuration.lua index 216a609..b933959 100644 --- a/inc/window/window.configuration.lua +++ b/inc/window/window.configuration.lua @@ -50,28 +50,28 @@ function ConfigurationWindow.draw() if i == ConfigurationWindow.selected_control then color = Config.colors.item - print("<", x_start -8, current_y, color) - print(label_text, x_start, current_y, color) -- Shift label due to '<' - print(value_text, value_x, current_y, color) - print(">", x_value_right_align + 4, current_y, color) -- Print '>' after value + Print.text("<", x_start -8, current_y, color) + Print.text(label_text, x_start, current_y, color) -- Shift label due to '<' + Print.text(value_text, value_x, current_y, color) + Print.text(">", x_value_right_align + 4, current_y, color) -- Print '>' after value else - print(label_text, x_start, current_y, color) - print(value_text, value_x, current_y, color) + Print.text(label_text, x_start, current_y, color) + Print.text(value_text, value_x, current_y, color) end elseif control.type == "action_item" then local label_text = control.label if i == ConfigurationWindow.selected_control then color = Config.colors.item - print("<", x_start -8, current_y, color) - print(label_text, x_start, current_y, color) - print(">", x_start + 8 + (#label_text * char_width) + 4, current_y, color) + Print.text("<", x_start -8, current_y, color) + Print.text(label_text, x_start, current_y, color) + Print.text(">", x_start + 8 + (#label_text * char_width) + 4, current_y, color) else - print(label_text, x_start, current_y, color) + Print.text(label_text, x_start, current_y, color) end end end - print("Press B to go back", x_start, 120, Config.colors.light_grey) + Print.text("Press B to go back", x_start, 120, Config.colors.light_grey) end function ConfigurationWindow.update() diff --git a/inc/window/window.intro.lua b/inc/window/window.intro.lua index 4cccc5e..d18f3e2 100644 --- a/inc/window/window.intro.lua +++ b/inc/window/window.intro.lua @@ -1,6 +1,6 @@ function IntroWindow.draw() local x = (Config.screen.width - 132) / 2 -- Centered text - print(Context.intro.text, x, Context.intro.y, Config.colors.green) + Print.text(Context.intro.text, x, Context.intro.y, Config.colors.green) end function IntroWindow.update() diff --git a/inc/window/window.inventory.lua b/inc/window/window.inventory.lua index 154b820..1145232 100644 --- a/inc/window/window.inventory.lua +++ b/inc/window/window.inventory.lua @@ -2,15 +2,15 @@ function InventoryWindow.draw() UI.draw_top_bar("Inventory") if #Context.inventory == 0 then - print("Inventory is empty.", 70, 70, Config.colors.light_grey) + Print.text("Inventory is empty.", 70, 70, Config.colors.light_grey) else for i, item in ipairs(Context.inventory) do local color = Config.colors.light_grey if i == Context.selected_inventory_item then color = Config.colors.green - print(">", 60, 20 + i * 10, color) + Print.text(">", 60, 20 + i * 10, color) end - print(item.name, 70, 20 + i * 10, color) + Print.text(item.name, 70, 20 + i * 10, color) end end end diff --git a/inc/window/window.popup.lua b/inc/window/window.popup.lua index d60a66d..f053bb7 100644 --- a/inc/window/window.popup.lua +++ b/inc/window/window.popup.lua @@ -82,14 +82,14 @@ function PopupWindow.draw() -- Display the entity's name as the dialog title if Context.dialog.active_entity and Context.dialog.active_entity.name then - print(Context.dialog.active_entity.name, 120 - #Context.dialog.active_entity.name * 2, 45, Config.colors.green) + Print.text(Context.dialog.active_entity.name, 120 - #Context.dialog.active_entity.name * 2, 45, Config.colors.green) end -- Display the dialog content (description for "look at", or initial name/dialog for others) local wrapped_lines = UI.word_wrap(Context.dialog.text, 25) -- Max 25 chars per line local current_y = 55 -- Starting Y position for the first line of content for _, line in ipairs(wrapped_lines) do - print(line, 50, current_y, Config.colors.light_grey) + Print.text(line, 50, current_y, Config.colors.light_grey) current_y = current_y + 8 -- Move to the next line (8 pixels for default font height + padding) end @@ -97,6 +97,6 @@ function PopupWindow.draw() if not Context.dialog.showing_description then UI.draw_menu(Context.dialog.menu_items, Context.dialog.selected_menu_item, 50, current_y + 2) else - print("[A] Go Back", 50, current_y + 10, Config.colors.green) + Print.text("[A] Go Back", 50, current_y + 10, Config.colors.green) end end diff --git a/inc/window/window.splash.lua b/inc/window/window.splash.lua index cfff23f..956c82e 100644 --- a/inc/window/window.splash.lua +++ b/inc/window/window.splash.lua @@ -1,6 +1,6 @@ function SplashWindow.draw() - print("Mr. Anderson's", 78, 60, Config.colors.green) - print("Addventure", 90, 70, Config.colors.green) + Print.text("Mr. Anderson's", 78, 60, Config.colors.green) + Print.text("Addventure", 90, 70, Config.colors.green) end function SplashWindow.update() diff --git a/mranderson.inc b/mranderson.inc index f0bdbd3..a5d4536 100644 --- a/mranderson.inc +++ b/mranderson.inc @@ -1,8 +1,9 @@ meta/meta.header.lua +init/init.modules.lua init/init.config.lua init/init.windows.lua -init/init.modules.lua init/init.context.lua +system/system.print.lua entity/entity.npc.lua entity/entity.item.lua entity/entity.player.lua