public bool ShowNewHint(HintType hintType, GameObject hintTarget = null)
        {
            HintRequest hintRequest = new HintRequest
            {
                type   = hintType,
                target = hintTarget
            };

            if (!IsHintShown(hintType))
            {
                // only show a hint once
                SetHintShown(hintType);
                GlobalManager.MInstantMessage.DeliverMessage(
                    InstantMessageType.GUIShowHint,
                    this,
                    hintRequest
                    );
                return(true);
            }

            /*
             * else
             * {
             *  // if a hint has already been shown, do not show it again
             *  // but notify that it is closed
             *  //GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.GUIHintClosed, this, hintRequest);
             * }
             */
            return(false);
        }
示例#2
0
        /// <summary>
        ///     Convert hint request to the azure model.
        /// </summary>
        /// <param name="hintRequest">The hint request.</param>
        /// <returns>HintRequestAzure</returns>
        public static HintRequestAzure ToAzureModel(this HintRequest hintRequest)
        {
            var azureModel = new HintRequestAzure();

            hintRequest.CopyTo(azureModel);
            azureModel.Status = (int)hintRequest.Status;
            return(azureModel);
        }
示例#3
0
        /// <summary>
        ///     Converts HintRequestAzure to HintRequest.
        /// </summary>
        /// <param name="azureModel">The azure model.</param>
        /// <returns>HintRequest.</returns>
        public static HintRequest FromAzureModel(this HintRequestAzure azureModel)
        {
            if (azureModel == null)
            {
                return(null);
            }

            var domainModel = new HintRequest();

            azureModel.CopyTo(domainModel);
            domainModel.Status = (HintRequestStatus)azureModel.Status;
            return(domainModel);
        }
示例#4
0
        void OnGUIHintClosed(object sender, InstantMessageArgs args)
        {
            HintRequest hintRequest   = (HintRequest)args.arg;
            bool        firstRound    = GlobalManager.MStorage.FirstRound;
            int         selectedLevel = GlobalManager.MStorage.SelectedLevel;

            Debug.Log("GameManager.OnGUIHintClosed after " + hintRequest.type.ToString());
            switch (sceneType)
            {
            case SceneType.World:
                if (firstRound)
                {
                    switch (selectedLevel)
                    {
                    case 0:
                        switch (hintRequest.type)
                        {
                        case HintType.FirstTimeWelcome:
                            GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.WorldRotateToSelected, this);
                            GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.RedirectFirstTimeWelcome2, this);
                            worldWaits = StartCoroutine(WorldWaitsForHint());
                            break;

                        case HintType.FirstTimeWelcome2:
                            if (worldWaits != null)
                            {
                                // if hint has been closed before the world finishes to rotate
                                StopCoroutine(worldWaits);
                                worldWaits = null;
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.WorldRotationEnable, this, true);
                            }
                            break;
                        }
                        break;

                    case 1:
                        switch (hintRequest.type)
                        {
                        case HintType.GalleryOpened:
                            if (worldWaits != null)
                            {
                                // if hint has been closed before the world finishes to rotate
                                StopCoroutine(worldWaits);
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.WorldRotationEnable, this, true);
                            }
                            break;
                        }
                        break;
                    }
                }
                break;

            case SceneType.Puzzle:
                if (firstRound)
                {
                    switch (selectedLevel)
                    {
                    case 0:
                        switch (hintRequest.type)
                        {
                        case HintType.PuzzleFirstShuffled:
                            GlobalManager.MHint.ShowNewHint(HintType.FirstLevelChallenge);
                            break;

                        case HintType.FirstLevelChallenge:
                            // this will actually show a FirstTileInPlace hint
                            GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.RedirectFirstTileButtons, this);
                            break;

                        case HintType.FirstTileInPlace:
                            // this will actually show a SecondTileButtonsHint
                            GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.RedirectSecondTileButtons, this);
                            break;

                        case HintType.ThirdTileInPlace:
                            // level 0 challenge complete
                            GlobalManager.MHint.ShowNewHint(HintType.TwoRowsInPlace1);
                            break;

                        case HintType.TwoRowsInPlace1:
                            // special processing for a completed puzzle
                            puzzleHintsShown = true;
                            Debug.Log("GameManager.OnGUIHintClosed: after " + hintRequest.type.ToString() + " puzzleCompletionProcessed is " + puzzleCompletionProcessed.ToString());
                            if (puzzleCompletionProcessed)
                            {
                                LevelDataManager.Descriptor descriptor     = GlobalManager.MLevel.GetDescriptor(selectedLevel);
                                PuzzleCompleteStatus        completeStatus = new PuzzleCompleteStatus
                                {
                                    descriptor = descriptor,
                                    firstTime  = !descriptor.state.Complete
                                };
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.PuzzleComplete, this, completeStatus);
                            }
                            else
                            {
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.PuzzleAutocomplete, this);
                            }
                            break;
                        }
                        break;

                    case 1:
                        switch (hintRequest.type)
                        {
                        case HintType.TwoRowsInPlace:
                            Debug.Log("GameManager.OnGUIHintClosed: after " + hintRequest.type.ToString() + " show new hint TwoRowsInPlace2");
                            AddBonusCoins();
                            GlobalManager.MHint.ShowNewHint(HintType.TwoRowsInPlace2);
                            break;

                        case HintType.TwoRowsInPlace2:
                            // special processing for a completed puzzle
                            puzzleHintsShown = true;
                            Debug.Log("GameManager.OnGUIHintClosed: after " + hintRequest.type.ToString() + " puzzleCompletionProcessed is " + puzzleCompletionProcessed.ToString());
                            if (puzzleCompletionProcessed)
                            {
                                LevelDataManager.Descriptor descriptor     = GlobalManager.MLevel.GetDescriptor(selectedLevel);
                                PuzzleCompleteStatus        completeStatus = new PuzzleCompleteStatus
                                {
                                    descriptor = descriptor,
                                    firstTime  = !descriptor.state.Complete
                                };
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.PuzzleComplete, this, completeStatus);
                            }
                            else
                            {
                                GlobalManager.MInstantMessage.DeliverMessage(InstantMessageType.PuzzleAutocomplete, this);
                            }
                            break;
                        }
                        break;
                    }
                }
                break;
            }
        }
 /// <summary>
 /// Adds the hint request.
 /// </summary>
 /// <param name="hintRequest">The hint request.</param>
 /// <returns></returns>
 public async Task <IdResult> AddHintRequest(HintRequest hintRequest)
 {
     return(await _azureManager.AddEntityAsync(hintRequest.ToAzureModel()));
 }
