Skip to content

Commit ae28805

Browse files
ShadauxCat0xFA11
andauthored
fix: remove ilpp for network variable [MTT-3438] (#1976)
Co-authored-by: Fatih Mar <[email protected]>
1 parent 71b76e7 commit ae28805

13 files changed

+388
-567
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ Additional documentation and release notes are available at [Multiplayer Documen
2525
- Fixed `NetworkSceneManager` was not sending scene event notifications for the currently active scene and any additively loaded scenes when loading a new scene in `LoadSceneMode.Single` mode. (#1975)
2626
- Fixed issue where one or more clients disconnecting during a scene event would cause `LoadEventCompleted` or `UnloadEventCompleted` to wait until the `NetworkConfig.LoadSceneTimeOut` period before being triggered. (#1973)
2727
- Fixed issues when multiple `ConnectionApprovalCallback`s were registered (#1972)
28-
- `FixedString` types can now be used in NetworkVariables and RPCs again without requiring a `ForceNetworkSerializeByMemcpy<>` wrapper (#1961)
28+
- Fixed a regression in serialization support: `FixedString`, `Vector2Int`, and `Vector3Int` types can now be used in NetworkVariables and RPCs again without requiring a `ForceNetworkSerializeByMemcpy<>` wrapper. (#1961)
29+
- Fixed generic types that inherit from NetworkBehaviour causing crashes at compile time. (#1976)
2930
- Fixed endless dialog boxes when adding a `NetworkBehaviour` to a `NetworkManager` or vice-versa. (#1947)
3031
- Fixed `NetworkAnimator` issue where it was only synchronizing parameters if the layer or state changed or was transitioning between states. (#1946)
3132
- Fixed `NetworkAnimator` issue where when it did detect a parameter had changed it would send all parameters as opposed to only the parameters that changed. (#1946)

com.unity.netcode.gameobjects/Editor/CodeGen/INetworkSerializableILPP.cs

Lines changed: 13 additions & 279 deletions
Large diffs are not rendered by default.

com.unity.netcode.gameobjects/Editor/CodeGen/RuntimeAccessModifiersILPP.cs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
5252
case nameof(NetworkBehaviour):
5353
ProcessNetworkBehaviour(typeDefinition);
5454
break;
55-
case nameof(NetworkVariableHelper):
56-
ProcessNetworkVariableHelper(typeDefinition);
57-
break;
5855
case nameof(__RpcParams):
5956
typeDefinition.IsPublic = true;
6057
break;
@@ -103,25 +100,6 @@ private void ProcessNetworkManager(TypeDefinition typeDefinition, string[] assem
103100
}
104101
}
105102

106-
private void ProcessNetworkVariableHelper(TypeDefinition typeDefinition)
107-
{
108-
foreach (var methodDefinition in typeDefinition.Methods)
109-
{
110-
if (methodDefinition.Name == nameof(NetworkVariableHelper.InitializeDelegatesEnum))
111-
{
112-
methodDefinition.IsPublic = true;
113-
}
114-
if (methodDefinition.Name == nameof(NetworkVariableHelper.InitializeDelegatesStruct))
115-
{
116-
methodDefinition.IsPublic = true;
117-
}
118-
if (methodDefinition.Name == nameof(NetworkVariableHelper.InitializeDelegatesNetworkSerializable))
119-
{
120-
methodDefinition.IsPublic = true;
121-
}
122-
}
123-
}
124-
125103
private void ProcessNetworkBehaviour(TypeDefinition typeDefinition)
126104
{
127105
foreach (var nestedType in typeDefinition.NestedTypes)

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1153,7 +1153,6 @@ private void OnEnable()
11531153
private void Awake()
11541154
{
11551155
UnityEngine.SceneManagement.SceneManager.sceneUnloaded += OnSceneUnloaded;
1156-
NetworkVariableHelper.InitializeAllBaseDelegates();
11571156
}
11581157

11591158
/// <summary>

com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Unity.Netcode
88
/// Event based NetworkVariable container for syncing Lists
99
/// </summary>
1010
/// <typeparam name="T">The type for the list</typeparam>
11-
public class NetworkList<T> : NetworkVariableSerialization<T> where T : unmanaged, IEquatable<T>
11+
public class NetworkList<T> : NetworkVariableBase where T : unmanaged, IEquatable<T>
1212
{
1313
private NativeList<T> m_List = new NativeList<T>(64, Allocator.Persistent);
1414
private NativeList<T> m_ListAtLastReset = new NativeList<T>(64, Allocator.Persistent);
@@ -72,34 +72,35 @@ public override void WriteDelta(FastBufferWriter writer)
7272
writer.WriteValueSafe((ushort)m_DirtyEvents.Length);
7373
for (int i = 0; i < m_DirtyEvents.Length; i++)
7474
{
75-
writer.WriteValueSafe(m_DirtyEvents[i].Type);
76-
switch (m_DirtyEvents[i].Type)
75+
var element = m_DirtyEvents.ElementAt(i);
76+
writer.WriteValueSafe(element.Type);
77+
switch (element.Type)
7778
{
7879
case NetworkListEvent<T>.EventType.Add:
7980
{
80-
Write(writer, m_DirtyEvents[i].Value);
81+
NetworkVariableSerialization<T>.Write(writer, ref element.Value);
8182
}
8283
break;
8384
case NetworkListEvent<T>.EventType.Insert:
8485
{
85-
writer.WriteValueSafe(m_DirtyEvents[i].Index);
86-
Write(writer, m_DirtyEvents[i].Value);
86+
writer.WriteValueSafe(element.Index);
87+
NetworkVariableSerialization<T>.Write(writer, ref element.Value);
8788
}
8889
break;
8990
case NetworkListEvent<T>.EventType.Remove:
9091
{
91-
Write(writer, m_DirtyEvents[i].Value);
92+
NetworkVariableSerialization<T>.Write(writer, ref element.Value);
9293
}
9394
break;
9495
case NetworkListEvent<T>.EventType.RemoveAt:
9596
{
96-
writer.WriteValueSafe(m_DirtyEvents[i].Index);
97+
writer.WriteValueSafe(element.Index);
9798
}
9899
break;
99100
case NetworkListEvent<T>.EventType.Value:
100101
{
101-
writer.WriteValueSafe(m_DirtyEvents[i].Index);
102-
Write(writer, m_DirtyEvents[i].Value);
102+
writer.WriteValueSafe(element.Index);
103+
NetworkVariableSerialization<T>.Write(writer, ref element.Value);
103104
}
104105
break;
105106
case NetworkListEvent<T>.EventType.Clear:
@@ -117,7 +118,7 @@ public override void WriteField(FastBufferWriter writer)
117118
writer.WriteValueSafe((ushort)m_ListAtLastReset.Length);
118119
for (int i = 0; i < m_ListAtLastReset.Length; i++)
119120
{
120-
Write(writer, m_ListAtLastReset[i]);
121+
NetworkVariableSerialization<T>.Write(writer, ref m_ListAtLastReset.ElementAt(i));
121122
}
122123
}
123124

@@ -128,7 +129,7 @@ public override void ReadField(FastBufferReader reader)
128129
reader.ReadValueSafe(out ushort count);
129130
for (int i = 0; i < count; i++)
130131
{
131-
Read(reader, out T value);
132+
NetworkVariableSerialization<T>.Read(reader, out T value);
132133
m_List.Add(value);
133134
}
134135
}
@@ -144,7 +145,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
144145
{
145146
case NetworkListEvent<T>.EventType.Add:
146147
{
147-
Read(reader, out T value);
148+
NetworkVariableSerialization<T>.Read(reader, out T value);
148149
m_List.Add(value);
149150

150151
if (OnListChanged != null)
@@ -171,7 +172,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
171172
case NetworkListEvent<T>.EventType.Insert:
172173
{
173174
reader.ReadValueSafe(out int index);
174-
Read(reader, out T value);
175+
NetworkVariableSerialization<T>.Read(reader, out T value);
175176
m_List.InsertRangeWithBeginEnd(index, index + 1);
176177
m_List[index] = value;
177178

@@ -198,7 +199,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
198199
break;
199200
case NetworkListEvent<T>.EventType.Remove:
200201
{
201-
Read(reader, out T value);
202+
NetworkVariableSerialization<T>.Read(reader, out T value);
202203
int index = m_List.IndexOf(value);
203204
if (index == -1)
204205
{
@@ -258,7 +259,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
258259
case NetworkListEvent<T>.EventType.Value:
259260
{
260261
reader.ReadValueSafe(out int index);
261-
Read(reader, out T value);
262+
NetworkVariableSerialization<T>.Read(reader, out T value);
262263
if (index >= m_List.Length)
263264
{
264265
throw new Exception("Shouldn't be here, index is higher than list length");

com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariable.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Unity.Netcode
99
/// A variable that can be synchronized over the network.
1010
/// </summary>
1111
[Serializable]
12-
public class NetworkVariable<T> : NetworkVariableSerialization<T> where T : unmanaged
12+
public class NetworkVariable<T> : NetworkVariableBase where T : unmanaged
1313
{
1414
/// <summary>
1515
/// Delegate type for value changed event
@@ -102,7 +102,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
102102
// would be stored in different fields
103103

104104
T previousValue = m_InternalValue;
105-
Read(reader, out m_InternalValue);
105+
NetworkVariableSerialization<T>.Read(reader, out m_InternalValue);
106106

107107
if (keepDirtyDelta)
108108
{
@@ -115,13 +115,13 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta)
115115
/// <inheritdoc />
116116
public override void ReadField(FastBufferReader reader)
117117
{
118-
Read(reader, out m_InternalValue);
118+
NetworkVariableSerialization<T>.Read(reader, out m_InternalValue);
119119
}
120120

121121
/// <inheritdoc />
122122
public override void WriteField(FastBufferWriter writer)
123123
{
124-
Write(writer, m_InternalValue);
124+
NetworkVariableSerialization<T>.Write(writer, ref m_InternalValue);
125125
}
126126
}
127127
}

com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableHelper.cs

Lines changed: 0 additions & 89 deletions
This file was deleted.

com.unity.netcode.gameobjects/Runtime/NetworkVariable/NetworkVariableHelper.cs.meta

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)