Added visual feedback when hitting a region in the minigame

This commit is contained in:
jonathan
2025-12-04 21:18:47 +01:00
parent 8e9359d6f8
commit aa4f1c55b5
2 changed files with 39 additions and 11 deletions
@@ -21,7 +21,7 @@ public partial class MinigameController : Node2D
God,
VeryGood
}
public class Builder<T>
{
internal class Region
@@ -108,6 +108,8 @@ public partial class MinigameController : Node2D
[Signal] public delegate void ArmMovedEventHandler(float newPos);
[Signal] public delegate void RegionHitEventHandler(int regionIndex);
public override void _EnterTree()
{
HideMinigame();
@@ -125,6 +127,7 @@ public partial class MinigameController : Node2D
ShowMinigame();
Setup(builder);
await _minigameComplete!.Task;
await ToSignal(GetTree().CreateTimer(.3), "timeout");
var returnValue = _hits!.Select(h => builder.regions[h].value).ToList();
Reset();
HideMinigame();
@@ -145,6 +148,7 @@ public partial class MinigameController : Node2D
}
_hits.Add(i);
EmitSignalRegionHit(i);
_armSpeed = -_armSpeed;
@@ -174,16 +178,18 @@ public partial class MinigameController : Node2D
// spawn regions
var regionSum = 0f;
foreach (var region in builder.regions)
foreach (var (region, i) in builder.regions.Select((region, i) => (region, i)))
{
var regionVisual = _regionVisualPrefab.Instantiate<RegionVisual>();
_regionsParent.AddChild(regionVisual);
RegionHit += regionVisual.HitAnimation;
var normalisedAngleStart = regionSum / totalRegionProportion;
var normalisedAngleEnd = (regionSum + region.proportion) / totalRegionProportion;
var normalAngles = new Vector2(normalisedAngleStart, normalisedAngleEnd);
regionVisual.Setup(normalAngles, _baseRegionColor.RandomHue(), region.text, region.theme);
regionVisual.Setup(normalAngles, region.text, region.theme, i);
regionSum += region.proportion;
@@ -207,6 +213,13 @@ public partial class MinigameController : Node2D
{
_minigameComplete = null;
_hits = null;
_regionsParent.GetChildren().ForEach(c => c.QueueFree());
_regionsParent.GetChildren().ForEach(c =>
{
if (c is RegionVisual rv)
{
RegionHit -= rv.HitAnimation;
}
c.QueueFree();
});
}
}