This commit is contained in:
백현웅 2025-01-08 14:13:49 +09:00
parent ada33393e5
commit 069d4a03f6
10 changed files with 76 additions and 53 deletions

View file

@ -27,7 +27,6 @@ function m:itemMode()
self.mousepressed = window.mousepressed(function (self, x, y, button) self.mousepressed = window.mousepressed(function (self, x, y, button)
log:info(self) log:info(self)
inventory.selected_item = self inventory.selected_item = self
log:format("selected idx : %s", inventory.selected_item.idx)
end) end)
end end

View file

@ -17,15 +17,17 @@ end
--load room list --load room list
local rooms = require("rooms") local rooms = require("rooms")
current_room = rooms['default'] current_room = rooms['Alley']
function set_room_raw(r) function set_room_raw(r)
current_room:onexit()
current_room = r current_room = r
current_room:onenter()
end end
function set_room(r) function set_room(r)
current_room = rooms[r] assert(rooms[r])
assert(current_room) set_room_raw(rooms[r])
end end
screen = { screen = {
@ -64,7 +66,7 @@ end)
inventory.draw = window.draw(function (self) inventory.draw = window.draw(function (self)
for i, item in pairs(self.items) do for i, item in pairs(self.items) do
if self.selected_item and self.selected_item.idx == i then if self.selected_item and self.selected_item == item then
love.graphics.circle('line', 60*i - 30, 30, 25) love.graphics.circle('line', 60*i - 30, 30, 25)
end end
@ -83,7 +85,7 @@ end
function inventory:pickup(item) function inventory:pickup(item)
util.add_entity(self.items, item) util.add_entity(self.items, item)
self:set_pos(item.idx, item) self:set_pos(item.idx[self.items], item)
end end
function inventory:drop(item) function inventory:drop(item)

View file

@ -27,37 +27,41 @@ function m:draw()
end end
end end
m.keyMode = window.mousepressed(function (self) function m:keyMode()
if self.locked then self.mousepressed = window.mousepressed(function (self)
local i = inventory.selected_item if self.locked then
if i and i.code then local i = inventory.selected_item
if i.code == self.code then if i and i.code then
self.locked = false if i.code == self.code then
inventory:use() self.locked = false
inventory:use()
log:log("Door opened.") log:log("Door opened.")
else
log:log("This seems not a matching key.")
inventory.selected_item = nil
end
else else
log:log("This seems not a matching key.") log:log("It's locked.")
inventory.selected_item = nil
end end
else else
log:log("It's locked.") log:format("You enter %s", self.destination)
set_room(self.destination)
end end
else end)
log:format("You enter %s", self.destination) end
set_room(self.destination)
end
end)
m.keypadMode = window.mousepressed(function (self) function m:keypadMode()
if self.locked then self.mousepressed = window.mousepressed(function (self)
log:log("It's locked.") if self.locked then
else log:log("It's locked.")
log:format("You enter %s", self.destination) else
set_room(self.destination) log:format("You enter %s", self.destination)
end set_room(self.destination)
end) end
end)
end
m.mousepressed = m.keyMode m:keyMode()
return m return m

View file

@ -3,9 +3,13 @@ local entity = require('entity')
local keypad = require('room/keypad') local keypad = require('room/keypad')
local m = entity:from{ local m = entity:from{
width = 50, width = 30,
height = 50, height = 40,
lines = {'fill', {0, 0, 0, 50, 50, 50, 50, 0}}, lines = {
{'fill', {0, 0, 0, 40, 30, 40, 30, 0}},
{'fill', {5, 5, 25, 5, 25, 10, 5, 10}},
{'fill', {5, 15, 25, 15, 25, 35, 5, 35}},
},
code = 45100, code = 45100,
} }

View file

@ -26,14 +26,6 @@ function room:from(t)
return r return r
end end
function room:insert(obj)
util.add_entity(self.objects, obj)
end
function room:remove(obj)
util.del_entity(self.objects, obj)
end
room.mousepressed = window.propagate{'edges', 'objects'} room.mousepressed = window.propagate{'edges', 'objects'}
function room:draw() function room:draw()
@ -48,6 +40,27 @@ function room:draw()
end end
end end
function room:insert(obj)
util.add_entity(self.objects, obj)
end
function room:remove(obj)
util.del_entity(self.objects, obj)
end
function room:onenter()
if self.update then
register(self)
end
end
function room:onexit()
if self.update then
unregister(self)
end
end
function room.calc_align(width, height) function room.calc_align(width, height)
local sx = (320 - width)/2 local sx = (320 - width)/2
local sy = (240 - height)/2 local sy = (240 - height)/2

View file

@ -3,7 +3,7 @@ local edge = require("edge")
local m = room:new() local m = room:new()
edge.set(m, 'down', "sundial_alley") edge.set(m, 'down', "Sundial alley")
--edge.set(m, 'left', "alley2") --edge.set(m, 'left', "alley2")
return m return m

View file

@ -55,8 +55,6 @@ function m:from(t)
edge.set(kp, "down", kp.room) edge.set(kp, "down", kp.room)
register(kp)
return kp return kp
end end

View file

@ -22,8 +22,8 @@ keypad:from{
oncorrect = function (self) oncorrect = function (self)
d.locked = false d.locked = false
end, end,
}:install(m, 180, 100) }:install(m, 160, 90)
edge.set(m, 'up', "alley") edge.set(m, 'up', "Alley")
return m return m

View file

@ -1,8 +1,8 @@
local m = { local m = {
['default'] = require('room/default'), ['default'] = require('room/default'),
['doortest'] = require('room/doortest'), ['doortest'] = require('room/doortest'),
['alley'] = require("room/alley"), ['Alley'] = require("room/alley"),
['sundial_alley'] = require("room/sundial_alley"), ['Sundial alley'] = require("room/sundial_alley"),
} }
return m return m

View file

@ -23,14 +23,17 @@ end
function m.add_entity(a, x) function m.add_entity(a, x)
table.insert(a, x) table.insert(a, x)
x.idx = #a if not x.idx then
x.idx = {}
end
x.idx[a] = #a
end end
function m.del_entity(a, x) function m.del_entity(a, x)
table.remove(a, x.idx) table.remove(a, x.idx[a])
for i, v in ipairs(a) do for i, v in ipairs(a) do
v.idx = i v.idx[a] = i
end end
end end