--- @class Effect --- @field tag string local effect = {} effect.__index = effect function effect:beforeBirth() end function effect:afterBirth() end function effect:beforeDeath() end function effect:afterDeath() end --- пока что это единственный метод, который работает --- @param owner Character --- @return Task|nil function effect:beforeTurn(owner) end function effect:afterTurn() end function effect:beforeCast() end function effect:afterCast() end --- @param damage integer function effect:beforeAttack(damage) end function effect:afterAttack() end --- @param damage integer function effect:beforeDamage(damage) end function effect:afterDamage() end --- @param amountHp integer кол-во хп для регена function effect:beforeRegeneration(amountHp) end function effect:afterRegeneration() end --- @param other Effect --- @return Effect|nil function effect:sum(other) end function effect:update(dt) end function effect:draw() end --- @todo переделать дату и прочее --- @param data {tag: string, beforeBirth: fun(owner: Character)?, beforeDeath: fun(owner: Character)?, beforeTurn: (fun(owner: Character): Task|nil), afterTurn: (fun(owner: Character): Task|nil), sum: fun(owner: Character)?} --- @return Effect local function new(data) local newEffect = setmetatable({ tag = data.tag, beforeBirth = data.beforeBirth, beforeDeath = data.beforeDeath, -- beforeTurn = data.beforeTurn, afterTurn = data.afterTurn, sum = data.sum }, effect) function newEffect:beforeTurn(owner) return data.beforeTurn(owner) end return newEffect end return { new = new }