Compare commits

...

5 Commits

@ -168,6 +168,7 @@ theme_override_constants/margin_left = 200
theme_override_constants/margin_right = 200 theme_override_constants/margin_right = 200
[node name="MarginContainer" type="MarginContainer" parent="ActionSelect/BottomPanel/VBoxContainer/MarginContainer2"] [node name="MarginContainer" type="MarginContainer" parent="ActionSelect/BottomPanel/VBoxContainer/MarginContainer2"]
visible = false
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = 10 theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10 theme_override_constants/margin_top = 10

@ -14,7 +14,7 @@ public partial class Detector : Area2D
[Export] private ShapeCast2D _shapeCast2D; [Export] private ShapeCast2D _shapeCast2D;
[Export] private VariableResource _itemToTriggerResource; [Export] private VariableResource _itemToTriggerResource;
private readonly List<ulong> _areasInDetector = new(); private List<ulong> _areasInDetector = new();
public bool IsActive public bool IsActive
{ {
@ -41,13 +41,9 @@ public partial class Detector : Area2D
if (!_active || !InputService.Instance.InputEnabled) if (!_active || !InputService.Instance.InputEnabled)
return; return;
if (area is DetectableInteractionArea detectable) PopulateList();
{
ulong id = detectable.GetInstanceId();
_areasInDetector.Add(id);
CalculateClosestInteractable(); CalculateClosestInteractable();
} }
}
/// <summary> /// <summary>
/// Called whenever this node exits an Area2D. /// Called whenever this node exits an Area2D.
@ -58,12 +54,23 @@ public partial class Detector : Area2D
if (!_active || !InputService.Instance.InputEnabled) if (!_active || !InputService.Instance.InputEnabled)
return; return;
if (area is DetectableInteractionArea detectable) PopulateList();
CalculateClosestInteractable();
}
private void PopulateList()
{
// repopulate the list of areas in the detector to account for enabled / disabled areas
var currentOverlap = GetOverlappingAreas();
_areasInDetector = new List<ulong>();
foreach (var area2D in currentOverlap)
{
if (area2D is DetectableInteractionArea detectable)
{ {
ulong id = detectable.GetInstanceId(); ulong id = detectable.GetInstanceId();
if( _areasInDetector.Contains(id)) _areasInDetector.Add(id);
_areasInDetector.Remove(id); }
CalculateClosestInteractable();
} }
} }

@ -1,6 +1,5 @@
using System.Linq; using System.Linq;
using Babushka.scripts.CSharp.Common.Services; using Babushka.scripts.CSharp.Common.Services;
using Babushka.scripts.CSharp.Low_Code.Variables;
using Godot; using Godot;
namespace Babushka.scripts.CSharp.Common.CharacterControls; namespace Babushka.scripts.CSharp.Common.CharacterControls;
@ -26,7 +25,12 @@ public partial class InteractionArea2D : Node2D
public bool IsActive public bool IsActive
{ {
get => _active; get => _active;
set => _active = value; set
{
ProcessMode = value ? ProcessModeEnum.Inherit : ProcessModeEnum.Disabled;
Visible = value;
_active = value;
}
} }
public bool IsSelectedByDetector { get; set; } = false; public bool IsSelectedByDetector { get; set; } = false;
@ -59,6 +63,7 @@ public partial class InteractionArea2D : Node2D
foreach (var sprite in _spritesToOutline) foreach (var sprite in _spritesToOutline)
{ {
GD.Print($"Highlighting outline material on {sprite.Name} Nr. {GetInstanceId()}");
sprite.Material = _outlineMaterial; sprite.Material = _outlineMaterial;
} }
} }
@ -74,6 +79,7 @@ public partial class InteractionArea2D : Node2D
for (var i = 0; i < _spritesToOutline.Length; i++) for (var i = 0; i < _spritesToOutline.Length; i++)
{ {
var sprite = _spritesToOutline[i]; var sprite = _spritesToOutline[i];
GD.Print($"Resetting outline material on {sprite.Name} Nr. {GetInstanceId()}");
sprite.Material = _backupMaterials[i]; sprite.Material = _backupMaterials[i];
} }
} }

@ -32,6 +32,7 @@ public partial class FieldActivator : Node
_field.UpdateFieldState(FieldState.Tilled); _field.UpdateFieldState(FieldState.Tilled);
EmitSignal(SignalName.FieldCreated, _field); EmitSignal(SignalName.FieldCreated, _field);
_used = true; _used = true;
ToggleInteractionArea();
} }
} }

@ -33,7 +33,6 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
[ExportGroup("Field Interactions")] [ExportGroup("Field Interactions")]
[Export] public InteractionArea2D PlantingInteraction; [Export] public InteractionArea2D PlantingInteraction;
[Export] public InteractionArea2D FieldInteractionArea;
[ExportGroup("Configuration")] [ExportGroup("Configuration")]
[Export] public Node2D PlantingPlaceholder; [Export] public Node2D PlantingPlaceholder;
@ -61,7 +60,7 @@ public partial class FieldBehaviour2D : Sprite2D, ISaveable
// fieldstate == tilled && watering can ausgewählt // fieldstate == tilled && watering can ausgewählt
_canWater = (FieldState == FieldState.Tilled || FieldState == FieldState.Planted) && _wateringCanActive; _canWater = (FieldState == FieldState.Tilled || FieldState == FieldState.Planted) && _wateringCanActive;
FieldInteractionArea.IsActive = _canPlant || _canWater; PlantingInteraction.IsActive = _canPlant || _canWater;
} }
public void ActivatedSeedInInventory(bool activated) public void ActivatedSeedInInventory(bool activated)

Loading…
Cancel
Save