using Godot; using System; using System.Collections.Generic; using System.Threading.Tasks; using Babushka.scripts.CSharp.Common.Fight; using Babushka.scripts.CSharp.Common.Fight.ActionDetails; using Babushka.scripts.CSharp.Common.Minigame; public partial class FightMinigameHandler : Node { #region Shortcuts private FightWorld.FightHappeningData HappeningData => FightWorld.Instance.fightHappeningData ?? throw new NoFightHappeningException(); #endregion [Export] private MinigameController _minigameController; public void OnStateEnter(FightHappening.FightState to) { if(to!=FightHappening.FightState.InputActionDetail) return; var currentDetail = HappeningData.actionStaging!.CurrentDetail(); if(currentDetail is not MinigameActionDetail minigameDetail) return; _minigameController.Run(new MinigameController.Builder() .AddRegion(4) .AddRegion(0).RegionWithProportion(1.5f) .AddRegion(8).RegionWithProportion(0.5f) .AddRegion(0).RegionWithProportion(1.5f) .AddRegion(3) .AddRegion(5) .WithHitCount(3) ).ContinueWith(task => { minigameDetail.damageHits = task.Result; //FightHappening.Instance.DetailFilled(); // Apparently ContinueWith spawn a new Thread, but methods on a node only want to be called from the main thread FightHappening.Instance.CallDeferred("DetailFilled"); }); } }