using System.Collections.Generic; using System.Linq; using UnityEngine; namespace VelNet { /// /// This is a base class for all objects that a player can instantiated/owned /// public class NetworkObject : MonoBehaviour { [Header("NetworkObject properties")] public VelNetPlayer owner; public bool ownershipLocked; public bool IsMine => owner != null && owner.isLocal; /// /// This is forged from the combination of the creator's id (-1 in the case of a scene object) and an object id, so it's always unique for a room /// public string networkId; /// /// This may be empty if it's not a prefab (scene object) /// public string prefabName; public bool isSceneObject; public List syncedComponents; public void SendBytes(NetworkComponent component, byte[] message, bool reliable = true) { if (!IsMine) { Debug.LogError("Can't send message if owner is null or not local", this); return; } // send the message and an identifier for which component it belongs to int index = syncedComponents.IndexOf(component); owner.SendMessage(this, index.ToString(), message, reliable); } public void SendBytesToGroup(NetworkComponent component, string group, byte[] message, bool reliable = true) { if (!IsMine) { Debug.LogError("Can't send message if owner is null or not local", this); return; } // send the message and an identifier for which component it belongs to int index = syncedComponents.IndexOf(component); owner.SendGroupMessage(this, group, index.ToString(), message, reliable); } public void ReceiveBytes(string identifier, byte[] message) { // send the message to the right component syncedComponents[int.Parse(identifier)].ReceiveBytes(message); } } }