chore: let the hitbox handle the scaling
This commit is contained in:
parent
040240492e
commit
3f81920c49
4 changed files with 46 additions and 28 deletions
|
@ -153,32 +153,26 @@ function Actor2D:addHitboxFromFrameData(framedata, animationID, frameID, hitboxI
|
||||||
local anim = animationID or "null"
|
local anim = animationID or "null"
|
||||||
local frame = frameID or 0
|
local frame = frameID or 0
|
||||||
local id = hitboxID or 0
|
local id = hitboxID or 0
|
||||||
if (sx < 0) then
|
|
||||||
ox = self.w - ox - w
|
|
||||||
end
|
|
||||||
if (sy < 0) then
|
|
||||||
oy = self.h - oy - h
|
|
||||||
end
|
|
||||||
|
|
||||||
if (type == "main") then
|
if (type == "main") then
|
||||||
self.mainHitbox:setFromData({ox, oy, w, h})
|
self.mainHitbox:setFromData({ox, oy, w, h}, sx, sy)
|
||||||
else
|
else
|
||||||
local hitboxName = anim .. frame .. type .. id
|
local hitboxName = anim .. frame .. type .. id
|
||||||
self:addHitbox(hitboxName, type, {ox, oy, w, h}, isSolid)
|
self:addHitbox(hitboxName, type, {ox, oy, w, h}, sx, sy, isSolid)
|
||||||
return hitboxName
|
return hitboxName
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor2D:initMainHitbox()
|
function Actor2D:initMainHitbox()
|
||||||
self.mainHitbox = Hitbox(self, self.type, {0, 0, self.w, self.h}, self.isSolid)
|
self.mainHitbox = Hitbox(self, self.type, {0, 0, self.w, self.h}, 0, 0, self.isSolid)
|
||||||
self.mainHitbox:advertiseAsMainHitbox()
|
self.mainHitbox:advertiseAsMainHitbox()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor2D:addHitbox(name, type, data, isSolid)
|
function Actor2D:addHitbox(name, type, data, sx, sy, isSolid)
|
||||||
if (self.hitboxes[name] ~= nil) then
|
if (self.hitboxes[name] ~= nil) then
|
||||||
core.debug:warning("actor2D", "the hitbox " .. name .. " already exists")
|
core.debug:warning("actor2D", "the hitbox " .. name .. " already exists")
|
||||||
else
|
else
|
||||||
local hitbox = Hitbox(self, type, data, isSolid)
|
local hitbox = Hitbox(self, type, data, sx, sy, isSolid)
|
||||||
self.hitboxes[name] = hitbox
|
self.hitboxes[name] = hitbox
|
||||||
return hitbox
|
return hitbox
|
||||||
end
|
end
|
||||||
|
|
|
@ -178,32 +178,26 @@ function Actor3D:addHitboxFromFrameData(framedata, animationID, frameID, hitboxI
|
||||||
local anim = animationID or "null"
|
local anim = animationID or "null"
|
||||||
local frame = frameID or 0
|
local frame = frameID or 0
|
||||||
local id = hitboxID or 0
|
local id = hitboxID or 0
|
||||||
if (sx < 0) then
|
|
||||||
ox = self.w - ox - w
|
|
||||||
end
|
|
||||||
if (sy < 0) then
|
|
||||||
oz = self.d - oz - d
|
|
||||||
end
|
|
||||||
|
|
||||||
if (type == "main") then
|
if (type == "main") then
|
||||||
self.mainHitbox:setFromData({ox, oy, oz, w, h, d})
|
self.mainHitbox:setFromData({ox, oy, oz, w, h, d}, sx, sy)
|
||||||
else
|
else
|
||||||
local hitboxName = anim .. frame .. type .. id
|
local hitboxName = anim .. frame .. type .. id
|
||||||
self:addHitbox(hitboxName, type, {ox, oy, oz, w, h, d}, isSolid)
|
self:addHitbox(hitboxName, type, {ox, oy, oz, w, h, d}, sx, sy, isSolid)
|
||||||
return hitboxName
|
return hitboxName
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor3D:initMainHitbox()
|
function Actor3D:initMainHitbox()
|
||||||
self.mainHitbox = Hitbox(self, self.type, {0, 0, 0, self.w, self.h, self.d}, self.isSolid)
|
self.mainHitbox = Hitbox(self, self.type, {0, 0, 0, self.w, self.h, self.d}, 1, 1, self.isSolid)
|
||||||
self.mainHitbox:advertiseAsMainHitbox()
|
self.mainHitbox:advertiseAsMainHitbox()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor3D:addHitbox(name, type, data, isSolid)
|
function Actor3D:addHitbox(name, type, data, sx, sy, isSolid)
|
||||||
if (self.hitboxes[name] ~= nil) then
|
if (self.hitboxes[name] ~= nil) then
|
||||||
core.debug:warning("actor3D", "the hitbox " .. name .. " already exists")
|
core.debug:warning("actor3D", "the hitbox " .. name .. " already exists")
|
||||||
else
|
else
|
||||||
local hitbox = Hitbox(self, type, data, isSolid)
|
local hitbox = Hitbox(self, type, data, sx, sy, isSolid)
|
||||||
self.hitboxes[name] = hitbox
|
self.hitboxes[name] = hitbox
|
||||||
return hitbox
|
return hitbox
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,12 +27,12 @@ local Hitbox2D = Object:extend()
|
||||||
-- INIT FUNCTIONS
|
-- INIT FUNCTIONS
|
||||||
-- Initialise the actor and its base functions
|
-- Initialise the actor and its base functions
|
||||||
|
|
||||||
function Hitbox2D:new(owner, type, data, isSolid)
|
function Hitbox2D:new(owner, type, data, sx, sy, isSolid)
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.world = owner.world
|
self.world = owner.world
|
||||||
|
|
||||||
self.type = type
|
self.type = type
|
||||||
self:setFromData(data)
|
self:setFromData(data, sx, sy)
|
||||||
self.x, self.y = self:getPosition()
|
self.x, self.y = self:getPosition()
|
||||||
self.isSolid = isSolid
|
self.isSolid = isSolid
|
||||||
|
|
||||||
|
@ -54,11 +54,26 @@ function Hitbox2D:modify(ox, oy, w, h)
|
||||||
self.h = h
|
self.h = h
|
||||||
end
|
end
|
||||||
|
|
||||||
function Hitbox2D:setFromData(data)
|
function Hitbox2D:setFromData(data, sx, sy)
|
||||||
self.ox = data[1]
|
self.ox = data[1]
|
||||||
self.oy = data[2]
|
self.oy = data[2]
|
||||||
self.w = data[3]
|
self.w = data[3]
|
||||||
self.h = data[4]
|
self.h = data[4]
|
||||||
|
|
||||||
|
self:applyScale(sx, sy)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Hitbox2D:applyScale(sx, sy)
|
||||||
|
local sx = sx or 1
|
||||||
|
local sy = sy or 1
|
||||||
|
|
||||||
|
if (sx < 0) then
|
||||||
|
self.ox = self.owner.w - self.ox - self.w
|
||||||
|
end
|
||||||
|
|
||||||
|
if (sy < 0) then
|
||||||
|
self.oy = self.owner.h - self.oy - self.h
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Hitbox2D:setDebugColor(r,g,b)
|
function Hitbox2D:setDebugColor(r,g,b)
|
||||||
|
|
|
@ -27,12 +27,12 @@ local Hitbox3D = Object:extend()
|
||||||
-- INIT FUNCTIONS
|
-- INIT FUNCTIONS
|
||||||
-- Initialise the actor and its base functions
|
-- Initialise the actor and its base functions
|
||||||
|
|
||||||
function Hitbox3D:new(owner, type, data, isSolid)
|
function Hitbox3D:new(owner, type, data, sx, sy, isSolid)
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.world = owner.world
|
self.world = owner.world
|
||||||
|
|
||||||
self.type = type
|
self.type = type
|
||||||
self:setFromData(data)
|
self:setFromData(data, sx, sy)
|
||||||
self.x, self.y, self.z = self:getPosition()
|
self.x, self.y, self.z = self:getPosition()
|
||||||
self.isSolid = isSolid
|
self.isSolid = isSolid
|
||||||
|
|
||||||
|
@ -56,13 +56,28 @@ function Hitbox3D:modify(ox, oy, oz, w, h, d)
|
||||||
self.d = d
|
self.d = d
|
||||||
end
|
end
|
||||||
|
|
||||||
function Hitbox3D:setFromData(data)
|
function Hitbox3D:setFromData(data, sx, sy)
|
||||||
self.ox = data[1]
|
self.ox = data[1]
|
||||||
self.oy = data[2]
|
self.oy = data[2]
|
||||||
self.oz = data[3]
|
self.oz = data[3]
|
||||||
self.w = data[4]
|
self.w = data[4]
|
||||||
self.h = data[5]
|
self.h = data[5]
|
||||||
self.d = data[6]
|
self.d = data[6]
|
||||||
|
|
||||||
|
self:applyScale(sx, sy)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Hitbox3D:applyScale(sx, sy)
|
||||||
|
local sx = sx or 1
|
||||||
|
local sy = sy or 1
|
||||||
|
|
||||||
|
if (sx < 0) then
|
||||||
|
self.ox = self.owner.w - self.ox - self.w
|
||||||
|
end
|
||||||
|
|
||||||
|
if (sy < 0) then
|
||||||
|
self.oy = self.owner.h - self.oy - self.h
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Hitbox3D:setDebugColor(r,g,b)
|
function Hitbox3D:setDebugColor(r,g,b)
|
||||||
|
|
Loading…
Reference in a new issue