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); }
/// <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); }
/// <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); }
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())); }
private async Task <HintRequestResult> LogHintRequestAndReturnResult(HintRequest hintRequest, OperationResultStatus operationResultStatus, string hintText) { await AddHintRequest(hintRequest); return(new HintRequestResult(operationResultStatus, hintRequest.Status, hintText)); }
/// <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)); }
/// <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)); }
public async Task <IdResult> AddHintRequest(HintRequest hintRequest) { await Task.Factory.StartNew(() => _allHintRequests.Add(hintRequest)); return(new IdResult(hintRequest.HintId)); }