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