This commit is contained in:
백현웅 2025-01-14 19:32:59 +09:00
parent 3a6c9ec3ad
commit 568a6c779c
11 changed files with 236 additions and 14 deletions

View file

@ -2,6 +2,8 @@ WIDTH = 528
HEIGHT = 300
MULTIPLIER = 1.2
Seed_colour = {0.4, 0.2, 0.4}
--[[
SCREEN_WIDTH = 320
SCREEN_HEIGHT = 240

View file

@ -52,6 +52,11 @@ local edge = entity:from{
end)
}
edge.draw = window.draw(function (self)
love.graphics.setLineJoin('bevel')
self:draw_lines(self.lines)
end)
local mt = {
__index = function (t, k)
if edge_data[t.dir][k] then

View file

@ -46,8 +46,6 @@ local function draw_line(l)
end
function m:draw_lines(lines)
love.graphics.push('all')
love.graphics.translate(self.x, self.y)
love.graphics.setLineWidth(2)
if type(lines[1]) == 'string' then
@ -57,13 +55,11 @@ function m:draw_lines(lines)
draw_line(l)
end
end
love.graphics.pop()
end
function m:draw()
m.draw = window.draw(function (self)
self:draw_lines(self.lines)
end
end)
m.mousepressed = window.mousepressed(function (self, x, y, button)
end)

24
item/flask.lua Normal file
View file

@ -0,0 +1,24 @@
local window = require('window')
local item = require('item')
local line = {
15, 0, 25, 0,
40, 40, 0, 40,
}
local m = item:from{
width = 40,
height = 40,
colour = {0, 0, 0},
name = "Flask",
description = "A glass container filled with liquid.",
}
m.draw = window.draw(function (self)
love.graphics.setColor(self.colour)
love.graphics.polygon('fill', line)
love.graphics.setColor(1, 1, 1)
love.graphics.polygon('line', line)
end)
return m

View file

@ -19,13 +19,13 @@ local m = entity:from{
code = 0,
}
function m:draw()
m.draw = window.draw(function (self)
if self.locked then
self:draw_lines(locked_door)
else
self:draw_lines(open_door)
end
end
end)
function m:keyMode()
self.mousepressed = window.mousepressed(function (self)

View file

@ -5,11 +5,14 @@ local seed = require("item/seed")
local pot = {
{'fill', {60, 80, 100, 80, 100, 90, 60, 90}},
{'fill', {65, 90, 95, 90, 90, 120, 70, 120}},
{'line', {80, 80, 70, 60, 60, 50}},
{'line', {70, 60, 80, 50}},
}
local m = entity:from{
width = 120,
height = 120,
grown = false,
}
function m:update()
@ -17,6 +20,26 @@ end
m.draw = window.draw(function (self)
self:draw_lines(pot)
if grown then
love.graphics.circle('fill', 80, 50, 5)
for i = 0, 7 do
local x = 80 + 7 * math.sin(math.pi * i)
local y = 50 + 7 * math.cos(math.pi * i)
love.graphics.line(80, 50, x, y)
end
end
end)
m.mousepressed = window.mousepressed(function (self, x, y, button)
local i = inventory.selected_item
if i and i.name == "Flask" then
inventory:use()
local seed = seed:from{ colour = i.colour }
self.grown = true
seed:install(self.room, self.width + 80, self.height + 50)
end
end)
return m

24
obj/trashcan.lua Normal file
View file

@ -0,0 +1,24 @@
local util = require("util")
local window = require("window")
local entity = require("entity")
local m = entity:from{
width = 50,
height = 50,
lines = {'fill', {0, 0, 50, 0, 40, 50, 10, 50}},
items = {},
}
m.mousepressed = window.mousepressed(function (self, x, y, button)
local i = inventory.selected_item
if i then
util.add_entity(self.items, i)
inventory:use()
elseif #self.items > 0 then
local last = self.items[#self.items]
util.del_entity(self.items, last)
inventory:pickup(last)
end
end)
return m

View file

@ -28,7 +28,7 @@ end
room.mousepressed = window.propagate{'edges', 'objects'}
function room:draw()
room.draw = window.draw(function (self)
self:draw_lines(self.lines)
for i, v in ipairs(self.objects) do
@ -38,7 +38,7 @@ function room:draw()
for i, v in ipairs(self.edges) do
v:draw()
end
end
end)
function room:insert(obj)
util.add_entity(self.objects, obj)

View file

@ -2,17 +2,22 @@ local window = require("window")
local room = require("room")
local edge = require("edge")
local plant = require("obj/plant")
local trashcan = require("obj/trashcan")
local m = room:from{
}
local p = plant:from{
colour = Seed_colour,
room = m,
}
p:install(m, 50, 40)
p:install(m, 40, 80)
trashcan:new():install(m, 180, 140)
edge.set(m, 'left', "vivarium_table")
edge.set(m, 'right', "vivarium_lock")
edge.set(m, 'down', "Sundial Alley")
edge.set(m, 'down', "Sundial alley")
return m

View file

@ -1,10 +1,145 @@
local util = require("util")
local window = require("window")
local entity = require("entity")
local room = require("room")
local edge = require("edge")
local button = require("button")
local flask = require("item/flask")
local m = room:from{
local function getColor(c)
local t = {
Red = { 1, 0, 0 },
Green = { 0, 1, 0 },
Blue = { 0, 0, 1 },
}
if type(c) == "string" then
return t[c]
else
return c
end
end
local mixer = entity:from{
width = 130,
height = 110,
con_width = 60,
con_height = 100,
colours = {},
timer = 0,
anim = 0,
}
function mixer:empty()
self.colours = {}
self.anim = 0
end
local mempty = button.new("Empty", function ()
mixer:empty()
end,
75, 5, 50, 45)
local mmix = button.new("Mix", function ()
local len = #mixer.colours
local c = {0, 0, 0}
for k, v in ipairs(mixer.colours) do
local v = getColor(v)
for i = 1, 3 do
c[i] = c[i] + v[i]
end
end
for i = 1, 3 do
c[i] = c[i] / len
end
mixer.colours = {}
for i = 1, len do
mixer.colours[i] = c
end
end,
75, 60, 50, 45)
mixer.draw = window.draw(function (self)
local y = self.con_height + 5
for i, v in ipairs(self.colours) do
love.graphics.setColor(getColor(v))
local h = 5
if i == #self.colours then
h = h * self.anim
end
y = y - h
love.graphics.rectangle('fill', 5, y, self.con_width, h)
end
love.graphics.setColor(1, 1, 1)
mempty:draw()
mmix:draw()
love.graphics.rectangle('line', 5, 5, self.con_width, self.con_height)
love.graphics.rectangle('line', 0, 0, self.width, self.height)
end)
mixer.mousepressed = window.mousepressed(function (self, x, y, button)
if util.inside(x, y, 5, 5, self.con_width, self.con_height) and #self.colours > 0 then
local f = flask:from{ colour = getColor(self.colours[1]) }
f:itemMode()
inventory:pickup(f)
self:empty()
return true
end
window.iterate({mempty, mmix}, x, y, button)
end)
mixer.update = function (self, dt)
self.timer = self.timer + dt
if self.timer > 1/20 then
self.timer = self.timer - 1/20
self.anim = self.anim + 1/20
if self.anim > 1 then
self.anim = 1
end
end
end
function mixer:add(colour)
table.insert(self.colours, colour)
self.anim = 0
end
local vial = entity:from {
width = 20,
height = 60,
colour = ""
}
vial.draw = window.draw(function (self)
love.graphics.setColor(getColor(self.colour))
love.graphics.rectangle('fill', 0, 0, 20, 50)
love.graphics.arc('fill', 'open', 10, 50, 10, 0, math.pi)
love.graphics.setColor(1, 1, 1)
love.graphics.line(0, 50, 0, 0, 20, 0, 20, 50)
love.graphics.arc('line', 'open', 10, 50, 10, 0, math.pi)
end)
vial.mousepressed = window.mousepressed(function (self, x, y, button)
mixer:add(self.colour)
end)
local m = room:new()
mixer:install(m, 160, 40)
vial:from{ colour = "Red" }:install(m, 20, 40)
vial:from{ colour = "Green" }:install(m, 60, 40)
vial:from{ colour = "Blue" }:install(m, 100, 40)
edge.set(m, 'down', "Vivarium")
m.draw = window.draw(function (self)
@ -13,7 +148,15 @@ m.draw = window.draw(function (self)
love.graphics.rectangle('line', 10, 200, 20, 40)
love.graphics.rectangle('line', 290, 200, 20, 40)
for i, v in ipairs(self.objects) do
v:draw()
end
self.edges[1]:draw()
end)
m.update = function (self, dt)
mixer:update(dt)
end
return m

View file

@ -28,7 +28,7 @@ end
function w.iterate(t, x, y, button)
for i, v in util.ipairs_rev(t) do
if v:mousepressed(x, y, button) then
return
return true
end
end
end