sonic-radiance/sonic-radiance.love/scenes/overworld/actors/player.lua

128 lines
3.5 KiB
Lua
Raw Normal View History

local cwd = (...):gsub('%.player$', '') .. "."
local Parent = require(cwd .. "parent")
local Player = Parent:extend()
local Emblem = require "game.modules.gui.emblem"
local TweenManager = require "game.modules.tweenmanager"
function Player:new(world, x, y, id)
Player.super.new(self, world, "player", x, y, 16, 16, true)
2020-08-01 18:54:12 +02:00
self.charset:addTexture("perso")
self.active = game.characters:getActiveCharacterData()
self.emblems = {}
for i, name in ipairs(game.characters.team) do
game.characters:loadSprite(self.assets, name)
self.emblems[i] = Emblem(game.characters.list[name], self.scene)
end
self.activeVisible = game.characters.active
self.canChangeActive = true
self.tweens = TweenManager(self)
2021-03-20 17:23:14 +01:00
self.lastCollision = -1
self.haveCollided = false
2020-08-01 18:54:12 +02:00
end
2020-08-01 18:54:12 +02:00
function Player:isMoving()
return ((math.abs(self.ysp) > 0.01) or (math.abs(self.xsp) > 0.01))
end
function Player:updateStart(dt)
self.xfrc, self.yfrc = 480*3, 480*3
if self.keys["up"].isDown then
self.ysp = -120
2020-08-01 18:54:12 +02:00
self.charDir = "up"
end
if self.keys["down"].isDown then
self.ysp = 120
2020-08-01 18:54:12 +02:00
self.charDir = "down"
end
if self.keys["left"].isDown then
self.xsp = -120
2020-08-01 18:54:12 +02:00
self.charDir = "left"
end
if self.keys["right"].isDown then
self.xsp = 120
2020-08-01 18:54:12 +02:00
self.charDir = "right"
end
if self.keys["select"].isPressed and self.canChangeActive then
game.characters:setActiveCharacter()
self.canChangeActive = false
self.tweens:newTimer(0.3, "changeCharacter")
self.tweens:newTween(0, 0.3, {activeVisible = self.activeVisible + 1}, "inQuad")
end
self.tweens:update(dt)
self.world:getTileTypeAtPoint(self.x, self.y)
2021-03-20 17:23:14 +01:00
if (self.haveCollided == false) then
self.lastCollision = nil
end
self.haveCollided = false
end
function Player:collisionResponse(col)
if (not col.other.owner.isDestroyed) then
if (col.other.type == "gizmo") then
if (col.other.owner.needButton) then
if (self.keys["A"].isPressed) then
col.other.owner:doAction()
self.haveCollided = true
self.lastCollision = col.other.owner.creationID
end
else
if (self.lastCollision ~= col.other.owner.creationID) then
col.other.owner:doAction()
end
self.haveCollided = true
self.lastCollision = col.other.owner.creationID
end
end
if (col.other.type == "btnInput" and col.other.owner.needButton) then
if (self.keys["A"].isPressed) then
col.other.owner:doAction()
self.haveCollided = true
self.lastCollision = col.other.owner.creationID
end
end
end
end
function Player:timerResponse(response)
if (response == "changeCharacter") then
self.canChangeActive = true
self.activeVisible = game.characters.active
self.active = game.characters:getActiveCharacterData()
end
end
function Player:draw()
2020-08-01 18:54:12 +02:00
if (self:isMoving()) then
self.charset:draw(self.active.data.charset, self.active.data.charId, self.charDir, self.x, self.y)
2020-08-01 18:54:12 +02:00
else
self.charset:drawStanding(self.active.data.charset, self.active.data.charId, self.charDir, self.x, self.y)
2020-08-01 18:54:12 +02:00
end
end
function Player:drawHUD(id)
2020-08-02 15:56:36 +02:00
--love.graphics.print(id .. " test", 4, 4)
2020-08-20 15:39:02 +02:00
self:drawEmblems(self.scene:getEmblemsPosition(), 24)
end
function Player:drawEmblems(x, y)
for i,emblem in ipairs(self.emblems) do
local angle = ((i-self.activeVisible) * (360/#self.emblems)) - 90
local rad = math.rad(angle)
local emblemX, emblemY = utils.math.lengthdir(18, rad)
emblem:draw(x + emblemX, y + emblemY)
end
end
return Player