fix: Ensure network variable ILPP code picks up types used in NetworkList, too (#2245)
This commit is contained in:
Родитель
e10c266dfd
Коммит
0592550e2a
|
@ -755,7 +755,7 @@ namespace Unity.Netcode.Editor.CodeGen
|
||||||
//var type = field.FieldType;
|
//var type = field.FieldType;
|
||||||
if (type.IsGenericInstance)
|
if (type.IsGenericInstance)
|
||||||
{
|
{
|
||||||
if (type.Resolve().Name == typeof(NetworkVariable<>).Name)
|
if (type.Resolve().Name == typeof(NetworkVariable<>).Name || type.Resolve().Name == typeof(NetworkList<>).Name)
|
||||||
{
|
{
|
||||||
var genericInstanceType = (GenericInstanceType)type;
|
var genericInstanceType = (GenericInstanceType)type;
|
||||||
var wrappedType = genericInstanceType.GenericArguments[0];
|
var wrappedType = genericInstanceType.GenericArguments[0];
|
||||||
|
|
|
@ -48,6 +48,26 @@ namespace Unity.Netcode.RuntimeTests
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct StructUsedOnlyInNetworkList : IEquatable<StructUsedOnlyInNetworkList>, INetworkSerializeByMemcpy
|
||||||
|
{
|
||||||
|
public int Value;
|
||||||
|
|
||||||
|
public bool Equals(StructUsedOnlyInNetworkList other)
|
||||||
|
{
|
||||||
|
return Value == other.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
return obj is StructUsedOnlyInNetworkList other && Equals(other);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[TestFixtureSource(nameof(TestDataSource))]
|
[TestFixtureSource(nameof(TestDataSource))]
|
||||||
public class NetworkVariablePermissionTests : NetcodeIntegrationTest
|
public class NetworkVariablePermissionTests : NetcodeIntegrationTest
|
||||||
{
|
{
|
||||||
|
@ -433,6 +453,7 @@ namespace Unity.Netcode.RuntimeTests
|
||||||
public readonly NetworkVariable<int> TheScalar = new NetworkVariable<int>();
|
public readonly NetworkVariable<int> TheScalar = new NetworkVariable<int>();
|
||||||
public readonly NetworkVariable<SomeEnum> TheEnum = new NetworkVariable<SomeEnum>();
|
public readonly NetworkVariable<SomeEnum> TheEnum = new NetworkVariable<SomeEnum>();
|
||||||
public readonly NetworkList<int> TheList = new NetworkList<int>();
|
public readonly NetworkList<int> TheList = new NetworkList<int>();
|
||||||
|
public readonly NetworkList<StructUsedOnlyInNetworkList> TheStructList = new NetworkList<StructUsedOnlyInNetworkList>();
|
||||||
public readonly NetworkList<FixedString128Bytes> TheLargeList = new NetworkList<FixedString128Bytes>();
|
public readonly NetworkList<FixedString128Bytes> TheLargeList = new NetworkList<FixedString128Bytes>();
|
||||||
|
|
||||||
public readonly NetworkVariable<FixedString32Bytes> FixedString32 = new NetworkVariable<FixedString32Bytes>();
|
public readonly NetworkVariable<FixedString32Bytes> FixedString32 = new NetworkVariable<FixedString32Bytes>();
|
||||||
|
@ -449,7 +470,6 @@ namespace Unity.Netcode.RuntimeTests
|
||||||
|
|
||||||
public readonly NetworkVariable<TestStruct> TheStruct = new NetworkVariable<TestStruct>();
|
public readonly NetworkVariable<TestStruct> TheStruct = new NetworkVariable<TestStruct>();
|
||||||
public readonly NetworkVariable<TestClass> TheClass = new NetworkVariable<TestClass>();
|
public readonly NetworkVariable<TestClass> TheClass = new NetworkVariable<TestClass>();
|
||||||
public readonly NetworkList<TestStruct> TheListOfStructs = new NetworkList<TestStruct>();
|
|
||||||
|
|
||||||
public NetworkVariable<UnmanagedTemplateNetworkSerializableType<TestStruct>> TheTemplateStruct = new NetworkVariable<UnmanagedTemplateNetworkSerializableType<TestStruct>>();
|
public NetworkVariable<UnmanagedTemplateNetworkSerializableType<TestStruct>> TheTemplateStruct = new NetworkVariable<UnmanagedTemplateNetworkSerializableType<TestStruct>>();
|
||||||
public NetworkVariable<ManagedTemplateNetworkSerializableType<TestClass>> TheTemplateClass = new NetworkVariable<ManagedTemplateNetworkSerializableType<TestClass>>();
|
public NetworkVariable<ManagedTemplateNetworkSerializableType<TestClass>> TheTemplateClass = new NetworkVariable<ManagedTemplateNetworkSerializableType<TestClass>>();
|
||||||
|
@ -813,6 +833,26 @@ namespace Unity.Netcode.RuntimeTests
|
||||||
yield return WaitForConditionOrTimeOut(VerifyClass);
|
yield return WaitForConditionOrTimeOut(VerifyClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[UnityTest]
|
||||||
|
public IEnumerator TestNetworkListStruct([Values(true, false)] bool useHost)
|
||||||
|
{
|
||||||
|
yield return InitializeServerAndClients(useHost);
|
||||||
|
|
||||||
|
bool VerifyList()
|
||||||
|
{
|
||||||
|
return m_Player1OnClient1.TheStructList.Count == m_Player1OnServer.TheStructList.Count &&
|
||||||
|
m_Player1OnClient1.TheStructList[0].Value == m_Player1OnServer.TheStructList[0].Value &&
|
||||||
|
m_Player1OnClient1.TheStructList[1].Value == m_Player1OnServer.TheStructList[1].Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Player1OnServer.TheStructList.Add(new StructUsedOnlyInNetworkList { Value = 1 });
|
||||||
|
m_Player1OnServer.TheStructList.Add(new StructUsedOnlyInNetworkList { Value = 2 });
|
||||||
|
m_Player1OnServer.TheStructList.SetDirty(true);
|
||||||
|
|
||||||
|
// Wait for the client-side to notify it is finished initializing and spawning.
|
||||||
|
yield return WaitForConditionOrTimeOut(VerifyList);
|
||||||
|
}
|
||||||
|
|
||||||
[UnityTest]
|
[UnityTest]
|
||||||
public IEnumerator TestNetworkVariableStruct([Values(true, false)] bool useHost)
|
public IEnumerator TestNetworkVariableStruct([Values(true, false)] bool useHost)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче