Files
2026-06-07 16:58:24 +01:00

77 lines
2.3 KiB
C#

using UnityEngine;
using VRC.SDK3.Components;
namespace VRC.SDK3.ClientSim
{
[AddComponentMenu("")]
public class ClientSimObjectPoolHelper : ClientSimBehaviour, IClientSimSyncable
{
private int _ownerID = 1;
private VRCObjectPool _objectPool;
private IClientSimSyncedObjectManager _syncedObjectManager;
public static void OnSpawn(VRCObjectPool objectPool, int index)
{
ClientSimObjectPoolHelper poolHelper = objectPool.GetComponent<ClientSimObjectPoolHelper>();
if (!poolHelper)
{
throw new ClientSimException("Object Pool has not been initialized yet before trying to spawn an object.");
}
poolHelper.OnObjectSpawned(index);
}
public static void OnReturn(VRCObjectPool objectPool, int index)
{
ClientSimObjectPoolHelper poolHelper = objectPool.GetComponent<ClientSimObjectPoolHelper>();
if (!poolHelper)
{
throw new ClientSimException("Object Pool has not been initialized yet before trying to return an object.");
}
poolHelper.OnObjectReturned(index);
}
public void Initialize(VRCObjectPool objectPool, IClientSimSyncedObjectManager syncedObjectManager)
{
_objectPool = objectPool;
_syncedObjectManager = syncedObjectManager;
syncedObjectManager.AddSyncedObject(this);
}
private void Start()
{
// Catch Helper not initialized.
if (_objectPool == null)
{
this.LogWarning($"Destroying uninitialized Helper. Object: {Tools.GetGameObjectPath(gameObject)}");
DestroyImmediate(this);
}
}
private void OnDestroy()
{
// Nullable needed for uninitialized case.
_syncedObjectManager?.RemoveSyncedObject(this);
}
private void OnObjectSpawned(int index) { }
private void OnObjectReturned(int index) { }
#region IClientSimSyncable
public int GetOwner()
{
return _ownerID;
}
public void SetOwner(int ownerID)
{
_ownerID = ownerID;
}
#endregion
}
}