From aad6c44567aaec6b9a72fe53478e9889df01dfc6 Mon Sep 17 00:00:00 2001 From: jonathan Date: Thu, 4 Dec 2025 18:00:20 +0100 Subject: [PATCH 1/3] Added randomnes into attack minigame --- scenes/Babushka_scene_farm_outside_2d.tscn | 1 + .../Common/Fight/FightMinigameHandler.cs | 63 ++++++++++++++----- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/scenes/Babushka_scene_farm_outside_2d.tscn b/scenes/Babushka_scene_farm_outside_2d.tscn index aa1002c..a86eeaf 100644 --- a/scenes/Babushka_scene_farm_outside_2d.tscn +++ b/scenes/Babushka_scene_farm_outside_2d.tscn @@ -1295,6 +1295,7 @@ polygon = PackedVector2Array(247.227, 43.5123, 44.7822, 43.5123, -87.2178, 45.12 [node name="EnterHouseInteraction" parent="YSorted/Farm visuals/Static" instance=ExtResource("27_klb81")] position = Vector2(5834, 2354) scale = Vector2(2.425, 2.425) +_id = 0 metadata/SaveID = "5a93071f-c1ab-4b4b-b74e-a6324d44ddf8" [node name="DoorSprite" type="Sprite2D" parent="YSorted/Farm visuals/Static/EnterHouseInteraction"] diff --git a/scripts/CSharp/Common/Fight/FightMinigameHandler.cs b/scripts/CSharp/Common/Fight/FightMinigameHandler.cs index 1a01888..b58f2af 100644 --- a/scripts/CSharp/Common/Fight/FightMinigameHandler.cs +++ b/scripts/CSharp/Common/Fight/FightMinigameHandler.cs @@ -1,36 +1,44 @@ -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; +using Godot; +using static Babushka.scripts.CSharp.Common.Minigame.MinigameController.RegionTheme; + +namespace Babushka.scripts.CSharp.Common.Fight; public partial class FightMinigameHandler : Node { #region Shortcuts - private FightWorld.FightHappeningData HappeningData => FightWorld.Instance.fightHappeningData ?? throw new NoFightHappeningException(); + private FightWorld.FightHappeningData HappeningData => + FightWorld.Instance.fightHappeningData ?? throw new NoFightHappeningException(); #endregion - - [Export] private MinigameController _minigameController; + + [Export] private MinigameController _minigameController = null!; public void OnStateEnter(FightHappening.FightState to) { - if(to!=FightHappening.FightState.InputActionDetail) return; - + if (to != FightHappening.FightState.InputActionDetail) return; + var currentDetail = HappeningData.actionStaging!.CurrentDetail(); - if(currentDetail is not MinigameActionDetail minigameDetail) return; + if (currentDetail is not MinigameActionDetail minigameDetail) return; + var region1 = R(2, 4); + var region2 = R([0, 1, 1, 2]); + var region3 = R([7, 8, 9, 9]); + var region4 = R([0, 1, 1, 2]); + var region5 = R(2, 4); + var region6 = R(4, 6); + _minigameController.Run(new MinigameController.Builder() - .AddRegion(4).RegionWithText("4").RegionWithTheme(MinigameController.RegionTheme.Normal) - .AddRegion(0).RegionWithProportion(1.5f).RegionWithText("0").RegionWithTheme(MinigameController.RegionTheme.Bad) - .AddRegion(8).RegionWithProportion(0.5f).RegionWithText("8").RegionWithTheme(MinigameController.RegionTheme.VeryGood) - .AddRegion(0).RegionWithProportion(1.5f).RegionWithText("0").RegionWithTheme(MinigameController.RegionTheme.Bad) - .AddRegion(3).RegionWithText("3").RegionWithTheme(MinigameController.RegionTheme.NormalAlt1) - .AddRegion(5).RegionWithText("5").RegionWithTheme(MinigameController.RegionTheme.NormalAlt2) + .AddRegion(region1).RegionWithProportion(R(0.7, 1.3)).RegionWithText(region1.ToString()).RegionWithTheme(Normal) + .AddRegion(region2).RegionWithProportion(R(1, 1.8)).RegionWithText(region2.ToString()).RegionWithTheme(Bad) + .AddRegion(region3).RegionWithProportion(R(0.3, 1)).RegionWithText(region3.ToString()).RegionWithTheme(VeryGood) + .AddRegion(region4).RegionWithProportion(R(1, 1.8)).RegionWithText(region4.ToString()).RegionWithTheme(Bad) + .AddRegion(region5).RegionWithProportion(R(0.7, 1.3)).RegionWithText(region5.ToString()).RegionWithTheme(NormalAlt1) + .AddRegion(region6).RegionWithProportion(R(0.7, 1.3)).RegionWithText(region6.ToString()).RegionWithTheme(NormalAlt2) .WithHitCount(3) ).ContinueWith(task => { @@ -40,4 +48,25 @@ public partial class FightMinigameHandler : Node FightHappening.Instance.CallDeferred("DetailFilled"); }); } -} + + + #region Utils + + // this is to make the minigame set up a bit less convoluted + private static int R(int min, int max) + { + return GD.RandRange(min, max); + } + + private static float R(double min, double max) + { + return (float)GD.RandRange(min, max); + } + + private static int R(List list) + { + return list[GD.RandRange(0, list.Count - 1)]; + } + + #endregion +} \ No newline at end of file From aa4f1c55b55a08a0fb3b03efff029298a5f9693f Mon Sep 17 00:00:00 2001 From: jonathan Date: Thu, 4 Dec 2025 21:18:47 +0100 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8Added=20visual=20feedback=20when?= =?UTF-8?q?=20hitting=20a=20region=20in=20the=20minigame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/Minigame/MinigameController.cs | 21 +++++++++++--- .../CSharp/Common/Minigame/RegionVisual.cs | 29 ++++++++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/scripts/CSharp/Common/Minigame/MinigameController.cs b/scripts/CSharp/Common/Minigame/MinigameController.cs index 9fb4bc1..d1fa088 100644 --- a/scripts/CSharp/Common/Minigame/MinigameController.cs +++ b/scripts/CSharp/Common/Minigame/MinigameController.cs @@ -21,7 +21,7 @@ public partial class MinigameController : Node2D God, VeryGood } - + public class Builder { 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(); _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(); + }); } } \ No newline at end of file diff --git a/scripts/CSharp/Common/Minigame/RegionVisual.cs b/scripts/CSharp/Common/Minigame/RegionVisual.cs index 47c2f25..ef4bca2 100644 --- a/scripts/CSharp/Common/Minigame/RegionVisual.cs +++ b/scripts/CSharp/Common/Minigame/RegionVisual.cs @@ -1,27 +1,42 @@ -using Godot; using System; -using Babushka.scripts.CSharp.Common.Minigame; +using Godot; using Godot.Collections; +namespace Babushka.scripts.CSharp.Common.Minigame; + public partial class RegionVisual : Node { - [Export] private Sprite2D _sliceSprite; - [Export] private Label _textLabel; - [Export] private Node2D _labelPivot; + [Export] private Sprite2D _sliceSprite = null!; + [Export] private Label _textLabel = null!; + [Export] private Node2D _labelPivot = null!; [Export(PropertyHint.DictionaryType)] private Dictionary _fillColors = new(); - public void Setup(Vector2 normalAngles, Color color, string regionText, MinigameController.RegionTheme regionTheme) + private int _index; + + public void Setup(Vector2 normalAngles, string regionText, MinigameController.RegionTheme regionTheme, int index) { var mat = (_sliceSprite.Material as ShaderMaterial)!; mat.SetShaderParameter("angles", normalAngles); mat.SetShaderParameter("fillColor", GetFillColor(regionTheme)); - var averageAngleRadians = (normalAngles.X + normalAngles.Y) * float.Pi; // '/ 2' from the average and '* 2' from the radians cancel out + // '/ 2' from the average and '* 2' from the radians cancel out + var averageAngleRadians = (normalAngles.X + normalAngles.Y) * float.Pi; _labelPivot.Rotation = averageAngleRadians; _textLabel.Rotation = -averageAngleRadians; _textLabel.Text = regionText; + + _index = index; + } + + public void HitAnimation(int regionIndex) + { + if(regionIndex != _index) return; + + var tween = GetTree().CreateTween(); + tween.TweenProperty(_sliceSprite, "scale", new Vector2(1.5f, 1.5f), 0.1f); + tween.TweenProperty(_sliceSprite, "scale", new Vector2(1f, 1f), 0.2f); } private Color GetFillColor(MinigameController.RegionTheme theme) From 14a73daa75b4dabf547d493f207230c062de9930 Mon Sep 17 00:00:00 2001 From: JoansLink00 Date: Sat, 6 Dec 2025 12:15:31 +0100 Subject: [PATCH 3/3] fighting minigame has no more Overlap with Vesna --- scenes/Babushka_scene_fight_happening.tscn | 1 + 1 file changed, 1 insertion(+) diff --git a/scenes/Babushka_scene_fight_happening.tscn b/scenes/Babushka_scene_fight_happening.tscn index 6014209..49a1417 100644 --- a/scenes/Babushka_scene_fight_happening.tscn +++ b/scenes/Babushka_scene_fight_happening.tscn @@ -54,6 +54,7 @@ _minigameController = NodePath("Minigame") [node name="Minigame" parent="MinigameHandler" instance=ExtResource("8_2b3cf")] process_mode = 4 visible = false +position = Vector2(23, -29) [node name="SwitchSceneOnFightEnd" type="Node" parent="." node_paths=PackedStringArray("_fightSceneSwitcher")] script = ExtResource("10_qqd8u")