AI/Guests/Inventory/Components/TrashPile.cs
using HC3.Persistence;

namespace HC3.Inventory;

public class TrashPile : Component, IPrefabSourceComponent<TrashPile.SaveData>
{
	public record SaveData( Vector3 Position, Rotation Rotation );

	public static List<TrashPile> All { get; } = [];

	protected override void OnAwake()
	{
		if ( GameObject.IsPrefabInstanceRoot )
		{
			PrefabSource = GameObject.PrefabInstanceSource;
		}

		All.Add( this );
	}

	protected override void OnDestroy()
	{
		All.Remove( this );
	}

	public string PrefabSource { get; private set; }

	public SaveData GetSaveData()
	{
		return new( WorldPosition, WorldRotation );
	}

	public void Spawn( SaveData saveData )
	{
		WorldPosition = saveData.Position;
		WorldRotation = saveData.Rotation;

		GameObject.Root.NetworkSpawn();
	}
}

file sealed class TrashSaveData : SpawnedPrefabSaveData<TrashPile, TrashPile.SaveData>
{
	public override string PropertyName => "Trash";
}