Compare commits
No commits in common. "3ef6cfcfaf967941b3038b8dcca90cae39651c1f" and "46a52c31df7ca719238e059f124019a5c71f31ec" have entirely different histories.
3ef6cfcfaf
...
46a52c31df
@ -16,7 +16,7 @@ behavior.id = "effects"
|
|||||||
function behavior.new()
|
function behavior.new()
|
||||||
local efb = require "lib.effectbook"
|
local efb = require "lib.effectbook"
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
effectbook = efb.of { efb.bleeding, efb.aversionToDeath },
|
effectbook = efb.of { efb.bleeding },
|
||||||
effectsPriority = {},
|
effectsPriority = {},
|
||||||
effectsProperties = {},
|
effectsProperties = {},
|
||||||
}, behavior)
|
}, behavior)
|
||||||
@ -26,9 +26,11 @@ end
|
|||||||
--- @param effect Effect
|
--- @param effect Effect
|
||||||
--- @param stacks integer
|
--- @param stacks integer
|
||||||
function behavior:addEffect(effect, stacks, intensity)
|
function behavior:addEffect(effect, stacks, intensity)
|
||||||
local task1 = effect:beforeBirth(self.owner, intensity)
|
if effect.beforeBirth then
|
||||||
if task1 then
|
local task1 = effect:beforeBirth(self.owner, intensity)
|
||||||
task1(function() end)
|
if task1 then
|
||||||
|
task1(function() end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- проверяем эффект на возможности суммирования (aka противоречия)
|
-- проверяем эффект на возможности суммирования (aka противоречия)
|
||||||
for i, ef in ipairs(self.effectsPriority) do
|
for i, ef in ipairs(self.effectsPriority) do
|
||||||
@ -37,9 +39,9 @@ function behavior:addEffect(effect, stacks, intensity)
|
|||||||
stacks = stacks + self.effectsProperties[ef].stacks,
|
stacks = stacks + self.effectsProperties[ef].stacks,
|
||||||
intensity = intensity
|
intensity = intensity
|
||||||
}
|
}
|
||||||
local task2 = effect:afterBirth(self.owner, intensity)
|
local task1 = effect:afterBirth(self.owner, intensity)
|
||||||
if task2 then
|
if task1 then
|
||||||
task2(function() end)
|
task1(function() end)
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -56,9 +58,9 @@ function behavior:addEffect(effect, stacks, intensity)
|
|||||||
intensity = intensity
|
intensity = intensity
|
||||||
}
|
}
|
||||||
print("[Effects]: мы применили эффект!!")
|
print("[Effects]: мы применили эффект!!")
|
||||||
local task3 = effect:afterBirth(self.owner, intensity)
|
local task1 = effect:afterBirth(self.owner, intensity)
|
||||||
if task3 then
|
if task1 then
|
||||||
task3(function() end)
|
task1(function() end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -141,27 +143,4 @@ function behavior:afterCast()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- должен вызываться перед получением урона
|
|
||||||
function behavior:beforeDamage(damage)
|
|
||||||
local totalDamage = damage
|
|
||||||
for i, ef in ipairs(self.effectsPriority) do
|
|
||||||
local task1
|
|
||||||
task1, totalDamage = ef:beforeDamage(self.owner, self.effectsProperties[ef].intensity, totalDamage or damage)
|
|
||||||
if task1 then
|
|
||||||
task1(function() end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return totalDamage or damage
|
|
||||||
end
|
|
||||||
|
|
||||||
--- должен вызываться после получения урона
|
|
||||||
function behavior:afterDamage()
|
|
||||||
for i, ef in pairs(self.effectsPriority) do
|
|
||||||
local task1 = ef:afterDamage(self.owner, self.effectsProperties[ef].intensity)
|
|
||||||
if task1 then
|
|
||||||
task1(function() end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return behavior
|
return behavior
|
||||||
|
|||||||
@ -21,8 +21,6 @@ end
|
|||||||
|
|
||||||
--- @param damage integer
|
--- @param damage integer
|
||||||
function behavior:dealDamage(damage)
|
function behavior:dealDamage(damage)
|
||||||
local effects = self.owner:has(Tree.behaviors.effects)
|
|
||||||
if effects then damage = effects:beforeDamage(damage) end
|
|
||||||
self.hp = self.hp - damage
|
self.hp = self.hp - damage
|
||||||
self:checkStats()
|
self:checkStats()
|
||||||
end
|
end
|
||||||
|
|||||||
@ -45,24 +45,8 @@ function bleeding:beforeCast(owner, intensity)
|
|||||||
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
|
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
|
||||||
end
|
end
|
||||||
|
|
||||||
local aversionToDeath = effect.new {
|
|
||||||
tag = "dev_aversion_to_death"
|
|
||||||
}
|
|
||||||
|
|
||||||
function aversionToDeath:beforeDamage(owner, intensity, damage)
|
|
||||||
local stats = owner:has(Tree.behaviors.stats)
|
|
||||||
local effects = owner:has(Tree.behaviors.effects)
|
|
||||||
if not stats or not effects then return end
|
|
||||||
if stats.hp <= damage then
|
|
||||||
effects:deleteStacks(self, 1)
|
|
||||||
-- тут должен быть какой-нибудь классный спецэффект, но я не умею в шейдеры
|
|
||||||
return task.wait({}), stats.hp - 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local effectbook = {
|
local effectbook = {
|
||||||
bleeding = bleeding,
|
bleeding = bleeding
|
||||||
aversionToDeath = aversionToDeath
|
|
||||||
}
|
}
|
||||||
|
|
||||||
--- не уверен зачем нам это, но вай нот ай саппоуз
|
--- не уверен зачем нам это, но вай нот ай саппоуз
|
||||||
|
|||||||
@ -6,9 +6,9 @@ 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 EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>?, integer?
|
--- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>|nil
|
||||||
--- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>?, integer?
|
--- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>|nil
|
||||||
--- @alias EffectData { tag: string, [string]: EffectFunc|EffectDamageFunc|EffectRegenFunc }
|
--- @alias EffectData { tag: string, [string]: EffectFunc|EffectDamageFunc|EffectRegenFunc }
|
||||||
|
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
@ -54,7 +54,7 @@ function effect:afterCast(owner, intensity) end
|
|||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @param damage integer
|
--- @param damage integer
|
||||||
--- @return Task<nil>|nil, integer?
|
--- @return Task<nil>|nil
|
||||||
function effect:beforeAttack(owner, intensity, damage) end
|
function effect:beforeAttack(owner, intensity, damage) end
|
||||||
|
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
@ -65,7 +65,7 @@ function effect:afterAttack(owner, intensity) end
|
|||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @param damage integer
|
--- @param damage integer
|
||||||
--- @return Task<nil>|nil, integer?
|
--- @return Task<nil>|nil
|
||||||
function effect:beforeDamage(owner, intensity, damage) end
|
function effect:beforeDamage(owner, intensity, damage) end
|
||||||
|
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
@ -81,7 +81,7 @@ function effect:beforeRegeneration(owner, intensity, amountHp) end
|
|||||||
|
|
||||||
--- @param owner Character
|
--- @param owner Character
|
||||||
--- @param intensity integer
|
--- @param intensity integer
|
||||||
--- @return Task<nil>|nil, integer|nil
|
--- @return Task<nil>|nil
|
||||||
function effect:afterRegeneration(owner, intensity) end
|
function effect:afterRegeneration(owner, intensity) end
|
||||||
|
|
||||||
--- @param other Effect
|
--- @param other Effect
|
||||||
@ -150,8 +150,7 @@ local function new(data)
|
|||||||
|
|
||||||
function newEffect:beforeAttack(owner, intensity, damage)
|
function newEffect:beforeAttack(owner, intensity, damage)
|
||||||
if not data.beforeAttack then return end
|
if not data.beforeAttack then return end
|
||||||
local task, newDamage = data.beforeDamage(owner, intensity, damage)
|
return data.beforeAttack(owner, intensity, damage)
|
||||||
return task, newDamage
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function newEffect:afterAttack(owner, intensity)
|
function newEffect:afterAttack(owner, intensity)
|
||||||
@ -161,8 +160,7 @@ local function new(data)
|
|||||||
|
|
||||||
function newEffect:beforeDamage(owner, intensity, damage)
|
function newEffect:beforeDamage(owner, intensity, damage)
|
||||||
if not data.beforeDamage then return end
|
if not data.beforeDamage then return end
|
||||||
local task, newDamage = data.beforeDamage(owner, intensity, damage)
|
return data.beforeDamage(owner, intensity, damage)
|
||||||
return task, newDamage
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function newEffect:afterDamage(owner, intensity)
|
function newEffect:afterDamage(owner, intensity)
|
||||||
@ -172,8 +170,7 @@ local function new(data)
|
|||||||
|
|
||||||
function newEffect:beforeRegeneration(owner, intensity, amountHp)
|
function newEffect:beforeRegeneration(owner, intensity, amountHp)
|
||||||
if not data.beforeRegeneration then return end
|
if not data.beforeRegeneration then return end
|
||||||
local task, newAmountHp = data.beforeRegeneration(owner, intensity, amountHp)
|
return data.beforeRegeneration(owner, intensity, amountHp)
|
||||||
return task, newAmountHp
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function newEffect:afterRegeneration(owner, intensity)
|
function newEffect:afterRegeneration(owner, intensity)
|
||||||
|
|||||||
@ -52,8 +52,7 @@ local regenerateMana = spell.new {
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
local sprite = caster:has(Tree.behaviors.sprite)
|
local sprite = caster:has(Tree.behaviors.sprite)
|
||||||
local effects = caster:has(Tree.behaviors.effects)
|
if not sprite then return end
|
||||||
if not sprite or not effects then return end -- и тут возможно на эффекты проверять не стоит
|
|
||||||
print(caster.id, "has regenerated mana and gained initiative")
|
print(caster.id, "has regenerated mana and gained initiative")
|
||||||
|
|
||||||
local light = require "lib/character/character".spawn("Light Effect")
|
local light = require "lib/character/character".spawn("Light Effect")
|
||||||
@ -68,8 +67,7 @@ local regenerateMana = spell.new {
|
|||||||
light:die()
|
light:die()
|
||||||
return task.fromValue()
|
return task.fromValue()
|
||||||
end),
|
end),
|
||||||
sprite:animate("hurt"),
|
sprite:animate("hurt")
|
||||||
effects:addEffect(effects.effectbook[2], 1, 1),
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user