//A constant loop that updates the clients on the position of other clients and the host private IEnumerator UpdateClients(float timeBetweenPackets) { while (true) { yield return(new WaitForSeconds(timeBetweenPackets)); SerializableVector[] pos = new SerializableVector[clients.Count + 1]; // bool[] posUpdates = new bool[clients.Count + 1]; //The first position is that of the host pos[0] = hostPlayer.transform.position; posUpdates[0] = true; //Get all the clients latest positions, load them into the packet along with whether that client sent in a position update foreach (var serverClient in clients) { pos[serverClient.clientId] = serverClient.position; posUpdates[serverClient.clientId] = serverClient.positionUpdated; serverClient.positionUpdated = false; } var serverPacket = new DataPacket.FromServer(); serverPacket = DataPacket.GetFromServerPositionPacket(pos, posUpdates, 0); //We don't particularly mind if movement packets occasionally get lost //It'll help with network bandwidth to just send these frequently without care for them BroadcastWithLoss(serverPacket); } }
void IXmlSerializable.ReadXml(System.Xml.XmlReader reader) { SerializableVector s = new SerializableVector(); s.ReadXml(reader); logProb = (DenseVector)s; }
public static void RaiseUpdateClientPosition(SerializableVector pos, bool posUpdated, int id) { if (UpdateClientPositionHandler != null) { UpdateClientPositionHandler.Invoke(pos, posUpdated, id); } }
public void RestoreState(object state) { SerializableVector vec = (SerializableVector)state; GetComponent <NavMeshAgent>().isStopped = true; GetComponent <NavMeshAgent>().enabled = false; transform.position = vec.ToVector3(); GetComponent <NavMeshAgent>().enabled = true; }
public static DataPacket.FromClient GetFromClientPositionPacket(SerializableVector _positionVector, int _playerId) { var packet = new FromClient(); packet.packetType = ServerMessages.POSITION; packet.positionVector = _positionVector; packet.playerId = _playerId; return(packet); }
//Sends data every tick to the server letting it know it's transform private IEnumerator ReportPosition(float timeBetweenUpdates) { while (true) { yield return(new WaitForSeconds(timeBetweenUpdates)); DataPacket.FromClient packet = new DataPacket.FromClient(); SerializableVector pos = transform.position; packet = DataPacket.GetFromClientPositionPacket(pos, ServerSettings.instance.playerId); ClientTCP.instance.SendDataWithLoss(packet); } }
private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "MainCube" || other.gameObject.tag == "SecondCube") { SaveManager.coins++; GameObject.Find("GameHandler").GetComponent <GameHandler>().mplevel++; GameObject.Find("Main Camera").transform.Find("MainScreen").Find("CoinsPanel").Find("Text").GetComponent <Text>().text = SaveManager.coins.ToString(); SerializableVector vec = new SerializableVector { x = transform.parent.position.x, z = transform.parent.position.z }; LevelManager.coinMaps.Add(vec); DestroyObject(this.gameObject); } }
void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) { SerializableVector s = (SerializableVector)logProb; s.WriteXml(writer); }
public void RestoreState(object state) { SerializableVector vec = state as SerializableVector; transform.position = vec.GetVector(); }
public void UpdateField <T>(T value, int netObjID, bool immediateOnSelf = true) { if (value == null) { Debug.LogError("Cannot change value to null...", netObj.transform); return; } object newValue = value; if (value.GetType() == typeof(Vector3)) { newValue = new SerializableVector((Vector3)System.Convert.ChangeType(value, typeof(Vector3))); } if (netObj == null) { netObj = NetworkObject.NetObjFromNetID(netObjID); } //If still null, netObj must of been destroyed. if (netObj == null) { return; } if (netID == -1) { netID = netObj.networkID; } JsonPacketObject jPO; if (!ENSUtils.IsSimple(newValue.GetType())) { jPO = new JsonPacketObject(JsonUtility.ToJson(newValue), newValue.GetType().ToString()); } else { jPO = new JsonPacketObject("" + newValue, newValue.GetType().ToString()); } if (!NetTools.IsMultiplayerGame()) { //If singleplayer game just immediately set the value no matter what. No need to use the packet handler for this. LocalFieldSet(newValue); return; } Packet pack = new Packet(Packet.pType.netVarEdit, Packet.sendType.nonbuffered, ENSSerialization.SerializeNetworkFieldPacket(new NetworkFieldPacket(netObjID, fieldName, jPO, immediateOnSelf))); pack.reliable = reliable; pack.relatesToNetObjID = netObjID; if (shouldBeProximity && netObj != null) { pack.packetSendType = Packet.sendType.proximity; pack.packetPosition = new SerializableVector(netObj.transform.position); } if (NetClient.instanceClient != null && !netObj.updateFieldsThroughServer) { NetClient.instanceClient.SendPacket(pack); } else if (NetServer.serverInstance != null) { foreach (NetworkPlayer player in NetServer.serverInstance.connections) { if (!player.playerConnected) { continue; //No longer connected. } if (player.clientID == NetTools.clientID) { continue; } NetServer.serverInstance.SendPacket(player, pack); } } if (immediateOnSelf) { LocalFieldSet(newValue); } }
public SerializableVector(SerializableVector value) { this.x = value.x; this.y = value.y; this.z = value.z; }
public static DataPacket.FromServer GetFromServerPositionPacket(float _angle, int _seed, SerializableVector _gunPosition, int _playerId) { var packet = new FromServer(); packet.packetType = ServerMessages.FIREGUN; packet.gunPosition = _gunPosition; packet.angle = _angle; packet.seed = _seed; packet.shotId = _playerId; packet.playerId = 0; return(packet); }