basic Party Manager

This commit is contained in:
anonoe 2026-02-15 17:08:46 +01:00
parent c141e6a169
commit 6f1d5ea681
Signed by: anonoe
SSH key fingerprint: SHA256:OnAs6gNQelOnDiY5tBpDYKQiuTgBvnmIdMo5P09cdqg
10 changed files with 158 additions and 8 deletions

View file

@ -0,0 +1,65 @@
using Godot;
using System.Collections.Generic;
using System.Text.Json;
public partial class CreatureRegistry : Node
{
public record CreatureDef(
string id,
string name,
List<string> types,
List<string> biomes,
List<string> time_windows,
int base_hp,
int base_atk,
int base_def,
int capture_difficulty
);
public record CreatureFile(int schema, List<CreatureDef> creatures);
private readonly Dictionary<string, CreatureDef> _byId = new();
public CreatureDef Get(string id)
{
if (_byId.TryGetValue(id, out var def)) return def;
throw new KeyNotFoundException($"Unknown creature id: {id}");
}
public bool TryGet(string id, out CreatureDef def) => _byId.TryGetValue(id, out def!);
[Export] public NodePath PackManagerPath { get; set; }
private PackManager? _packs;
public override void _Ready()
{
_packs = GetNodeOrNull<PackManager>(PackManagerPath);
if (_packs == null)
{
GD.PrintErr("CreatureRegistry: PackManagerPath not set.");
return;
}
var path = _packs.Resolve("data/creatures/creatures.json");
if (path == null)
{
GD.PrintErr("CreatureRegistry: Could not resolve data/creatures/creatures.json");
return;
}
var json = FileAccess.GetFileAsString(path);
var file = JsonSerializer.Deserialize<CreatureFile>(json);
if (file?.creatures == null)
{
GD.PrintErr("CreatureRegistry: Failed to parse creatures.json");
return;
}
_byId.Clear();
foreach (var c in file.creatures)
_byId[c.id] = c;
GD.Print($"CreatureRegistry: loaded {_byId.Count} creatures");
}
}

View file

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

View file

@ -0,0 +1,38 @@
using Godot;
using System.Collections.Generic;
using System.Linq;
public partial class PartyManager : Node
{
public List<string> PartyCreatureIds { get; private set; } = new();
[Export] public NodePath SaveManagerPath { get; set; }
private SaveManager? _save;
public override void _Ready()
{
_save = GetNodeOrNull<SaveManager>(SaveManagerPath);
if (_save == null)
{
GD.PrintErr("PartyManager: SaveManagerPath not set.");
return;
}
// v0: party is all captured creatures (later: cap to 6 and add boxes)
PartyCreatureIds = _save.State.CapturedCreatures.ToList();
GD.Print($"Party loaded: {string.Join(", ", PartyCreatureIds)}");
}
public void AddToParty(string creatureId)
{
if (_save == null) return;
_save.State.CapturedCreatures.Add(creatureId);
_save.Save();
if (!PartyCreatureIds.Contains(creatureId))
PartyCreatureIds.Add(creatureId);
GD.Print($"Party updated: {string.Join(", ", PartyCreatureIds)}");
}
}

View file

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