Add inventort scroll
This commit is contained in:
parent
e45a0f4135
commit
3a6c9ec3ad
1 changed files with 101 additions and 30 deletions
131
main.lua
131
main.lua
|
@ -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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue