local Game = {}
Game.__index = Game
function Game.new(name)
return setmetatable({name = name,
callbacks = {}}, Game)
end
function Game:start()
for _, callback in ipairs(self.callbacks) do
callback(self.name)
end
end
local Statistic = {}
Statistic.__index = Statistic
function Statistic.new()
return setmetatable({starts_count = 0,
last_game = ""}, Statistic)
end
function Statistic:game_started(game_name)
self.last_game = game_name
self.starts_count = self.starts_count + 1
end
local statistic = Statistic.new()
local heroes = Game.new("Heroes")
local doom = Game.new("Doom")
-- The handler is a function, it calls the
-- method of statistic
local function on_start(game_name)
statistic:game_started(game_name)
end
-- Subscribe to events: add the handler
heroes.callbacks[#heroes.callbacks + 1] = on_start
doom.callbacks[#doom.callbacks + 1] = on_start
doom:start()
heroes:start()
-- statistic.last_game = Heroes
-- statistic.starts_count = 2
print("statistic.last_game = "
.. statistic.last_game)
print("statistic.starts_count = "
.. statistic.starts_count)