some refactor & comments to effect functions
This commit is contained in:
parent
1514ad12ca
commit
4cdd9f17ba
@ -2,6 +2,7 @@ local task = require "lib.utils.task"
|
|||||||
|
|
||||||
--- ===========ЛОГИКА ЭФФЕКТОВ И ЧТО С ЭТИМ ЕДЯТ===========
|
--- ===========ЛОГИКА ЭФФЕКТОВ И ЧТО С ЭТИМ ЕДЯТ===========
|
||||||
--- читать здесь: https://docs.google.com/document/d/1Hxa5dOLaeRpLQOs5H-oIDDuLLhKbDw40lR9d62Zb4Tg/edit?usp=sharing
|
--- читать здесь: https://docs.google.com/document/d/1Hxa5dOLaeRpLQOs5H-oIDDuLLhKbDw40lR9d62Zb4Tg/edit?usp=sharing
|
||||||
|
--- и здесь: https://docs.google.com/document/d/1jvhuM3mxqYSQTEM8m-WL-uUSie9QRsZOCCUEiw9ZqzM/edit?tab=t.0
|
||||||
|
|
||||||
--- behavior thats holds all effects that we applied
|
--- behavior thats holds all effects that we applied
|
||||||
--- @class EffectsBehavior : Behavior
|
--- @class EffectsBehavior : Behavior
|
||||||
@ -30,7 +31,7 @@ function behavior:addEffect(effect, stacks, intensity)
|
|||||||
if task1 then
|
if task1 then
|
||||||
task1(function() end)
|
task1(function() end)
|
||||||
end
|
end
|
||||||
if birthStatement == false then return end -- избегаем значения nil
|
if not birthStatement then return end
|
||||||
-- проверяем эффект на возможности суммирования (aka противоречия)
|
-- проверяем эффект на возможности суммирования (aka противоречия)
|
||||||
for i, ef in ipairs(self.effectsPriority) do
|
for i, ef in ipairs(self.effectsPriority) do
|
||||||
if ef == effect then
|
if ef == effect then
|
||||||
@ -56,10 +57,11 @@ function behavior:addEffect(effect, stacks, intensity)
|
|||||||
stacks = stacks,
|
stacks = stacks,
|
||||||
intensity = intensity
|
intensity = intensity
|
||||||
}
|
}
|
||||||
print("[Effects]: мы применили эффект!!")
|
|
||||||
local task3 = effect:afterBirth(self.owner, intensity)
|
local task3 = effect:afterBirth(self.owner, intensity)
|
||||||
if task3 then
|
if task3 then
|
||||||
task3(function() end)
|
task3(function()
|
||||||
|
print("[Effects]: мы применили эффект!!")
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@ local bleeding = effect.new({
|
|||||||
{ intensity = 1, color = Vec3 { 0, 0., 0. } }, 800, easing.easeInCubic), function()
|
{ intensity = 1, color = Vec3 { 0, 0., 0. } }, 800, easing.easeInCubic), function()
|
||||||
light:die()
|
light:die()
|
||||||
return task.fromValue()
|
return task.fromValue()
|
||||||
end) }), true
|
end) })
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -34,14 +34,16 @@ function bleeding:afterTurn(owner, intensity)
|
|||||||
local behavior = owner:has(Tree.behaviors.effects)
|
local behavior = owner:has(Tree.behaviors.effects)
|
||||||
if not behavior then
|
if not behavior then
|
||||||
print('[Effect]: yo man what the hell wheres your behavior how thats possible please stop thats not normal')
|
print('[Effect]: yo man what the hell wheres your behavior how thats possible please stop thats not normal')
|
||||||
return
|
else
|
||||||
|
behavior:deleteStacks(self, 1)
|
||||||
end
|
end
|
||||||
behavior:deleteStacks(self, 1)
|
return task.wait {}
|
||||||
end
|
end
|
||||||
|
|
||||||
--- meow
|
--- meow
|
||||||
function bleeding:afterCast(owner, intensity)
|
function bleeding:afterCast(owner, intensity)
|
||||||
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
|
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
|
||||||
|
return task.wait {}
|
||||||
end
|
end
|
||||||
|
|
||||||
function bleeding:beforeCast(owner, intensity)
|
function bleeding:beforeCast(owner, intensity)
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
local utils = require "lib.utils.utils"
|
local utils = require "lib.utils.utils"
|
||||||
local task = require "lib.utils.task"
|
local taskUtils = require "lib.utils.task"
|
||||||
|
|
||||||
--- @class Effect
|
--- @class Effect
|
||||||
--- @field tag string
|
--- @field tag string
|
||||||
@ -7,84 +7,112 @@ local effect = {}
|
|||||||
effect.__index = effect
|
effect.__index = effect
|
||||||
|
|
||||||
--- Предполагается, что в каждую функцию будет передаваться `Character` и параметр `intensity`, который отвечает за силу спелла
|
--- Предполагается, что в каждую функцию будет передаваться `Character` и параметр `intensity`, который отвечает за силу спелла
|
||||||
--- @alias EffectFunc fun(owner: Character, intensity: integer): Task<nil>
|
--- @alias EffectFunc fun(owner: Character, intensity: integer): Task<nil>, nil -- бред конечно, но иначе всё в жёлтом
|
||||||
--- @alias EffectStatementFunc fun(owner: Character, intensity: integer): Task<nil>, boolean
|
--- @alias EffectStatementFunc fun(owner: Character, intensity: integer): Task<nil>, boolean
|
||||||
--- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>, integer
|
--- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>, integer
|
||||||
--- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>, integer
|
--- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>, integer
|
||||||
--- @alias EffectData { tag: string, [string]: EffectFunc|EffectStatementFunc|EffectDamageFunc|EffectRegenFunc }
|
--- @alias EffectData { tag: string, [string]: EffectFunc|EffectStatementFunc|EffectDamageFunc|EffectRegenFunc }
|
||||||
|
|
||||||
|
--- Срабатывает перед применением эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает, а можно ли применить эффект?
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>, boolean
|
--- @return Task<nil>, boolean
|
||||||
function effect:beforeBirth(owner, intensity) return task.wait {}, true end
|
function effect:beforeBirth(owner, intensity) return taskUtils.wait {}, true end
|
||||||
|
|
||||||
|
--- Срабатывает после применения эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterBirth(owner, intensity) return task.wait {} end
|
function effect:afterBirth(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед смертью владельца эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает, умирает ли персонаж?
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>, boolean
|
--- @return Task<nil>, boolean
|
||||||
function effect:beforeDeath(owner, intensity) return task.wait {}, true end
|
function effect:beforeDeath(owner, intensity) return taskUtils.wait {}, true end
|
||||||
|
|
||||||
|
--- Срабатывает после смерти владельца эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterDeath(owner, intensity) return task.wait {} end
|
function effect:afterDeath(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед ходом владельца эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает, будет ли персонаж ходить?
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>, boolean
|
--- @return Task<nil>, boolean
|
||||||
function effect:beforeTurn(owner, intensity) return task.wait {}, true end
|
function effect:beforeTurn(owner, intensity) return taskUtils.wait {}, true end
|
||||||
|
|
||||||
|
--- Срабатывает после хода владельца эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterTurn(owner, intensity) return task.wait {} end
|
function effect:afterTurn(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед кастом заклинания владельцем эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает, произойдёт ли каст?
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>, boolean
|
--- @return Task<nil>, boolean
|
||||||
function effect:beforeCast(owner, intensity) return task.wait {}, true end
|
function effect:beforeCast(owner, intensity) return taskUtils.wait {}, true end
|
||||||
|
|
||||||
|
--- Срабатывает после каста заклинания владельцем эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterCast(owner, intensity) return task.wait {} end
|
function effect:afterCast(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед нанесением урона владельцем эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает урон, который собираются нанести
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @param damage integer
|
--- @param damage integer
|
||||||
--- @return Task<nil>, integer
|
--- @return Task<nil>, integer
|
||||||
function effect:beforeAttack(owner, intensity, damage) return task.wait {}, damage end
|
function effect:beforeAttack(owner, intensity, damage) return taskUtils.wait {}, damage end
|
||||||
|
|
||||||
|
--- Срабатывает после нанесения урона владельцем эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterAttack(owner, intensity) return task.wait {} end
|
function effect:afterAttack(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед получением урона владельцем эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает урон, который должны получить
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @param damage integer
|
--- @param damage integer
|
||||||
--- @return Task<nil>, integer
|
--- @return Task<nil>, integer
|
||||||
function effect:beforeDamage(owner, intensity, damage) return task.wait {}, damage end
|
function effect:beforeDamage(owner, intensity, damage) return taskUtils.wait {}, damage end
|
||||||
|
|
||||||
|
--- Срабатывает после получения урона владельцем эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterDamage(owner, intensity) return task.wait {} end
|
function effect:afterDamage(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
|
--- Срабатывает перед регенерацией здоровья владельцем эффекта
|
||||||
|
---
|
||||||
|
--- Возвращает количество здоровья, которое должно быть восстановлено
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @param amountHp integer кол-во хп для регена
|
--- @param amountHp integer кол-во хп для регена
|
||||||
--- @return Task<nil>, integer
|
--- @return Task<nil>, integer
|
||||||
function effect:beforeRegeneration(owner, intensity, amountHp) return task.wait {}, amountHp end
|
function effect:beforeRegeneration(owner, intensity, amountHp) return taskUtils.wait {}, amountHp end
|
||||||
|
|
||||||
|
--- Срабатывает после регенерации здоровья владельцем эффекта
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>
|
--- @return Task<nil>
|
||||||
function effect:afterRegeneration(owner, intensity) return task.wait {} end
|
function effect:afterRegeneration(owner, intensity) return taskUtils.wait {} end
|
||||||
|
|
||||||
--- @param other Effect
|
--- @param other Effect
|
||||||
--- @return Effect|nil
|
--- @return Effect|nil
|
||||||
@ -101,8 +129,6 @@ function effect:__eq(other)
|
|||||||
return utils.deepComprasion(self, other)
|
return utils.deepComprasion(self, other)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @todo переделать дату и прочее
|
|
||||||
-- --- @param data {tag: string, beforeBirth: fun(owner: Character)?, beforeDeath: fun(owner: Character)?, beforeTurn: (fun(owner: Character): Task<nil>|nil), afterTurn: (fun(owner: Character): Task<nil>|nil), sum: fun(owner: Character)?}
|
|
||||||
--- @param data EffectData
|
--- @param data EffectData
|
||||||
--- @return Effect
|
--- @return Effect
|
||||||
local function new(data)
|
local function new(data)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user