From e2bd1711c0658faa1cab58590fc874f530a86db4 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Wed, 18 Feb 2026 19:11:13 +0100 Subject: [PATCH 1/3] MapManager --- .luacheckrc | 2 + impostor.inc | 3 +- inc/desition/desition.manager.lua | 22 +-- inc/init/init.modules.lua | 3 +- inc/map/map.bedroom.lua | 28 +-- inc/map/map.manager.lua | 37 ++++ inc/meta/meta.assets.lua | 279 +++++++++++++++++++++++++++++- inc/screen/screen.home.lua | 3 +- inc/screen/screen.manager.lua | 8 +- inc/window/window.game.lua | 27 +-- 10 files changed, 358 insertions(+), 54 deletions(-) create mode 100644 inc/map/map.manager.lua diff --git a/.luacheckrc b/.luacheckrc index fa1e0e6..3d329af 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -30,6 +30,8 @@ globals = { "exit", "trace", "index_menu", + "MapManager", + "map", } diff --git a/impostor.inc b/impostor.inc index d69c758..19e2ee8 100644 --- a/impostor.inc +++ b/impostor.inc @@ -12,6 +12,8 @@ desition/desition.go_to_walking_to_home.lua desition/desition.play_button_mash.lua desition/desition.play_rhythm.lua desition/desition.play_ddr.lua +map/map.manager.lua +map/map.bedroom.lua screen/screen.manager.lua screen/screen.home.lua screen/screen.toilet.lua @@ -24,7 +26,6 @@ system/system.print.lua system/system.input.lua system/system.audio.lua system/system.ui.lua -map/map.bedroom.lua window/window.splash.lua window/window.intro.lua window/window.menu.lua diff --git a/inc/desition/desition.manager.lua b/inc/desition/desition.manager.lua index df82ea9..30471a1 100644 --- a/inc/desition/desition.manager.lua +++ b/inc/desition/desition.manager.lua @@ -3,29 +3,29 @@ DesitionManager = {} local _desitions = {} -- Private table to store all desitions -- Registers a decision object with the manager --- desition_object: A table containing id, label, handle(), and condition() -function DesitionManager.register(desition_object) - if not desition_object or not desition_object.id then +-- desition: A table containing id, label, handle(), and condition() +function DesitionManager.register(desition) + if not desition or not desition.id then PopupWindow.show({"Error: Invalid desition object registered (missing id)!"}) return end - if not desition_object.label then + if not desition.label then PopupWindow.show({"Error: Invalid desition object registered (missing label)!"}) return end -- Ensure handle() and condition() methods exist with defaults if missing - if not desition_object.condition then - desition_object.condition = function() return true end + if not desition.condition then + desition.condition = function() return true end end - if not desition_object.handle then - desition_object.handle = function() end + if not desition.handle then + desition.handle = function() end end - if _desitions[desition_object.id] then + if _desitions[desition.id] then -- Optional: warning if overwriting an existing desition - trace("Warning: Overwriting desition with id: " .. desition_object.id) + trace("Warning: Overwriting desition with id: " .. desition.id) end - _desitions[desition_object.id] = desition_object + _desitions[desition.id] = desition end -- Retrieves a desition by its id diff --git a/inc/init/init.modules.lua b/inc/init/init.modules.lua index c2af11c..0620467 100644 --- a/inc/init/init.modules.lua +++ b/inc/init/init.modules.lua @@ -10,7 +10,8 @@ local MinigameRhythmWindow = {} local MinigameDDRWindow = {} Util = {} DesitionManager = {} -ScreenManager = {} -- New declaration +ScreenManager = {} +MapManager = {} UI = {} Print = {} Input = {} diff --git a/inc/map/map.bedroom.lua b/inc/map/map.bedroom.lua index 23351fd..1628abc 100644 --- a/inc/map/map.bedroom.lua +++ b/inc/map/map.bedroom.lua @@ -1,19 +1,9 @@ -MapBedroom = { - "10101010101010101010101010101010", - "10141410101010101010101010101010", - "10141410101010101010101010101010", - "10101010101010101010101010101010", - "10101010101010101010101010101010", - "10101010101010101010101010101010", - "10101010101010101010101010101010", - "10101010101010101010101010101010", - "10101010101010101010101010101010", - "11111111111111111111111111111111", - "11111111111111111111111111111111", - "11111111111111111111111111111111", - "11111516111213111111111111111111", - "11111111111111111111111111111111", - "11111111111111111111111111111111", - "11111111111111111111111111111111", - "11111111111111111111111111111111" -} +MapManager.register({ + id = "bedroom", + from_x = 0, + from_y = 0, + width = 30, + height = 17, + to_x = 0, + to_y = 0, +}) \ No newline at end of file diff --git a/inc/map/map.manager.lua b/inc/map/map.manager.lua new file mode 100644 index 0000000..11c942f --- /dev/null +++ b/inc/map/map.manager.lua @@ -0,0 +1,37 @@ +MapManager = {} + +local _maps = {} + +function MapManager.get_maps_array() + local maps_array = {} + for _, map_data in pairs(_maps) do + table.insert(maps_array, map_data) + end + return maps_array +end + +function MapManager.register(map_data) + if _maps[map_data.id] then + trace("Warning: Overwriting map with id: " .. map_data.id) + end + _maps[map_data.id] = map_data +end + +function MapManager.get_by_id(map_id) + return _maps[map_id] +end + +function MapManager.draw(map_id) + local map_data = MapManager.get_by_id(map_id) + if not map_data then + return + end + map( + map_data.from_x, + map_data.from_y, + map_data.width, + map_data.height, + map_data.to_x, + map_data.to_y + ) +end \ No newline at end of file diff --git a/inc/meta/meta.assets.lua b/inc/meta/meta.assets.lua index d102c73..9217649 100644 --- a/inc/meta/meta.assets.lua +++ b/inc/meta/meta.assets.lua @@ -1,6 +1,6 @@ --luacheck: ignore max_line_length -- --- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 +-- 000:ab53375f574f0101017f2553c3c3c71d2b53fff1e929adff83779d3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 -- -- -- 000:060006400600064006000640060006400600060006000600060006000600060006000600060006000600060006000600060006000600060006000600300000000900 @@ -34,3 +34,280 @@ -- 008:0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f -- 009:fff000fff000fff000fff000fff000ff -- +-- +-- 000:2222222223333332233232322353533223323232232353322333333222222222 +-- 001:2222222223333333232322322333333323222322233333332355355522222222 +-- 002:2222222233333333223222233333333332232223333333333555535522222222 +-- 003:2222222223333333232322322333333323222322233333332355355522222222 +-- 004:2222222233333333223222233333333332232223333333333555535522222222 +-- 005:2222222223333333232322322333333323222322233333332355355522222222 +-- 006:2222222233333333223222233333333332232223333333333555535522222222 +-- 007:2222222223333333232322322333333323222322233333332355355522222222 +-- 008:2222222233333333223222233333333332232223333333333555535522222222 +-- 009:2222222223333333232322322333333323222322233333332355355522222222 +-- 010:2222222233333333223222233333333332232223333333333555535522222222 +-- 011:2222222223333333232322322333333323222322233333332355355522222222 +-- 012:2222222233333333223222233333333332232223333333333555535522222222 +-- 013:2222222223333333232322322333333323222322233333332355355522222222 +-- 014:2222222233333333223222233333333332232223333333333555535522222222 +-- 015:2222222223333333232322322333333323222322233333332355355522222222 +-- 016:2222222223333332233232322353533223323232232353322333333222222222 +-- 017:1111111111111111111111111111111111111111111111111111111111111111 +-- 018:1111111111111111111111111111111111111111111111111111111122222222 +-- 019:1111111111111111111111111111111111111111111111111111111122222222 +-- 020:1111111111111111111111111111111111111111111111111111111111111111 +-- 021:1111111111111111111111111111111111111111111111111111111111111111 +-- 022:1111111111111111111111111111111111111111111111111111111111111111 +-- 023:1111111111111111111111111111111111111111111111111111111111111111 +-- 024:1111111111111111111111111111111111111111111111111111111111111111 +-- 025:1111111111111111111111111111111111111111111111111111111111111111 +-- 026:1111111111111111111111111111111111111111111111111111111111111111 +-- 027:1111111111111111111111111111111111111111111111111111111111111111 +-- 028:1111111111111111111111111111111111111111111111111111111111111111 +-- 029:1111111111111111111111111111111111111111111111111111111111111111 +-- 030:1111111111111111111111111111111111111111111111111111111111111111 +-- 031:1111111111111111111111111111111111111111111111111111111111111111 +-- 032:2222222223333332233232322353533223323232232353322333333222222222 +-- 033:1111111111111111111111111111111111111111111111111111111111111111 +-- 034:2444444422212212255200212152102325520021215210232552002122222222 +-- 035:4444444221244442321244423221244232421242324421223244421222222222 +-- 036:1111111111111111111111111111111111111111111111111111111111111111 +-- 037:2222222225552555255525552555222225552111255521112555211125552111 +-- 038:2222222255555555555555552222222211122111111221111112211111122111 +-- 039:2222222255525552555255522222555211125552111255521112555211125552 +-- 040:1111111111111111111111111111111111111111111111111111111111111111 +-- 041:1111111111111111111111221111128011112801111210801121010111222222 +-- 042:1111111111111111211111111211111108211111108211110101211122222111 +-- 043:1222222226666666266666662666666626666666266666662666666626666666 +-- 044:2222222166666462666646426666646266664642666664626666464266666462 +-- 045:2222222226466666246666662646622224666666264646462464646422222222 +-- 046:2222222266666642666664622226664266666462464646426464646222222222 +-- 047:2222222226466666246666662646622224666666264646462464646422222222 +-- 048:2222222223333332233232322353533223323232232353322333333222222222 +-- 049:1111111111111111111111111111111111111111111111111111111111111111 +-- 050:2444444422212214200213242102332420021324210233242002132422222222 +-- 051:4444444244441222444425524444215244442552444421524444255222222222 +-- 052:1111111111111111111111111111111111111111111111111111111111111111 +-- 053:2555211125552111255521112555211125552111255522222555211125552111 +-- 054:1112211111122111111221111112211111122111222222221112211111122111 +-- 055:1112555211125552111255521112555211125552222255521112555211125552 +-- 056:1111111111111111111111111111111111111111111111111111111111111111 +-- 057:1111111211111112111111121111111211111112111111121111111211111112 +-- 058:1111111111111111111111111111111111111111111111111111111111111111 +-- 059:2666666626666666266666662666666626666666266266662662666626626666 +-- 060:6666464266666462666646426666646266664642666664626666464266666462 +-- 061:5555111155551111555511115555111111115555111155551111555511115555 +-- 062:5555111155551111555511115555111111115555111155551111555511115555 +-- 063:5555111155551111555511115555111111115555111155551111555511115555 +-- 064:2222222223333332253232322532333223323232253332322532333225323232 +-- 065:1111111111111111111111111111111111111111111111111111111111111111 +-- 066:2444444422212212255255252152152125525525215215212552552522222222 +-- 067:4444444221221442525524425215244252552442521524425255244222222222 +-- 068:1111111111111111111111111111111111111111111111111111111111111111 +-- 069:2555211125552111255521112555211125552111255521112555211122222222 +-- 070:1112211111122111111221111112211111122111111221111112211122222222 +-- 071:1112555211125552111255521112555211125552111255521112555222222222 +-- 072:1111111111111111111111111111111111111111111111111111111111111111 +-- 073:1111111211111112111111121111111211111112111111121111111211111112 +-- 074:1111111111111111111111111111111111111111111111111111111111111111 +-- 075:2662666626626666266266662666666626666666266666662666666626666666 +-- 076:6666464266666462666646426666646266664642666664626666464266666462 +-- 077:2222222224444444244222442421112424211124242111242442224424444444 +-- 078:2222222244444442442224424211124242111242421112424422244244444442 +-- 079:2222222224444444244444442444444424444444244444442444444424444444 +-- 080:2333323225323232253233322533323225323232233232322532323225333332 +-- 081:1111111111111111111111111111111111111111111111111111111111111111 +-- 082:2444444424444444244444442444444424444444222222222221111122211111 +-- 083:4444444244444442444444424444444244444442222222221111122211111222 +-- 084:1111111111111111111111111111111111111111111111111111111111111111 +-- 085:1111111111111111111111111222222224444444244444442444444424444444 +-- 086:1111111111111111111111112222222244444444444444444444444444444444 +-- 087:1111111111111111111111112222122244442666444426664444266644442666 +-- 088:1111111111111111111111111122221122444421244444422444444224444442 +-- 089:1111111211111112111111121111111211111112111111121111111211112222 +-- 090:1111111111111111111111111111111111111111111111111111111122211111 +-- 091:2666666626666666266666662666666626666666266666662666666612222222 +-- 092:6666464266666462666646426666646266664642666664626666464222222221 +-- 093:2444444424444444244222442421112424211124242111242442224424444444 +-- 094:4444444244444442442224424211124242111242421112424422244244444442 +-- 095:2444444424444444244444442444444424444444244444442444444422222222 +-- 096:2222222223333332253232322532333223323232253332322532333225323232 +-- 097:0000000000000000000000003333111100000000000000000000000033313333 +-- 098:0000000000000000000000003333333300001000000010000000300033333311 +-- 099:0000000000000000000000003333111100000000000000000000000033313333 +-- 100:0000000000000000000000003333333300001000000010000000300033333311 +-- 101:2444444424444444244444442444444424444444244444442444444424444444 +-- 102:4444444444444444444444444444444444444444444444444444444444444444 +-- 103:4444266644442666444426664444266644442666444426664444266644442666 +-- 104:2444444224444442242222423244442224444442244444422422224222111122 +-- 105:0000000000000000000000003333111100000000000000000000000033313333 +-- 106:0000000000000000000000003333333300001000000010000000300033333311 +-- 107:0222222226666666266266662662666626626666266266662666666632222222 +-- 108:2222222066666462666646426666646266664642666664626666464222222221 +-- 109:2222222221111111211111112111111121111111211111112111111122222222 +-- 110:2222222211111112111111121111111211111112111111121111111222222222 +-- 111:2222222223333333232322322333333323222322233333332355355522222222 +-- 112:2333323225323232253233322533323225323232233232322532323225333332 +-- 113:0000000000000000000000001111333300000000000000000000000011333111 +-- 114:2222222224444422244442722444277224427772242770722277177227717072 +-- 115:2222222244444442444444424444444244442222444211224414222241444442 +-- 116:0000000000000000000000003311133300000001000000010000000133333111 +-- 117:2222222221111111222222221111333300000000000000000000000011333111 +-- 118:2222222211111111222222223311133300000001000000010000000133333111 +-- 119:2222222211111111222222221111333300000000000000000000000011333111 +-- 120:2222222211111112222222223311133300000001000000010000000133333111 +-- 121:0000000000000000000000001111333300000000000000000000000011333111 +-- 122:0000000000000000000000003311133300000001000000010000000133333111 +-- 123:0000000000000000000000001111333300000000000000000000000011333111 +-- 124:0000000000000000000000003311133300000001000000010000000133333111 +-- 125:0000000000000000000000001111333300000000000000000000000011333111 +-- 126:0000000000000000000000003311133300000001000000010000000133333111 +-- 127:2222222223333332233232322353533223323232232353322333333222222222 +-- 128:2222222223333332253232322532333223323232253332322532333225323232 +-- 129:0000000000000000000000003333111100000000000000000000000033313333 +-- 130:2717177227717724271772422777242427724242272424242242424222222222 +-- 131:2222222224242422424242422422244242224442222444424244444224444442 +-- 132:0000000000000000000000003333333300001000000010000000300033333311 +-- 133:0000000000000200000021203333212100002120000021200000212033312123 +-- 134:0000000000000000000000003333333300001000000010000000300033333311 +-- 135:0000000000000000222222222444444424444444244444442444444424444444 +-- 136:0000000000000000222222224444444244444442444444424444444244444442 +-- 137:0000000000000000000000003333111100000000000000000000000033313333 +-- 138:0000000000000000000000003333333300001000000010000000300033333311 +-- 139:0000222200022442002424423244244224442442244424422444244224442442 +-- 140:0000000000000000000000003333333300001000000010000000300033333311 +-- 141:0000000000000000000000003333111100000000000000000000000033313333 +-- 142:0000000000000000000000003333333300001000000010000000300033333311 +-- 143:1222222112555521125555211255552112555521125555211255552112555521 +-- 144:2333323225323232253233322533323225323232233232322532323225333332 +-- 145:0000000000000000000000001111333300000000000000000000000011333111 +-- 146:2444444424444444244444442444444424444444244444442444444424444444 +-- 147:4444444244444442444444424444444244444442444444424444444244444442 +-- 148:0000002200000244000024443311244400002444000024440000021433333122 +-- 149:2220212044422120444421204444212344442120444421204412020022233111 +-- 150:0000000000000000000000003311133300000001000000010000000133333111 +-- 151:2444444424444444244444442444444424444444244444442444444424444444 +-- 152:4444444244444442444444424444444244444442444444424444444244444442 +-- 153:0000000000000000000000001111333300000000000000000000000011333111 +-- 154:0222222224444444244444442444444424444444244444442444444424444444 +-- 155:2444244224442442244424422444244224442442244424422444244224442442 +-- 156:0000000000000000000000003311133300000001000000010000000133333111 +-- 157:0000000000000000000000001111333300000000000000000000000011333111 +-- 158:0000000000000000000000003311133300000001000000010000000133333111 +-- 159:1255552112555521125555211255552112555521125555211255552112222221 +-- 160:2222222223333332253232322532333223323232253332322532333225323232 +-- 161:0000000000000000000000003333111100000000000000000000000033313333 +-- 162:2222222221111111222222222123333321201000212010002120300022233311 +-- 163:2222222211111112222222223333121200000212000002120000021233313222 +-- 164:0000000000000002000000203333113300002200000022000000300033333311 +-- 165:2000000022000000202000002331111120022000110220002200000022313333 +-- 166:0000000000000000000000003333333300001000000010000000300033333311 +-- 167:2444444424444444244444442222222222222222021200000212000032223333 +-- 168:4444444244444442444444422222222222222222000021200000212033332221 +-- 169:0000000000000000000000003333111100000000000000000000000033313333 +-- 170:2444444424444444244444442444444424444444244444442444444424444444 +-- 171:2444244224442442244424422444244224442442244424422444244214442442 +-- 172:0000000000000000000000003333333300001000000010000000300033333311 +-- 173:0000000000000000000000003333111100000000000000000000000033313333 +-- 174:0000000000000000000000003333333300001000000010000000300033333311 +-- 175:1222222125555552255555522555555225555552255555522555555212222221 +-- 176:2333323225323232253233322533323225323232233232322532323225333332 +-- 177:0000000000000000000000001111333300000000000000000000000011333111 +-- 178:0000000000000000000000003311133300000001000000010000000133333111 +-- 179:0000000000000000000000001111333300000000000000000000000011333111 +-- 180:0000000000000000000000003311133300000001000000010000000133333111 +-- 181:0000000000000000000000001111333300000000000000000000000011333111 +-- 182:0000000000000000000000003311133300000001000000010000000133333111 +-- 183:0000000000000000000000001111333300000000000000000000000011333111 +-- 184:0000000000000000000000003311133300000001000000010000000133333111 +-- 185:0022222202444444244444442444444424444444244444442444444424444444 +-- 186:2444444444444444444444444444444444444444444444444444444444444444 +-- 187:1444222214421112142111121211111221111112211111122111111221111112 +-- 188:0000000000000000000000003311133300000001000000010000000133333111 +-- 189:0000000000000000000000001111333300000000000000000000000011333111 +-- 190:0000000000000000000000003311133300000001000000010000000133333111 +-- 191:2222222223333333232322322333333323222322233333332355355522222222 +-- 192:2222222223333332253232322532333223323232253332322532333225323232 +-- 193:0000000000000000000000003333111100000000000000000000000033313333 +-- 194:2222222224444444244444442444444424444444244444442444444424444444 +-- 195:2222222244444442444444424444444244444442444444424444444244444442 +-- 196:0000000000000000000000003333333300001000000010000000300033333311 +-- 197:0000000000000000000000003333111100000000000000000000000033313333 +-- 198:0000000000000000000000003333333300001000000010000000300033333311 +-- 199:0000000000000000000000003333111100000000000000000000000033313333 +-- 200:0000000000000000000000003333333300001000000010000000300033333311 +-- 201:2222222221111111211111112111111121111111211111110222222233222233 +-- 202:2222222211111111111111111111111111111111111111112222222233333311 +-- 203:1111111211111112111111121111111211111112111111122222222033222233 +-- 204:0000000000000000000000003333333300001000000010000000300033333311 +-- 205:0000000000000000000000003333111100000000000000000000000033313333 +-- 206:0000000000000000000000003333333300001000000010000000300033333311 +-- 207:2222222223333332233232322353533223323232232353322333333222222222 +-- 208:2333323225323232253233322533323225323232233232322532323225333332 +-- 209:0000000000000000000000001111333300000000000000000000000011333111 +-- 210:2444444424444444244444442444444424444444244444442444444424444444 +-- 211:4444444244444442444444424444444244444442444444424444444244444442 +-- 212:0000000000000000000000003311133300000001000000010000000133333111 +-- 213:0000000000000000000000001111333300000000000000000000000011333111 +-- 214:0000000000000000000000003311133300000001000000010000000133333111 +-- 215:0000000000000000000000001111333300000000000000000000000011333111 +-- 216:0000000000000000000000003311133300000001000000010000000133333111 +-- 217:0000000000000000000000001111333300000000000000000000000011333111 +-- 218:0000000000000000000000003311133300000001000000010000000133333111 +-- 219:0000000000000000000000001111333300000000000000000000000011333111 +-- 220:0000000000000000000000003311133300000001000000010000000133333111 +-- 221:0000000000000000000000001111333300000000000000000000000011333111 +-- 222:0000000000000000000000003311133300000001000000010000000133333111 +-- 223:1222222112555521125555211255552112555521125555211255552112555521 +-- 224:2222222223333332253232322532333223323232253332322532333225323232 +-- 225:0000000000000000000000003333111100000000000000000000000033313333 +-- 226:2222222221111111211111112111111121111111211111112111111122222222 +-- 227:2222222211111112111111121111111211111112111111121111111222222222 +-- 228:0000000000000000000000003333333300001000000010000000300033333311 +-- 229:0000000000000000000000003333111100000000000000000000000033313333 +-- 230:0000000000000000000000003333333300001000000010000000300033333311 +-- 231:0000000000000000000000003333111100000000000000000000000033313333 +-- 232:0000000000000000000000003333333300001000000010000000300033333311 +-- 233:0000000000000000000000003333111100000000000000000000000033313333 +-- 234:0000000000000000000000003333333300001000000010000000300033333311 +-- 235:0000000000000000000000003333111100000000000000000000000033313333 +-- 236:0000000000000000000000003333333300001000000010000000300033333311 +-- 237:0000000000000000000000003333111100000000000000000000000033313333 +-- 238:0000000000000000000000003333333300001000000010000000300033333311 +-- 239:1255552112555521125555211255552112555521125555211255552112222221 +-- 240:2333323225323232253233322533323225323232233232322532323225333332 +-- 241:0000000000000000000000001111333300000000000000000000000011333111 +-- 242:0000000000000000000000003311133300000001000000010000000133333111 +-- 243:0000000000000000000000001111333300000000000000000000000011333111 +-- 244:0000000000000000000000003311133300000001000000010000000133333111 +-- 245:0000000000000000000000001111333300000000000000000000000011333111 +-- 246:0000000000000000000000003311133300000001000000010000000133333111 +-- 247:0000000000000000000000001111333300000000000000000000000011333111 +-- 248:0000000000000000000000003311133300000001000000010000000133333111 +-- 249:0000000000000000000000001111333300000000000000000000000011333111 +-- 250:0000000000000000000000003311133300000001000000010000000133333111 +-- 251:0000000000000000000000001111333300000000000000000000000011333111 +-- 252:0000000000000000000000003311133300000001000000010000000133333111 +-- 253:0000000000000000000000001111333300000000000000000000000011333111 +-- 254:0000000000000000000000003311133300000001000000010000000133333111 +-- 255:1222222125555552255555522555555225555552255555522555555212222221 +-- +-- +-- 000:111111001020102010201020102010201020102010201020102000111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 001:111111001111111111111111111111111111111111111111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 002:11111100112232115262721192a2b2c21111111111111111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 003:1111110011233311536373119411b3c31111111111111111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 004:1111110011243411546474119411b4c41111111111111111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 005:11111100112535115565758595a5b5c51111111111111111111100111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 006:1111110016261626566676861626b6c61626162616261626162600111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 007:111111001727372b57677787172b172b172b172b172b172b172b00111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 008:1111110016283826582678881626b8261626162616261626162600111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 009:1111110017293949592b798917a9b92b172b172b172b172b172b00111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 010:11111100162a3a4a5a267a8a16aaba261626162616261626162600111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 011:11111100172b172b172b172b9babbb2b172b172b172b172b172b00111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 012:11111100162c3c26162616269cacbc261626162616261626162600111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 013:11111100172d3d2b172b172b172b172b172b172b172b172b172b00111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 014:11111100162e3e2616261626162616261626162616261626162600111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 015:11111100172b172b172b172b172b172b172b172b172b172b172b00111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- 016:111111001020102010201020102010201020102010201020102000111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-- diff --git a/inc/screen/screen.home.lua b/inc/screen/screen.home.lua index efb059c..5cc7d1c 100644 --- a/inc/screen/screen.home.lua +++ b/inc/screen/screen.home.lua @@ -4,5 +4,6 @@ ScreenManager.register({ decisions = { "go_to_toilet", "go_to_walking_to_office", - } + }, + background_map_id = "bedroom", }) diff --git a/inc/screen/screen.manager.lua b/inc/screen/screen.manager.lua index 8dd6c49..ee5fd85 100644 --- a/inc/screen/screen.manager.lua +++ b/inc/screen/screen.manager.lua @@ -1,8 +1,5 @@ -ScreenManager = {} +local _screens = {} -local _screens = {} -- Internal list to hold screen data - --- Public property to access the registered screens as an indexed array function ScreenManager.get_screens_array() local screens_array = {} for _, screen_data in pairs(_screens) do @@ -11,8 +8,6 @@ function ScreenManager.get_screens_array() return screens_array end --- Registers a screen with the manager --- screen_data: A table containing id, name, and decisions for the screen function ScreenManager.register(screen_data) if _screens[screen_data.id] then -- Optional: warning if overwriting an existing screen @@ -21,7 +16,6 @@ function ScreenManager.register(screen_data) _screens[screen_data.id] = screen_data end --- Retrieves a screen by its id (if needed directly) function ScreenManager.get_by_id(screen_id) return _screens[screen_id] end diff --git a/inc/window/window.game.lua b/inc/window/window.game.lua index c04e455..f4022bd 100644 --- a/inc/window/window.game.lua +++ b/inc/window/window.game.lua @@ -1,12 +1,13 @@ function GameWindow.draw() - local currentScreenData = Context.screens[Context.current_screen] - UI.draw_top_bar(currentScreenData.name) - if currentScreenData and currentScreenData.decisions and #currentScreenData.decisions > 0 then + local screen = Context.screens[Context.current_screen] + MapManager.draw(screen.background_map_id) + UI.draw_top_bar(screen.name) + if screen and screen.decisions and #screen.decisions > 0 then local available_desitions = {} - for _, desition_id in ipairs(currentScreenData.decisions) do - local desition_obj = DesitionManager.get(desition_id) - if desition_obj and desition_obj.condition() then -- Check condition directly - table.insert(available_desitions, desition_obj) + for _, desition_id in ipairs(screen.decisions) do + local desition = DesitionManager.get(desition_id) + if desition and desition.condition() then + table.insert(available_desitions, desition) end end -- If no available desitions, display nothing or a message @@ -38,13 +39,13 @@ function GameWindow.update() Context.selected_desition_index = 1 -- Reset selected decision on screen change end - local currentScreenData = Context.screens[Context.current_screen] - if currentScreenData and currentScreenData.decisions and #currentScreenData.decisions > 0 then + local screen = Context.screens[Context.current_screen] + if screen and screen.decisions and #screen.decisions > 0 then local available_desitions = {} - for _, desition_id in ipairs(currentScreenData.decisions) do - local desition_obj = DesitionManager.get(desition_id) - if desition_obj and desition_obj.condition() then -- Check condition directly - table.insert(available_desitions, desition_obj) + for _, desition_id in ipairs(screen.decisions) do + local desition = DesitionManager.get(desition_id) + if desition and desition.condition() then -- Check condition directly + table.insert(available_desitions, desition) end end -- 2.49.1 From 63037815347d038d2e4c040eb556b02ab77e3df5 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Wed, 18 Feb 2026 19:17:18 +0100 Subject: [PATCH 2/3] tweaks --- inc/desition/desition.go_to_walking_to_home.lua | 2 +- inc/desition/desition.go_to_walking_to_office.lua | 2 +- inc/screen/screen.home.lua | 2 +- inc/window/window.game.lua | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/inc/desition/desition.go_to_walking_to_home.lua b/inc/desition/desition.go_to_walking_to_home.lua index 46cc488..d98395b 100644 --- a/inc/desition/desition.go_to_walking_to_home.lua +++ b/inc/desition/desition.go_to_walking_to_home.lua @@ -1,6 +1,6 @@ DesitionManager.register({ id = "go_to_walking_to_home", - label = "Go to Walking to home", + label = "Walking to home", handle = function() Util.go_to_screen_by_id("walking_to_home") end, diff --git a/inc/desition/desition.go_to_walking_to_office.lua b/inc/desition/desition.go_to_walking_to_office.lua index 458b3a8..8048f68 100644 --- a/inc/desition/desition.go_to_walking_to_office.lua +++ b/inc/desition/desition.go_to_walking_to_office.lua @@ -1,6 +1,6 @@ DesitionManager.register({ id = "go_to_walking_to_office", - label = "Go to Walking to office", + label = "Walking to office", handle = function() Util.go_to_screen_by_id("walking_to_office") end, diff --git a/inc/screen/screen.home.lua b/inc/screen/screen.home.lua index 5cc7d1c..7fd5ce8 100644 --- a/inc/screen/screen.home.lua +++ b/inc/screen/screen.home.lua @@ -5,5 +5,5 @@ ScreenManager.register({ "go_to_toilet", "go_to_walking_to_office", }, - background_map_id = "bedroom", + background = "bedroom", }) diff --git a/inc/window/window.game.lua b/inc/window/window.game.lua index f4022bd..52bb785 100644 --- a/inc/window/window.game.lua +++ b/inc/window/window.game.lua @@ -1,6 +1,6 @@ function GameWindow.draw() local screen = Context.screens[Context.current_screen] - MapManager.draw(screen.background_map_id) + MapManager.draw(screen.background) UI.draw_top_bar(screen.name) if screen and screen.decisions and #screen.decisions > 0 then local available_desitions = {} -- 2.49.1 From 1cf09de1fb9d13d979f25d0ec47618e4f5b770b6 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Wed, 18 Feb 2026 19:29:06 +0100 Subject: [PATCH 3/3] remove ai generated comments --- inc/desition/desition.manager.lua | 12 +------- inc/init/init.config.lua | 14 +++------ inc/init/init.context.lua | 45 +++++++---------------------- inc/init/init.windows.lua | 2 +- inc/map/map.manager.lua | 2 -- inc/screen/screen.manager.lua | 1 - inc/system/system.audio.lua | 2 -- inc/system/system.input.lua | 11 ++----- inc/system/system.ui.lua | 18 +++--------- inc/system/system.util.lua | 3 +- inc/window/window.configuration.lua | 23 +++++---------- inc/window/window.game.lua | 34 +++++++--------------- inc/window/window.intro.lua | 11 +++---- inc/window/window.menu.lua | 15 ++++------ inc/window/window.popup.lua | 18 ++++-------- 15 files changed, 56 insertions(+), 155 deletions(-) diff --git a/inc/desition/desition.manager.lua b/inc/desition/desition.manager.lua index 30471a1..3d0ea4f 100644 --- a/inc/desition/desition.manager.lua +++ b/inc/desition/desition.manager.lua @@ -1,9 +1,5 @@ -DesitionManager = {} +local _desitions = {} -local _desitions = {} -- Private table to store all desitions - --- Registers a decision object with the manager --- desition: A table containing id, label, handle(), and condition() function DesitionManager.register(desition) if not desition or not desition.id then PopupWindow.show({"Error: Invalid desition object registered (missing id)!"}) @@ -14,7 +10,6 @@ function DesitionManager.register(desition) return end - -- Ensure handle() and condition() methods exist with defaults if missing if not desition.condition then desition.condition = function() return true end end @@ -22,20 +17,15 @@ function DesitionManager.register(desition) desition.handle = function() end end if _desitions[desition.id] then - -- Optional: warning if overwriting an existing desition trace("Warning: Overwriting desition with id: " .. desition.id) end _desitions[desition.id] = desition end --- Retrieves a desition by its id --- id: unique string identifier of the desition --- Returns the desition object, or nil if not found function DesitionManager.get(id) return _desitions[id] end --- Optional: a way to get all registered desitions, if needed (e.g., for debug) function DesitionManager.get_all() return _desitions end diff --git a/inc/init/init.config.lua b/inc/init/init.config.lua index a0d6ab3..73296b0 100644 --- a/inc/init/init.config.lua +++ b/inc/init/init.config.lua @@ -8,7 +8,7 @@ local DEFAULT_CONFIG = { light_grey = 13, dark_grey = 14, green = 6, - item = 12 -- yellow + item = 12 }, player = { sprite_id = 1 @@ -19,7 +19,6 @@ local DEFAULT_CONFIG = { } local Config = { - -- Copy default values initially screen = DEFAULT_CONFIG.screen, colors = DEFAULT_CONFIG.colors, player = DEFAULT_CONFIG.player, @@ -28,28 +27,23 @@ local Config = { local CONFIG_SAVE_BANK = 7 local CONFIG_MAGIC_VALUE_ADDRESS = 2 -local CONFIG_SPLASH_DURATION_ADDRESS = 3 -- New address for splash duration -local CONFIG_MAGIC_VALUE = 0xDE -- A magic number to check if config is saved +local CONFIG_SPLASH_DURATION_ADDRESS = 3 +local CONFIG_MAGIC_VALUE = 0xDE function Config.save() - mset(CONFIG_MAGIC_VALUE, CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) -- Mark as saved - --mset(Config.timing.splash_duration, CONFIG_SPLASH_DURATION_ADDRESS, CONFIG_SAVE_BANK) + mset(CONFIG_MAGIC_VALUE, CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) end function Config.load() if mget(CONFIG_MAGIC_VALUE_ADDRESS, CONFIG_SAVE_BANK) == CONFIG_MAGIC_VALUE then - -- Config has been saved, load values Config.timing.splash_duration = mget(CONFIG_SPLASH_DURATION_ADDRESS, CONFIG_SAVE_BANK) else - -- No saved config, restore defaults Config.restore_defaults() end end function Config.restore_defaults() Config.timing.splash_duration = DEFAULT_CONFIG.timing.splash_duration - -- Any other configurable items should be reset here end --- Load configuration on startup Config.load() diff --git a/inc/init/init.context.lua b/inc/init/init.context.lua index 44b8f21..54f4cb6 100644 --- a/inc/init/init.context.lua +++ b/inc/init/init.context.lua @@ -4,20 +4,6 @@ local SAVE_GAME_MAGIC_VALUE = 0xCA local SAVE_GAME_CURRENT_SCREEN_ADDRESS = 6 --- Helper for deep copying tables --- local function clone_table(t) --- local copy = {} --- for k, v in pairs(t) do --- if type(v) == "table" then --- copy[k] = clone_table(v) --- else --- copy[k] = v --- end --- end --- return copy --- end - --- This function returns a table containing only the initial *data* for Context local function get_initial_data() return { active_window = WINDOW_SPLASH, @@ -38,9 +24,9 @@ on than meets the eye.]] }, current_screen = 1, splash_timer = Config.timing.splash_duration, - popup = { -- New popup table + popup = { show = false, - content = {} -- Array of strings + content = {} }, player = { sprite_id = Config.player.sprite_id @@ -53,9 +39,9 @@ on than meets the eye.]] }, menu_items = {}, selected_menu_item = 1, - selected_desition_index = 1, -- New desition index - game_in_progress = false, -- New flag - screens = {} -- Initialize as empty, populated on reset + selected_desition_index = 1, + game_in_progress = false, + screens = {} } end @@ -64,39 +50,30 @@ Context = {} local function reset_context_to_initial_state() local initial_data = get_initial_data() - -- Clear existing data properties from Context (but not methods) for k in pairs(Context) do - if type(Context[k]) ~= "function" then -- Only clear data, leave functions - Context[k] = nil + if type(Context[k]) ~= "function" then Context[k] = nil end end - -- Copy all initial data properties into Context for k, v in pairs(initial_data) do Context[k] = v end - -- Populate Context.screens from ScreenManager, ensuring indexed array Context.screens = {} - Context.screen_indices_by_id = {} -- Renamed for clarity, stores index - -- The screen order needs to be explicit to ensure consistent numerical indices + Context.screen_indices_by_id = {} local screen_order = {"home", "toilet", "walking_to_office", "office", "walking_to_home"} for i, screen_id in ipairs(screen_order) do local screen_data = ScreenManager.get_by_id(screen_id) if screen_data then table.insert(Context.screens, screen_data) - Context.screen_indices_by_id[screen_id] = i -- Store index - else - -- Handle error if a screen is not registered + Context.screen_indices_by_id[screen_id] = i else PopupWindow.show({"Error: Screen '" .. screen_id .. "' not registered!"}) end end end --- Initially populate Context with data reset_context_to_initial_state() --- Now define the methods for Context function Context.new_game() reset_context_to_initial_state() Context.game_in_progress = true @@ -112,13 +89,11 @@ end function Context.load_game() if mget(SAVE_GAME_MAGIC_VALUE_ADDRESS, SAVE_GAME_BANK) ~= SAVE_GAME_MAGIC_VALUE then - -- No saved game found, start a new one - Context.new_game() + Context.new_game() return end - reset_context_to_initial_state() -- Reset data, preserve methods - + reset_context_to_initial_state() Context.current_screen = mget(SAVE_GAME_CURRENT_SCREEN_ADDRESS, SAVE_GAME_BANK) Context.game_in_progress = true diff --git a/inc/init/init.windows.lua b/inc/init/init.windows.lua index 889089f..ed420a9 100644 --- a/inc/init/init.windows.lua +++ b/inc/init/init.windows.lua @@ -7,4 +7,4 @@ local WINDOW_CONFIGURATION = 7 local WINDOW_MINIGAME_BUTTON_MASH = 8 local WINDOW_MINIGAME_RHYTHM = 9 local WINDOW_MINIGAME_DDR = 10 -local WINDOW_AUDIOTEST = 9001 -- because it's a debug screen lol +local WINDOW_AUDIOTEST = 9001 diff --git a/inc/map/map.manager.lua b/inc/map/map.manager.lua index 11c942f..33fbec5 100644 --- a/inc/map/map.manager.lua +++ b/inc/map/map.manager.lua @@ -1,5 +1,3 @@ -MapManager = {} - local _maps = {} function MapManager.get_maps_array() diff --git a/inc/screen/screen.manager.lua b/inc/screen/screen.manager.lua index ee5fd85..254eec2 100644 --- a/inc/screen/screen.manager.lua +++ b/inc/screen/screen.manager.lua @@ -10,7 +10,6 @@ end function ScreenManager.register(screen_data) if _screens[screen_data.id] then - -- Optional: warning if overwriting an existing screen trace("Warning: Overwriting screen with id: " .. screen_data.id) end _screens[screen_data.id] = screen_data diff --git a/inc/system/system.audio.lua b/inc/system/system.audio.lua index d4082fc..fb32f31 100644 --- a/inc/system/system.audio.lua +++ b/inc/system/system.audio.lua @@ -1,5 +1,3 @@ --- Audio subsystem - function Audio.music_stop() music() end function Audio.music_play_mainmenu() end function Audio.music_play_wakingup() end diff --git a/inc/system/system.input.lua b/inc/system/system.input.lua index c812085..e6f3870 100644 --- a/inc/system/system.input.lua +++ b/inc/system/system.input.lua @@ -1,14 +1,8 @@ --- Gamepad buttons local INPUT_KEY_UP = 0 local INPUT_KEY_DOWN = 1 local INPUT_KEY_LEFT = 2 local INPUT_KEY_RIGHT = 3 -local INPUT_KEY_A = 4 -- Z key -local INPUT_KEY_B = 5 -- X key -local INPUT_KEY_Y = 7 -- S key - --- Keyboard keys --- TODO: Find correct key codes for SPACE and LCTRL +local INPUT_KEY_A = 4 local INPUT_KEY_B = 5 local INPUT_KEY_Y = 7 local INPUT_KEY_SPACE = 48 local INPUT_KEY_BACKSPACE = 51 local INPUT_KEY_ENTER = 50 @@ -19,6 +13,5 @@ function Input.left() return btnp(INPUT_KEY_LEFT) end function Input.right() return btnp(INPUT_KEY_RIGHT) end function Input.select() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_SPACE) end function Input.menu_confirm() return btnp(INPUT_KEY_A) or keyp(INPUT_KEY_ENTER) end -function Input.player_interact() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_ENTER) end -- B button -function Input.menu_back() return btnp(INPUT_KEY_Y) or keyp(INPUT_KEY_BACKSPACE) end +function Input.player_interact() return btnp(INPUT_KEY_B) or keyp(INPUT_KEY_ENTER) end function Input.menu_back() return btnp(INPUT_KEY_Y) or keyp(INPUT_KEY_BACKSPACE) end function Input.toggle_popup() return keyp(INPUT_KEY_ENTER) end diff --git a/inc/system/system.ui.lua b/inc/system/system.ui.lua index f8a51d1..3008260 100644 --- a/inc/system/system.ui.lua +++ b/inc/system/system.ui.lua @@ -88,23 +88,13 @@ function UI.draw_desition_selector(desitions, selected_desition_index) local bar_height = 16 local bar_y = Config.screen.height - bar_height rect(0, bar_y, Config.screen.width, bar_height, Config.colors.dark_grey) - if #desitions > 0 then local selected_desition = desitions[selected_desition_index] local desition_label = selected_desition.label - local text_width = #desition_label * 4 -- Assuming 4 pixels per char - local text_y = bar_y + 4 - - -- Center the decision label - local text_x = (Config.screen.width - text_width) / 2 - - -- Draw left arrow at the far left - Print.text("<", 2, text_y, Config.colors.green) - -- Draw selected desition label - Print.text(desition_label, text_x, text_y, Config.colors.item) -- Highlight color - -- Draw right arrow at the far right - Print.text(">", Config.screen.width - 6, text_y, Config.colors.green) -- 6 = 2 (right margin) + 4 (char width) - end + local text_width = #desition_label * 4 local text_y = bar_y + 4 + local text_x = (Config.screen.width - text_width) / 2 + Print.text("<", 2, text_y, Config.colors.green) + Print.text(desition_label, text_x, text_y, Config.colors.item) Print.text(">", Config.screen.width - 6, text_y, Config.colors.green) end end function UI.update_desition_selector(desitions, selected_desition_index) diff --git a/inc/system/system.util.lua b/inc/system/system.util.lua index 139a377..cee625a 100644 --- a/inc/system/system.util.lua +++ b/inc/system/system.util.lua @@ -8,8 +8,7 @@ function Util.go_to_screen_by_id(screen_id) local screen_index = Context.screen_indices_by_id[screen_id] if screen_index then Context.current_screen = screen_index - Context.selected_desition_index = 1 -- Reset selected decision on new screen - else + Context.selected_desition_index = 1 else PopupWindow.show({"Error: Screen '" .. screen_id .. "' not found or not indexed!"}) end end \ No newline at end of file diff --git a/inc/window/window.configuration.lua b/inc/window/window.configuration.lua index e437b6e..b9bc4cf 100644 --- a/inc/window/window.configuration.lua +++ b/inc/window/window.configuration.lua @@ -19,11 +19,9 @@ end function ConfigurationWindow.draw() UI.draw_top_bar("Configuration") - local x_start = 10 -- Left margin for labels - local y_start = 40 - local x_value_right_align = Config.screen.width - 10 -- Right margin for values - local char_width = 4 -- Approximate character width for default font - + local x_start = 10 local y_start = 40 + local x_value_right_align = Config.screen.width - 10 + local char_width = 4 for i, control in ipairs(ConfigurationWindow.controls) do local current_y = y_start + (i - 1) * 12 local color = Config.colors.green @@ -32,16 +30,13 @@ function ConfigurationWindow.draw() local label_text = control.label local value_text = string.format(control.format, value) - -- Calculate x position for right-aligned value - local value_x = x_value_right_align - (#value_text * char_width) + local value_x = x_value_right_align - (#value_text * char_width) if i == ConfigurationWindow.selected_control then color = Config.colors.item 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.text(label_text, x_start, current_y, color) Print.text(value_text, value_x, current_y, color) + Print.text(">", x_value_right_align + 4, current_y, color) else Print.text(label_text, x_start, current_y, color) Print.text(value_text, value_x, current_y, color) end @@ -82,11 +77,9 @@ function ConfigurationWindow.update() if control then if control.type == "numeric_stepper" then local current_value = control.get() - if btnp(2) then -- Left - local new_value = math.max(control.min, current_value - control.step) + if btnp(2) then local new_value = math.max(control.min, current_value - control.step) control.set(new_value) - elseif btnp(3) then -- Right - local new_value = math.min(control.max, current_value + control.step) + elseif btnp(3) then local new_value = math.min(control.max, current_value + control.step) control.set(new_value) end elseif control.type == "desition_item" then diff --git a/inc/window/window.game.lua b/inc/window/window.game.lua index 52bb785..815f64a 100644 --- a/inc/window/window.game.lua +++ b/inc/window/window.game.lua @@ -10,8 +10,7 @@ function GameWindow.draw() table.insert(available_desitions, desition) end end - -- If no available desitions, display nothing or a message - if #available_desitions > 0 then + if #available_desitions > 0 then UI.draw_desition_selector(available_desitions, Context.selected_desition_index) end end @@ -24,51 +23,41 @@ function GameWindow.update() return end - -- Handle screen changing using up/down - if Input.up() then + if Input.up() then Context.current_screen = Context.current_screen - 1 if Context.current_screen < 1 then Context.current_screen = #Context.screens end - Context.selected_desition_index = 1 -- Reset selected decision on screen change - elseif Input.down() then + Context.selected_desition_index = 1 elseif Input.down() then Context.current_screen = Context.current_screen + 1 if Context.current_screen > #Context.screens then Context.current_screen = 1 end - Context.selected_desition_index = 1 -- Reset selected decision on screen change - end + Context.selected_desition_index = 1 end local screen = Context.screens[Context.current_screen] if screen and screen.decisions and #screen.decisions > 0 then local available_desitions = {} for _, desition_id in ipairs(screen.decisions) do local desition = DesitionManager.get(desition_id) - if desition and desition.condition() then -- Check condition directly - table.insert(available_desitions, desition) + if desition and desition.condition() then table.insert(available_desitions, desition) end end - -- If no available desitions, we can't update or execute - if #available_desitions == 0 then return end + if #available_desitions == 0 then return end - -- Update selected decision using left/right inputs - local new_selected_desition_index = UI.update_desition_selector( + local new_selected_desition_index = UI.update_desition_selector( available_desitions, Context.selected_desition_index ) - -- Only update Context if the selection actually changed to avoid unnecessary re-assignment - if new_selected_desition_index ~= Context.selected_desition_index then + if new_selected_desition_index ~= Context.selected_desition_index then Context.selected_desition_index = new_selected_desition_index end - -- Execute selected decision on Input.select() - if Input.select() then + if Input.select() then local selected_desition = available_desitions[Context.selected_desition_index] - if selected_desition and selected_desition.handle then -- Call handle directly - Audio.sfx_select() -- Play sound for selection - selected_desition.handle() + if selected_desition and selected_desition.handle then Audio.sfx_select() selected_desition.handle() end end end @@ -76,5 +65,4 @@ end function GameWindow.set_state(new_state) Context.active_window = new_state - -- Add any state-specific initialization/cleanup here later if needed -end \ No newline at end of file + end \ No newline at end of file diff --git a/inc/window/window.intro.lua b/inc/window/window.intro.lua index 1760f2d..6df26cb 100644 --- a/inc/window/window.intro.lua +++ b/inc/window/window.intro.lua @@ -1,24 +1,21 @@ function IntroWindow.draw() - local x = (Config.screen.width - 132) / 2 -- Centered text + local x = (Config.screen.width - 132) / 2 Print.text(Context.intro.text, x, Context.intro.y, Config.colors.green) end function IntroWindow.update() Context.intro.y = Context.intro.y - Context.intro.speed - -- Count lines in intro text to determine when scrolling is done - local lines = 1 + local lines = 1 for _ in string.gmatch(Context.intro.text, "\n") do lines = lines + 1 end - -- When text is off-screen, go to menu - if Context.intro.y < -lines * 8 then + if Context.intro.y < -lines * 8 then GameWindow.set_state(WINDOW_MENU) end - -- Skip intro by pressing A - if Input.menu_confirm() then + if Input.menu_confirm() then GameWindow.set_state(WINDOW_MENU) end end \ No newline at end of file diff --git a/inc/window/window.menu.lua b/inc/window/window.menu.lua index 3fe597a..1c7d02b 100644 --- a/inc/window/window.menu.lua +++ b/inc/window/window.menu.lua @@ -16,18 +16,15 @@ function MenuWindow.update() end function MenuWindow.new_game() - Context.new_game() -- This function will be created in Context - GameWindow.set_state(WINDOW_GAME) + Context.new_game() GameWindow.set_state(WINDOW_GAME) end function MenuWindow.load_game() - Context.load_game() -- This function will be created in Context - GameWindow.set_state(WINDOW_GAME) + Context.load_game() GameWindow.set_state(WINDOW_GAME) end function MenuWindow.save_game() - Context.save_game() -- This function will be created in Context -end + Context.save_game() end function MenuWindow.resume_game() GameWindow.set_state(WINDOW_GAME) @@ -48,8 +45,7 @@ function MenuWindow.audio_test() end function MenuWindow.refresh_menu_items() - Context.menu_items = {} -- Start with an empty table - + Context.menu_items = {} if Context.game_in_progress then table.insert(Context.menu_items, {label = "Resume Game", desition = MenuWindow.resume_game}) table.insert(Context.menu_items, {label = "Save Game", desition = MenuWindow.save_game}) @@ -61,5 +57,4 @@ function MenuWindow.refresh_menu_items() table.insert(Context.menu_items, {label = "Audio Test", desition = MenuWindow.audio_test}) table.insert(Context.menu_items, {label = "Exit", desition = MenuWindow.exit}) - Context.selected_menu_item = 1 -- Reset selection after refreshing -end + Context.selected_menu_item = 1 end diff --git a/inc/window/window.popup.lua b/inc/window/window.popup.lua index f8342f8..149d5fc 100644 --- a/inc/window/window.popup.lua +++ b/inc/window/window.popup.lua @@ -1,28 +1,21 @@ --- Simplified PopupWindow module local POPUP_X = 40 local POPUP_Y = 40 local POPUP_WIDTH = 160 local POPUP_HEIGHT = 80 local TEXT_MARGIN_X = POPUP_X + 10 local TEXT_MARGIN_Y = POPUP_Y + 10 -local LINE_HEIGHT = 8 -- Assuming 8 pixels per line for default font - +local LINE_HEIGHT = 8 function PopupWindow.show(content_strings) Context.popup.show = true - Context.popup.content = content_strings or {} -- Ensure it's a table - GameWindow.set_state(WINDOW_POPUP) -- Set active window to popup -end + Context.popup.content = content_strings or {} GameWindow.set_state(WINDOW_POPUP) end function PopupWindow.hide() Context.popup.show = false - Context.popup.content = {} -- Clear content - GameWindow.set_state(WINDOW_GAME) -- Return to game window -end + Context.popup.content = {} GameWindow.set_state(WINDOW_GAME) end function PopupWindow.update() if Context.popup.show then - if Input.menu_confirm() or Input.menu_back() then -- Allow either A or B to close - PopupWindow.hide() + if Input.menu_confirm() or Input.menu_back() then PopupWindow.hide() end end end @@ -38,7 +31,6 @@ function PopupWindow.draw() current_y = current_y + LINE_HEIGHT end - -- Instruction to close - Print.text("[A] Close", TEXT_MARGIN_X, POPUP_Y + POPUP_HEIGHT - LINE_HEIGHT - 2, Config.colors.green) + Print.text("[A] Close", TEXT_MARGIN_X, POPUP_Y + POPUP_HEIGHT - LINE_HEIGHT - 2, Config.colors.green) end end -- 2.49.1