2019-07-26 19:39:32 +02:00
|
|
|
local cwd = (...):gsub('%.player$', '') .. "."
|
|
|
|
local Parent = require(cwd .. "parent")
|
|
|
|
local Player = Parent:extend()
|
|
|
|
|
|
|
|
function Player:new(world, x, y, z, id)
|
2019-07-27 21:02:33 +02:00
|
|
|
Player.super.new(self, world, "player", x, y, 0, 16, 12, 24, true)
|
2019-07-27 23:52:15 +02:00
|
|
|
self:setGravity(480*2)
|
2019-07-26 19:39:32 +02:00
|
|
|
|
2019-07-27 21:02:33 +02:00
|
|
|
self:setSprite("sonic", 8, 10)
|
2019-07-26 19:39:32 +02:00
|
|
|
self:cloneSprite()
|
2019-07-27 15:50:59 +02:00
|
|
|
|
|
|
|
self.guiborder = game.gui.newBorder(424, 20, 6)
|
2019-07-27 16:32:48 +02:00
|
|
|
self.emblem = love.graphics.newImage("assets/gui/emblem_speedster.png")
|
|
|
|
self.status = love.graphics.newImage("assets/gui/status_bar.png")
|
2019-08-01 08:45:13 +02:00
|
|
|
|
|
|
|
self.action = "normal"
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function Player:updateStart(dt)
|
|
|
|
self.xfrc, self.yfrc = 480*3, 480*3
|
|
|
|
|
2019-08-01 08:45:13 +02:00
|
|
|
if self.keys["up"].isDown and (self.action ~= "punching") then
|
2019-07-27 23:52:15 +02:00
|
|
|
self.ysp = -160
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
2019-08-01 08:45:13 +02:00
|
|
|
if self.keys["down"].isDown and (self.action ~= "punching") then
|
2019-07-27 23:52:15 +02:00
|
|
|
self.ysp = 160
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
2019-08-01 08:45:13 +02:00
|
|
|
if self.keys["left"].isDown and (self.action ~= "punching") then
|
2019-07-27 23:52:15 +02:00
|
|
|
self.xsp = -160
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
2019-08-01 08:45:13 +02:00
|
|
|
if self.keys["right"].isDown and (self.action ~= "punching") then
|
2019-07-27 23:52:15 +02:00
|
|
|
self.xsp = 160
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
|
|
|
|
2019-08-01 08:45:13 +02:00
|
|
|
if self.keys["A"].isDown and (self.onGround) and (self.action ~= "punching") then
|
2019-07-27 23:52:15 +02:00
|
|
|
self.zsp = 280*1.33
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
2019-08-01 08:45:13 +02:00
|
|
|
|
|
|
|
if self.keys["B"].isPressed and (self.onGround) then
|
|
|
|
self.action = "punching"
|
2019-08-01 12:43:27 +02:00
|
|
|
--self.xsp = 0
|
|
|
|
--self.ysp = 0
|
2019-08-01 08:45:13 +02:00
|
|
|
|
|
|
|
if self:getCurrentAnimation() == "hit1" then
|
|
|
|
self:changeAnimation("hit2", true)
|
|
|
|
elseif self:getCurrentAnimation() == "hit2" then
|
|
|
|
self:changeAnimation("hit3", true)
|
|
|
|
elseif self:getCurrentAnimation() == "hit3" then
|
|
|
|
--self:changeAnimation("hit1", true)
|
|
|
|
else
|
|
|
|
self:changeAnimation("hit1", true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function Player:animationEnded(name)
|
|
|
|
if (name == "hit1") or (name == "hit2") or (name == "hit3") then
|
|
|
|
self.action = "normal"
|
|
|
|
end
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function Player:updateEnd(dt)
|
|
|
|
self:setAnimation()
|
|
|
|
end
|
|
|
|
|
|
|
|
function Player:setAnimation()
|
|
|
|
local gsp = utils.math.pointDistance(0, 0, self.xsp, self.ysp)
|
|
|
|
self:setCustomSpeed(math.abs(gsp) / 12)
|
|
|
|
self:setDirection(self.xsp)
|
2019-08-01 08:45:13 +02:00
|
|
|
if (self.action == "punching") then
|
|
|
|
--the animation system is already active
|
2019-07-26 19:39:32 +02:00
|
|
|
else
|
|
|
|
if (self.onGround) then
|
|
|
|
if (math.abs(self.xsp) > 0) or (math.abs(self.ysp) > 0) then
|
|
|
|
self:changeAnimation("walk", false)
|
|
|
|
else
|
|
|
|
self:changeAnimation("idle", false)
|
|
|
|
end
|
|
|
|
else
|
2019-07-27 23:45:52 +02:00
|
|
|
if (self.zsp) > 0 then
|
|
|
|
self:changeAnimation("jump", false)
|
|
|
|
else
|
|
|
|
self:changeAnimation("fall", false)
|
|
|
|
end
|
2019-07-26 19:39:32 +02:00
|
|
|
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
|
|
|
|
|
2019-07-27 13:56:14 +02:00
|
|
|
function Player:getViewCenter()
|
|
|
|
local x, y = Player.super.getViewCenter(self)
|
|
|
|
return x, y-16
|
|
|
|
end
|
|
|
|
|
2019-07-26 19:39:32 +02:00
|
|
|
function Player:draw()
|
|
|
|
Player.super.draw(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
function Player:drawHUD(id)
|
2019-07-27 15:50:59 +02:00
|
|
|
love.graphics.draw(self.guiborder, 424, 20, 0, -1, -1)
|
2019-07-27 16:32:48 +02:00
|
|
|
love.graphics.draw(self.emblem, 8, 8, 0)
|
|
|
|
love.graphics.draw(self.status, 24, 16, 0)
|
2019-07-26 19:39:32 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
return Player
|