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