feat(world): add a way to automatically load hitbox from a file
This commit is contained in:
parent
3fd8d2fecc
commit
89b2ffe483
4 changed files with 63 additions and 3 deletions
|
@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
- **assets:** Add a new getCurrentAnimation function
|
- **assets:** Add a new getCurrentAnimation function
|
||||||
|
|
||||||
|
- **world:** Add a way to automatically load hitbox from a file
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- **world2D:** Use a list for bodies (hitboxes, etc) and one other for actors
|
- **world2D:** Use a list for bodies (hitboxes, etc) and one other for actors
|
||||||
|
|
|
@ -11,6 +11,7 @@ function Player:new(world, x, y, id)
|
||||||
self.direction = 1
|
self.direction = 1
|
||||||
|
|
||||||
self.punchName = ""
|
self.punchName = ""
|
||||||
|
self:setHitboxFile("examples.gameplay.plateform.assets.playerhitbox")
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player:updateStart(dt)
|
function Player:updateStart(dt)
|
||||||
|
@ -33,14 +34,12 @@ function Player:updateStart(dt)
|
||||||
|
|
||||||
if self.keys["A"].isDown then
|
if self.keys["A"].isDown then
|
||||||
self.isPunching = true
|
self.isPunching = true
|
||||||
self.punchName = self:addHitboxFromFrameData({"punch", 16, 6, 12, 12, false})
|
|
||||||
else
|
else
|
||||||
self.isPunching = false
|
self.isPunching = false
|
||||||
self:removeHitbox(self.punchName)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if (self.isPunching) then
|
if (self.isPunching) then
|
||||||
self:checkHitboxCollisions(self.punchName)
|
--self:checkHitboxCollisions(self.punchName)
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.keys["start"].isPressed then
|
if self.keys["start"].isPressed then
|
||||||
|
|
13
examples/gameplay/plateform/assets/playerhitbox.lua
Normal file
13
examples/gameplay/plateform/assets/playerhitbox.lua
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
return {
|
||||||
|
["idle"] = {
|
||||||
|
{
|
||||||
|
{"main", 0, 0, 16, 24, true}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
["punch"] = {
|
||||||
|
{
|
||||||
|
{"main", 0, 0, 16, 24, true},
|
||||||
|
{"punch", 16, 6, 12, 12, false}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -55,6 +55,7 @@ function Actor2D:initMovement()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor2D:autoMove(dt)
|
function Actor2D:autoMove(dt)
|
||||||
|
self:updateHitboxes()
|
||||||
self.onGround = false
|
self.onGround = false
|
||||||
self:applyGravity(dt)
|
self:applyGravity(dt)
|
||||||
|
|
||||||
|
@ -185,6 +186,51 @@ function Actor2D:initHitboxes(w, h)
|
||||||
self:initMainHitbox()
|
self:initMainHitbox()
|
||||||
|
|
||||||
self.hitboxes = {}
|
self.hitboxes = {}
|
||||||
|
self.hitboxListFile = ""
|
||||||
|
self.hitboxList = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor2D:setHitboxFile(file)
|
||||||
|
self.hitboxList = require(file)
|
||||||
|
self.hitboxListFile = file
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor2D:getAutomaticHitboxLoading()
|
||||||
|
return (self.hitboxList ~= nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor2D:getHitboxFile()
|
||||||
|
return self.hitboxListFile
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor2D:getHitboxList(animation, frame)
|
||||||
|
if (animation == nil) or (self.hitboxList == nil) then
|
||||||
|
return self.hitboxList
|
||||||
|
else
|
||||||
|
local list = self.hitboxList[animation]
|
||||||
|
|
||||||
|
if (frame == nil) or (list == nil) then
|
||||||
|
return list
|
||||||
|
else
|
||||||
|
return list[frame]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor2D:updateHitboxes()
|
||||||
|
if (self.hitboxList ~= nil) then
|
||||||
|
self:purgeHitbox()
|
||||||
|
local animation, frame
|
||||||
|
animation = self:getCurrentAnimation()
|
||||||
|
frame = self:getRelativeFrame()
|
||||||
|
local hitboxList = self:getHitboxList(animation, frame)
|
||||||
|
|
||||||
|
if (hitboxList ~= nil) then
|
||||||
|
for i,v in ipairs(hitboxList) do
|
||||||
|
self:addHitboxFromFrameData(v, animation, frame, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Actor2D:addHitboxFromFrameData(framedata, animationID, frameID, hitboxID)
|
function Actor2D:addHitboxFromFrameData(framedata, animationID, frameID, hitboxID)
|
||||||
|
|
Loading…
Reference in a new issue