using System; using System.Collections; using System.Collections.Generic; using CIG; using CIG.Translation; using CIG3.ExtensionMethods; using CIGEnums; using Engine.DependencyTree; using SUISS.Cloud; using SUISS.Core; using SUISSEngine; using UnityEngine; public class HUDState : State { public override bool IsHUDState { get { return true; } } public void Start() { SingletonMonobehaviour.Instance.VisibilityChangedEvent += this.OnWorldMapVisibility; SingletonMonobehaviour.Instance.VisitingStartedEvent += this.OnVisitingStarted; SingletonMonobehaviour.Instance.VisitingStoppedEvent += this.OnVisitingStopped; SingletonMonobehaviour.Instance.UpdatedEvent += ((HUDView)this.View).UpdateDailyQuestButtons; } public override void Init() { base.Init(); SingletonMonobehaviour.Instance.ValueChangedEvent += this.GameStateValueChanged; if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.BuildingCountChangedEvent += this.UpdateShopButtonBadge; this.UpdateShopButtonBadge(); } this.tutorial = UnityEngine.Object.FindObjectOfType(); VideoAds1Manager instance = SingletonMonobehaviour.Instance; if (!instance.IsUnlocked) { instance.UnlockedEvent += this.OnVideoAvailabilityChanged; } instance.AvailabilityChangedEvent += this.OnVideoAvailabilityChanged; this.OnVideoAvailabilityChanged(); if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.DependencyAchievedChangedEvent += this.OnDependencyAchievedChanged; SingletonMonobehaviour.Instance.DependencyActiveChangedEvent += this.OnDependencyActiveChanged; SingletonMonobehaviour.Instance.DependencyRewardClaimedEvent += this.OnDependencyRewardClaimed; } } protected override void OnUpdate() { base.OnUpdate(); if (UnityEngine.Input.GetKeyDown(KeyCode.Escape) && SingletonMonobehaviour.Instance.CurrentIsland.IsValid()) { if (SingletonMonobehaviour.IsAvailable && SingletonMonobehaviour.Instance.IsVisible) { if (this._hideWorldMapRoutine != null) { base.StopCoroutine(this._hideWorldMapRoutine); } base.StartCoroutine(this._hideWorldMapRoutine = this.HideWorldMapRoutine()); } else { CIGApp.Quit(); } } } protected void OnDestroy() { if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.ValueChangedEvent -= this.GameStateValueChanged; } if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.UpdatedEvent -= ((HUDView)this.View).UpdateDailyQuestButtons; } if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.BuildingCountChangedEvent -= this.UpdateShopButtonBadge; } if (SingletonMonobehaviour.IsAvailable) { VideoAds1Manager instance = SingletonMonobehaviour.Instance; instance.UnlockedEvent -= this.OnVideoAvailabilityChanged; instance.AvailabilityChangedEvent -= this.OnVideoAvailabilityChanged; } if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.VisibilityChangedEvent -= this.OnWorldMapVisibility; } if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.DependencyAchievedChangedEvent -= this.OnDependencyAchievedChanged; SingletonMonobehaviour.Instance.DependencyActiveChangedEvent -= this.OnDependencyActiveChanged; SingletonMonobehaviour.Instance.DependencyRewardClaimedEvent -= this.OnDependencyRewardClaimed; } if (SingletonMonobehaviour.IsAvailable) { SingletonMonobehaviour.Instance.VisitingStartedEvent -= this.OnVisitingStarted; SingletonMonobehaviour.Instance.VisitingStoppedEvent -= this.OnVisitingStopped; } } public override void Enter(State oldState, bool openView) { base.Enter(oldState, openView); SingletonMonobehaviour.Instance.PopupsMayOpen = true; this.DetermineViewState(); this.HideArrow(); this.HideTutorialDialog(); if (openView) { this.UpdateAll(); } this.CheckTutorialButton(); this.UpdateRewardBadge(); this.OnVideoAvailabilityChanged(); } public override void Leave(State newState, bool closeView) { SingletonMonobehaviour.Instance.PopupsMayOpen = false; base.Leave(newState, false); this.HideArrow(); this.HideTutorialDialog(); } public void PushSettingsExclamationRequest(object obj) { if (this._settingsExclamationRequests.Count == 0) { ((HUDView)this.View).SetSettingsAttention(true); } this._settingsExclamationRequests.Add(obj); } public void PopSettingsExclamationRequest(object obj) { if (this._settingsExclamationRequests.Remove(obj) && this._settingsExclamationRequests.Count == 0) { ((HUDView)this.View).SetSettingsAttention(false); } } public void OnIslandChange(IsometricIsland oldIsland, IsometricIsland newIsland) { if (oldIsland != null) { oldIsland.islandState.ValueChanged -= this.GameStateValueChanged; } if (newIsland != null) { newIsland.islandState.ValueChanged += this.GameStateValueChanged; ((HUDView)this.View).UpdateDropChestButton(newIsland.DropChestManager); } this.UpdateAll(); } public void CheckTutorialButton() { ((HUDView)this.View).SetTutorialButton(!(this.tutorial == null) && !this.tutorial.IsFinished); } public void UpdateAll() { this.GameStateValueChanged("Level", null, null); this.GameStateValueChanged("GiftedBalance", null, null); this.GameStateValueChanged("EarnedBalance", null, null); this.GameStateValueChanged("Happiness", null, null); this.GameStateValueChanged("Population", null, null); this.GameStateValueChanged("Employees", null, null); this.GameStateValueChanged("Transport", null, null); ((HUDView)this.View).UpdateDailyQuestButtons(); this.RefreshEyeButtonToggle(); this.RefreshShowLevelsButtonToggle(); } public void UpdateShopButtonBadge() { ((HUDView)this.View).UpdateShopBadge(); } public void OpenCurrencyPopup(ShopMenuTabs shopMenuTab) { SingletonMonobehaviour.Instance.RequestFirstPopup(delegate (State state) { ((ShopPopupState)state).OpenPopup(shopMenuTab, false); }); } public void OpenRewardsPopup() { SingletonMonobehaviour.Instance.RequestFirstPopup(delegate (State state) { ((QuestsPopupState)state).Init(QuestsMenuTabs.OngoingQuests); }); } public void ConfirmStateEntered() { this.DetermineViewState(); } public void OpenShopPopup() { SingletonMonobehaviour.Instance.RequestFirstPopup(delegate (State state) { CIGTutorialManager instanceIfAvailable = SingletonMonobehaviour.InstanceIfAvailable; if (instanceIfAvailable != null) { if (instanceIfAvailable.state == CIGTutorialState.BuildFarm) { ((ShopPopupState)state).OpenPopup(ShopMenuTabs.Commercial, false); return; } if (instanceIfAvailable.state == CIGTutorialState.BuildHouse) { ((ShopPopupState)state).OpenPopup(ShopMenuTabs.Residential, false); return; } } ((ShopPopupState)state).OpenPopup(ShopMenuTabs.Gold, true); }); } public void OpenDailyQuest() { SingletonMonobehaviour.Instance.ShowDailyQuestPopup(); } public void OpenBuildDemolishPopup(BuildDemolishTabs buildDemolishTab) { SingletonMonobehaviour.Instance.ShowBuildDemolishPopup(buildDemolishTab); } public void OpenSocialPopup() { SingletonMonobehaviour.Instance.RequestFirstPopup(null); } public void OpenFacebook() { Application.OpenURL(SingletonMonobehaviour.Instance.SSFacebookUrl); } public void OpenGameFacebook() { Application.OpenURL(SingletonMonobehaviour.Instance.FacebookUrl); } public void OpenTelegram() { Application.OpenURL("https://t.me/MagnetGame_CityIsland3"); } public void OpenWorldMap() { if (this._showWorldMapRoutine != null) { base.StopCoroutine(this._showWorldMapRoutine); } base.StartCoroutine(this._showWorldMapRoutine = this.ShowWorldMapRoutine()); } public void OpenRoadSelectionPopup() { SingletonMonobehaviour.Instance.OpenRoadMenu(); } public void OpenSettingsPopup() { SingletonMonobehaviour.Instance.RequestFirstPopup(null); } public void OpenLeaderboardsPopup() { SingletonMonobehaviour.Instance.RequestFirstPopup(null); } public void OpenCityAdvisorPopup() { CIGGameState instance = SingletonMonobehaviour.Instance; instance.SetValue("cityAdvisorOpened", true); SingletonMonobehaviour.Instance.Show(); } public void ToggleBuildingsHidden() { IsometricIsland.Current.builder.TilesHidden = !IsometricIsland.Current.builder.TilesHidden; this.RefreshEyeButtonToggle(); } public void ToggleUpgradeLevelView() { UpgradableBuilding.SetLevelIconsHidden(!UpgradableBuilding.LevelIconsHidden, IsometricIsland.Current.grid); this.RefreshShowLevelsButtonToggle(); } public void StartDestroying() { if (CityIsland.Current != null) { CityIsland.Current.StartDestroying(); } else { UnityEngine.Debug.LogWarning("Have no CityIsland"); } } public void StopVisiting() { SingletonMonobehaviour.Instance.StopVisiting(); } public void ShowArrowAboveButtonIndex(int index, int duration = 0) { ((HUDView)this.View).ShowArrowAboveButtonIndex(index, duration); } public void HideArrow() { ((HUDView)this.View).HideArrow(); } public void ShowTutorialDialog(ILocalizedString tutorialText, Action dialogHiddenAction) { ((HUDView)this.View).ShowTutorialDialog(tutorialText); this._dialogHiddenAction = dialogHiddenAction; } public void HideTutorialDialog() { ((HUDView)this.View).HideTutorialDialog(); if (this._dialogHiddenAction != null) { this._dialogHiddenAction(); this._dialogHiddenAction = null; } } public void QuitTutorial() { SingletonMonobehaviour.Instance.ShowOkCancelPopup(UISpriteType.DemolishIcon, Localization.Key("quit_tutorial"), Localization.Key("tutorial_quit_confirm"), delegate () { if (this != null && this.tutorial != null) { this.tutorial.QuitTutorial(); if (this._isInState) { this.HideArrow(); this.HideTutorialDialog(); ((HUDView)this.View).SetTutorialButton(false); } } }, null); } public void UpdateBuildQueueButton() { ((HUDView)this.View).UpdateBuildQueueButton(); } public void UpdateDemolishQueueButton() { ((HUDView)this.View).UpdateDemolishQueueButton(); } public void WatchVideo() { Action greenButtonAction = delegate () { if (SingletonMonobehaviour.Instance.ShowVideoQuestAd()) { ((HUDView)this.View).SetWatchVideoButtonVisible(false); } }; if (SingletonMonobehaviour.Instance.IsReady) { decimal m = 1m; Dependency dependency = SingletonMonobehaviour.Instance["quests"]; Dependency child = dependency.GetChild((Dependency q) => q.Identifier == "game/videos_gold"); if (child != null) { Dependency dependency2 = child.GetChild((Dependency l) => !l.IsAchieved || !l.RewardClaimed) ?? child.Children[child.Children.Count - 1]; m = dependency2.Reward.GetValue("Gold"); } SingletonMonobehaviour.Instance.RequestFirstGenericPopup(UISpriteType.GoldLarge, Localization.Key("watch_video"), Localization.Format(Localization.Key("watch_video_popup_text"), new ILocalizedString[] { Localization.Integer(m), Localization.Key("gold") }), Localization.Key("ok"), Localization.EmptyLocalizedString, greenButtonAction, null, null, true); } } public void Like() { bool flag = false; CIGSparkSocServices instanceIfAvailable = SingletonMonobehaviour.InstanceIfAvailable; if (instanceIfAvailable != null) { flag = instanceIfAvailable.IsLogedInAndLinked(); } if (!flag) { SingletonMonobehaviour.Instance.RequestFirstPopup(delegate (State state) { ((SparkSocLoginPopupState)state).SetLoggedInCallback(new Action(this.OnLoggedIn)); }); } else { CIGIslandsManager instanceIfAvailable2 = SingletonMonobehaviour.InstanceIfAvailable; if (instanceIfAvailable2 != null && instanceIfAvailable2.IsVisiting) { LeaderboardEntry visitingPlayer = SingletonMonobehaviour.Instance.VisitingPlayer; if (LikeRegistrar.HaveVotedFor(visitingPlayer.InstallUuid)) { UnityEngine.Debug.LogError("Interface should have stopped double vote for player"); } else { instanceIfAvailable.VoteForPlayer(visitingPlayer.InstallUuid); LikeRegistrar.SaveVoteFor(visitingPlayer.InstallUuid); int num = LikeRegistrar.GetNumberOfLikes(visitingPlayer.InstallUuid); num = Mathf.Max(num, Mathf.Max(visitingPlayer.Votes, 0)); LikeRegistrar.SaveNumberOfLikes(visitingPlayer.InstallUuid, num + 1); ((HUDView)this.View).SetLikeButton(); } } else { UnityEngine.Debug.LogError("No SparkSoc service!"); } } } private void OnLoggedIn() { CIGIslandsManager instanceIfAvailable = SingletonMonobehaviour.InstanceIfAvailable; if (instanceIfAvailable != null && instanceIfAvailable.IsVisiting) { ((HUDView)this.View).SetLikeButton(); } } protected void UpdateSpeedupCost() { } protected void GameStateValueChanged(string key, object oldValue, object newValue) { CIGGameState instance = SingletonMonobehaviour.Instance; CIGIslandState cigislandState = UnityEngine.Object.FindObjectOfType(); HUDView hudview = (HUDView)this.View; if (key.StartsWith("UnlockedIsland")) { if (!true.Equals(oldValue) && true.Equals(newValue)) { hudview.ShowWorldMapExclamationMark(); } return; } if (key.Equals("Level")) { hudview.UpdateLevel(instance); } if (cigislandState == null) { return; } int num = cigislandState.Population; int num2 = cigislandState.Housing; int num3 = cigislandState.Employees; int num4 = cigislandState.Jobs; int num5 = cigislandState.AvailableHappiness; if (this.alwaysShowGlobalState || SingletonMonobehaviour.Instance.IsVisible) { num = instance.GlobalPopulation; num2 = instance.GlobalHousing; num3 = instance.GlobalEmployees; num4 = instance.GlobalJobs; num5 = instance.GlobalHappiness; } int num6 = Mathf.Max(Mathf.Max(Mathf.Max(num2, num4), num5), num); if (key.Equals("EarnedBalance") || key.Equals("GiftedBalance")) { hudview.UpdateBalance(instance); } if (key.Equals("Happiness") || key.Equals("Housing") || key.Equals("GlobalHappiness") || key.Equals("GlobalHousing")) { hudview.UpdateHappiness(num5, num2); } if (key.Equals("Population") || key.Equals("Housing") || key.Equals("GlobalPopulation") || key.Equals("GlobalHousing")) { float progress = (num6 != 0) ? ((float)num / (float)num6) : 0f; hudview.UpdatePopulation(progress, num, num2); } if (key.Equals("Employees") || key.Equals("Jobs") || key.Equals("GlobalEmployees") || key.Equals("GlobalJobs")) { float progress2 = (num6 != 0) ? ((float)num3 / (float)num6) : 0f; hudview.UpdateEmployees(progress2, num3, num4); } } protected void DetermineViewState() { if (SingletonMonobehaviour.IsAvailable && SingletonMonobehaviour.Instance.IsVisiting) { if (SingletonMonobehaviour.IsAvailable && SingletonMonobehaviour.Instance.IsVisible) { ((HUDView)this.View).SetViewState(HUDViewState.VisitingWorldMap); } else { ((HUDView)this.View).SetViewState(HUDViewState.VisitingIsland); } } else if (SingletonMonobehaviour.IsAvailable && SingletonMonobehaviour.Instance.IsVisible) { ((HUDView)this.View).SetViewState(HUDViewState.WorldMap); } else if (base.fsm != null && base.fsm.CurrentState is HUDConfirmState) { ((HUDView)this.View).SetViewState(HUDViewState.Confirm); } else { ((HUDView)this.View).SetViewState(HUDViewState.Island); } } private IEnumerator ShowWorldMapRoutine() { yield return SingletonMonobehaviour.Instance.ShowAnimated(); SingletonMonobehaviour.Instance.ShowInstant(); yield return SingletonMonobehaviour.Instance.HideAnimated(); yield break; } private IEnumerator HideWorldMapRoutine() { yield return SingletonMonobehaviour.Instance.ShowAnimated(); SingletonMonobehaviour.Instance.HideInstant(); yield return SingletonMonobehaviour.Instance.HideAnimated(); yield break; } private void OnVideoAvailabilityChanged() { ((HUDView)this.View).SetWatchVideoButtonVisible(SingletonMonobehaviour.Instance.IsReady); } private void OnVisitingStarted() { ((HUDView)this.View).SetVisitingInfo(SingletonMonobehaviour.Instance.VisitingPlayer); } private void OnVisitingStopped() { this.DetermineViewState(); } private void RefreshEyeButtonToggle() { ((HUDView)this.View).SetEyeButtonToggle(IsometricIsland.Current != null && IsometricIsland.Current.builder.TilesHidden); } private void RefreshShowLevelsButtonToggle() { ((HUDView)this.View).SetShowLevelsButtonToggle(!UpgradableBuilding.LevelIconsHidden); } private void OnWorldMapVisibility(bool visible) { this.DetermineViewState(); this.HideArrow(); this.HideTutorialDialog(); this.UpdateAll(); } protected void OnDependencyAchievedChanged(Dependency dependency, bool achieved) { this.UpdateRewardBadge(); } protected void OnDependencyActiveChanged(Dependency dependency, bool active) { this.UpdateRewardBadge(); } protected void OnDependencyRewardClaimed(Dependency dependency, bool claimed) { this.UpdateRewardBadge(); } protected void UpdateRewardBadge() { int num = 0; Dependency dependency = SingletonMonobehaviour.Instance["quests"]; int count = dependency.Children.Count; for (int i = 0; i < count; i++) { Dependency dependency2 = dependency.Children[i]; if (dependency2.IsActive) { int count2 = dependency2.Children.Count; for (int j = 0; j < count2; j++) { Dependency dependency3 = dependency2.Children[j]; if (dependency3.IsAchieved && !dependency3.RewardClaimed) { num++; } } } } ((HUDView)this.View).SetRewardBadge(num > 0); } public bool alwaysShowGlobalState = true; private CIGTutorialManager tutorial; private Action _dialogHiddenAction; private IEnumerator _showWorldMapRoutine; private IEnumerator _hideWorldMapRoutine; private List _settingsExclamationRequests = new List(); }