// Update is called once per frame void Update() { time += Time.deltaTime; acumTime += Time.deltaTime; if (acumTime >= (1.0f / fps)) { frame++; acumTime -= (1.0f / fps); Packet packet = PacketQueue.GetInstance().PollPacket(); while (packet != null) { foreach (var gm in packet.Messages) { handler.Handle(gm); } packet = PacketQueue.GetInstance().PollPacket(); } foreach (var action in player.toSend) { outgoingMessages.Add(action); } player.toSend.Clear(); foreach (var gm in outgoingMessages) { if (gm.isReliable()) { if (MessageType.PlayerInput.Equals(gm.type())) { rq.AddQueueWithOutTimeout((ReliableMessage)gm); } else { rq.AddQueueWithTimeout((ReliableMessage)gm, time); } } } Dictionary <int, PlayerSnapshot> currentSnapshot = SnapshotHandler.GetInstance().getSnapshot(time); if (currentSnapshot != null) { SnapshotHandler.GetInstance().updatePlayer(currentSnapshot); } outgoingMessages.AddRange(rq.MessageToResend(time)); Debug.Log("Outgoing messages size: " + outgoingMessages.Count); if (outgoingMessages.Count > 0) { Packet p = new Packet(outgoingMessages); byte[] bytes = p.serialize(); SendUdp(bytes); outgoingMessages.Clear(); } } }
private void handleWorldSnapshot(WorldSnapshotMessage wm) { float time = wm._playerSnapshots[0]._TimeStamp; Dictionary <int, PlayerSnapshot> worldSnap = new Dictionary <int, PlayerSnapshot>(); foreach (PlayerSnapshot wmPlayerSnapshot in wm._playerSnapshots) { worldSnap.Add(wmPlayerSnapshot.id, wmPlayerSnapshot); } SnapshotHandler.GetInstance().ReceiveSnapshot(worldSnap, time); }
// Update is called once per frame void Update() { time += Time.deltaTime; acumTime += Time.deltaTime; if (Input.GetKey(KeyCode.W)) { frameActions.Add(PlayerAction.MoveForward); } if (Input.GetKey(KeyCode.A)) { frameActions.Add(PlayerAction.MoveLeft); } if (Input.GetKey(KeyCode.S)) { frameActions.Add(PlayerAction.MoveBack); } if (Input.GetKey(KeyCode.D)) { frameActions.Add(PlayerAction.MoveRight); } if (Input.GetMouseButtonDown(0)) { Shoot(); toSend.Add(new PlayerInputMessage(PlayerAction.Shoot, time, true)); } if (acumTime >= (1.0f / GlobalSettings.Fps)) { acumTime -= (1.0f / GlobalSettings.Fps); foreach (var action in frameActions) { PlayerInputMessage msg = new PlayerInputMessage(action, time, true); toSend.Add(msg); if (SnapshotHandler.GetInstance().prediction) { actions.Enqueue(msg); applyAction(action); } } toSend.Add(new RotationMessage(this.gameObject.transform.eulerAngles)); frameActions.Clear(); } camera.transform.position = this.gameObject.transform.position; camera.transform.rotation = this.gameObject.transform.rotation; }
// Use this for initialization void Start() { player = GameObject.Find("Player").GetComponent <Player>(); player.name = playerName; outgoingMessages = new List <GameMessage>(); rq = new ReliableQueue(GlobalSettings.ReliableTimeout); rq.AddQueueWithTimeout(new ClientConnectMessage(playerName, time, true), 0); otherPlayers = new Dictionary <int, ServerPlayer>(); handler = new ClientMessageHandler(this); SnapshotHandler.GetInstance().otherPlayers = this.otherPlayers; SnapshotHandler.GetInstance().self = this.player; SnapshotHandler.GetInstance().prediction = this.prediction; Thread thread = new Thread(new ThreadStart(ThreadMethod)); thread.Start(); }