示例#6
0
        private async Task <HintRequestResult> LogHintRequestAndReturnResult(HintRequest hintRequest, OperationResultStatus operationResultStatus, string hintText)
        {
            await AddHintRequest(hintRequest);

            return(new HintRequestResult(operationResultStatus, hintRequest.Status, hintText));
        }
示例#7
0
        /// <summary>
        /// Gets the hint to user.
        /// </summary>
        /// <param name="missionId">The mission identifier.</param>
        /// <param name="hintId">The hint identifier.</param>
        /// <param name="userId">The user identifier.</param>
        /// <returns></returns>
        public async Task <HintRequestResult> GetHint(string missionId, string hintId, string userId)
        {
            var hintRequest = new HintRequest
            {
                HintId    = hintId,
                MissionId = missionId,
                UserId    = userId,
                Status    = HintRequestStatus.Success
            };

            var user = await _userRepository.GetUser(userId);

            if (!user.ActiveMissionIds.AnyValues(t => t.MissionId == missionId))
            {
                hintRequest.Status = HintRequestStatus.UserDontHaveThatMissionInActiveStatus;
                return(await LogHintRequestAndReturnResult(hintRequest, OperationResultStatus.Error, "Mission is inactive"));
            }
            var mission = await GetMission(missionId);

            var hint = mission.Hints?.SingleOrDefault(h => h.Id == hintId);

            if (hint == null)
            {
                hintRequest.Status = HintRequestStatus.HintNotFound;
                return(await LogHintRequestAndReturnResult(hintRequest, OperationResultStatus.Error, "Invalid hint Id"));
            }

            string hintText;

            switch (hint.Type)
            {
            case HintType.Coordinate:
            case HintType.Direction:
            {
                var commonPlaceAlias = mission.CommonPlaceAlias;
                var realCommonPlace  = await _commonPlacesRepository.GetCommonPlaceByAlias(userId, commonPlaceAlias);

                if (realCommonPlace == null)
                {
                    hintRequest.Status = HintRequestStatus.CommonPlaceNotExist;
                    return(await LogHintRequestAndReturnResult(hintRequest, OperationResultStatus.Warning, "Common place is not fixed"));
                }
                hintText = realCommonPlace.Coordinate.ToString();
                break;
            }

            case HintType.Text:
            {
                hintText = hint.Text;
                break;
            }

            default:
                throw new Exception("Invalid hint type");
            }

            if (!user.BoughtHintIds.AnyValues(t => t == hint.Id))
            {
                if (!user.CoinsCount.HasValue || user.CoinsCount < hint.Score)
                {
                    hintRequest.Status = HintRequestStatus.UserDontHaveCoins;
                    return(await LogHintRequestAndReturnResult(hintRequest, OperationResultStatus.Error, "Not enough coins"));
                }
                user.CoinsCount    = user.CoinsCount - hint.Score;
                user.BoughtHintIds = user.BoughtHintIds ?? new List <string>();
                user.BoughtHintIds.Add(hint.Id);
                await _userRepository.UpdateUser(user);
            }
            return(await LogHintRequestAndReturnResult(hintRequest, OperationResultStatus.Success, hintText));
        }
示例#8
0
 /// <summary>
 /// Adds the hint to database.
 /// </summary>
 /// <param name="hintRequest">The hint request.</param>
 /// <returns></returns>
 public async Task <IdResult> AddHintRequest(HintRequest hintRequest)
 {
     return(await _hintRequestRepository.AddHintRequest(hintRequest));
 }
示例#9
0
        public async Task <IdResult> AddHintRequest(HintRequest hintRequest)
        {
            await Task.Factory.StartNew(() => _allHintRequests.Add(hintRequest));

            return(new IdResult(hintRequest.HintId));
        }