AI/Animals/Animal.Persistence.cs
using HC3.Persistence;
using System.Text.Json.Nodes;
namespace HC3;
partial class Animal : IPrefabSourceComponent<Animal.SaveData>
{
public string PrefabSource { get; private set; }
public sealed record SaveData( Vector3 Position, float Rotation, JsonObject Metadata = null );
public SaveData GetSaveData()
{
return new( WorldPosition, WorldRotation.Yaw(), GetPersistentMetadata() );
}
protected override void OnAwake()
{
base.OnAwake();
if ( GameObject.IsPrefabInstanceRoot )
{
PrefabSource = GameObject.PrefabInstanceSource;
}
}
protected virtual JsonObject GetPersistentMetadata()
{
var obj = new JsonObject();
// TODO: empty so we can define stuff
return obj;
}
protected virtual void SetPersistentMetadata( JsonObject obj )
{
if ( obj == null )
return;
// TODO: define later
}
public void Spawn( SaveData saveData )
{
WorldPosition = saveData.Position;
WorldRotation = Rotation.FromYaw( saveData.Rotation );
Transform.ClearInterpolation();
SetPersistentMetadata( saveData.Metadata );
IsPlaced = true;
GameObject.Root.NetworkSpawn();
}
}
file sealed class AnimalSaveData : SpawnedPrefabSaveData<Animal, Animal.SaveData>
{
public override string PropertyName => "Animals";
}