I MAKE THIS SHIT TO WORK (pochti)
This commit is contained in:
parent
e3d9cafdd3
commit
351fdda60c
@ -9,5 +9,6 @@ Tree.behaviors.positioned = require "character.behaviors.positioned"
|
|||||||
Tree.behaviors.tiled = require "character.behaviors.tiled"
|
Tree.behaviors.tiled = require "character.behaviors.tiled"
|
||||||
Tree.behaviors.cursor = require "character.behaviors.cursor"
|
Tree.behaviors.cursor = require "character.behaviors.cursor"
|
||||||
Tree.behaviors.ai = require "lib.character.behaviors.ai"
|
Tree.behaviors.ai = require "lib.character.behaviors.ai"
|
||||||
|
Tree.behaviors.effects = require "lib.character.behaviors.effects"
|
||||||
|
|
||||||
--- @alias voidCallback fun(): nil
|
--- @alias voidCallback fun(): nil
|
||||||
|
|||||||
@ -5,20 +5,26 @@
|
|||||||
--- @class EffectsBehavior : Behavior
|
--- @class EffectsBehavior : Behavior
|
||||||
--- @field effectsPriority Effect[] хранит эффекты в порядке их применения
|
--- @field effectsPriority Effect[] хранит эффекты в порядке их применения
|
||||||
--- @field effectsStacks table<Effect, integer> хранит стаки эффектов
|
--- @field effectsStacks table<Effect, integer> хранит стаки эффектов
|
||||||
|
--- @field effectbook Effect[] все возможные эффекты (хз надо ли так вообще)
|
||||||
local behavior = {}
|
local behavior = {}
|
||||||
behavior.__index = behavior
|
behavior.__index = behavior
|
||||||
behavior.id = "effects"
|
behavior.id = "effects"
|
||||||
|
|
||||||
--- @return EffectsBehavior
|
--- @return EffectsBehavior
|
||||||
function behavior.new()
|
function behavior.new()
|
||||||
return setmetatable({}, behavior)
|
local efb = require "lib.effectbook"
|
||||||
|
return setmetatable({
|
||||||
|
effectbook = efb.of { efb.bleeding },
|
||||||
|
effectsPriority = {},
|
||||||
|
effectsStacks = {},
|
||||||
|
}, behavior)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- проверяет, можно ли наложить эффект и при наложении его применяет
|
--- проверяет, можно ли наложить эффект и при наложении его применяет
|
||||||
--- @param effect Effect
|
--- @param effect Effect
|
||||||
--- @param stacks integer
|
--- @param stacks integer
|
||||||
function behavior:addEffect(effect, stacks)
|
function behavior:addEffect(effect, stacks)
|
||||||
if not effect:beforeBirth() then return end
|
-- if not effect:beforeBirth() then return end
|
||||||
-- проверяем эффект на возможности суммирования (aka противоречия)
|
-- проверяем эффект на возможности суммирования (aka противоречия)
|
||||||
for i, ef in ipairs(self.effectsPriority) do
|
for i, ef in ipairs(self.effectsPriority) do
|
||||||
local effectSum = effect:sum(ef)
|
local effectSum = effect:sum(ef)
|
||||||
@ -30,13 +36,15 @@ function behavior:addEffect(effect, stacks)
|
|||||||
|
|
||||||
self.effectsPriority[#self.effectsPriority + 1] = effect
|
self.effectsPriority[#self.effectsPriority + 1] = effect
|
||||||
self.effectsStacks[effect] = stacks
|
self.effectsStacks[effect] = stacks
|
||||||
|
print("[Effects]: мы применили эффект!!")
|
||||||
effect:afterBirth()
|
effect:afterBirth()
|
||||||
end
|
end
|
||||||
|
|
||||||
--- должен вызываться в начале хода
|
--- должен вызываться в начале хода
|
||||||
function behavior:beforeTurn()
|
function behavior:beforeTurn()
|
||||||
for i, ef in ipairs(self.effectsPriority) do
|
for i, ef in ipairs(self.effectsPriority) do
|
||||||
ef:beforeTurn()
|
local t = ef:beforeTurn(self.owner)
|
||||||
|
if not t then return end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,19 @@
|
|||||||
|
local task = require "lib.utils.task"
|
||||||
local effect = require "lib.spell.effect"
|
local effect = require "lib.spell.effect"
|
||||||
|
|
||||||
local bleeding = effect.new({
|
local bleeding = effect.new({
|
||||||
tag = "bleeding",
|
tag = "bleeding",
|
||||||
|
beforeTurn = function(owner)
|
||||||
|
for i, c in pairs(owner) do
|
||||||
|
print(i, c)
|
||||||
|
end
|
||||||
|
print("мы начали применять блидинг!!", owner)
|
||||||
|
local stats = owner:has(Tree.behaviors.stats)
|
||||||
|
local sprite = owner:has(Tree.behaviors.sprite)
|
||||||
|
if not stats or not sprite then return end
|
||||||
|
stats:dealDamage(2)
|
||||||
|
return task.wait({ sprite:animate("hurt") })
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,10 @@ function turnOrder:next()
|
|||||||
self:next()
|
self:next()
|
||||||
end)
|
end)
|
||||||
else
|
else
|
||||||
|
char:try(Tree.behaviors.effects, function(effects)
|
||||||
|
print("[TurnOrder]: ну мы пытаемся применить эффект к", char.id)
|
||||||
|
effects:beforeTurn()
|
||||||
|
end)
|
||||||
Tree.level.selector:unlock()
|
Tree.level.selector:unlock()
|
||||||
Tree.level.selector:select(self.current)
|
Tree.level.selector:select(self.current)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -11,7 +11,9 @@ function effect:beforeDeath() end
|
|||||||
|
|
||||||
function effect:afterDeath() end
|
function effect:afterDeath() end
|
||||||
|
|
||||||
function effect:beforeTurn() end
|
--- @param owner Character
|
||||||
|
--- @return Task<nil>|nil
|
||||||
|
function effect:beforeTurn(owner) end
|
||||||
|
|
||||||
function effect:afterTurn() end
|
function effect:afterTurn() end
|
||||||
|
|
||||||
@ -43,17 +45,23 @@ function effect:update(dt) end
|
|||||||
function effect:draw() end
|
function effect:draw() end
|
||||||
|
|
||||||
--- @todo переделать дату и прочее
|
--- @todo переделать дату и прочее
|
||||||
--- @param data {tag: string, onBirth: fun(owner: Character)?, onDeath: fun(owner: Character)?, onStartTurn: fun(owner: Character)?, onEndTurn: fun(owner: Character)?, sum: fun(owner: Character)?}
|
--- @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)?}
|
||||||
--- @return Effect
|
--- @return Effect
|
||||||
local function new(data)
|
local function new(data)
|
||||||
return setmetatable({
|
local newEffect = setmetatable({
|
||||||
tag = data.tag,
|
tag = data.tag,
|
||||||
onBirth = data.onBirth,
|
beforeBirth = data.beforeBirth,
|
||||||
onDeath = data.onDeath,
|
beforeDeath = data.beforeDeath,
|
||||||
onStartTurn = data.onStartTurn,
|
-- beforeTurn = data.beforeTurn,
|
||||||
onEndTurn = data.onEndTurn,
|
afterTurn = data.afterTurn,
|
||||||
sum = data.sum
|
sum = data.sum
|
||||||
}, effect)
|
}, effect)
|
||||||
|
|
||||||
|
function newEffect:beforeTurn(owner)
|
||||||
|
return data.beforeTurn(owner)
|
||||||
|
end
|
||||||
|
|
||||||
|
return newEffect
|
||||||
end
|
end
|
||||||
|
|
||||||
return { new = new }
|
return { new = new }
|
||||||
|
|||||||
@ -86,9 +86,10 @@ local attack = spell.new {
|
|||||||
stats.hp = stats.hp - 4
|
stats.hp = stats.hp - 4
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
local targetEffects = targetCharacter:has(Tree.behaviors.effects)
|
||||||
local sprite = caster:has(Tree.behaviors.sprite)
|
local sprite = caster:has(Tree.behaviors.sprite)
|
||||||
local targetSprite = targetCharacter:has(Tree.behaviors.sprite)
|
local targetSprite = targetCharacter:has(Tree.behaviors.sprite)
|
||||||
if not sprite or not targetSprite then return end
|
if not sprite or not targetSprite or not targetEffects then return end -- проверять на эффект может и не стоит
|
||||||
|
|
||||||
caster:try(Tree.behaviors.positioned, function(b) b:lookAt(target) end)
|
caster:try(Tree.behaviors.positioned, function(b) b:lookAt(target) end)
|
||||||
|
|
||||||
@ -110,7 +111,8 @@ local attack = spell.new {
|
|||||||
light:die()
|
light:die()
|
||||||
return task.fromValue()
|
return task.fromValue()
|
||||||
end),
|
end),
|
||||||
targetSprite:animate("hurt")
|
targetSprite:animate("hurt"),
|
||||||
|
targetEffects:addEffect(targetEffects.effectbook[1], 3)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
),
|
),
|
||||||
|
|||||||
71
main.lua
71
main.lua
@ -15,16 +15,17 @@ function love.load()
|
|||||||
testLayout = require "lib.simple_ui.level.layout"
|
testLayout = require "lib.simple_ui.level.layout"
|
||||||
|
|
||||||
local chars = {
|
local chars = {
|
||||||
character.spawn("Foodor")
|
-- character.spawn("Foodor")
|
||||||
:addBehavior {
|
-- :addBehavior {
|
||||||
Tree.behaviors.residentsleeper.new(),
|
-- Tree.behaviors.residentsleeper.new(),
|
||||||
Tree.behaviors.stats.new(nil, nil, 1),
|
-- Tree.behaviors.stats.new(nil, nil, 1),
|
||||||
Tree.behaviors.positioned.new(Vec3 { 3, 3 }),
|
-- Tree.behaviors.positioned.new(Vec3 { 3, 3 }),
|
||||||
Tree.behaviors.tiled.new(),
|
-- Tree.behaviors.tiled.new(),
|
||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
-- Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
||||||
Tree.behaviors.shadowcaster.new(),
|
-- Tree.behaviors.shadowcaster.new(),
|
||||||
Tree.behaviors.spellcaster.new()
|
-- Tree.behaviors.spellcaster.new(),
|
||||||
},
|
-- Tree.behaviors.effects.new()
|
||||||
|
-- },
|
||||||
character.spawn("Foodor")
|
character.spawn("Foodor")
|
||||||
:addBehavior {
|
:addBehavior {
|
||||||
Tree.behaviors.residentsleeper.new(),
|
Tree.behaviors.residentsleeper.new(),
|
||||||
@ -33,7 +34,8 @@ function love.load()
|
|||||||
Tree.behaviors.tiled.new(),
|
Tree.behaviors.tiled.new(),
|
||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
||||||
Tree.behaviors.shadowcaster.new(),
|
Tree.behaviors.shadowcaster.new(),
|
||||||
Tree.behaviors.spellcaster.new()
|
Tree.behaviors.spellcaster.new(),
|
||||||
|
Tree.behaviors.effects.new()
|
||||||
},
|
},
|
||||||
character.spawn("Foodor")
|
character.spawn("Foodor")
|
||||||
:addBehavior {
|
:addBehavior {
|
||||||
@ -43,30 +45,33 @@ function love.load()
|
|||||||
Tree.behaviors.tiled.new(),
|
Tree.behaviors.tiled.new(),
|
||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
||||||
Tree.behaviors.shadowcaster.new(),
|
Tree.behaviors.shadowcaster.new(),
|
||||||
Tree.behaviors.spellcaster.new()
|
|
||||||
},
|
|
||||||
character.spawn("Baris")
|
|
||||||
:addBehavior {
|
|
||||||
Tree.behaviors.residentsleeper.new(),
|
|
||||||
Tree.behaviors.stats.new(nil, nil, 2),
|
|
||||||
Tree.behaviors.positioned.new(Vec3 { 5, 5 }),
|
|
||||||
Tree.behaviors.tiled.new(),
|
|
||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
|
||||||
Tree.behaviors.shadowcaster.new(),
|
|
||||||
Tree.behaviors.spellcaster.new(),
|
Tree.behaviors.spellcaster.new(),
|
||||||
Tree.behaviors.ai.new()
|
Tree.behaviors.effects.new()
|
||||||
},
|
|
||||||
character.spawn("BOAR")
|
|
||||||
:addBehavior {
|
|
||||||
Tree.behaviors.residentsleeper.new(),
|
|
||||||
Tree.behaviors.stats.new(nil, nil, 2),
|
|
||||||
Tree.behaviors.positioned.new(Vec3 { 7, 7 }),
|
|
||||||
Tree.behaviors.tiled.new(),
|
|
||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.boar),
|
|
||||||
Tree.behaviors.shadowcaster.new(),
|
|
||||||
Tree.behaviors.spellcaster.new(),
|
|
||||||
Tree.behaviors.ai.new()
|
|
||||||
},
|
},
|
||||||
|
-- character.spawn("Baris")
|
||||||
|
-- :addBehavior {
|
||||||
|
-- Tree.behaviors.residentsleeper.new(),
|
||||||
|
-- Tree.behaviors.stats.new(nil, nil, 2),
|
||||||
|
-- Tree.behaviors.positioned.new(Vec3 { 5, 5 }),
|
||||||
|
-- Tree.behaviors.tiled.new(),
|
||||||
|
-- Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
||||||
|
-- Tree.behaviors.shadowcaster.new(),
|
||||||
|
-- Tree.behaviors.spellcaster.new(),
|
||||||
|
-- Tree.behaviors.ai.new(),
|
||||||
|
-- Tree.behaviors.effects.new()
|
||||||
|
-- },
|
||||||
|
-- character.spawn("BOAR")
|
||||||
|
-- :addBehavior {
|
||||||
|
-- Tree.behaviors.residentsleeper.new(),
|
||||||
|
-- Tree.behaviors.stats.new(nil, nil, 2),
|
||||||
|
-- Tree.behaviors.positioned.new(Vec3 { 7, 7 }),
|
||||||
|
-- Tree.behaviors.tiled.new(),
|
||||||
|
-- Tree.behaviors.sprite.new(Tree.assets.files.sprites.boar),
|
||||||
|
-- Tree.behaviors.shadowcaster.new(),
|
||||||
|
-- Tree.behaviors.spellcaster.new(),
|
||||||
|
-- Tree.behaviors.ai.new(),
|
||||||
|
-- Tree.behaviors.effects.new()
|
||||||
|
-- },
|
||||||
}
|
}
|
||||||
|
|
||||||
for id, _ in pairs(chars) do
|
for id, _ in pairs(chars) do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user