Skip to content

Commit 36ec35f

Browse files
committed
Abstract class approach, removed wrapper
1 parent 81d574a commit 36ec35f

File tree

3 files changed

+17
-38
lines changed

3 files changed

+17
-38
lines changed

com.unity.netcode.gameobjects/Runtime/Spawning/INetworkPrefabInstanceHandlerWithData.cs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,26 @@ namespace Unity.Netcode
99
/// Specialized version of <see cref="INetworkPrefabInstanceHandler"/> that receives
1010
/// custom instantiation data injected by the server before spawning.
1111
/// </summary>
12-
public interface INetworkPrefabInstanceHandlerWithData<T> where T : struct, INetworkSerializable
12+
public abstract class NetworkPrefabInstanceHandlerWithData<T> : INetworkPrefabInstanceHandlerWithData where T : struct, INetworkSerializable
1313
{
14-
NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, T instantiationData);
15-
void Destroy(NetworkObject networkObject);
16-
}
17-
18-
internal interface INetworkPrefabInstanceHandlerWithData : INetworkPrefabInstanceHandler
19-
{
20-
NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, FastBufferReader reader);
21-
bool HandlesDataType<T>();
22-
}
23-
24-
internal class HandlerWrapper<T> : INetworkPrefabInstanceHandlerWithData where T : struct, INetworkSerializable
25-
{
26-
private readonly INetworkPrefabInstanceHandlerWithData<T> _impl;
14+
public abstract NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, T instantiationData);
2715

28-
public HandlerWrapper(INetworkPrefabInstanceHandlerWithData<T> impl) => _impl = impl;
29-
30-
public bool HandlesDataType<U>() => typeof(T) == typeof(U);
16+
public abstract void Destroy(NetworkObject networkObject);
3117

32-
public NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, FastBufferReader reader)
18+
bool INetworkPrefabInstanceHandlerWithData.HandlesDataType<U>() => typeof(T) == typeof(U);
19+
20+
NetworkObject INetworkPrefabInstanceHandlerWithData.Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, FastBufferReader reader)
3321
{
3422
reader.ReadValueSafe(out T _payload);
35-
return _impl.Instantiate(ownerClientId, position, rotation, _payload);
23+
return Instantiate(ownerClientId, position, rotation, _payload);
3624
}
3725

38-
public NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation) => _impl.Instantiate(ownerClientId, position, rotation, default);
39-
public void Destroy(NetworkObject networkObject) => _impl.Destroy(networkObject);
26+
NetworkObject INetworkPrefabInstanceHandler.Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation) => Instantiate(ownerClientId, position, rotation, default);
27+
}
28+
29+
internal interface INetworkPrefabInstanceHandlerWithData : INetworkPrefabInstanceHandler
30+
{
31+
bool HandlesDataType<T>();
32+
NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, FastBufferReader reader);
4033
}
4134
}

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkPrefabHandler.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,6 @@ public bool AddHandler(GameObject networkPrefabAsset, INetworkPrefabInstanceHand
8484
{
8585
return AddHandler(networkPrefabAsset.GetComponent<NetworkObject>().GlobalObjectIdHash, instanceHandler);
8686
}
87-
public bool AddHandler<T>(GameObject networkPrefabAsset, INetworkPrefabInstanceHandlerWithData<T> instanceHandler) where T : struct, INetworkSerializable
88-
{
89-
return AddHandler(networkPrefabAsset.GetComponent<NetworkObject>().GlobalObjectIdHash, instanceHandler);
90-
}
9187

9288
/// <summary>
9389
/// Use a <see cref="NetworkObject"/> to register a class that implements the <see cref="INetworkPrefabInstanceHandler"/> interface with the <see cref="NetworkPrefabHandler"/>
@@ -99,10 +95,6 @@ public bool AddHandler(NetworkObject prefabAssetNetworkObject, INetworkPrefabIns
9995
{
10096
return AddHandler(prefabAssetNetworkObject.GlobalObjectIdHash, instanceHandler);
10197
}
102-
public bool AddHandler<T>(NetworkObject prefabAssetNetworkObject, INetworkPrefabInstanceHandlerWithData<T> instanceHandler) where T : struct, INetworkSerializable
103-
{
104-
return AddHandler(prefabAssetNetworkObject.GlobalObjectIdHash, instanceHandler);
105-
}
10698

10799
/// <summary>
108100
/// Use a <see cref="NetworkObject.GlobalObjectIdHash"/> to register a class that implements the <see cref="INetworkPrefabInstanceHandler"/> interface with the <see cref="NetworkPrefabHandler"/>
@@ -124,12 +116,6 @@ public bool AddHandler(uint globalObjectIdHash, INetworkPrefabInstanceHandler in
124116

125117
return false;
126118
}
127-
public bool AddHandler<T>(uint globalObjectIdHash, INetworkPrefabInstanceHandlerWithData<T> instanceHandler) where T : struct, INetworkSerializable
128-
{
129-
if (!m_PrefabAssetToPrefabHandler.ContainsKey(globalObjectIdHash))
130-
return AddHandler(globalObjectIdHash, new HandlerWrapper<T>(instanceHandler));
131-
return false;
132-
}
133119

134120
public void SetInstantiationData<T>(GameObject gameObject, T instantiationData) where T : struct, INetworkSerializable
135121
{

com.unity.netcode.gameobjects/Tests/Runtime/Prefabs/NetworkPrefabHandlerWithDataTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private IEnumerator WaitForAllClientsToSync(NetworkSerializableTest expectedData
128128
Assert.False(timeoutHelper.TimedOut, "Data did not synchronize correctly to all clients.");
129129
}
130130

131-
private class PrefabInstanceHandlerWithData : INetworkPrefabInstanceHandlerWithData<NetworkSerializableTest>
131+
private class PrefabInstanceHandlerWithData : NetworkPrefabInstanceHandlerWithData<NetworkSerializableTest>
132132
{
133133
public GameObject Prefab;
134134
public NetworkSerializableTest instantiationData;
@@ -138,13 +138,13 @@ public PrefabInstanceHandlerWithData(GameObject prefab)
138138
Prefab = prefab;
139139
}
140140

141-
public NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, NetworkSerializableTest data)
141+
public override NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation, NetworkSerializableTest data)
142142
{
143143
instantiationData = data;
144144
return GameObject.Instantiate(Prefab, position, rotation).GetComponent<NetworkObject>();
145145
}
146146

147-
public void Destroy(NetworkObject networkObject)
147+
public override void Destroy(NetworkObject networkObject)
148148
{
149149
GameObject.DestroyImmediate(networkObject.gameObject);
150150
}

0 commit comments

Comments
 (0)