Files

73 lines
2.0 KiB
C#
Raw Permalink Normal View History

2025-09-30 16:23:05 +02:00
using System;
2025-10-02 15:49:24 +02:00
using System.Linq;
2025-09-30 17:36:28 +02:00
using System.Threading.Tasks;
2025-09-30 16:23:05 +02:00
using Babushka.scripts.CSharp.Common.Fight.ActionDetails;
using Babushka.scripts.CSharp.Common.Util;
using Godot;
namespace Babushka.scripts.CSharp.Common.Fight.Actions;
public class AllyAttackAction : FighterAction
{
// details
public TargetSelectActionDetail targetSelect = new()
{
selectEnemy = true,
2025-12-11 18:49:51 +01:00
selectAlly = false,
aliveOnly = true
2025-09-30 16:23:05 +02:00
};
2025-10-02 15:49:24 +02:00
public MinigameActionDetail minigameDetail = new();
2025-09-30 16:23:05 +02:00
public override Variant<float, Func<bool>> GetAnimationEnd()
{
return 1;
}
public override bool NextDetail()
{
2025-10-02 15:49:24 +02:00
return !targetSelect.DetailComplete() || !minigameDetail.DetailComplete();
2025-09-30 16:23:05 +02:00
}
public override FighterActionDetail CurrentDetail()
{
2025-10-02 15:49:24 +02:00
return targetSelect.DetailComplete() ? minigameDetail : targetSelect;
2025-09-30 16:23:05 +02:00
}
public override AllyActionButton BindToActionButton()
{
return AllyActionButton.Attack;
}
public override void Reset()
{
targetSelect.ResetResult();
2025-10-02 15:49:24 +02:00
minigameDetail.ResetResult();
2025-09-30 16:23:05 +02:00
}
public override void ExecuteAction()
{
2025-10-02 15:49:24 +02:00
var totalDamage = minigameDetail.damageHits!.Sum(dh => dh);
targetSelect.GetTarget().ChangeHealth(-totalDamage);
2025-09-30 16:23:05 +02:00
}
2025-09-30 17:36:28 +02:00
2025-12-16 18:56:18 +01:00
public override async Task AnimateAction(AllFightersVisual allFightersVisual,
FightHappeningAnimationContext animationContext)
2025-09-30 17:36:28 +02:00
{
var currentFighter = HappeningData.fighterTurn.Current;
2025-09-30 17:36:28 +02:00
var targetFighter = targetSelect.GetTarget();
var currentFighterVisual = allFightersVisual.GetVisualForFighter(currentFighter);
var targetFighterVisual = allFightersVisual.GetVisualForFighter(targetFighter);
2025-10-02 15:49:24 +02:00
2025-09-30 17:36:28 +02:00
await currentFighterVisual.AnimatePosToTarget(targetFighterVisual);
_ = targetFighterVisual.AnimateHit();
2025-11-11 15:55:15 +01:00
foreach (var hit in minigameDetail.damageHits!)
{
targetFighterVisual.SpawnDamageIndicatorNumber($"-{hit}");
2025-11-11 15:55:15 +01:00
}
2025-09-30 17:36:28 +02:00
await currentFighterVisual.AnimatePosToBase();
}
2025-09-30 16:23:05 +02:00
}