コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
             * }*/
        }
コード例 #4
0
        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++;
        }
コード例 #5
0
 public void AddMessageToSend(Client_Message msg)
 {
     msg.ClientTick = _clientTick;
     _messagesToSend.Enqueue(msg);
 }