Skip to content

Commit a669ba6

Browse files
committed
initial
1 parent ba30286 commit a669ba6

2 files changed

Lines changed: 142 additions & 0 deletions

File tree

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using NUnit.Framework;
5+
using UnityEngine;
6+
using UnityEngine.TestTools;
7+
using Unity.Netcode.TestHelpers.Runtime;
8+
9+
namespace Unity.Netcode.RuntimeTests
10+
{
11+
public class NetworkListChangedTestComponent : NetworkBehaviour
12+
{
13+
14+
}
15+
16+
public class ListChangedObject : NetworkBehaviour
17+
{
18+
public static List<ListChangedObject> ClientTargetedNetworkObjects = new List<ListChangedObject>();
19+
public static ulong ClientIdToTarget;
20+
21+
public static NetworkObject GetNetworkObjectById(ulong networkObjectId)
22+
{
23+
foreach (var entry in ClientTargetedNetworkObjects)
24+
{
25+
if (entry.NetworkObjectId == networkObjectId)
26+
{
27+
return entry.NetworkObject;
28+
}
29+
}
30+
return null;
31+
}
32+
33+
public override void OnNetworkSpawn()
34+
{
35+
if (NetworkManager.LocalClientId == ClientIdToTarget)
36+
{
37+
ClientTargetedNetworkObjects.Add(this);
38+
}
39+
base.OnNetworkSpawn();
40+
}
41+
42+
public override void OnNetworkDespawn()
43+
{
44+
if (ClientTargetedNetworkObjects.Contains(this))
45+
{
46+
ClientTargetedNetworkObjects.Remove(this);
47+
}
48+
base.OnNetworkDespawn();
49+
}
50+
51+
public NetworkList<int> MyNetworkList;
52+
53+
private void Start()
54+
{
55+
MyNetworkList = new NetworkList<int>();
56+
MyNetworkList.OnListChanged += Changed;
57+
}
58+
59+
public void Changed(NetworkListEvent<int> listEvent)
60+
{
61+
Debug.Log($"listEvent.Type is {listEvent.Type}");
62+
}
63+
}
64+
65+
public class NetworkListChangedTests : NetcodeIntegrationTest
66+
{
67+
protected override int NumberOfClients => 2;
68+
69+
private ulong m_ClientId0;
70+
private GameObject m_PrefabToSpawn;
71+
72+
private NetworkObject m_NetSpawnedObject1;
73+
private NetworkObject m_NetSpawnedObject2;
74+
private NetworkObject m_NetSpawnedObject3;
75+
private NetworkObject m_Object1OnClient0;
76+
private NetworkObject m_Object2OnClient0;
77+
private NetworkObject m_Object3OnClient0;
78+
79+
protected override void OnCreatePlayerPrefab()
80+
{
81+
var networkTransform = m_PlayerPrefab.AddComponent<NetworkListChangedTestComponent>();
82+
}
83+
84+
protected override void OnServerAndClientsCreated()
85+
{
86+
m_PrefabToSpawn = CreateNetworkObjectPrefab("ListChangedObject");
87+
m_PrefabToSpawn.AddComponent<ListChangedObject>();
88+
}
89+
90+
private bool RefreshNetworkObjects()
91+
{
92+
m_Object1OnClient0 = ListChangedObject.GetNetworkObjectById(m_NetSpawnedObject1.NetworkObjectId);
93+
m_Object2OnClient0 = ListChangedObject.GetNetworkObjectById(m_NetSpawnedObject2.NetworkObjectId);
94+
m_Object3OnClient0 = ListChangedObject.GetNetworkObjectById(m_NetSpawnedObject3.NetworkObjectId);
95+
if (m_Object1OnClient0 == null || m_Object2OnClient0 == null || m_Object3OnClient0 == null)
96+
{
97+
return false;
98+
}
99+
Assert.True(m_Object1OnClient0.NetworkManagerOwner == m_ClientNetworkManagers[0]);
100+
Assert.True(m_Object2OnClient0.NetworkManagerOwner == m_ClientNetworkManagers[0]);
101+
Assert.True(m_Object3OnClient0.NetworkManagerOwner == m_ClientNetworkManagers[0]);
102+
return true;
103+
}
104+
105+
106+
[UnityTest]
107+
public IEnumerator NetworkListChangedTest()
108+
{
109+
m_ClientId0 = m_ClientNetworkManagers[0].LocalClientId;
110+
ListChangedObject.ClientTargetedNetworkObjects.Clear();
111+
ListChangedObject.ClientIdToTarget = m_ClientId0;
112+
113+
// create 3 objects
114+
var spawnedObject1 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
115+
var spawnedObject2 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
116+
var spawnedObject3 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
117+
m_NetSpawnedObject1 = spawnedObject1.GetComponent<NetworkObject>();
118+
m_NetSpawnedObject2 = spawnedObject2.GetComponent<NetworkObject>();
119+
m_NetSpawnedObject3 = spawnedObject3.GetComponent<NetworkObject>();
120+
121+
// get the NetworkObject on a client instance
122+
yield return WaitForConditionOrTimeOut(RefreshNetworkObjects);
123+
AssertOnTimeout($"Could not refresh all NetworkObjects!");
124+
125+
m_NetSpawnedObject1.GetComponent<ListChangedObject>().MyNetworkList.Add(42);
126+
m_NetSpawnedObject1.GetComponent<ListChangedObject>().MyNetworkList[0] = 44;
127+
128+
// todo
129+
}
130+
}
131+
}

com.unity.netcode.gameobjects/Tests/Runtime/ListChangedTest.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)