basic capture functionality

This commit is contained in:
anonoe 2026-02-10 21:17:17 +01:00
parent 246f3c0840
commit c141e6a169
Signed by: anonoe
SSH key fingerprint: SHA256:OnAs6gNQelOnDiY5tBpDYKQiuTgBvnmIdMo5P09cdqg
20 changed files with 430 additions and 14 deletions

View file

@ -0,0 +1,28 @@
using Godot;
public partial class CaptureController : Node
{
[Export] public NodePath CaptureUIPath { get; set; }
private GameRoot _root = null!;
private CaptureUI? _ui;
public override void _Ready()
{
_ui = GetNodeOrNull<CaptureUI>(CaptureUIPath);
if (_ui == null)
{
GD.PrintErr("CaptureController: CaptureUIPath not set.");
return;
}
GameRoot.Instance.CaptureRequested += OnRequestCapture;
}
private void OnRequestCapture(Creature creature)
{
if (_ui == null) return;
if (!IsInstanceValid(creature)) return;
_ui.StartCapture(creature);
}
}

View file

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

14
scripts/core/GameRoot.cs Normal file
View file

@ -0,0 +1,14 @@
using Godot;
public partial class GameRoot : Node
{
public static GameRoot Instance { get; private set; } = null!;
public event System.Action<Creature>? CaptureRequested;
public override void _EnterTree()
{
Instance = this;
}
public void RequestCapture(Creature creature) => CaptureRequested?.Invoke(creature);
}

View file

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

View file

@ -9,6 +9,8 @@ public class SaveState
// Respawnables: pickupId -> unixTimeSeconds when it becomes available again
public Dictionary<string, long> PickupRespawnAt { get; set; } = new();
public HashSet<string> CapturedCreatures { get; set; } = new();
//public Vector2I? LastPlayerChunk { get; set; } // optional debug, requires "using Godot;"
//public int[]? LastPlayerChunk { get; set; } // [x,y] same debug as above, does not require Godot
}