This commit is contained in:
백현웅 2025-01-08 12:47:12 +09:00
parent a96f8e1aa3
commit ada33393e5
16 changed files with 196 additions and 16 deletions

View file

@ -62,8 +62,8 @@ local mt = {
end
}
function edge:set(room, dir, dst)
local e = self:from{
function edge.set(room, dir, dst)
local e = edge:from{
dir = dir,
destination = dst,
}

View file

@ -25,6 +25,7 @@ end
function set_room(r)
current_room = rooms[r]
assert(current_room)
end
screen = {

View file

@ -27,7 +27,7 @@ function m:draw()
end
end
m.mousepressed = window.mousepressed(function (self)
m.keyMode = window.mousepressed(function (self)
if self.locked then
local i = inventory.selected_item
if i and i.code then
@ -49,4 +49,15 @@ m.mousepressed = window.mousepressed(function (self)
end
end)
m.keypadMode = window.mousepressed(function (self)
if self.locked then
log:log("It's locked.")
else
log:format("You enter %s", self.destination)
set_room(self.destination)
end
end)
m.mousepressed = m.keyMode
return m

View file

@ -13,14 +13,13 @@ local install = m.install
function m:install(room, x, y)
self.keypad = keypad:from{
code = self.code,
oncorrect = self.oncorrect,
room = room
}
install(self, room, x, y)
end
m.mousepressed = window.mousepressed(function (self)
set_room_raw(self.keypad)
end)
m.mousepressed = window.portal("keypad")
return m

21
obj/note.lua Normal file
View file

@ -0,0 +1,21 @@
local entity = require("entity")
local window = require("window")
local note = require("room/note")
local m = entity:from{
text = "sample text",
}
local install = m.install
function m:install(room, x, y)
self.note = note:from{
text = self.text,
room = room
}
install(self, room, x, y)
end
m.mousepressed = window.portal('note')
return m

25
obj/sundial.lua Normal file
View file

@ -0,0 +1,25 @@
local entity = require("entity")
local window = require("window")
local sundial = require("room/sundial")
local m = entity:from{
width = 60,
height = 60,
lines = {'fill', {30, 30, 60, 40, 60, 50, 30, 60, 0, 50, 0, 40}},
}
local install = m.install
function m:install(room, x, y)
self.sundial = sundial:from{
numbers = self.numbers,
room = room,
}
install(self, room, x, y)
end
m.mousepressed = window.mousepressed(function (self)
set_room_raw(self.sundial)
end)
return m

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -8,11 +8,11 @@ local entity = require('entity')
-- - edges
local room = entity:from{
lines = {
{'line', 0, 0, 120, 80},
{'line', 320, 0, 200, 80},
{'line', 0, 240, 120, 160},
{'line', 320, 240, 200, 160},
{'fill', 120, 80, 200, 80, 200, 160, 200, 80},
{'fill', {80, 60, 240, 60, 240, 180, 80, 180}},
{'line', {0, 0, 80, 60}},
{'line', {320, 0, 240, 60}},
{'line', {0, 240, 80, 180}},
{'line', {320, 240, 240, 180}},
},
}

9
room/alley.lua Normal file
View file

@ -0,0 +1,9 @@
local room = require("room")
local edge = require("edge")
local m = room:new()
edge.set(m, 'down', "sundial_alley")
--edge.set(m, 'left', "alley2")
return m

View file

@ -5,9 +5,9 @@ local crowbar = require('item/crowbar')
local r = room:new()
crowbar:install(r, 100, 160)
edge:set(r, 'up', "default")
edge:set(r, 'down', "default")
edge:set(r, 'left', "default")
edge:set(r, 'right', "doortest")
edge.set(r, 'up', "default")
edge.set(r, 'down', "sundial_alley")
edge.set(r, 'left', "default")
edge.set(r, 'right', "doortest")
return r

View file

@ -53,7 +53,7 @@ function m:from(t)
function () kp:accept() end,
sx + kd*2, br, ks, ks)
edge:set(kp, "down", kp.room)
edge.set(kp, "down", kp.room)
register(kp)

22
room/note.lua Normal file
View file

@ -0,0 +1,22 @@
local window = require("window")
local room = require("room")
local edge = require("edge")
local m = room:new()
local from = m.from
function m:from(t)
local n = from(self, t)
edge.set(n, 'down', n.room)
return n
end
m.draw = window.draw(function (self)
love.graphics.printf(self.text, 80, 40, 160)
self.edges[1]:draw()
end)
return m

55
room/sundial.lua Normal file
View file

@ -0,0 +1,55 @@
local window = require("window")
local room = require("room")
local edge = require("edge")
local clock_size = 60
local arm_size = 55
local m = room:new()
local from = m.from
function m:from(t)
local sd = from(self, t)
sd.tick = 0
sd.ni = 1
edge.set(sd, 'down', sd.room)
register(sd)
return sd
end
m.draw = window.draw(function (self)
love.graphics.circle('fill', 160, 120, clock_size, 12)
local s = math.pi * self.numbers[self.ni] / 6
local x = 160 + arm_size * math.sin(s)
local y = 120 - arm_size * math.cos(s)
local n = 120 - arm_size
love.graphics.setColor(0, 0, 0)
love.graphics.polygon('fill', 160, n, 160, 120, x, y)
love.graphics.setColor(1, 1, 1)
love.graphics.polygon('fill', 160, n, 160, 120, 140, n)
love.graphics.setColor(0, 0, 0)
love.graphics.polygon('line', 160, n, 160, 120, 140, n)
love.graphics.setColor(1, 1, 1)
self.edges[1]:draw()
end)
function m:update(dt)
self.tick = self.tick + dt
if self.tick > 2 then
self.tick = self.tick - 2
self.ni = self.ni + 1
if self.ni > #self.numbers then
self.ni = 1
end
end
end
return m

29
room/sundial_alley.lua Normal file
View file

@ -0,0 +1,29 @@
local room = require("room")
local edge = require("edge")
local sundial = require("obj/sundial")
local keypad = require("obj/keypad")
local door = require("obj/door")
local m = room:new()
sundial:from{
numbers = {3, 5, 8, 2, 7},
}:install(m, 140, 160)
local d = door:from{
destination = 'vivarium',
}
d:install(m, 80, 60)
d.mousepressed = d.keypadMode
keypad:from{
code = 35827,
oncorrect = function (self)
d.locked = false
end,
}:install(m, 180, 100)
edge.set(m, 'up', "alley")
return m

View file

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

View file

@ -39,6 +39,12 @@ function w.propagate(tnames)
end
end
function w.portal(room)
return w.mousepressed(function (self, x, y, button)
set_room_raw(self[room])
end)
end
function w.draw_border(width, height)
love.graphics.push('all')
love.graphics.setLineWidth(5)