51 lines
1.3 KiB
Lua
51 lines
1.3 KiB
Lua
local commonShape = require("slick.collision.commonShape")
|
|
local transform = require("slick.geometry.transform")
|
|
|
|
--- @class slick.collision.box: slick.collision.commonShape
|
|
local box = setmetatable({}, { __index = commonShape })
|
|
local metatable = { __index = box }
|
|
|
|
--- @param entity slick.entity | slick.cache | nil
|
|
--- @param x number
|
|
--- @param y number
|
|
--- @param w number
|
|
--- @param h number
|
|
--- @return slick.collision.box
|
|
function box.new(entity, x, y, w, h)
|
|
local result = setmetatable(commonShape.new(entity), metatable)
|
|
|
|
--- @cast result slick.collision.box
|
|
result:init(x, y, w, h)
|
|
return result
|
|
end
|
|
|
|
--- @param x number
|
|
--- @param y number
|
|
--- @param w number
|
|
--- @param h number
|
|
function box:init(x, y, w, h)
|
|
commonShape.init(self)
|
|
|
|
self:addPoints(
|
|
x, y,
|
|
x + w, y,
|
|
x + w, y + h,
|
|
x, y + h)
|
|
|
|
self:addNormal(0, 1)
|
|
self:addNormal(-1, 0)
|
|
self:addNormal(0, -1)
|
|
self:addNormal(1, 0)
|
|
|
|
self:transform(transform.IDENTITY)
|
|
|
|
assert(self.vertexCount == 4, "box must have 4 points")
|
|
assert(self.normalCount == 4, "box must have 4 normals")
|
|
end
|
|
|
|
function box:inside(p)
|
|
return p.x >= self.bounds:left() and p.x <= self.bounds:right() and p.y >= self.bounds:top() and p.y <= self.bounds:bottom()
|
|
end
|
|
|
|
return box
|