From 1d2658890486c9a7744b5e645dea4359a38aed86 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sun, 5 May 2019 21:01:54 +0200 Subject: [PATCH] modules/world: put timers and sprites functions in the base actor --- gamecore/modules/world/actors/actor2D.lua | 93 +------------------- gamecore/modules/world/actors/baseactor.lua | 94 +++++++++++++++++++++ 2 files changed, 95 insertions(+), 92 deletions(-) diff --git a/gamecore/modules/world/actors/actor2D.lua b/gamecore/modules/world/actors/actor2D.lua index 473389d..508d88c 100644 --- a/gamecore/modules/world/actors/actor2D.lua +++ b/gamecore/modules/world/actors/actor2D.lua @@ -26,8 +26,6 @@ local cwd = (...):gsub('%.actor2D$', '') .. "." local BaseActor = require(cwd .. "baseactor") local Actor2D = BaseActor:extend() -local Timer = require(cwd .. "utils.timer") - -- INIT FUNCTIONS -- Initialise the actor and its base functions @@ -35,8 +33,6 @@ function Actor2D:new(world, type, x, y, w, h, isSolid) Actor2D.super.new(self, world, type) self:initPhysics(x, y, w, h, isSolid) self:register() - - self:initTimers() end function Actor2D:initPhysics(x, y, w, h, isSolid) @@ -57,34 +53,12 @@ function Actor2D:initPhysics(x, y, w, h, isSolid) self.isSolid = isSolid or false self:setFilter() - self:setSprite() end function Actor2D:setBounceFactor(newBounceFactor) self.bounceFactor = newBounceFactor or 0 end --- TIMER FUNCTIONS --- Control the integrated timers of the actor - -function Actor2D:initTimers() - self.timers = {} -end - -function Actor2D:addTimer(name, t) - self.timers[name] = Timer(self, name, t) -end - -function Actor2D:updateTimers(dt) - for k,v in pairs(self.timers) do - v:update(dt) - end -end - -function Actor2D:timerResponse(name) - -- here come the timer responses -end - -- UPDATE FUNCTIONS -- Theses functions are activated every steps @@ -228,74 +202,9 @@ function Actor2D:applyGravity(dt) end end --- DRAW & SPRITES FUNCTIONS +-- DRAW FUNCTIONS -- Draw the actors. -function Actor2D:setSprite(spritename, ox, oy) - 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 -end - -function Actor2D:cloneSprite() - if self.sprite.name ~= nil then - self.sprite.clone = self.assets.sprites[self.sprite.name]:clone() - end -end - -function Actor2D: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 Actor2D: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 Actor2D:updateSprite(dt) - if (self.sprite.clone ~= nil) then - self.sprite.clone:update(dt) - end -end - -function Actor2D:setSpriteScallingX(sx) - local sx = sx or 1 - - self.sprite.sx = sx -end - -function Actor2D:setSpriteScallingY(sy) - local sy = sy or 1 - - self.sprite.sy = sy -end - -function Actor2D:drawSprite(x, y, r, sx, sy, ox, oy, kx, ky) - if (self.sprite.name ~= nil) then - local x = x + self.sprite.ox - local y = y + self.sprite.oy - local sx = sx or self.sprite.sx - local sy = sy or self.sprite.sy - if (self.sprite.clone ~= nil) then - self.sprite.clone:draw(x, y, r, sx, sy, ox, oy, kx, ky) - else - self.assets.sprites[self.sprite.name]:drawAnimation(x, y, r, sx, sy, ox, oy, kx, ky) - end - end -end - function Actor2D:getCenter() return (self.x + (self.w / 2)), (self.y + (self.h / 2)) end diff --git a/gamecore/modules/world/actors/baseactor.lua b/gamecore/modules/world/actors/baseactor.lua index 8258654..6cbef3b 100644 --- a/gamecore/modules/world/actors/baseactor.lua +++ b/gamecore/modules/world/actors/baseactor.lua @@ -22,8 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] +local cwd = (...):gsub('%.baseactor$', '') .. "." local BaseActor = Object:extend() +local Timer = require(cwd .. "utils.timer") + -- INIT FUNCTIONS -- Initialise the actor and its base functions @@ -31,6 +34,8 @@ function BaseActor:new(world, type) self.type = type or "" self:setManagers(world) self:initKeys() + self:initTimers() + self:setSprite() self:setDebugColor(1, 1, 1) end @@ -70,4 +75,93 @@ function BaseActor:getInput(keys) self.keys = keys or core.input.fakekeys end +-- TIMER FUNCTIONS +-- Control the integrated timers of the actor + +function BaseActor:initTimers() + self.timers = {} +end + +function BaseActor:addTimer(name, t) + self.timers[name] = Timer(self, name, t) +end + +function BaseActor:updateTimers(dt) + for k,v in pairs(self.timers) do + v:update(dt) + end +end + +function BaseActor:timerResponse(name) + -- here come the timer responses +end + +-- SPRITES FUNCTIONS +-- Handle the sprite of the actor + +function BaseActor:setSprite(spritename, ox, oy) + 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 +end + +function BaseActor:cloneSprite() + if self.sprite.name ~= nil then + self.sprite.clone = self.assets.sprites[self.sprite.name]:clone() + end +end + +function BaseActor: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 BaseActor: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 BaseActor:updateSprite(dt) + if (self.sprite.clone ~= nil) then + self.sprite.clone:update(dt) + end +end + +function BaseActor:setSpriteScallingX(sx) + local sx = sx or 1 + + self.sprite.sx = sx +end + +function BaseActor:setSpriteScallingY(sy) + local sy = sy or 1 + + self.sprite.sy = sy +end + +function BaseActor:drawSprite(x, y, r, sx, sy, ox, oy, kx, ky) + if (self.sprite.name ~= nil) then + local x = x + self.sprite.ox + local y = y + self.sprite.oy + local sx = sx or self.sprite.sx + local sy = sy or self.sprite.sy + if (self.sprite.clone ~= nil) then + self.sprite.clone:draw(x, y, r, sx, sy, ox, oy, kx, ky) + else + self.assets.sprites[self.sprite.name]:drawAnimation(x, y, r, sx, sy, ox, oy, kx, ky) + end + end +end + return BaseActor