Skip to content

Commit 63ce5cd

Browse files
authored
Create NetworkParentCentre.cs
1 parent b26fb5b commit 63ce5cd

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

NetworkParentCentre.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Unity.Netcode;
4+
using UnityEngine;
5+
6+
public class NetworkParentCentre : NetworkOwnerBehaviour
7+
{
8+
public NetworkVariable<ulong> OwnerId = new(writePerm: NetworkVariableWritePermission.Owner,
9+
readPerm: NetworkVariableReadPermission.Everyone);
10+
11+
public List<NetworkParent> NetworkParents = new();
12+
13+
protected override void OwnerNetworkSpawn()
14+
{
15+
if (!IsOwner) return;
16+
if (transform.parent != null)
17+
{
18+
Debug.LogError(
19+
$"Network Parent Centre: {transform.parent.name} | Can't have a parent (Must be a root object)");
20+
return;
21+
}
22+
23+
NetworkParentCentre[] parentCentres = GetComponentsInChildren<NetworkParentCentre>();
24+
if (parentCentres.Length > 1)
25+
{
26+
Debug.LogError(
27+
$"Network Parent Centre: {transform.parent.name} | Can't have more than one Network Parent Centre on the same Network Object");
28+
return;
29+
}
30+
31+
OwnerId.Value = NetworkManager.Singleton.LocalClientId;
32+
33+
NetworkParents = GetComponentsInChildren<NetworkParent>().ToList();
34+
}
35+
36+
public bool TryToParentNetworkObject(NetworkObjectReference networkObjectReference, string networkParentId)
37+
{
38+
if (!IsOwner) return false;
39+
40+
NetworkParent networkParent = GetNetworkParent(networkParentId);
41+
if (networkParent == null) return false;
42+
43+
networkParent.TriggerParenting(networkObjectReference);
44+
return true;
45+
}
46+
47+
private NetworkParent GetNetworkParent(string networkParentId)
48+
{
49+
return NetworkParents.Find(x => x.NetworkParentId == networkParentId);
50+
}
51+
}

0 commit comments

Comments
 (0)