sonic-radiance/sonic-radiance.love/scenes/battlesystem/actors/parent.lua

199 lines
4.4 KiB
Lua
Raw Normal View History

local Parent = Object:extend() -- On créer la classe des entitées, c'est la classe de base
local maputils = require "scenes.battlesystem.utils"
2019-08-16 23:04:30 +02:00
local TweenManager = require "game.modules.tweenmanager"
2019-08-14 20:11:35 +02:00
-- INIT FUNCTION
-- Initilize the actor
function Parent:new(world, x, y, z)
self.depth = 0
self.x = x
self.y = y
self.z = z or 0
self.direction = 1
--self.id = self.world.creationID
self.world = world
self.assets = self.world.assets
self.scene = self.world.scene
self.map = self.world.map
self.maputils = maputils
self.isHero = false
self.isActor = false
self.isEnnemy = false
self.isDestroyed = false
2019-08-16 23:04:30 +02:00
self.tweens = TweenManager(self)
2019-08-16 23:04:30 +02:00
self:setSprite()
self:register()
end
function Parent:register()
self.world:registerActor(self)
end
function Parent:destroy()
self.world:destroyActor(self)
self.isDestroyed = true
end
2019-08-14 20:11:35 +02:00
function Parent:update(dt)
self:updateSprite(dt)
2019-08-16 23:04:30 +02:00
self.tweens:update(dt)
2019-08-14 20:11:35 +02:00
end
-- GET FUNCTIONS
-- Get informations
function Parent:getCoordinate()
return self.x, self.y
end
2019-08-14 20:11:35 +02:00
-- SPRITE FUNCTIONS
-- Handle the character sprite
function Parent:setSprite(spritename, ox, oy, active)
self.sprite = {}
self.sprite.name = spritename or nil
self.sprite.ox = ox or 0
self.sprite.oy = oy or 0
self.sprite.sx = 1
self.sprite.sy = 1
self.sprite.exist = (spritename ~= nil)
self.sprite.clone = nil
self.sprite.active = active or false
end
function Parent:cloneSprite()
if self.sprite.name ~= nil then
self.sprite.clone = self.assets.sprites[self.sprite.name]:clone()
self.sprite.clone:setCallback(self)
end
end
function Parent:changeAnimation(animation, restart)
if (self.sprite.clone == nil) then
self.assets.sprites[self.sprite.name]:changeAnimation(animation, restart)
else
self.sprite.clone:changeAnimation(animation, restart)
end
end
function Parent:animationEnded(animation)
-- Empty placeholder function
end
function Parent:setCustomSpeed(customSpeed)
if (self.sprite.clone == nil) then
self.assets.sprites[self.sprite.name]:setCustomSpeed(customSpeed)
else
self.sprite.clone:setCustomSpeed(customSpeed)
end
end
function Parent:updateSprite(dt)
if (self.sprite.clone ~= nil) then
self.sprite.clone:update(dt)
end
end
function Parent:setSpriteScallingX(sx)
local sx = sx or 1
self.sprite.sx = sx
end
function Parent:setSpriteScallingY(sy)
local sy = sy or 1
self.sprite.sy = sy
end
function Parent:getCurrentAnimation()
if (self.sprite.clone == nil) then
return self.assets.sprites[self.sprite.name]:getCurrentAnimation()
else
return self.sprite.clone:getCurrentAnimation()
end
end
function Parent:getSpriteScalling()
return self.sprite.sx, self.sprite.sy
end
function Parent:getFrame()
if (self.sprite.name ~= nil) then
if (self.sprite.clone ~= nil) then
return self.sprite.clone:getFrame()
else
return self.assets.sprites[self.sprite.name]:getFrame()
end
end
end
function Parent:getRelativeFrame()
if (self.sprite.name ~= nil) then
if (self.sprite.clone ~= nil) then
return self.sprite.clone:getRelativeFrame()
else
return self.assets.sprites[self.sprite.name]:getRelativeFrame()
end
end
end
function Parent:getAnimationDuration()
if (self.sprite.name ~= nil) then
if (self.sprite.clone ~= nil) then
return self.sprite.clone:getAnimationDuration()
else
return self.assets.sprites[self.sprite.name]:getAnimationDuration()
end
end
end
function Parent:drawSprite(tx, ty)
utils.graphics.resetColor()
local x, y = self.world.map:gridToPixel(self.x, self.y, true)
local tx = tx or 0
local ty = ty or 0
if (self.sprite.active) then
2020-08-07 13:15:04 +02:00
local sx = self.direction * self.sprite.sx
local sy = self.sprite.sy
if (self.sprite.clone ~= nil) then
2020-08-07 13:15:04 +02:00
self.sprite.clone:draw(x + tx, y + ty, 0, sx, sy, self.sprite.ox, self.sprite.oy)
else
2020-08-07 13:15:04 +02:00
self.assets.sprites[self.sprite.name]:drawAnimation(x + tx, y + ty, 0, sx, sy, self.sprite.ox, self.sprite.oy)
end
end
end
2019-08-14 20:11:35 +02:00
-- DRAW FUNCTIONS
-- Handle draw functions
function Parent:draw()
end
function Parent:drawShadow()
local x, y = self.world.map:gridToPixel(self.x, self.y, true)
2020-08-07 13:15:04 +02:00
self.assets.images["actorsShadow"]:draw(x, y, 0, self.sprite.sx, self.sprite.sy, 12, 5)
2020-07-19 21:41:14 +02:00
if (self.isSelected == true) then
self.assets.sprites["cursorground"]:drawAnimation(x - 2, y - 1, 0, 1, 1, 12, 5)
end
end
function Parent:drawHUD()
end
return Parent