From 5a35d8fe74bcacd14adb3405f57f954744647744 Mon Sep 17 00:00:00 2001 From: PeaAshMeter Date: Sun, 12 Apr 2026 23:15:26 +0300 Subject: [PATCH] optimize spell target recount, add subtle animation when targets appear --- lib/simple_ui/level/skill_row.lua | 1 + lib/spell/spell.lua | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/simple_ui/level/skill_row.lua b/lib/simple_ui/level/skill_row.lua index b02e5c2..1c56059 100644 --- a/lib/simple_ui/level/skill_row.lua +++ b/lib/simple_ui/level/skill_row.lua @@ -112,6 +112,7 @@ function skillRow.new(characterId) if not behavior.cast then behavior.cast = behavior.spellbook[i] behavior.state = "casting" + behavior.spellbook[i]:onSelected(char) else behavior.state = "idle" behavior.cast = nil diff --git a/lib/spell/spell.lua b/lib/spell/spell.lua index b9517b8..ee6e49c 100644 --- a/lib/spell/spell.lua +++ b/lib/spell/spell.lua @@ -24,9 +24,16 @@ spell.baseCooldown = 1 spell.targetQuery = Query(targetTest.any) spell.previewType = "default" -function spell:update(caster, dt) - self.targets = self.targetQuery:asSet(caster) +--- Вызывается, когда игрок выбирает спелл на панели заклинаний +--- @param caster Character +function spell:onSelected(caster) + self.targets = self.targetQuery:asSet(caster) + self.tSize = 0.67 -- анимация появления таргетов + task.tween(self, { tSize = 1 }, 200, easing.easeOutQuad) +end + +function spell:update(caster, dt) if self.previewType == "path" then local charPos = caster:has(Tree.behaviors.positioned).position:floor() --- @type Vec3 @@ -46,9 +53,9 @@ function spell:draw() love.graphics.setCanvas(Tree.level.render.textures.overlayLayer) love.graphics.setColor(1, 1, 1, 0.5) for _, p in pairs(self.targets) do - local s = 1 / Tree.level.camera.pixelsPerMeter + local s = self.tSize / Tree.level.camera.pixelsPerMeter local quad = icons:pickQuad('dev_target') - love.graphics.draw(icons.atlas, quad, p.x, p.y, 0, s, s) + love.graphics.draw(icons.atlas, quad, p.x + 0.5 - self.tSize / 2, p.y + 0.5 - self.tSize / 2, 0, s, s) end love.graphics.setShader()