You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Babushka/scripts/CSharp/Common/Savegame/SaveIDProviderTool.cs

34 lines
1.1 KiB

using System;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.Savegame;
/// <summary>
/// And editor tool that lives in the scene scope and iterates over saveable nodes and assigns them unique IDs where necessary.
/// It only works if the object (prefab) in question has been added to the "Saveable"-group beforehand.
/// </summary>
[Tool]
public partial class SaveIDProviderTool : Node
{
/// <summary>
/// Creates an inspector button that calls the AssignIDs method.
/// </summary>
[ExportToolButton("Assign IDs")] private Callable assignIDs => Callable.From(AssignIDs);
private void AssignIDs()
{
Array<Node> saveables = GetTree().GetNodesInGroup("Saveable");
foreach (var node in saveables)
{
GD.Print($"Checking {node.Name}.");
if (!node.HasMeta("SaveID") || string.IsNullOrEmpty(node.GetMeta("SaveID").AsString()))
{
string saveID = Guid.NewGuid().ToString();
node.SetMeta("SaveID", saveID);
GD.Print($"Setting Save ID for node {node.Name}: " + saveID);
}
}
}
}