public void QueueEntityMessage(int msgCode, NetworkGameObject entity, params object[] args) { foreach (SteamConnection s in connections.Values) { QueueEntityMessage(s.steamID, msgCode, entity, args); } }
public GameObject SpawnPrefabInternal(int prefabId, int networkId, int owner, int controller) { Debug.Log("SpawnPrefabInternal : " + prefabId + " :" + networkId + " : " + owner + " : " + controller); if (GetConnection(owner) == null) { Debug.Log("SpawnPrefabInternal:: No connection with index: " + owner + ". Ignoring this SpawnPrefabInternal call"); } GameObject prefab = GetPrefab(prefabId); NetworkGameObject ngo = null; if (prefab != null) { GameObject g = GameObject.Instantiate(prefab); ngo = g.GetComponent <NetworkGameObject>(); ngo.prefabId = prefabId; ngo.networkId = networkId; ngo.owner = owner; ngo.controller = controller; ngo.OnSpawn(); } //add it to the owners entity list if (ngo != null) { SteamConnection c = GetConnection(owner); c.entities[networkId] = ngo; } return(ngo.gameObject); }
public static NetworkGameObject GetGameObject(this byte[] data) { NetworkGameObject gameObject = new NetworkGameObject(); gameObject.ID = data.Take(4).ToArray().ToInt(); gameObject.position = data.Skip(4).Take(12).ToArray().ToVector3(); gameObject.rotation = data.Skip(16).Take(16).ToArray().ToQuaternion(); // gameObject.gameObject.name = data.Skip(32).ToArray().ByteToString(); return gameObject; }
public static NetworkGameObject NewGameObject(this byte[] data) { NetworkGameObject gameObject = new NetworkGameObject(); string name = BToString(data.Skip(32).ToArray()); gameObject.gameObject = (GameObject)Resources.Load(name); gameObject.ID = data.Take(4).ToArray().ToInt(); gameObject.position = data.Skip(4).Take(12).ToArray().ToVector3(); gameObject.rotation = data.Skip(16).Take(16).ToArray().ToQuaternion(); gameObject.gameObject.name = name; return gameObject; }
public void QueueEntityMessage(ulong sendTo, int msgCode, NetworkGameObject entity, params object[] args) { SteamConnection c = GetConnection(sendTo); if (c != null) { NetworkMessage msg = new NetworkMessage(msgCode, args); msg.entity = entity; msg.isEntityMsg = true; c.messageQueue.Add(msg); } }
public GameObject GetPrefab(int prefabId) { NetworkGameObject n = GetPrefabNetworkGameObject(prefabId); if (n != null) { return(n.gameObject); } else { return(null); } }
public override void OverrideGameObject(GameObject toOverride) { NetworkGameObject network = toOverride.GetComponent <NetworkGameObject>(); if (network == null) { return; } network.networkTransform.enabled = networkTransformEnabled; network.networkRigidbody.enabled = networkRigidbody; network.networkAnimator.enabled = networkAnimator; }
//prefab stuff public int RegisterPrefab(string prefabName, NetworkGameObject prefab) { if (NetworkPrefabs.Count + 1 > maxPrefabs) { Debug.LogException(new Exception("Can not register prefab [" + prefabName + "] - Prefab limit has been reached")); } if (NetworkPrefabNames.Contains(prefabName)) { Debug.LogException(new Exception("Can not register prefab [" + prefabName + "] because a prefab already exists with that name")); } NetworkPrefabs.Add(prefab); NetworkPrefabNames.Add(prefabName); int prefabId = NetworkPrefabs.Count - 1; Debug.Log("Registered Prefab: " + prefabName + " - id: " + prefabId); return(prefabId); }
/// <summary> ///called after entity deserialize. If you do NOT call this, your state will not be applied ///This also spawns an object if the object we received state data for doesn't exist. /// </summary> public void ProcessEntityMessage(int prefabId, int networkId, int owner, int controller, params object[] args) { NetworkGameObject entity = null; entity = GetEntity(owner, networkId); if (entity != null) { entity.OnStateUpdate(args); } else { //this entity doesn't exist for some reason. Maybe it has already been destroyed locally //anyways, since we already read from the stream, we can just discard whatever we read //without issues to the next messages we read. //OR we should spawn it, then pass it the data entity = Core.net.SpawnPrefabInternal(prefabId, networkId, owner, controller).GetComponent <NetworkGameObject>(); entity.OnStateUpdate(args); } //don't need to process, just call onStateUpdate with our new values //Core.net.MessageProcessors[msgCode](sender, prefabId, networkId, owner, controller); }
public void QueueEntityMessage(ulong sendTo, string msgCode, NetworkGameObject entity, params object[] args) { QueueEntityMessage(sendTo, GetMessageCode(msgCode), entity, args); }