public void SpawnPlayer(string classSelected) { var c = new Client_Message { ClientTick = 1, SelectChar = new Client_Message.Types.Client_SelectCharacter { Classname = classSelected } }; Thread.Sleep(50); SendMatchStateMessage(c); }
public void SendMatchStateMessage(Client_Message msg) { byte[] toSend; long opCode = -1; if (msg == null) { toSend = new byte[] { }; opCode = 255; } else { toSend = msg.ToByteArray(); switch (msg.TypeCase) { case Client_Message.TypeOneofCase.Move: opCode = 2; break; case Client_Message.TypeOneofCase.SelectChar: opCode = 100; break; default: opCode = 1; break; } } try { _socket.SendMatchState(NakamaManager.Instance.MatchId, opCode, toSend); } catch (Exception e) { Debug.LogError("Error while sending match state: " + e.Message); } }
public void CastSpell(GameDB_Lib.GameDB_Spell spell) { var cast = new Client_Message { Cast = new Client_Message.Types.Client_Cast { SpellId = spell.Id, //Position = new Vector2Df { X = pos.x, Y = pos.y } } }; PlayerManager.Instance.AddMessageToSend(cast); if (!spell.IgnoresGCD) { // GCDSlider.maxValue = spell.GlobalCooldown; // _player.GCDUntil = Time.time + spell.GlobalCooldown; } if (spell.CastTime > 0) { // CastBarSlider.maxValue = spell.CastTime; // _player.CastTimeUntil = Time.time + spell.CastTime; } /* * if (spell.Cooldown > 0) * { * // button.GetComponent<Image>().color = Color.gray; * * System.Threading.Timer timer = null; * timer = new System.Threading.Timer((obj) => * { * UnityThread.executeInUpdate(() => button.GetComponent<Image>().color = Color.white); * timer.Dispose(); * }, null, (int)(spell.Cooldown * 1000), System.Threading.Timeout.Infinite); * }*/ }
private void FixedUpdate() { if (NakamaManager.Instance == null) { return; } // CameraScript.enabled = true; if (string.IsNullOrEmpty(NakamaManager.Instance.MatchId) || !NakamaManager.Instance.IsConnected) { NakamaManager.Instance.Disconnect(); SceneManager.LoadScene("MainMenu"); return; } if (Player.gameObject.activeSelf) { Client_Message send = new Client_Message { ClientTick = _clientTick, Character = new Client_Message.Types.Client_Character { LastConfirmedServerTick = _lastConfirmedServerTick, Target = (Player.Target != null) ? Player.Target.name : "" } }; _notAcknowledgedPackages.Add(send); GameManager.Instance.SendMatchStateMessage(send); //TODO: maybe change network code from "here am i" every frame to "this input differs now to the last" { var XAxis = _move.x; var YAxis = Mouse.current.rightButton.isPressed && Mouse.current.leftButton.isPressed ? 1 : (_move.y > 0 ? _move.y : _move.y / 2); var rot = _rotate * Time.deltaTime * 130f; var length = (float)Math.Sqrt(Math.Pow(XAxis, 2) + Math.Pow(YAxis, 2)); if (length > 1) { XAxis /= length; YAxis /= length; } lastRotation = Player.Rotation; var move = new Client_Message { ClientTick = _clientTick, Move = new Client_Message.Types.Client_Movement { AbsoluteCoordinates = false, XAxis = XAxis, YAxis = YAxis, Rotation = (Camera.m_XAxis.Value + rot) } }; _notAcknowledgedPackages.Add(move); GameManager.Instance.SendMatchStateMessage(move); Player.ApplyPredictedInput(move.Move.XAxis, move.Move.YAxis, move.Move.Rotation, Time.fixedDeltaTime); } } else { if (_clientTick % 10 == 0) { GameManager.Instance.SendMatchStateMessage(null); //no-op } } while (_messagesToSend.Count > 0) { var msg = _messagesToSend.Dequeue(); Debug.Log("SendMatchStateMessage> " + msg); GameManager.Instance.SendMatchStateMessage(msg); } _clientTick++; }
public void AddMessageToSend(Client_Message msg) { msg.ClientTick = _clientTick; _messagesToSend.Enqueue(msg); }