Compare commits

..

5 Commits

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

@ -14,7 +14,7 @@ public partial class Detector : Area2D
[Export] private ShapeCast2D _shapeCast2D;
[Export] private VariableResource _itemToTriggerResource;
private readonly List<ulong> _areasInDetector = new();
private List<ulong> _areasInDetector = new();
public bool IsActive
{
@ -41,13 +41,9 @@ public partial class Detector : Area2D
if (!_active || !InputService.Instance.InputEnabled)
return;
if (area is DetectableInteractionArea detectable)
{
ulong id = detectable.GetInstanceId();
_areasInDetector.Add(id);
PopulateList();
CalculateClosestInteractable();
}
}
/// <summary>
/// Called whenever this node exits an Area2D.
@ -58,12 +54,23 @@ public partial class Detector : Area2D
if (!_active || !InputService.Instance.InputEnabled)
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();
if( _areasInDetector.Contains(id))
_areasInDetector.Remove(id);
CalculateClosestInteractable();
_areasInDetector.Add(id);
}
}
}

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

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

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

Loading…
Cancel
Save