/// <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);
 }
Esempio n. 5
0
 /// <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()));
        }
    }
Esempio n. 7
0
    /// <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);
 }
Esempio n. 9
0
 /// <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);
 }
Esempio n. 10
0
    /// <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);
            }
        }
    }
Esempio n. 11
0
 /// <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);
 }
Esempio n. 12
0
 /// <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);
     }
 }
Esempio n. 13
0
 /// <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();
 }
Esempio n. 17
0
 /// <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();
     }
 }
Esempio n. 19
0
 /// <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);
         }
     }
 }
Esempio n. 20
0
 /// <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());
 }
Esempio n. 21
0
    /// <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);
        }
    }
Esempio n. 22
0
    /// <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);
        }
    }
Esempio n. 23
0
    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));
    }
Esempio n. 24
0
 /// <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);
 }
Esempio n. 27
0
 /// <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());
 }
Esempio n. 28
0
    /// <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);
    }
Esempio n. 29
0
 /// <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;
 }
Esempio n. 30
0
    /// <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());
    }