From ab3d9abf9f434c491bc2ef389de93f60b4e97a6e Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sun, 8 Sep 2019 12:56:59 +0200 Subject: [PATCH] feat(modules): new Timers modules --- gamecore/modules/init.lua | 1 + gamecore/modules/timers/init.lua | 61 ++++++++++++++++++++++++++ gamecore/modules/timers/libs/timer.lua | 45 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 gamecore/modules/timers/init.lua create mode 100644 gamecore/modules/timers/libs/timer.lua diff --git a/gamecore/modules/init.lua b/gamecore/modules/init.lua index d965156..da2199a 100644 --- a/gamecore/modules/init.lua +++ b/gamecore/modules/init.lua @@ -28,5 +28,6 @@ local cwd = (...):gsub('%.init$', '') .. "." modules.Assets = require(cwd .. "assets") modules.GameSystem = require(cwd .. "gamesystem") modules.MenuSystem = require(cwd .. "menusystem") +modules.Timers = require(cwd .. "timers") return modules diff --git a/gamecore/modules/timers/init.lua b/gamecore/modules/timers/init.lua new file mode 100644 index 0000000..fb242d1 --- /dev/null +++ b/gamecore/modules/timers/init.lua @@ -0,0 +1,61 @@ +-- timers :: a basic implementation of a timer system. + +--[[ + Copyright © 2019 Kazhnuz + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +]] + +local cwd = (...):gsub('%.init$', '') .. "." + +local TimersManager = Object:extend() +local Timer = require(cwd .. "libs.timer") + + +function TimersManager:new(subject) + self.subject = subject + self.time = 0 + + self.timers = {} +end + +-- UPDATE +-- Update every timers + +function TimersManager:update(dt) + for k, timer in pairs(self.timers) do + timer:update(dt) + end +end + +-- TIMER FUNCTIONS +-- Handle the timers + +function TimersManager:newTimer(duration, name) + self.timers[name] = Timer(self, duration, name) +end + +function TimersManager:timerResponse(timername) + if self.subject.timerResponse == nil then + core.debug:warning("TimersManager", "the subject have no timerResponse function") + return 0 + end + self.subject:timerResponse(timername) +end + +return TimersManager diff --git a/gamecore/modules/timers/libs/timer.lua b/gamecore/modules/timers/libs/timer.lua new file mode 100644 index 0000000..375ef32 --- /dev/null +++ b/gamecore/modules/timers/libs/timer.lua @@ -0,0 +1,45 @@ +-- timer.lua :: a basic implementation of a timer for the actor system. + +--[[ + Copyright © 2019 Kazhnuz + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +]] + +local Timer = Object:extend() + +function Timer:new(controller, duration, name) + self.controller = controller + + self.time = duration + self.name = name +end + +function Timer:update(dt) + self.time = self.time - dt + if (self.time <= 0) then + self:finish() + end +end + +function Timer:finish() + self.controller:timerResponse(self.name) + self.controller.timers[self.name] = nil +end + +return Timer