Refactor hut tier definitions to use images and scales instead of scene paths; add moddable visual component

This commit is contained in:
2025-08-23 15:41:57 +02:00
parent 8efbc9cc6e
commit 608bcc552d
15 changed files with 204 additions and 15 deletions

View File

@@ -0,0 +1,28 @@
using Godot;
namespace ParasiticGod.Scripts.Components;
[GlobalClass]
public partial class ModdableVisual : Node2D
{
[Export] private Sprite2D _sprite;
public Follower.FollowerTier Tier { get; private set; }
public override void _ExitTree()
{
if (_sprite != null)
{
_sprite.Texture = null;
}
}
public void Initialize(Follower.FollowerTier tier, Texture2D texture, Vector2 scale)
{
Tier = tier;
if (_sprite != null && texture != null)
{
_sprite.Texture = texture;
_sprite.Scale = scale;
}
}
}

View File

@@ -0,0 +1 @@
uid://dpfcbaqgq3l6d

View File

@@ -14,6 +14,7 @@ public partial class PopulationVisualizer : Node
[Export] private Node2D _markersContainer;
[Export] private int _unitsPerMarker = 5;
[Export] public VisualCategory Category { get; private set; }
[Export] private PackedScene _moddableVisualScene;
private List<TierDefinition> _tiers;
private readonly List<FollowerMarker> _markers = [];
@@ -105,11 +106,15 @@ public partial class PopulationVisualizer : Node
if (i < followersToShow)
{
if (!marker.IsOccupied || _lastKnownTierIndex != newTierIndex)
var currentVisual = marker.GetChildOrNull<ModdableVisual>(0);
if (currentVisual == null || currentVisual.Tier != currentTier.TierEnum)
{
if (marker.IsOccupied) marker.RemoveFollower();
var followerInstance = currentTier.Scene.Instantiate<Follower>();
marker.PlaceFollower(followerInstance);
if (marker.GetChildCount() > 0) marker.GetChild(0).QueueFree();
var visualInstance = _moddableVisualScene.Instantiate<ModdableVisual>();
visualInstance.Initialize(currentTier.TierEnum, currentTier.Texture, currentTier.Scale);
marker.AddChild(visualInstance);
needsChange = true;
}
}