--- @class Effect --- @field tag string local effect = {} effect.__index = effect --- @param owner Character function effect:onBirth(owner) end --- @param owner Character function effect:onDeath(owner) end --- @param owner Character function effect:onStartTurn(owner) end --- @param owner Character function effect:onEndTurn(owner) end --- @param other Effect --- @return Effect|nil function effect:sum(other) end function effect:update(dt) end function effect:draw() end --- @param data {tag: string, onBirth: fun(owner: Character)?, onDeath: fun(owner: Character)?, onStartTurn: fun(owner: Character)?, onEndTurn: fun(owner: Character)?, sum: fun(owner: Character)?} --- @return Effect local function new(data) return setmetatable({ tag = data.tag, onBirth = data.onBirth, onDeath = data.onDeath, onStartTurn = data.onStartTurn, onEndTurn = data.onEndTurn, sum = data.sum }, effect) end return { new = new }