void Start()
 {
     MainGameHandler.RegisterSceneManager(this);
     _instance         = this;
     _chat             = MainGameHandler.GetChatHandler();
     _gameStateDetails = MainGameHandler.GetGameStateDetails();
     WaitForServerDataAndLoadScene();
 }
 void OnDestroy()
 {
     _instance = null;
 }
        public bool Execute()
        {
            bool executed = false;

            //Debug.Log(_rawText);

            try
            {
                string jsonText = _rawText.Substring(_keyWord.Length);
                CharacterPositionUpdateDetails posUpdateDetails = JsonConvert.DeserializeObject <CharacterPositionUpdateDetails>(jsonText);
                int  currentCharId = _gameStateDetails.CharId;
                bool isOnWorldMap  = _gameStateDetails.IsOnWorldMap;

                if
                (
                    posUpdateDetails.MovementType.Equals("movelocal", GlobalData.InputDataStringComparison) ||
                    posUpdateDetails.MovementType.Equals("moveworld", GlobalData.InputDataStringComparison)
                )
                {
                    #region Movement section
                    //MOVEMENT SECTION

                    if (isOnWorldMap)
                    {
                        if (currentCharId == posUpdateDetails.CharId)
                        {
                            Point2 <int> oldLocationWorld = posUpdateDetails.OldLocationWorld;
                            Point2 <int> newLocationWorld = posUpdateDetails.NewLocationWorld;

                            _gameStateDetails.Position = new Vector3
                                                         (
                                newLocationWorld.X,
                                newLocationWorld.Y,
                                0f
                                                         );

                            WorldMapSceneManagerHandler.MovePlayerExternally
                            (
                                PointConverter.Point2ToVector(oldLocationWorld),
                                PointConverter.Point2ToVector(newLocationWorld)
                            );
                        }
                    }
                    else
                    {
                        LocalPlaceSceneManagerHandler.MovePlayerExternally
                        (
                            posUpdateDetails.CharId,
                            /*posUpdateDetails.OldLocationLocal, */
                            posUpdateDetails.NewLocationLocal,
                            posUpdateDetails.TimeArrivalMsLocal
                        );
                    }

                    #endregion
                }
                else
                if (posUpdateDetails.MovementType.Equals("switchmap", GlobalData.InputDataStringComparison))
                {
                    if (currentCharId == posUpdateDetails.CharId)
                    {
                        SwitchScene();
                    }
                    else
                    {
                        LocalPlaceSceneManagerHandler.RemoveNonPlayerCharacterExternally(posUpdateDetails.CharId);
                    }
                }
                else
                if (posUpdateDetails.MovementType.Equals("switchlocal", GlobalData.InputDataStringComparison))
                {
                    if (currentCharId == posUpdateDetails.CharId)
                    {
                        SwitchScene();
                    }
                    else
                    {
                        CommandHandler.Send(new GetLocationCharsCmdBuilder(posUpdateDetails.CharId));
                    }
                }
                else
                {
                    throw new Exception($"unknown movement type [{posUpdateDetails.MovementType}]");
                }

                executed = true;
            }
            catch (Exception exception)
            {
                _chat.UpdateLog($"Character position update command execution error: {exception.Message}");
            }

            return(executed);
        }