a3b6bcd499
It'll allow us to create a way to process everyframe of an animation and change hitbox according to the animation. It should especially simplify the creation of battle system.
109 lines
2.5 KiB
Lua
109 lines
2.5 KiB
Lua
local Base = require "gamecore.modules.world.actors.actor2D"
|
|
local Player = Base:extend()
|
|
|
|
function Player:new(world, x, y, id)
|
|
Player.super.new(self, world, "player", x, y, 16, 24, true)
|
|
self:setSprite("player", 8, 12)
|
|
self:cloneSprite()
|
|
self:setYGravity(480)
|
|
|
|
self.isPunching = false
|
|
self.direction = 1
|
|
|
|
self.punchName = ""
|
|
end
|
|
|
|
function Player:updateStart(dt)
|
|
self.xfrc = 480*3
|
|
|
|
if self.keys["up"].isPressed and (self.onGround) then
|
|
self.ysp = -280
|
|
end
|
|
if self.keys["down"].isDown then
|
|
self.mainHitbox:modify(0, 8, 16, 16)
|
|
else
|
|
self.mainHitbox:modify(0, 0, 16, 24)
|
|
end
|
|
if self.keys["left"].isDown and (not self.isPunching) then
|
|
self.xsp = -120
|
|
end
|
|
if self.keys["right"].isDown and (not self.isPunching) then
|
|
self.xsp = 120
|
|
end
|
|
|
|
if self.keys["A"].isDown then
|
|
self.isPunching = true
|
|
self.punchName = self:addHitboxFromFrameData({"punch", 16, 6, 12, 12, false})
|
|
else
|
|
self.isPunching = false
|
|
self:removeHitbox(self.punchName)
|
|
end
|
|
|
|
if (self.isPunching) then
|
|
self:checkHitboxCollisions(self.punchName)
|
|
end
|
|
|
|
if self.keys["start"].isPressed then
|
|
--self.world:switchActivity()
|
|
--self.assets:switchActivity()
|
|
self.scene.menusystem:activate()
|
|
self.scene.menusystem:switchMenu("PauseMenu")
|
|
self.scene:flushKeys()
|
|
end
|
|
|
|
self:setDirection(self.xsp)
|
|
end
|
|
|
|
function Player:updateEnd(dt)
|
|
self:setAnimation()
|
|
end
|
|
|
|
function Player:setAnimation()
|
|
self:setCustomSpeed(math.abs(self.xsp) / 12)
|
|
if (self.isPunching) then
|
|
self:changeAnimation("punch", false)
|
|
else
|
|
if (self.onGround) then
|
|
if math.abs(self.xsp) > 0 then
|
|
self:changeAnimation("walk", false)
|
|
else
|
|
self:changeAnimation("idle", true)
|
|
end
|
|
else
|
|
self:changeAnimation("jump", true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Player:setDirection(direction)
|
|
direction = direction or 0
|
|
if direction ~= 0 then
|
|
direction = utils.math.sign(direction)
|
|
self.direction = direction
|
|
self:setSpriteScallingX(direction)
|
|
end
|
|
end
|
|
|
|
function Player:collisionResponse(collision)
|
|
if collision.other.type == "coin" then
|
|
collision.other.owner:takeCoin(self)
|
|
end
|
|
end
|
|
|
|
function Player:hitboxResponse(name, type, collision)
|
|
if (collision.other.type == "coin") and (type == "punch") then
|
|
collision.other.owner:takeCoin(self)
|
|
end
|
|
end
|
|
|
|
function Player:draw()
|
|
Player.super.draw(self)
|
|
self:drawHitboxes()
|
|
utils.graphics.resetColor()
|
|
end
|
|
|
|
function Player:drawHUD(id)
|
|
love.graphics.print(id .. " test", 4, 4)
|
|
end
|
|
|
|
return Player
|