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 window = require('window')
|
||||||
|
local entity = require('entity')
|
||||||
-- item prototype
|
-- item prototype
|
||||||
-- name
|
-- name
|
||||||
-- image
|
-- image
|
||||||
-- description
|
-- description
|
||||||
|
|
||||||
local m = {
|
local m = entity:from{
|
||||||
_t = 'item',
|
_t = 'item',
|
||||||
x = 0,
|
|
||||||
y = 0,
|
|
||||||
width = 60,
|
width = 60,
|
||||||
height = 60,
|
height = 60,
|
||||||
name = "item",
|
name = "item",
|
||||||
description = "sample description",
|
description = "sample description",
|
||||||
}
|
}
|
||||||
|
|
||||||
function m:new()
|
--[[ Item ]]--
|
||||||
local mt = { __index = m }
|
|
||||||
local i = {}
|
|
||||||
setmetatable(i, mt)
|
|
||||||
return i
|
|
||||||
end
|
|
||||||
|
|
||||||
function m:setpos(x, y)
|
function m:pickupMode()
|
||||||
self.x = x
|
|
||||||
self.y = y
|
|
||||||
end
|
|
||||||
|
|
||||||
function m:draw()
|
|
||||||
love.graphics.draw(self.image, self.x, self, y)
|
|
||||||
end
|
|
||||||
|
|
||||||
function m:pickupMode(room)
|
|
||||||
self.mousepressed = window.mousepressed(function (self, x, y, button)
|
self.mousepressed = window.mousepressed(function (self, x, y, button)
|
||||||
self:itemMode()
|
self:itemMode()
|
||||||
self.room:remove(self)
|
self.room:remove(self)
|
||||||
|
@ -44,4 +29,12 @@ function m:itemMode()
|
||||||
end)
|
end)
|
||||||
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
|
return m
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
local item = require('item')
|
local item = require('item')
|
||||||
|
|
||||||
local m = item:new()
|
local m = item:from{
|
||||||
|
name = "Crowbar",
|
||||||
m.name = "Crowbar"
|
description = "A durable tool for opening wooden boxes.",
|
||||||
m.description = "A durable tool for opening wooden boxes."
|
lines = {
|
||||||
|
{'line', {10, 20, 20, 10, 25, 10, 30, 20, 40, 50}}
|
||||||
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
|
|
||||||
|
|
||||||
return m
|
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 window = require('window')
|
||||||
|
local entity = require('entity')
|
||||||
|
|
||||||
-- prototype of room
|
-- prototype of room
|
||||||
-- - background
|
-- - background
|
||||||
-- - objects
|
-- - objects
|
||||||
-- - edges
|
-- - edges
|
||||||
local room = {
|
local room = entity:from{
|
||||||
x = 0, y = 0,
|
x = 0, y = 0,
|
||||||
background = love.graphics.newImage("res/defaultbg.png"),
|
background = love.graphics.newImage("res/defaultbg.png"),
|
||||||
edges = {},
|
edges = {},
|
||||||
|
@ -26,14 +27,6 @@ function edge_position(e)
|
||||||
return p[1], p[2]
|
return p[1], p[2]
|
||||||
end
|
end
|
||||||
|
|
||||||
local mt = { __index = room }
|
|
||||||
|
|
||||||
function room:new()
|
|
||||||
local m = {}
|
|
||||||
setmetatable(m, mt)
|
|
||||||
return m
|
|
||||||
end
|
|
||||||
|
|
||||||
function room:insert(obj)
|
function room:insert(obj)
|
||||||
table.insert(self.objects, obj)
|
table.insert(self.objects, obj)
|
||||||
obj.idx = #self.objects
|
obj.idx = #self.objects
|
||||||
|
|
|
@ -5,9 +5,6 @@ local r = room:new()
|
||||||
r.background = love.graphics.newImage("res/defaultbg.png")
|
r.background = love.graphics.newImage("res/defaultbg.png")
|
||||||
|
|
||||||
local crowbar = require('item/crowbar')
|
local crowbar = require('item/crowbar')
|
||||||
crowbar:pickupMode()
|
crowbar:install(r, 100, 160)
|
||||||
crowbar:setpos(100, 160)
|
|
||||||
crowbar.room = r
|
|
||||||
r:insert(crowbar)
|
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
|
Loading…
Add table
Reference in a new issue