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)
end

function Player:update(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.ysp =  120
  end
  if self.keys["left"].isDown then
    self.xsp = -120
  end
  if self.keys["right"].isDown then
    self.xsp =  120
  end

  if self.keys["start"].isPressed then
    self.world:switchActivity()
    self.assets:switchActivity()
    self.scene:flushKeys()
  end

  self:setDirection(self.xsp)

  Player.super.update(self, dt)
  self:setAnimation()
end

function Player:setAnimation()
  self:setCustomSpeed(math.abs(self.xsp) / 12)
  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

function Player:setDirection(direction)
  direction = direction or 0
  if direction ~= 0 then
    direction = utils.math.sign(direction)
    self:setSpriteScallingX(direction)
  end
end

function Player:collisionResponse(collision)
  if collision.other.type == "coin" then
    collision.other:takeCoin(self)
  end
end


return Player
