add entity module
This commit is contained in:
parent
a50a6e2734
commit
c055f9d548
6 changed files with 80 additions and 60 deletions
58
entity.lua
Normal file
58
entity.lua
Normal file
|
@ -0,0 +1,58 @@
|
|||
local window = require('window')
|
||||
|
||||
-- base prototype of all drawn things
|
||||
local m = {
|
||||
_t = 'entity',
|
||||
x = 0,
|
||||
y = 0,
|
||||
width = 0,
|
||||
height = 0,
|
||||
}
|
||||
|
||||
m.__index = m
|
||||
|
||||
function m:new()
|
||||
local t = {}
|
||||
t.__index = t
|
||||
return setmetatable(t, self)
|
||||
end
|
||||
|
||||
function m:from(t)
|
||||
t.__index = t
|
||||
return setmetatable(t, self)
|
||||
end
|
||||
|
||||
function m:setpos(x, y)
|
||||
self.x = x
|
||||
self.y = y
|
||||
end
|
||||
|
||||
function m:draw()
|
||||
love.graphics.push('all')
|
||||
love.graphics.translate(self.x, self.y)
|
||||
love.graphics.setLineWidth(3)
|
||||
|
||||
for _, l in ipairs(self.lines) do
|
||||
local mode = l[1]
|
||||
local segs = l[2]
|
||||
|
||||
if mode == 'line' then
|
||||
love.graphics.line(segs)
|
||||
elseif mode == 'fill' then
|
||||
local ts = love.math.triangulate(segs)
|
||||
love.graphics.setColor(0, 0, 0)
|
||||
for _, t in ipairs(ts) do
|
||||
love.graphics.polygon('fill', ts)
|
||||
end
|
||||
|
||||
love.graphics.setColor(1, 1, 1)
|
||||
love.graphics.polygon('line', segs)
|
||||
else
|
||||
error(string.format("mode must be one of line or fill, not %s", mode))
|
||||
end
|
||||
end
|
||||
|
||||
love.graphics.pop()
|
||||
end
|
||||
|
||||
return m
|
31
item.lua
31
item.lua
|
@ -1,36 +1,21 @@
|
|||
local window = require('window')
|
||||
local entity = require('entity')
|
||||
-- item prototype
|
||||
-- name
|
||||
-- image
|
||||
-- description
|
||||
|
||||
local m = {
|
||||
local m = entity:from{
|
||||
_t = 'item',
|
||||
x = 0,
|
||||
y = 0,
|
||||
width = 60,
|
||||
height = 60,
|
||||
name = "item",
|
||||
description = "sample description",
|
||||
}
|
||||
|
||||
function m:new()
|
||||
local mt = { __index = m }
|
||||
local i = {}
|
||||
setmetatable(i, mt)
|
||||
return i
|
||||
end
|
||||
--[[ Item ]]--
|
||||
|
||||
function m:setpos(x, y)
|
||||
self.x = x
|
||||
self.y = y
|
||||
end
|
||||
|
||||
function m:draw()
|
||||
love.graphics.draw(self.image, self.x, self, y)
|
||||
end
|
||||
|
||||
function m:pickupMode(room)
|
||||
function m:pickupMode()
|
||||
self.mousepressed = window.mousepressed(function (self, x, y, button)
|
||||
self:itemMode()
|
||||
self.room:remove(self)
|
||||
|
@ -44,4 +29,12 @@ function m:itemMode()
|
|||
end)
|
||||
end
|
||||
|
||||
function m:install(room, x, y)
|
||||
local i = self:new()
|
||||
i.room = room
|
||||
i:pickupMode()
|
||||
i:setpos(x, y)
|
||||
room:insert(i)
|
||||
end
|
||||
|
||||
return m
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
local item = require('item')
|
||||
|
||||
local m = item:new()
|
||||
|
||||
m.name = "Crowbar"
|
||||
m.description = "A durable tool for opening wooden boxes."
|
||||
|
||||
function m:draw()
|
||||
love.graphics.push('all')
|
||||
love.graphics.translate(self.x, self.y)
|
||||
love.graphics.setLineWidth(3)
|
||||
love.graphics.line(10, 20, 20, 10, 25, 10, 30, 20, 40, 50)
|
||||
love.graphics.pop()
|
||||
end
|
||||
local m = item:from{
|
||||
name = "Crowbar",
|
||||
description = "A durable tool for opening wooden boxes.",
|
||||
lines = {
|
||||
{'line', {10, 20, 20, 10, 25, 10, 30, 20, 40, 50}}
|
||||
}
|
||||
}
|
||||
|
||||
return m
|
||||
|
|
16
object.lua
16
object.lua
|
@ -1,16 +0,0 @@
|
|||
local window = require('window')
|
||||
-- prototype of immovable objects
|
||||
|
||||
local m = {}
|
||||
m.__index = m
|
||||
|
||||
function m:new()
|
||||
return setmetatable({}, self)
|
||||
end
|
||||
|
||||
m.mousepressed = window.mousepressed(function (self, x, y, button)
|
||||
end)
|
||||
|
||||
function m:draw()
|
||||
love.graphics.draw(self.image, self.x, self.y)
|
||||
end
|
11
room.lua
11
room.lua
|
@ -1,10 +1,11 @@
|
|||
local window = require('window')
|
||||
local entity = require('entity')
|
||||
|
||||
-- prototype of room
|
||||
-- - background
|
||||
-- - objects
|
||||
-- - edges
|
||||
local room = {
|
||||
local room = entity:from{
|
||||
x = 0, y = 0,
|
||||
background = love.graphics.newImage("res/defaultbg.png"),
|
||||
edges = {},
|
||||
|
@ -26,14 +27,6 @@ function edge_position(e)
|
|||
return p[1], p[2]
|
||||
end
|
||||
|
||||
local mt = { __index = room }
|
||||
|
||||
function room:new()
|
||||
local m = {}
|
||||
setmetatable(m, mt)
|
||||
return m
|
||||
end
|
||||
|
||||
function room:insert(obj)
|
||||
table.insert(self.objects, obj)
|
||||
obj.idx = #self.objects
|
||||
|
|
|
@ -5,9 +5,6 @@ local r = room:new()
|
|||
r.background = love.graphics.newImage("res/defaultbg.png")
|
||||
|
||||
local crowbar = require('item/crowbar')
|
||||
crowbar:pickupMode()
|
||||
crowbar:setpos(100, 160)
|
||||
crowbar.room = r
|
||||
r:insert(crowbar)
|
||||
crowbar:install(r, 100, 160)
|
||||
|
||||
return r
|
||||
|
|
Loading…
Add table
Reference in a new issue