From 0f246825fc9654c5f690580d60d540ff49f35adc Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Thu, 31 Jul 2025 20:36:17 +0200 Subject: [PATCH] Added Wellbehaviour and fixed door interaction to offer outlines --- art/farm/Babushka_house_frontDoor.png | Bin 0 -> 4052 bytes art/farm/Babushka_house_frontDoor.png.import | 34 +++++++++++++ scenes/Babushka_scene_farm_outside_2d.tscn | 25 ++++++--- .../CharacterControls/InteractionArea2D.cs | 48 +++++++++++++----- .../CSharp/Common/Farming/FieldState.cs.uid | 1 + .../CSharp/Common/Farming/PlantState.cs.uid | 1 + .../CSharp/Common/Farming/WateringCanState.cs | 6 +++ .../CSharp/Common/Farming/WellBehaviour.cs | 19 +++++++ .../Common/Farming/WellBehaviour.cs.uid | 1 + .../CSharp/Common/Fight/FightAttack.cs.uid | 1 + 10 files changed, 116 insertions(+), 20 deletions(-) create mode 100644 art/farm/Babushka_house_frontDoor.png create mode 100644 art/farm/Babushka_house_frontDoor.png.import create mode 100644 scripts/CSharp/Common/Farming/FieldState.cs.uid create mode 100644 scripts/CSharp/Common/Farming/PlantState.cs.uid create mode 100644 scripts/CSharp/Common/Farming/WellBehaviour.cs create mode 100644 scripts/CSharp/Common/Farming/WellBehaviour.cs.uid create mode 100644 scripts/CSharp/Common/Fight/FightAttack.cs.uid diff --git a/art/farm/Babushka_house_frontDoor.png b/art/farm/Babushka_house_frontDoor.png new file mode 100644 index 0000000000000000000000000000000000000000..f8378f872bdad82655e2596379e818bcf4dbead8 GIT binary patch literal 4052 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 _active; + set => _active = value; + } + public override void _Ready() { - if(_useSprite && _useOutline) - _backupMaterial = _spriteToOutline.Material; + if (_useSprite && _useOutline) + { + try + { + _backupMaterial = _spriteToOutline.Material; + } + catch(Exception exception) + { + GD.PrintErr($"No sprite to outline found on: {GetParent().Name}" + exception.Message); + } + } + } public void OnPlayerEntered(Node2D player) { - if (!IsActive) + if (!_active) return; if(_showLabel) @@ -41,7 +58,7 @@ public partial class InteractionArea2D : Node2D public void OnPlayerExited(Node2D player) { - if (!IsActive) + if (!_active) return; _label.Hide(); @@ -54,31 +71,34 @@ public partial class InteractionArea2D : Node2D public override void _Input(InputEvent @event) { - if (!IsActive) + if (!_active) return; - if (@event.IsAction("interact") && @event.IsPressed() && _area.HasOverlappingBodies()) + if (@event.IsAction("interact") && @event.IsPressed()) { - _label.Hide(); + if (_area.HasOverlappingBodies()) + { + _label.Hide(); - if (_useSprite && _useOutline) - _spriteToOutline.Material = _backupMaterial; + if (_useSprite && _useOutline) + _spriteToOutline.Material = _backupMaterial; - EmitSignal(SignalName.InteractedTool, _id); - EmitSignal(SignalName.Interacted); + EmitSignal(SignalName.InteractedTool, _id); + EmitSignal(SignalName.Interacted); + } } } public void SetSpriteActiveState(bool success, int id) // TODO: remove { GD.PrintErr("SetSpriteActiveState is being called."); - if(!IsActive) + if(!_active) return; } public void ToggleActive() { - IsActive = !IsActive; + _active = !_active; _label.Hide(); } } \ No newline at end of file diff --git a/scripts/CSharp/Common/Farming/FieldState.cs.uid b/scripts/CSharp/Common/Farming/FieldState.cs.uid new file mode 100644 index 0000000..2f0fe65 --- /dev/null +++ b/scripts/CSharp/Common/Farming/FieldState.cs.uid @@ -0,0 +1 @@ +uid://cqtlic8xxtvkc diff --git a/scripts/CSharp/Common/Farming/PlantState.cs.uid b/scripts/CSharp/Common/Farming/PlantState.cs.uid new file mode 100644 index 0000000..714ae0d --- /dev/null +++ b/scripts/CSharp/Common/Farming/PlantState.cs.uid @@ -0,0 +1 @@ +uid://dw5dl5yscbyaw diff --git a/scripts/CSharp/Common/Farming/WateringCanState.cs b/scripts/CSharp/Common/Farming/WateringCanState.cs index 8e4e89c..333a44d 100644 --- a/scripts/CSharp/Common/Farming/WateringCanState.cs +++ b/scripts/CSharp/Common/Farming/WateringCanState.cs @@ -23,6 +23,10 @@ public static class WateringCanState /// Triggers animations and ui. /// public static bool Active = false; + + public delegate void WateringCanDelegate(bool state); + public static event WateringCanDelegate WateringCanActiveStateChanged; + /// @@ -65,6 +69,8 @@ public static class WateringCanState /// public static void SetActive(bool active) { + if(active != Active) + WateringCanActiveStateChanged?.Invoke(active); Active = active; } } \ No newline at end of file diff --git a/scripts/CSharp/Common/Farming/WellBehaviour.cs b/scripts/CSharp/Common/Farming/WellBehaviour.cs new file mode 100644 index 0000000..51b2958 --- /dev/null +++ b/scripts/CSharp/Common/Farming/WellBehaviour.cs @@ -0,0 +1,19 @@ +using Babushka.scripts.CSharp.Common.CharacterControls; +using Godot; + +namespace Babushka.scripts.CSharp.Common.Farming; + +public partial class WellBehaviour : Node2D +{ + [Export] private InteractionArea2D _interactionArea; + + public override void _Ready() + { + WateringCanState.WateringCanActiveStateChanged += OnWateringCanStateChanged; + } + + private void OnWateringCanStateChanged(bool state) + { + _interactionArea.IsActive = state; + } +} \ No newline at end of file diff --git a/scripts/CSharp/Common/Farming/WellBehaviour.cs.uid b/scripts/CSharp/Common/Farming/WellBehaviour.cs.uid new file mode 100644 index 0000000..cec2b49 --- /dev/null +++ b/scripts/CSharp/Common/Farming/WellBehaviour.cs.uid @@ -0,0 +1 @@ +uid://boehox1ydbcnx diff --git a/scripts/CSharp/Common/Fight/FightAttack.cs.uid b/scripts/CSharp/Common/Fight/FightAttack.cs.uid new file mode 100644 index 0000000..5744876 --- /dev/null +++ b/scripts/CSharp/Common/Fight/FightAttack.cs.uid @@ -0,0 +1 @@ +uid://cnggo5jyimosu