Add inventort scroll

This commit is contained in:
백현웅 2025-01-14 19:32:35 +09:00
parent e45a0f4135
commit 3a6c9ec3ad

131
main.lua
View file

@ -1,8 +1,25 @@
-- Imports -- Imports
local util = require("util") local util = require("util")
local window = require("window") local window = require("window")
local entity = require("entity")
local button = require("button") local button = require("button")
function min(a, b)
if a < b then
return a
else
return b
end
end
function max(a, b)
if a > b then
return a
else
return b
end
end
-- entities that has update method -- entities that has update method
active_entities = {} active_entities = {}
@ -38,7 +55,6 @@ screen = {
} }
screen.mousepressed = window.mousepressed(function (self, x, y, button) screen.mousepressed = window.mousepressed(function (self, x, y, button)
log:log(string.format("%d, %d", x, y))
current_room:mousepressed(x, y, button) current_room:mousepressed(x, y, button)
end) end)
@ -53,11 +69,85 @@ inventory = {
height = 60, height = 60,
selected_item = nil, selected_item = nil,
items = {}, items = {},
item_idx = 1,
} }
local cells = math.floor((inventory.width - 60) / 60)
function inventory:setpos(idx, item)
local x = 30 + (idx - 1) * 60 + (60 - item.width) / 2
local y = (60 - item.height) / 2
item:setpos(x, y)
end
function inventory:move(d)
self.item_idx = self.item_idx + d
if self.item_idx < 1 then
self.item_idx = 1
elseif self.item_idx + cells - 1 > #self.items then
self.item_idx = max(1, #self.items - cells + 1)
end
for i = 1, min(#self.items, cells) do
local idx = self.item_idx + i - 1
self:setpos(i, self.items[idx])
end
end
function inventory:pickup(item)
util.add_entity(self.items, item)
self:move(#self.items)
end
function inventory:drop(item)
util.del_entity(self.items, item)
self:move(0)
end
function inventory:use()
self:drop(self.selected_item)
self.selected_item = nil
end
local move_left = entity:from{
x = 0, y = 0,
width = 20,
height = 60,
}
move_left.draw = window.draw(function (self)
love.graphics.polygon('line', 15, 5, 5, 30, 15, 55)
end)
move_left.mousepressed = window.mousepressed(function (self, x, y, button)
inventory:move(-1)
end)
local move_right = entity:from{
x = inventory.width - 20,
y = 0,
width = 20,
height = 60,
}
move_right.draw = window.draw(function (self)
love.graphics.polygon('line', 5, 5, 15, 30, 5, 55)
end)
move_right.mousepressed = window.mousepressed(function (self, x, y, button)
inventory:move(1)
end)
inventory.mousepressed = window.mousepressed(function (self, x, y, button) inventory.mousepressed = window.mousepressed(function (self, x, y, button)
for i, v in ipairs(self.items) do move_left:mousepressed(x, y, button)
if v:mousepressed(x, y, button) then move_right:mousepressed(x, y, button)
for i = 1, min(cells, #self.items) do
local item = self.items[self.item_idx + i - 1]
if item:mousepressed(x, y, button) then
return true return true
end end
end end
@ -66,9 +156,15 @@ inventory.mousepressed = window.mousepressed(function (self, x, y, button)
end) end)
inventory.draw = window.draw(function (self) inventory.draw = window.draw(function (self)
for i, item in pairs(self.items) do move_left:draw()
move_right:draw()
for i = 1, min(#self.items, cells) do
local idx = i + self.item_idx - 1
local item = self.items[idx]
if self.selected_item and self.selected_item == item 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, 25)
end end
item:draw() item:draw()
@ -77,31 +173,6 @@ inventory.draw = window.draw(function (self)
window.draw_border(self.width, self.height) window.draw_border(self.width, self.height)
end) end)
function inventory:set_pos(idx, item)
local x = (idx - 1) * 60 + (60 - item.width) / 2
local y = (60 - item.height) / 2
item:setpos(x, y)
end
function inventory:pickup(item)
util.add_entity(self.items, item)
self:set_pos(item.idx[self.items], item)
end
function inventory:drop(item)
util.del_entity(self.items, item)
for i, v in ipairs(self.items) do
self:set_pos(i, v)
end
end
function inventory:use()
self:drop(self.selected_item)
self.selected_item = nil
end
log = { log = {
x = inventory.width , y = 0, x = inventory.width , y = 0,
width = WIDTH - screen.width, width = WIDTH - screen.width,