/// <summary> /// Set-up the pop-up for displaying the given CrewMember /// </summary> public void SetUpDisplay(CrewMember crewMember, string source) { //do not display if the season has finished if (!GameManagement.SeasonOngoing) { return; } //Change the opinion icon dictionary from the available array if not already done if (_opinionIconDict == null) { _opinionIconDict = _opinionIcons.ToDictionary(o => o.name.Replace("Icon_Box_", string.Empty), o => o); } _currentMember = crewMember; //ensure that the crew member is visible on the crew container at the bottom UIManagement.TeamSelection.EnsureVisible(_currentMember); //make pop-up visible and firing warning not visible gameObject.Active(true); _fireWarningPopUp.Active(false); //disable opinion images on CrewMember UI objects ResetOpinionIcons(); TrackerEventSender.SendEvent(new TraceEvent("CrewMemberPopUpOpened", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, crewMember.Name }, { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.CurrentSession, GameManagement.CurrentSessionString }, { TrackerContextKey.CrewMemberPosition, crewMember.BoatPosition() }, { TrackerContextKey.SizeOfTeam, GameManagement.CrewCount }, { TrackerContextKey.TriggerUI, source }, { TrackerContextKey.CrewMemberSessionsInTeam, crewMember.SessionsIncluded() } }, AccessibleTracker.Accessible.Screen)); SUGARManager.GameData.Send("View Crew Member Screen", crewMember.Name); Display(); //set the order of the pop-ups and pop-up blockers and set-up the click event for the blocker transform.EnableSmallBlocker(() => CloseCrewMemberPopUp(TrackerTriggerSource.PopUpBlocker.ToString())); }
/// <summary> /// Reset this UI back to its defaults. /// </summary> public void OnReset() { //set back to default parent and position transform.SetParent(_defaultParent, false); transform.position = _defaultParent.position; _aspectFitter.aspectMode = AspectRatioFitter.AspectMode.FitInParent; transform.SetAsLastSibling(); if (_dragStartPosition != (Vector2)transform.position) { TrackerEventSender.SendEvent(new TraceEvent("CrewMemberUnpositioned", TrackerAsset.Verb.Interacted, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, CrewMember.Name }, { TrackerContextKey.PreviousCrewMemberPosition, _currentPlacement != null ? _currentPlacement.Position : Position.Null } }, GameObjectTracker.TrackedGameObject.Npc)); } if (_currentPlacement != null) { _currentPlacement.RemoveCrew(); _currentPlacement = null; } //hide current position button and remove all listeners _positionImage.enabled = false; _positionButton.onClick.RemoveAllListeners(); //reset position pop-up if it is currently being shown UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name, CrewMember.Name); SetSortValue(_sortValue); }
/// <summary> /// Check if the drag stopped over a Position UI element. /// </summary> private void CheckPlacement() { foreach (var result in _raycastResults) { var positionUI = result.gameObject.GetComponent <PositionUI>(); if (positionUI != null) { var position = positionUI.Position; var crewMember = positionUI.CrewMemberUI; TrackerEventSender.SendEvent(new TraceEvent("CrewMemberPositioned", TrackerAsset.Verb.Interacted, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, CrewMember.Name }, { TrackerContextKey.PositionName, position }, { TrackerContextKey.PreviousCrewMemberInPosition, crewMember != null ? crewMember.CrewMember.Name : "Null" }, { TrackerContextKey.PreviousCrewMemberPosition, _currentPlacement != null ? _currentPlacement.Position : Position.Null } }, GameObjectTracker.TrackedGameObject.Npc)); SUGARManager.GameData.Send("Place Crew Member", CrewMember.Name); SUGARManager.GameData.Send("Fill Position", position.ToString()); Place(positionUI); //reset the position and meeting UIs UIManagement.PositionDisplay.Display(); UIManagement.MemberMeeting.Display(); return; } } //remove this CrewMember from their position if they were in one CrewMember.Assign(Position.Null); OnReset(); //reset the position and meeting UIs UIManagement.PositionDisplay.Display(); UIManagement.MemberMeeting.Display(); }
/// <summary> /// Hide the learning pill. Logic varies slightly if there is further help to display. /// </summary> public void ClosePill(string source) { if (gameObject.activeInHierarchy) { UIManagement.Blocker.onClick.RemoveAllListeners(); } if (_furtherHelp.Count == 0) { StartCoroutine(Animate()); UIManagement.Blocker.transform.SetAsLastSibling(); transform.SetAsLastSibling(); UIManagement.DisableBlocker(); } if (_furtherHelp.Count > 0) { StartCoroutine(Animate(false, true)); Invoke(nameof(SetFurtherHelp), 1.1f); } else { UIManagement.EventImpact.Display(); } TrackerEventSender.SendEvent(new TraceEvent("LearningPillClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.LearningPillID, _currentHelp }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Accessible)); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); }
/// <summary> /// Display pop-up which shows the changes in layout /// </summary> public void Display() { //only display if the tutorial isn't ongoing, the season is ongoing and if the boat type has actually changed if (!GameManagement.ShowTutorial && GameManagement.SeasonOngoing && GameManagement.BoatType != GameManagement.PreviousSession.Type) { var oldPos = GameManagement.PreviousSession.Positions; var newPos = GameManagement.Positions; var newPositions = newPos.Where(n => !oldPos.Contains(n)).Select(n => Localization.Get(n.ToString())).ToArray(); var oldPositions = oldPos.Where(o => !newPos.Contains(o)).Select(o => Localization.Get(o.ToString())).ToArray(); if (newPositions.Length > 0 || oldPositions.Length > 0) { var newList = string.Join("\n", newPositions); var oldList = string.Join("\n", oldPositions); _addedText.text = newList; _removedText.text = oldList; TrackerEventSender.SendEvent(new TraceEvent("PromotionPopUpDisplayed", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.BoatLayout, GameManagement.PositionString } }, AccessibleTracker.Accessible.Screen)); } else { Close(string.Empty); } } else { Close(string.Empty); } }
/// <summary> /// Animate displaying or hiding the learning pill /// </summary> private IEnumerator Animate(bool upward = false, bool keep = false, string tip = "") { _helpText.text = string.Empty; var endFrame = new WaitForEndOfFrame(); var start = upward ? keep ? 1 : 0 : 2; var limit = keep ? 1 : 2; _popUpAnim["LearningPill"].speed = 1; _popUpAnim["LearningPill"].time = start; _popUpAnim.Play(); while (_popUpAnim["LearningPill"].time <= start + limit) { yield return(endFrame); } _popUpAnim["LearningPill"].speed = 0; _popUpAnim["LearningPill"].time = start + limit; UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name, upward, keep, tip); if (upward) { _helpText.text = tip; TrackerEventSender.SendEvent(new TraceEvent("LearningPillDisplayed", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.LearningPillID, _currentHelp } }, AccessibleTracker.Accessible.Accessible)); transform.EnableBlocker(() => ClosePill(TrackerTriggerSource.PopUpBlocker.ToString())); } }
/// <summary> /// Check if information provided is valid and creates new game if so /// </summary> public void NewGame() { var colorsPri = new PlayGen.RAGE.SportsTeamManager.Simulation.Color((int)(_colorImagePrimary.color.r * 255), (int)(_colorImagePrimary.color.g * 255), (int)(_colorImagePrimary.color.b * 255)); var colorsSec = new PlayGen.RAGE.SportsTeamManager.Simulation.Color((int)(_colorImageSecondary.color.r * 255), (int)(_colorImageSecondary.color.g * 255), (int)(_colorImageSecondary.color.b * 255)); _boatName.text = _boatName.text.TrimEnd(); _managerName.text = _managerName.text.TrimEnd(); var language = string.IsNullOrEmpty(Localization.SelectedLanguage.Parent.Name) ? Localization.SelectedLanguage.EnglishName : Localization.SelectedLanguage.Parent.EnglishName; Loading.Start(); GameManagement.GameManager.NewGameTask(GameManagement.GameSavePath, _boatName.text, colorsPri, colorsSec, _managerName.text, _tutorialToggle.isOn, language, success => { if (success) { if (GameManagement.Team != null && GameManagement.TeamName == _boatName.text) { TrackerEventSender.SendEvent(new TraceEvent("GameStarted", TrackerAsset.Verb.Initialized, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.GameName, GameManagement.TeamName }, { TrackerContextKey.BoatLayout, GameManagement.PositionString } }, CompletableTracker.Completable.Game)); TrackerEventSender.SendEvaluationEvent(TrackerEvalautionEvent.UserProfile, new Dictionary <TrackerEvaluationKey, string> { { TrackerEvaluationKey.Event, "setupnewteam" } }); UIManagement.StateManager.GoToState(State.TeamManagement); Loading.Stop(); return; } } _errorText.text = Localization.Get("NEW_GAME_CREATION_ERROR"); Loading.Stop(); }); }
/// <summary> /// Triggered by Unity event. Player has confirmed and session can proceed /// </summary> private void ConfirmPopUpYesSelected() { if (_isRace) { if (GameManagement.IsRace) { TrackerEventSender.SendEvent(new TraceEvent("RaceConfirmApproved", TrackerAsset.Verb.Selected, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance } }, "RaceConfirm", AlternativeTracker.Alternative.Menu)); } else { TrackerEventSender.SendEvent(new TraceEvent("SkipToRaceApproved", TrackerAsset.Verb.Selected, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.RemainingSessions, GameManagement.SessionsRemaining } }, "SkipToRace", AlternativeTracker.Alternative.Menu)); SUGARManager.GameData.Send("Practice Sessions Skipped", GameManagement.SessionsRemaining); } UIManagement.TeamSelection.SkipToRace(); } else { UIManagement.TeamSelection.ConfirmLineUp(); TrackerEventSender.SendEvent(new TraceEvent("RepeatLineUpApproved", TrackerAsset.Verb.Selected, new Dictionary <TrackerContextKey, object>(), "RepeatLineUp", AlternativeTracker.Alternative.Menu)); } CloseConfirmPopUp(string.Empty); }
/// <summary> /// Add a reply to the dictionary of selected responses. If the number of responses matches the number expected, get replies from crew members. /// </summary> public Dictionary <CrewMember, PostRaceEventState> AddReply(PostRaceEventState response) { //create dictionary if null if (_selectedResponses == null) { _selectedResponses = new Dictionary <CrewMember, PostRaceEventState>(); } //overwrite response if one had already been given for this crew member. if (_selectedResponses.ContainsKey(response.CrewMember)) { _selectedResponses[response.CrewMember] = response; } else { _selectedResponses.Add(response.CrewMember, response); } if (_selectedResponses.Count == GameManagement.CurrentEventCount) { foreach (var res in _selectedResponses.Values) { TrackerEventSender.SendEvent(new TraceEvent("PostRaceEventDialogueSelected", TrackerAsset.Verb.Selected, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.DialogueID, res.Dialogue.NextState }, { TrackerContextKey.DialogueStyle, res.Dialogue.Meaning.Split('_').First(sp => !string.IsNullOrEmpty(sp)) }, { TrackerContextKey.EventID, res.Dialogue.NextState.EventKeys() } }, res.Dialogue.NextState, AlternativeTracker.Alternative.Dialog)); SUGARManager.GameData.Send("Post Race Event Reply", res.Dialogue.NextState); } var beforeValues = GameManagement.AverageTeamMood + GameManagement.AverageTeamManagerOpinion + GameManagement.AverageTeamOpinion; //send chosen dialogue and get response var replies = GameManagement.GameManager.SendPostRaceEvent(_selectedResponses.Values.ToList()); _selectedResponses = null; var afterValues = GameManagement.AverageTeamMood + GameManagement.AverageTeamManagerOpinion + GameManagement.AverageTeamOpinion; if (afterValues > beforeValues) { SUGARManager.GameData.Send("Post Race Event Positive Outcome", true); } else if (afterValues < beforeValues) { SUGARManager.GameData.Send("Post Race Event Positive Outcome", false); } var replyDict = new Dictionary <CrewMember, PostRaceEventState>(); foreach (var ev in GameManagement.CurrentEvent) { if (!replyDict.ContainsKey(ev.CrewMember)) { replyDict.Add(ev.CrewMember, null); } } foreach (var reply in replies) { replyDict[reply.CrewMember] = reply; } return(replyDict); } return(null); }
/// <summary> /// Get and display the result of the previous race session /// </summary> private void GetResult(bool isRace, Boat boat, int offset, Text scoreText, bool current = false) { var timeTaken = TimeSpan.FromSeconds(1800 - ((boat.Score - 22) * 10) + offset); var finishPosition = 0; if (!isRace) { scoreText.text = $"{timeTaken.Minutes:D2}:{timeTaken.Seconds:D2}"; } else { finishPosition = GameManagement.GetRacePosition(boat.Score, boat.PositionCount); var finishPositionText = Localization.Get("POSITION_" + finishPosition); scoreText.text = $"{Localization.Get("RACE_POSITION")} {finishPositionText}"; } if (current) { UpdateSeasonProgress(finishPosition); var newString = string.Join(",", boat.Positions.Select(pos => pos.ToString()).ToArray()); TrackerEventSender.SendEvent(new TraceEvent("RaceResult", TrackerAsset.Verb.Completed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.RaceNumber, GameManagement.RaceCount + 1 }, { TrackerContextKey.CurrentSession, (isRace ? GameManagement.RaceSessionLength : GameManagement.CurrentRaceSession - 1) + "/" + GameManagement.RaceSessionLength }, { TrackerContextKey.SessionType, isRace ? "Race" : "Practice" }, { TrackerContextKey.BoatLayout, newString }, { TrackerContextKey.SessionScore, boat.Score }, { TrackerContextKey.ScoreAverage, ((float)boat.Score / boat.PositionCount).ToString(CultureInfo.InvariantCulture) }, { TrackerContextKey.IdealCorrectPlacement, boat.PerfectSelections }, { TrackerContextKey.IdealCorrectMemberWrongPosition, boat.ImperfectSelections }, { TrackerContextKey.IdealIncorrectPlacement, boat.IncorrectSelections } }, CompletableTracker.Completable.Race)); SUGARManager.GameData.Send("Race Session Score", boat.Score); SUGARManager.GameData.Send("Current Boat Size", boat.PositionCount); SUGARManager.GameData.Send("Race Session Score Average", (float)boat.Score / boat.PositionCount); SUGARManager.GameData.Send("Race Session Perfect Selection Average", boat.PerfectSelections / boat.PositionCount); SUGARManager.GameData.Send("Race Time", (long)timeTaken.TotalSeconds); SUGARManager.GameData.Send("Post Race Crew Average Mood", GameManagement.AverageTeamMood); SUGARManager.GameData.Send("Post Race Crew Average Manager Opinion", GameManagement.AverageTeamManagerOpinion); SUGARManager.GameData.Send("Post Race Crew Average Opinion", GameManagement.AverageTeamOpinion); SUGARManager.GameData.Send("Post Race Boat Average Mood", GameManagement.AverageBoatMood); SUGARManager.GameData.Send("Post Race Boat Average Manager Opinion", GameManagement.AverageBoatManagerOpinion); SUGARManager.GameData.Send("Post Race Boat Average Opinion", GameManagement.AverageBoatOpinion); foreach (var feedback in boat.SelectionMistakes) { SUGARManager.GameData.Send("Race Session Feedback", feedback); } if (isRace) { UIManagement.RaceResult.Display(boat.PositionCrew, finishPosition); SUGARManager.GameData.Send("Race Position", finishPosition); SUGARManager.GameData.Send("Time Remaining", GameManagement.ActionAllowance); SUGARManager.GameData.Send("Time Taken", GameManagement.StartingActionAllowance - GameManagement.ActionAllowance); } } }
/// <summary> /// Close this pop-up /// </summary> public void CloseRecruitmentPopUp(string source) { TrackerEventSender.SendEvent(new TraceEvent("RecruitmentPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); UIManagement.MemberMeeting.Display(); gameObject.Active(false); }
/// <summary> /// Close this UI /// </summary> public void Close(string source) { gameObject.Active(false); if (!string.IsNullOrEmpty(source)) { TrackerEventSender.SendEvent(new TraceEvent("PostRaceEventPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.TriggerUI, source }, { TrackerContextKey.EventID, _lastStates[0].EventKeys() } }, AccessibleTracker.Accessible.Screen)); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); } }
/// <summary> /// Display pop-up which shows the notes for this entity /// </summary> public void Display(string subject) { gameObject.Active(true); _notesSubject = subject; OnLanguageChange(); _notesField.text = GameManagement.EventController.GetNotes(_notesSubject); transform.EnableBlocker(() => Close(TrackerTriggerSource.PopUpBlocker.ToString())); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); TrackerEventSender.SendEvent(new TraceEvent("NotesPopUpDisplayed", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.TriggerUI, _notesSubject } }, AccessibleTracker.Accessible.Screen)); }
/// <summary> /// Display a pop-up before a race, with different text depending on if the player has ActionAllowance remaining /// </summary> public void ConfirmPopUp(bool race) { gameObject.Active(true); _isRace = race; //set different text depending on if this is for a race if (_isRace) { //if the next session is a race, show text depending asking the player to confirm and warn if action allowance is remaining if (GameManagement.IsRace) { _localizationKey = GameManagement.ActionRemaining ? "RACE_CONFIRM_ALLOWANCE_REMAINING" : "RACE_CONFIRM_NO_ALLOWANCE"; TrackerEventSender.SendEvent(new TraceEvent("RaceConfirmPopUpOpened", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance } }, AccessibleTracker.Accessible.Screen)); } //if the next session is practice, meaning the player is skipping to the race, show text depending asking the player to confirm and warn if action allowance is remaining else { _localizationKey = GameManagement.ActionRemaining ? "RACE_SKIP_CONFIRM_ALLOWANCE_REMAINING" : "RACE_SKIP_CONFIRM_NO_ALLOWANCE"; TrackerEventSender.SendEvent(new TraceEvent("SkipToRaceConfirmPopUpOpened", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.RemainingSessions, GameManagement.SessionsRemaining } }, AccessibleTracker.Accessible.Screen)); } } //if the next session is not a race, show this pop-up if the same line-up as the previous session has been selected else { if (GameManagement.PreviousSession != null && GameManagement.Positions.SequenceEqual(GameManagement.PreviousSession.Positions) && GameManagement.PositionCrew.OrderBy(pc => pc.Key.ToString()).SequenceEqual(GameManagement.PreviousSession.PositionCrew.OrderBy(pc => pc.Key.ToString()))) { gameObject.Active(true); _localizationKey = "REPEAT_CONFIRM"; TrackerEventSender.SendEvent(new TraceEvent("RepeatLineUpConfirmPopUpOpened", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object>(), AccessibleTracker.Accessible.Screen)); } else { UIManagement.TeamSelection.ConfirmLineUp(); CloseConfirmPopUp(string.Empty); return; } } _yesButton.onClick.RemoveAllListeners(); _yesButton.onClick.AddListener(ConfirmPopUpYesSelected); _noButton.onClick.RemoveAllListeners(); _noButton.onClick.AddListener(() => CloseConfirmPopUp(TrackerTriggerSource.NoButtonSelected.ToString())); OnLanguageChange(); transform.EnableBlocker(() => CloseConfirmPopUp(TrackerTriggerSource.PopUpBlocker.ToString())); }
/// <summary> /// Triggered by button. Display warning to player that they are about to fire a character. /// </summary> public void FireCrewWarning() { TrackerEventSender.SendEvent(new TraceEvent("FirePopUpOpened", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, _currentMember.Name }, { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.CurrentSession, GameManagement.CurrentSessionString }, { TrackerContextKey.CrewMemberPosition, _currentMember.BoatPosition() }, { TrackerContextKey.SizeOfTeam, GameManagement.CrewCount }, { TrackerContextKey.CrewMemberSessionsInTeam, _currentMember.SessionsIncluded() } }, AccessibleTracker.Accessible.Screen)); _fireWarningPopUp.Active(true); _fireWarningPopUp.transform.EnableSmallBlocker(() => CloseFireCrewWarning(TrackerTriggerSource.PopUpBlocker.ToString())); DoBestFit(); }
/// <summary> /// Hide the pop-up for Crew Member details /// </summary> public void CloseCrewMemberPopUp(string source) { if (gameObject.activeInHierarchy) { TrackerEventSender.SendEvent(new TraceEvent("CrewMemberPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.PositionName, _currentMember.Name }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); gameObject.Active(false); ResetOpinionIcons(); _lastReply = null; } UIManagement.PositionDisplay.ChangeBlockerOrder(); }
/// <summary> /// Hire the selected recruit onto the player's crew /// </summary> public void Recruit(CrewMember crewMember, string source) { GameManagement.GameManager.AddRecruit(crewMember); UIManagement.TeamSelection.ResetCrew(); CloseRecruitmentPopUp(string.Empty); CloseHireCrewWarning(string.Empty); TrackerEventSender.SendEvent(new TraceEvent("CrewMemberHired", TrackerAsset.Verb.Interacted, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, crewMember.Name }, { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.HiringCost, ConfigKey.RecruitmentCost.ValueString(false) }, { TrackerContextKey.TriggerUI, source } }, GameObjectTracker.TrackedGameObject.Npc)); SUGARManager.GameData.Send("Crew Member Hired", true); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); }
/// <summary> /// Triggered by button. Close fire warning pop-up. /// </summary> public void CloseFireCrewWarning(string source) { TrackerEventSender.SendEvent(new TraceEvent("FirePopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.PositionName, _currentMember.Name }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); _fireWarningPopUp.Active(false); if (gameObject.activeInHierarchy) { transform.EnableSmallBlocker(() => CloseCrewMemberPopUp(TrackerTriggerSource.PopUpBlocker.ToString())); } else { UIManagement.DisableSmallBlocker(); } }
/// <summary> /// Close the promotion pop-up /// </summary> public void Close(string source) { if (gameObject.activeInHierarchy) { gameObject.Active(false); UIManagement.DisableBlocker(); TrackerEventSender.SendEvent(new TraceEvent("CupResultPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CupFinishingPosition, _cupPosition }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); if (GameManagement.RageMode) { UIManagement.StateManager.GoToState(State.Questionnaire); } } }
/// <summary> /// Close the promotion pop-up /// </summary> public void Close(string source) { if (gameObject.activeInHierarchy) { gameObject.Active(false); UIManagement.DisableBlocker(); if (!string.IsNullOrEmpty(source)) { TrackerEventSender.SendEvent(new TraceEvent("PromotionPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.BoatLayout, GameManagement.PositionString }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); } } UIManagement.PostRaceEvents.ToList().ForEach(e => e.Display()); }
/// <summary> /// Display pop-up which shows the impact of the post race event /// </summary> public void Display() { _impactText.text = string.Empty; //only display if there are any impacts if (_impacts.Any()) { foreach (var impact in _impacts) { //add a space before capital letters and account for any double spacing created as a result var subList = impact.Value.Select(sub => Regex.Replace(sub, @"((?<=\p{Ll})\p{Lu})|((?!\A)\p{Lu}(?>\p{Ll}))", " $0").Replace(" ", " ")).ToList(); //set text according to what type of event the impact was for if (impact.Key.Contains(PostRaceEventImpact.MoodChange.ToString())) { _impactText.text += (_impactText.text.Length > 0 ? "\n\n" : string.Empty) + Localization.GetAndFormat("IMPACT_MOOD_" + (int.Parse(Regex.Match(impact.Key, @"-?\d+").Value) > 0 ? "BETTER" : "WORSE"), false, subList.ToArray()); } if (Enum.IsDefined(typeof(PostRaceEventImpact), impact.Key)) { switch ((PostRaceEventImpact)Enum.Parse(typeof(PostRaceEventImpact), impact.Key)) { case PostRaceEventImpact.ImproveConflictOpinionGreatly: _impactText.text += (_impactText.text.Length > 0 ? "\n\n" : string.Empty) + Localization.GetAndFormat("IMPACT_IMPROVE_CONFLICT_OPINION_GREATLY", false, subList[1]); break; case PostRaceEventImpact.ImproveConflictTeamOpinion: _impactText.text += (_impactText.text.Length > 0 ? "\n\n" : string.Empty) + Localization.GetAndFormat("IMPACT_IMPROVE_CONFLICT_TEAM_OPINION", false, subList[1]); break; case PostRaceEventImpact.ImproveConflictKnowledge: _impactText.text += (_impactText.text.Length > 0 ? "\n\n" : string.Empty) + Localization.GetAndFormat("IMPACT_IMPROVE_CONFLICT_KNOWLEDGE", false, subList[1]); break; default: _impactText.text += (_impactText.text.Length > 0 ? "\n\n" : string.Empty) + Localization.GetAndFormat("IMPACT_" + Regex.Replace(impact.Key, @"((?<=\p{Ll})\p{Lu})|((?!\A)\p{Lu}(?>\p{Ll}))", "_$0").ToUpper(), false, subList.ToArray()); break; } } gameObject.Active(true); transform.EnableBlocker(() => Close(TrackerTriggerSource.PopUpBlocker.ToString())); } TrackerEventSender.SendEvent(new TraceEvent("PostRaceEventImpactPopUpDisplayed", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object>(), AccessibleTracker.Accessible.Screen)); } if (string.IsNullOrEmpty(_impactText.text)) { Close(string.Empty); } }
/// <summary> /// If object is still being hovered over, display hover-over pop-up and text and position accordingly /// </summary> private void HoverCheck() { if (gameObject.activeInHierarchy) { return; } if (_currentHovered != null) { _mobileReadyToHide = false; var canvasScaler = GetComponentInParent <CanvasScaler>(); _canvasSize = canvasScaler.RectTransform().rect.size; gameObject.Active(true); transform.SetAsLastSibling(); GetComponentInChildren <Text>().text = Localization.Get(_currentText); var adjust = (Vector2.one * 0.5f) - _currentHovered.RectTransform().pivot; var hoverCenter = (Vector2)_currentHovered.position + new Vector2(_currentHovered.RectTransform().rect.width *adjust.x, _currentHovered.RectTransform().rect.height *adjust.y); var positionMultiplier = new Vector2(hoverCenter.x < Input.mousePosition.x ? 1 : -1, hoverCenter.y < Input.mousePosition.y ? 1 : -1); transform.position = Input.mousePosition; transform.RectTransform().anchoredPosition += new Vector2(transform.RectTransform().rect.width * 0.5f, transform.RectTransform().rect.height * 0.5f) * positionMultiplier; //reposition accordingly if pop-up would display partially off screen if (transform.RectTransform().anchoredPosition.x + (transform.RectTransform().rect.width * 0.5f) > _canvasSize.x * 0.5f) { transform.RectTransform().anchoredPosition -= new Vector2(transform.RectTransform().rect.width, 0); } else if (transform.RectTransform().anchoredPosition.x - (transform.RectTransform().rect.width * 0.5f) < -_canvasSize.x * 0.5f) { transform.RectTransform().anchoredPosition += new Vector2(transform.RectTransform().rect.width, 0); } if (transform.RectTransform().anchoredPosition.y + (transform.RectTransform().rect.height * 0.5f) > _canvasSize.y * 0.5f) { transform.RectTransform().anchoredPosition -= new Vector2(0, -transform.RectTransform().rect.height); } else if (transform.RectTransform().anchoredPosition.y - (transform.RectTransform().rect.height * 0.5f) < -_canvasSize.y * 0.5f) { transform.RectTransform().anchoredPosition -= new Vector2(0, -transform.RectTransform().rect.height); } TrackerEventSender.SendEvent(new TraceEvent("HoveredOver", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.HoverKey, _currentText } }, AccessibleTracker.Accessible.Accessible)); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name, _currentText); } }
private void TraceScore() { var allScores = GetScoresByKey(); // check for scores before referencing key var eventValues = new Dictionary <string, string> { { TrackerContextKey.LevelNumber.ToString(), CurrentLevel.ToString() }, { TrackerContextKey.MaxPoints.ToString(), CurrentScenario.MaxPoints.ToString() } }; foreach (var scoreMetric in _scoreMetrics) { var score = GetScore(allScores, scoreMetric.ToString()); eventValues.Add(scoreMetric.ToString(), score.ToString()); } TrackerEventSender.SendEvent(new TraceEvent("LevelComplete", TrackerAsset.Verb.Initialized, eventValues)); }
/// <summary> /// Close the pop-up and trigger the notes to be resaved for this entity /// </summary> public void Close(string source) { if (gameObject.activeInHierarchy) { GameManagement.EventController.SaveNote(_notesSubject, _notesField.text); gameObject.Active(false); UIManagement.DisableBlocker(); _notesSubject = null; UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); if (!string.IsNullOrEmpty(source)) { TrackerEventSender.SendEvent(new TraceEvent("NotesPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); } } }
/// <summary> /// Finish the tutorial early /// </summary> public void QuitTutorial() { if (SectionCount <= GameManagement.TutorialStage + 1) { TrackerEventSender.SendEvent(new TraceEvent("TutorialFinished", TrackerAsset.Verb.Completed, new Dictionary <TrackerContextKey, object>(), CompletableTracker.Completable.Completable)); } else { TrackerEventSender.SendEvent(new TraceEvent("TutorialExited", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.TutorialStage, GameManagement.TutorialStage + 1 } }, CompletableTracker.Completable.Completable)); } GameManagement.GameManager.SaveTutorialProgress(0, true); gameObject.Active(false); _tutorialQuitButton.Active(false); _tutorialExitBlocker.Active(false); }
/// <summary> /// Triggered by button. Fires a character from the team. /// </summary> public void FireCrew() { TrackerEventSender.SendEvent(new TraceEvent("CrewMemberFired", TrackerAsset.Verb.Interacted, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, _currentMember.Name }, { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.CurrentSession, GameManagement.CurrentSessionString }, { TrackerContextKey.CrewMemberPosition, _currentMember.BoatPosition() }, { TrackerContextKey.SizeOfTeam, GameManagement.CrewCount }, { TrackerContextKey.FiringCost, ConfigKey.FiringCost.ValueString(false) }, { TrackerContextKey.CrewMemberSessionsInTeam, _currentMember.SessionsIncluded() } }, GameObjectTracker.TrackedGameObject.Npc)); SUGARManager.GameData.Send("Crew Member Fired", true); GameManagement.GameManager.RetireCrewMember(_currentMember); UIManagement.TeamSelection.ResetCrew(); CloseFireCrewWarning(string.Empty); CloseCrewMemberPopUp(string.Empty); }
/// <summary> /// Clear and close the impact pop-up /// </summary> public void Close(string source) { if (gameObject.activeInHierarchy) { _impacts.Clear(); gameObject.Active(false); UIManagement.DisableBlocker(); if (!string.IsNullOrEmpty(source)) { TrackerEventSender.SendEvent(new TraceEvent("PostRaceEventImpactPopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name); } } UIManagement.PostRaceEvents.ToList().ForEach(e => e.Display()); }
/// <summary> /// Display pop-up which shows the cup result /// </summary> public void Display() { _cupPosition = 0; gameObject.Active(true); if (GameManagement.RageMode) { transform.EnableBlocker(); } else { transform.EnableBlocker(() => Close(TrackerTriggerSource.PopUpBlocker.ToString())); } foreach (Transform child in _crewTransform) { Destroy(child.gameObject); } _cupPosition = GameManagement.GetCupPosition(); var finalPositionText = Localization.Get("POSITION_" + _cupPosition); var crewCount = 0; foreach (var crewMember in GameManagement.CrewMemberList) { var memberObject = Instantiate(_postRaceCrewPrefab, _crewTransform, false); memberObject.name = crewMember.Name; memberObject.transform.FindComponentInChildren <AvatarDisplay>("Avatar").SetAvatar(crewMember.Avatar, -(_cupPosition - 3) * 2); memberObject.transform.FindImage("Position").enabled = false; if (crewCount % 2 != 0) { memberObject.transform.localScale = Vector3.Reflect(memberObject.transform.localScale, Vector3.left); } crewCount++; memberObject.transform.SetAsLastSibling(); } _resultText.text = Localization.GetAndFormat("RACE_RESULT_POSITION", false, GameManagement.TeamName, finalPositionText); TrackerEventSender.SendEvent(new TraceEvent("CupResultPopUpDisplayed", TrackerAsset.Verb.Accessed, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CupFinishingPosition, _cupPosition } }, AccessibleTracker.Accessible.Screen)); _outroText.Active(GameManagement.RageMode); _questionnaireButton.Active(GameManagement.RageMode); _okButton.Active(!GameManagement.RageMode); }
/// <summary> /// Close the hire warning /// </summary> public void CloseHireCrewWarning(string source) { _hireWarningPopUp.Active(false); if (gameObject.activeInHierarchy) { transform.EnableBlocker(() => CloseRecruitmentPopUp(TrackerTriggerSource.PopUpBlocker.ToString())); } else { UIManagement.DisableBlocker(); } TrackerEventSender.SendEvent(new TraceEvent("HirePopUpClosed", TrackerAsset.Verb.Skipped, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CrewMemberName, _currentSelected }, { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.HiringCost, ConfigKey.RecruitmentCost.ValueString(false) }, { TrackerContextKey.TriggerUI, source } }, AccessibleTracker.Accessible.Screen)); _currentSelected = string.Empty; }
/// <summary> /// Send a question to all recruits and get their replies in response /// </summary> public void AskQuestion(string skillName) { var skill = (Skill)Enum.Parse(typeof(Skill), skillName); _lastQuestion = skillName; var replies = GameManagement.GameManager.SendRecruitmentEvent(skill); _lastAnswers = replies.ToDictionary(r => r.Key.Name, r => r.Value); OnLanguageChange(); CostCheck(); TrackerEventSender.SendEvent(new TraceEvent("RecruitmentQuestionAsked", TrackerAsset.Verb.Selected, new Dictionary <TrackerContextKey, object> { { TrackerContextKey.CurrentTalkTime, GameManagement.ActionAllowance }, { TrackerContextKey.CurrentSession, GameManagement.CurrentSessionString }, { TrackerContextKey.QuestionAsked, skillName }, { TrackerContextKey.QuestionCost, ConfigKey.SendRecruitmentQuestionCost.ValueString(false) }, { TrackerContextKey.RaceStartTalkTime, GameManagement.StartingActionAllowance } }, skill.ToString(), AlternativeTracker.Alternative.Question)); SUGARManager.GameData.Send("Recruitment Question Asked", skill.ToString()); UIManagement.Tutorial.ShareEvent(GetType().Name, MethodBase.GetCurrentMethod().Name, skill.ToString()); }