suck my ass stupid animations, im done

This commit is contained in:
neckrat 2026-01-17 10:49:53 +03:00
parent d36b67855a
commit ac03a014f6
6 changed files with 80 additions and 3 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,18 +1,87 @@
local ease = require "lib.utils.easing"
local AnimationNode = require "lib.animation_node"
--- @class Audio --- @class Audio
--- @field musicVolume number --- @field musicVolume number
--- @field soundVolume number --- @field soundVolume number
audio = {} audio = {}
audio.__index = audio audio.__index = audio
local function new(musicVolume, soundVolume) -- здесь мы должны выгружать значения из файлика с сохранением настроек --- здесь мы должны выгружать значения из файлика с сохранением настроек
local function new(musicVolume, soundVolume)
return setmetatable({ return setmetatable({
musicVolume = musicVolume, musicVolume = musicVolume,
soundVolume = soundVolume soundVolume = soundVolume
}, audio) }, audio)
end end
function audio:crossfade()
--- if from is nil, than we have fade in to;
--- if to is nil, than we have fade out from
---
--- also we should guarantee, that from and to have the same volume
--- @param from love.Source
--- @param to love.Source
--- @param ms? number in milliseconds
function audio:crossfade(from, to, ms)
to:setVolume(0)
to:play()
local fromVol = from:getVolume() or self.musicVolume
local toVol = to:getVolume() or self.musicVolume
local dt = love.timer.getDelta() * (ms or 1000)
while fromVol > 0 and toVol < self.musicVolume do
print(fromVol, toVol)
fromVol = self.musicVolume - fromVol + dt / self.musicVolume
from:setVolume(ease.easeOutQuad(fromVol))
toVol = toVol + dt / self.musicVolume
to:setVolume(ease.easeInQuad(toVol))
print(fromVol, toVol)
end
end
--- if from is nil, than we have fade in to;
--- if to is nil, than we have fade out from
---
--- also we should guarantee, that from and to have the same volume
--- @param from love.Source
--- @param to love.Source
--- @param ms? number in milliseconds
function audio:crossfadeAnim(from, to, ms)
to:setVolume(0)
to:play()
print(from:getVolume(), to:getVolume())
local t = 0
local anim = AnimationNode {
function(node)
from:setVolume(self.musicVolume - node:getValue() * self.musicVolume)
to:setVolume(node:getValue() * self.musicVolume)
t = node.t
print(node.finished, node.duration, node.t)
end,
onEnd = function()
from:setVolume(0)
to:setVolume(self.musicVolume)
end,
duration = ms or 1000,
easing = ease.linear,
-- children = {
-- AnimationNode {
-- function(node)
-- from:setVolume(self.musicVolume - node:getValue() * self.musicVolume)
-- end
-- },
-- AnimationNode {
-- function(node)
-- to:setVolume(node:getValue() * self.musicVolume)
-- print(node.count)
-- end
-- }
-- }
}
anim:run()
anim:finish()
print(from:getVolume(), to:getVolume(), t, t, t)
end end
--- @param source love.Source --- @param source love.Source

View File

@ -18,6 +18,9 @@ local path = nil
local function new(type, template) local function new(type, template)
local size = Vec3 { 30, 30 } -- magic numbers for testing purposes only local size = Vec3 { 30, 30 } -- magic numbers for testing purposes only
print(type, template, size) print(type, template, size)
Tree.audio:play(Tree.assets.files.audio.music.level1.battle)
return setmetatable({ return setmetatable({
size = size, size = size,
characters = {}, characters = {},

View File

@ -88,7 +88,10 @@ function regenerateMana:cast(caster, target)
if not sprite then return true end if not sprite then return true end
AnimationNode { AnimationNode {
function(node) function(node)
local audioPath = Tree.assets.files.audio
sprite:animate("hurt", node) sprite:animate("hurt", node)
Tree.audio:crossfadeAnim(audioPath.music.level1.battle,
audioPath.music.level1.choral, 3000)
end, end,
onEnd = function() caster:has(Tree.behaviors.spellcaster):endCast() end onEnd = function() caster:has(Tree.behaviors.spellcaster):endCast() end
}:run() }:run()
@ -143,9 +146,10 @@ function attack:cast(caster, target)
children = { children = {
AnimationNode { AnimationNode {
function(node) function(node)
local audioPath = Tree.assets.files.audio
targetSprite:animate("hurt", node) targetSprite:animate("hurt", node)
-- Tree.assets.files.audio.sounds.hurt:play() -- Tree.assets.files.audio.sounds.hurt:play()
Tree.audio:play(Tree.assets.files.audio.sounds.hurt) Tree.audio:play(audioPath.sounds.hurt)
end end
} }
} }

View File

@ -8,6 +8,7 @@ Tree = {
} }
Tree.panning = require "lib/panning" Tree.panning = require "lib/panning"
Tree.controls = require "lib.controls" Tree.controls = require "lib.controls"
Tree.audio = (require "lib.audio").new(1, 1)
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
Tree.behaviors = (require "lib.utils.behavior_loader")("lib/character/behaviors") --- @todo написать нормальную загрузку поведений Tree.behaviors = (require "lib.utils.behavior_loader")("lib/character/behaviors") --- @todo написать нормальную загрузку поведений