chroma_solstice/entity.lua

91 lines
2.1 KiB
Lua
Raw Normal View History

2015-03-11 20:11:29 -04:00
Entity = class("Entity")
function Entity:initialize(t)
2015-03-12 03:04:09 -04:00
self.x, self.y = t.x, t.y
2015-03-14 05:36:02 -04:00
self.spriteSize = {w = t.sprite:getWidth(), h = t.sprite:getHeight()}
self.size = {w = self.spriteSize.w / 16, h = self.spriteSize.h / 16}
2015-03-11 20:11:29 -04:00
self.color = Color:new(t.color)
2015-03-12 05:13:04 -04:00
self.collision = t.collision --"none", "moveable", "unmoveable"
2015-03-12 03:04:09 -04:00
self.sprite = t.sprite
2015-03-12 04:05:39 -04:00
self.shaAmount = t.sha or 1
2015-03-11 20:11:29 -04:00
end
function Entity:getCollision()
return self.collision
end
2015-03-11 20:11:29 -04:00
function Entity:atGridPos(x, y)
-- we probably don't need this anymore
2015-03-14 05:36:02 -04:00
local size = self:getGridSize()
if x >= self.x and y >= self.y and x < self.x + size.x and y < self.y + size.y then
2015-03-11 20:11:29 -04:00
return true
end
return false
end
function Entity:getOccupiedCells(coords)
--we have this offset so we can project what a movement would do
local offset = coords or {x = 0, y = 0}
local box = self:getGridBox()
local cells = {}
for i = box.x + offset.x, box.x + box.w - 1 + offset.x do
for j = box.y + offset.y, box.y + box.h - 1 + offset.y do
table.insert(cells, {x = i, y = j})
end
end
return cells
end
2015-03-14 05:36:02 -04:00
function Entity:getDrawBox()
local drawPos = self:getDrawPos()
return {x = drawPos.x, y = drawPos.y, w = self.spriteSize.w * drawScale, h = self.spriteSize.h * drawScale}
end
2015-03-14 06:08:50 -04:00
function Entity:getGridBox()
return {x = self.x, y = self.y, w = self.size.w, h = self.size.h}
end
2015-03-11 20:11:29 -04:00
function Entity:getGridPos()
2015-03-12 03:04:09 -04:00
return {x = self.x, y = self.y}
2015-03-11 20:11:29 -04:00
end
function Entity:getDrawPos()
local gridPos = self:getGridPos()
return {
2015-03-14 05:36:02 -04:00
x = (gridPos.x - 1) * width / gridWidth + self:sha(),
y = (gridPos.y - 1) * height / gridHeight + self:sha()
2015-03-11 20:11:29 -04:00
}
2015-03-12 03:04:09 -04:00
end
2015-03-14 05:36:02 -04:00
function Entity:getGridSize()
return {x = self.size.w, y = self.size.h}
end
2015-03-12 05:13:04 -04:00
function Entity:tick()
end
2015-03-12 03:04:09 -04:00
function Entity:draw()
love.graphics.setColor(self.color:set())
local p = self:getDrawPos()
2015-03-14 05:36:02 -04:00
love.graphics.draw(self.sprite, p.x, p.y, 0, drawScale, drawScale)
2015-03-12 03:04:09 -04:00
end
function Entity:canMove()
if self.collision == "unmoveable" then
return false
end
return true
end
function Entity:move(axis, direction)
self[axis] = self[axis] + direction
end
2015-03-12 04:05:39 -04:00
function Entity:sha()
2015-03-14 05:36:02 -04:00
return math.random(-worldSha, worldSha) * .5
2015-03-11 20:11:29 -04:00
end