using System; using System.Collections.Generic; using MoleMole.MainMenu; using UnityEngine; using UnityEngine.UI; using proto; namespace MoleMole { public class UIUtil { public static void ShowItemDetail(StorageDataItemBase item, bool hideActionBtns = false, bool unlock = true) { if (item is WeaponDataItem || item is StigmataDataItem) { Singleton.Instance.ShowPage(new StorageItemDetailPageContext(item, hideActionBtns, unlock)); } else if (item is AvatarCardDataItem) { AvatarDataItem dummyAvatarDataItem = Singleton.Instance.GetDummyAvatarDataItem(AvatarMetaDataReaderExtend.GetAvatarIDsByKey(item.ID).avatarID); Singleton.Instance.ShowPage(new AvatarIntroPageContext(dummyAvatarDataItem)); } else { Singleton.Instance.ShowDialog(new ItemDetailDialogContext(item, hideActionBtns)); } } public static void ShowResourceDetail(RewardUIData resourceData) { if (resourceData.rewardType == ResourceType.Item) { StorageDataItemBase dummyStorageDataItem = Singleton.Instance.GetDummyStorageDataItem(resourceData.itemID, resourceData.level); dummyStorageDataItem.number = resourceData.value; ShowItemDetail(dummyStorageDataItem, true); } else { Singleton.Instance.ShowDialog(new ResourceDetailDialogContext(resourceData)); } } public static string GetDifficultyMark(LevelDiffculty difficulty) { string result = "N"; switch (difficulty) { case LevelDiffculty.Hard: result = "H"; break; case LevelDiffculty.Hell: result = "S"; break; } return result; } public static LevelDiffculty GetDifficultyFromMark(char mark) { LevelDiffculty result = LevelDiffculty.Normal; switch (mark) { case 'H': result = LevelDiffculty.Hard; break; case 'S': result = LevelDiffculty.Hell; break; } return result; } public static Color SetupColor(string hexString) { Color color = Color.white; if (ColorUtility.TryParseHtmlString(hexString, out color)) { return color; } return color; } public static bool ShowFriendDetailInfo(FriendDetailDataItem detailData, bool fromDialog = false, Transform dialogTrans = null) { RemoteAvatarDetailPageContext context = new RemoteAvatarDetailPageContext(detailData, fromDialog, dialogTrans); Singleton.Instance.ShowPage(context); return false; } public static void Create3DAvatarByPage(AvatarDataItem avatar, MiscData.PageInfoKey pageKey, string tabName = "Default") { ConfigPageAvatarShowInfo pageAvatarShowInfo = MiscData.GetPageAvatarShowInfo(pageKey); ConfigAvatarShowInfo avatarShowInfo = GetAvatarShowInfo(avatar, pageKey, tabName); List list = new List(); list.Add(new Avatar3dModelDataItem(avatar, avatarShowInfo.Avatar.Position, avatarShowInfo.Avatar.EulerAngle, pageAvatarShowInfo.ShowLockViewIfLock)); List body = list; Singleton.Instance.FireNotify(new Notify(NotifyTypes.CreateAvatarUIModels, body)); GameObject gameObject = GameObject.Find("LookAt"); if (gameObject != null) { gameObject.transform.position = avatarShowInfo.LookAt.Position; gameObject.transform.eulerAngles = avatarShowInfo.LookAt.EulerAngle; } } public static ConfigAvatarShowInfo GetAvatarShowInfo(AvatarDataItem avatar, MiscData.PageInfoKey pageKey, string tabName) { ConfigPageAvatarShowInfo pageAvatarShowInfo = MiscData.GetPageAvatarShowInfo(pageKey); string avatarRegistryKey = avatar.AvatarRegistryKey; string[] array = avatarRegistryKey.Split('_'); string key = array[0]; ConfigTabAvatarTransformInfo configTabAvatarTransformInfo = (pageAvatarShowInfo.AvatarTabTransformInfos.ContainsKey(avatarRegistryKey) ? pageAvatarShowInfo.AvatarTabTransformInfos[avatarRegistryKey] : ((!pageAvatarShowInfo.AvatarTabTransformInfos.ContainsKey(key)) ? pageAvatarShowInfo.AvatarTabTransformInfos["Default"] : pageAvatarShowInfo.AvatarTabTransformInfos[key])); string key2 = tabName + "_" + avatar.avatarID; if (configTabAvatarTransformInfo.AvatarShowInfos.ContainsKey(key2)) { return configTabAvatarTransformInfo.AvatarShowInfos[key2]; } if (configTabAvatarTransformInfo.AvatarShowInfos.ContainsKey(tabName)) { return configTabAvatarTransformInfo.AvatarShowInfos[tabName]; } return configTabAvatarTransformInfo.AvatarShowInfos["Default"]; } public static void SetCameraLookAt(AvatarDataItem avatar, MiscData.PageInfoKey pageKey, string tabName) { ConfigAvatarShowInfo avatarShowInfo = GetAvatarShowInfo(avatar, pageKey, tabName); Transform transform = GameObject.Find("LookAt").transform; transform.position = avatarShowInfo.LookAt.Position; transform.eulerAngles = avatarShowInfo.LookAt.EulerAngle; } public static void SetAvatarTattooVisible(bool visible, AvatarDataItem avatarData) { BaseMonoUIAvatar uIAvatar = GetUIAvatar(avatarData.avatarID); if (!(uIAvatar == null)) { uIAvatar.tattooVisible = visible; uIAvatar.avatarData = avatarData; Transform uIAvatarTattooByID = GetUIAvatarTattooByID(avatarData.avatarID, "Stigmata"); if (uIAvatarTattooByID != null) { uIAvatarTattooByID.gameObject.SetActive(visible); } if (visible) { UpdateAvatarTattoo(avatarData); } } } public static void UpdateAvatarTattoo(AvatarDataItem avatarData) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) if (avatarData == null) { return; } Transform uIAvatarTattooByID = GetUIAvatarTattooByID(avatarData.avatarID, "Stigmata"); if (uIAvatarTattooByID == null) { return; } BaseMonoUIAvatar uIAvatar = GetUIAvatar(avatarData.avatarID); if (uIAvatar == null) { return; } foreach (KeyValuePair item in avatarData.GetStigmataDict()) { Transform uIAvatarTattooByID2 = GetUIAvatarTattooByID(avatarData.avatarID, ((Enum)item.Key).ToString()); if (!(uIAvatarTattooByID2 == null)) { uIAvatarTattooByID2.gameObject.SetActive(item.Value != null); if (item.Value != null) { UnityEngine.Material material = uIAvatarTattooByID2.GetComponent().material; material.SetTexture("_MainTex", Miscs.LoadResource(item.Value.GetTattooPath())); uIAvatar.StigmataFadeIn(item.Key); } } } } public static Transform GetUIAvatarTattooByID(int avatarID, string attachmentName) { BaseMonoUIAvatar uIAvatar = GetUIAvatar(avatarID); if (uIAvatar == null) { return null; } if (!uIAvatar.HasAttachPoint(attachmentName)) { return null; } return uIAvatar.GetAttachPoint(attachmentName); } public static bool ContainsUIAvatar(int avatarID) { BaseMonoCanvas sceneCanvas = Singleton.Instance.SceneCanvas; if (sceneCanvas is MonoMainCanvas) { return ((MonoMainCanvas)sceneCanvas).avatar3dModelContext.ContainUIAvatar(avatarID); } if (sceneCanvas is MonoTestUI) { return ((MonoTestUI)sceneCanvas).avatar3dModelContext.ContainUIAvatar(avatarID); } return ((MonoGameEntry)sceneCanvas).avatar3dModelContext.ContainUIAvatar(avatarID); } public static BaseMonoUIAvatar GetUIAvatar(int avatarID) { BaseMonoCanvas sceneCanvas = Singleton.Instance.SceneCanvas; Transform transform = ((sceneCanvas is MonoMainCanvas) ? ((MonoMainCanvas)sceneCanvas).avatar3dModelContext.GetAvatarById(avatarID) : ((!(sceneCanvas is MonoTestUI)) ? ((MonoGameEntry)sceneCanvas).avatar3dModelContext.GetAvatarById(avatarID) : ((MonoTestUI)sceneCanvas).avatar3dModelContext.GetAvatarById(avatarID))); if (transform == null) { return null; } return transform.GetComponent(); } public static void CalCulateExpFromItems(out float scoinNeed, out float expGet, List dogFoodList, StorageDataItemBase equipToPowerUp) { float num = 0f; foreach (StorageDataItemBase dogFood in dogFoodList) { float num2 = dogFood.GetGearExp(); MaterialExpBonusMetaData materialExpBonusMetaData = MaterialExpBonusMetaDataReader.TryGetMaterialExpBonusMetaDataByKey(dogFood.ID); if (materialExpBonusMetaData != null) { if (equipToPowerUp is WeaponDataItem) { num2 *= materialExpBonusMetaData.weaponExpBonus / 100f; } else if (equipToPowerUp is StigmataDataItem) { num2 *= materialExpBonusMetaData.stigmataExpBonus / 100f; } } if (dogFood.GetType() == equipToPowerUp.GetType()) { num2 *= (float)Singleton.Instance.playerData.sameTypePowerUpRataInt / 100f; } num += num2; } expGet = Mathf.FloorToInt(num); scoinNeed = expGet * (float)Singleton.Instance.playerData.powerUpScoinCostRate / 100f; } public static int CalculateLvWithExp(float exp, StorageDataItemBase equipToPowerUp) { List itemList = EquipmentLevelMetaDataReader.GetItemList(); int expType = equipToPowerUp.GetExpType(); int maxLevel = equipToPowerUp.GetMaxLevel(); float num = exp + (float)equipToPowerUp.exp; int num2 = equipToPowerUp.level; while (num > 0f && num2 < maxLevel) { int num3 = itemList[num2 - 1].expList[expType]; if ((float)num3 <= num) { num -= (float)num3; num2++; continue; } break; } return num2; } public static List GetEquipmentMaxExpList(StorageDataItemBase equipToPowerUp, int fromLevel, int toLevel) { List list = new List(); List itemList = EquipmentLevelMetaDataReader.GetItemList(); int expType = equipToPowerUp.GetExpType(); for (int i = fromLevel; i <= toLevel; i++) { list.Add(itemList[i - 1].expList[expType]); } return list; } public static List GetPlayerMaxExpList(int fromLevel, int toLevel) { List list = new List(); List itemList = PlayerLevelMetaDataReader.GetItemList(); for (int i = fromLevel; i <= toLevel; i++) { list.Add(itemList[i - 1].exp); } return list; } public static List GetAvatarMaxExpList(AvatarDataItem avatarData, int fromLevel, int toLevel) { List list = new List(); List itemList = AvatarLevelMetaDataReader.GetItemList(); for (int i = fromLevel; i <= toLevel; i++) { list.Add(itemList[i - 1].exp); } return list; } public static int FloorToIntCustom(float num) { return (0f < num && num < 1f) ? 1 : Mathf.FloorToInt(num); } public static void ShowBindWarningDialog() { GeneralDialogContext generalDialogContext = new GeneralDialogContext(); generalDialogContext.type = GeneralDialogContext.ButtonType.DoubleButton; generalDialogContext.title = LocalizationGeneralLogic.GetText("Menu_Title_BindAccount"); generalDialogContext.desc = LocalizationGeneralLogic.GetText("Menu_Desc_BindAccount"); generalDialogContext.okBtnText = LocalizationGeneralLogic.GetText("Menu_Action_DoBindAccount"); generalDialogContext.cancelBtnText = LocalizationGeneralLogic.GetText("Menu_Action_CancelBindAccount"); generalDialogContext.buttonCallBack = delegate(bool confirmed) { if (confirmed) { Singleton.Instance.manager.BindUI(); } }; GeneralDialogContext dialogContext = generalDialogContext; Singleton.Instance.ShowDialog(dialogContext); } public static string ProcessStrWithNewLine(string text) { if (!string.IsNullOrEmpty(text)) { text = text.Replace("\\n", Environment.NewLine); text = text.Replace("{{{", Environment.NewLine); } return text; } public static bool TrySetupEventSprite(Image img, string path) { if (string.IsNullOrEmpty(path)) { return false; } Sprite sprite = Miscs.LoadResource(path); if (sprite != null) { img.GetComponent().sprite = sprite; return true; } if (GlobalVars.ResourceUseAssetBundle) { Singleton.Instance.Loader.TryStartDownloadOneAssetBundle(path, null, delegate(bool downloadSucc) { if (downloadSucc) { Singleton.Instance.FireNotify(new Notify(NotifyTypes.DownloadResAssetSucc)); } }); } return false; } public static bool GetEquipmentSlot(StorageDataItemBase storageData, out EquipmentSlot slot) { if (storageData is WeaponDataItem) { slot = (EquipmentSlot)1; return true; } if (storageData is StigmataDataItem) { switch ((storageData as StigmataDataItem).GetBaseType()) { case 1: slot = (EquipmentSlot)2; return true; case 2: slot = (EquipmentSlot)3; return true; case 3: slot = (EquipmentSlot)4; return true; default: slot = (EquipmentSlot)1; return false; } } slot = (EquipmentSlot)1; return false; } public static void UpdateAvatarSkillStatusInLocalData(AvatarDataItem avatarData) { Dictionary subSkillStatusDict = Singleton.Instance.LocalData.SubSkillStatusDict; foreach (AvatarSkillDataItem skillData in avatarData.skillDataList) { foreach (AvatarSubSkillDataItem avatarSubSkill in skillData.avatarSubSkillList) { if (avatarSubSkill.ShouldShowHintPoint()) { subSkillStatusDict[avatarSubSkill.subSkillID] = avatarSubSkill.Status; } else { subSkillStatusDict.Remove(avatarSubSkill.subSkillID); } } } Singleton.Instance.Save(); Singleton.Instance.FireNotify(new Notify(NotifyTypes.SubSkillStatusCacheUpdate)); } public static Sprite GetResourceSprite(ResourceType resourceType, StorageDataItemBase itemData = null) { switch (resourceType) { case ResourceType.Hcoin: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconHC"); case ResourceType.Scoin: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconSC"); case ResourceType.PlayerExp: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconEXP"); case ResourceType.Stamina: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconST"); case ResourceType.SkillPoint: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconSP"); case ResourceType.FriendPoint: return Miscs.GetSpriteByPrefab("SpriteOutput/GeneralIcon/IconFP"); default: if (itemData == null) { return null; } return Miscs.GetSpriteByPrefab(itemData.GetIconPath()); } } public static string GetResourceIconPath(ResourceType resourceType, int itemID = 0) { switch (resourceType) { case ResourceType.Hcoin: return "SpriteOutput/GeneralIcon/IconHC"; case ResourceType.Scoin: return "SpriteOutput/GeneralIcon/IconSC"; case ResourceType.PlayerExp: return "SpriteOutput/GeneralIcon/IconEXP"; case ResourceType.Stamina: return "SpriteOutput/GeneralIcon/IconST"; case ResourceType.SkillPoint: return "SpriteOutput/GeneralIcon/IconSP"; case ResourceType.FriendPoint: return "SpriteOutput/GeneralIcon/IconFP"; default: if (itemID != 0) { StorageDataItemBase dummyStorageDataItem = Singleton.Instance.GetDummyStorageDataItem(itemID); if (dummyStorageDataItem != null) { return dummyStorageDataItem.GetIconPath(); } return null; } return null; } } public static void SpaceshipCheckWeather() { if (SpaceshipCheckWeatherRealTime()) { return; } if (TimeUtil.Now < Singleton.Instance.LocalData.EndThunderDateTime) { Singleton.Instance.FireNotify(new Notify(NotifyTypes.ShowThunderWeather)); } else if (!Singleton.Instance.spaceShipVisibleOnPreviesPage) { if (TimeUtil.Now > Singleton.Instance.LocalData.NextRandomDateTime) { Singleton.Instance.FireNotify(new Notify(NotifyTypes.ShowRandomWeather)); Singleton.Instance.LocalData.NextRandomDateTime = TimeUtil.Now.AddHours(2.0); } else { Singleton.Instance.FireNotify(new Notify(NotifyTypes.ShowDefaultWeather)); } } } private static bool SpaceshipCheckWeatherRealTime() { RealTimeWeatherManager instance = Singleton.Instance; if (instance == null || !instance.Available) { return false; } WeatherInfo weatherInfo = instance.GetWeatherInfo(); if (weatherInfo == null || weatherInfo.weatherType == WeatherType.None) { return false; } string configName = null; int sceneId = -1; instance.GetWeatherConfig(weatherInfo.weatherType, out configName, out sceneId); if (configName == null || sceneId == -1) { return false; } MainMenuStage mainMenuStage = UnityEngine.Object.FindObjectOfType(); if (mainMenuStage == null) { return false; } string path = string.Format("Rendering/MainMenuAtmosphereConfig/{0}", configName); ConfigAtmosphereSeries configAtmosphereSeries = ConfigAtmosphereSeries.LoadFromFileAndDetach(path); if (configAtmosphereSeries == null) { return false; } mainMenuStage.ChooseCloudScene(configAtmosphereSeries, sceneId); return true; } public static void TryParseHexString(string str, out Color color) { ColorUtility.TryParseHtmlString(str, out color); } public static string GetPlayerNickname(PlayerFriendBriefData briefData) { if (!briefData.nicknameSpecified || string.IsNullOrEmpty(briefData.nickname)) { return LocalizationGeneralLogic.GetText("Menu_DefaultNickname", briefData.uid); } return briefData.nickname; } public static Sprite GetAvatarCardIcon(int avatarID) { AvatarCardMetaData avatarCardMetaDataByKey = AvatarCardMetaDataReader.GetAvatarCardMetaDataByKey(AvatarMetaDataReaderExtend.GetAvatarIDsByKey(avatarID).avatarCardID); return Miscs.GetSpriteByPrefab(avatarCardMetaDataByKey.iconPath); } public static List GetGoodsRealPrice(Goods goods) { ShopGoodsMetaData shopGoodsMetaDataByKey = ShopGoodsMetaDataReader.GetShopGoodsMetaDataByKey((int)goods.goods_id); List goodsOriginPrice = GetGoodsOriginPrice(goods); for (int i = 0; i < goodsOriginPrice.Count; i++) { goodsOriginPrice[i] = (int)Mathf.Floor((float)goodsOriginPrice[i] * (float)shopGoodsMetaDataByKey.Discount / 10000f); } return goodsOriginPrice; } public static List GetGoodsOriginPrice(Goods goods) { ShopGoodsMetaData shopGoodsMetaDataByKey = ShopGoodsMetaDataReader.GetShopGoodsMetaDataByKey((int)goods.goods_id); List list = new List(); if (shopGoodsMetaDataByKey.HCoinCost > 0) { list.Add(shopGoodsMetaDataByKey.HCoinCost); } if (shopGoodsMetaDataByKey.SCoinCost > 0) { list.Add(shopGoodsMetaDataByKey.SCoinCost); } if (shopGoodsMetaDataByKey.CostItemId > 0) { list.Add(shopGoodsMetaDataByKey.CostItemNum); } if (shopGoodsMetaDataByKey.CostItemId2 > 0) { list.Add(shopGoodsMetaDataByKey.CostItemNum2); } if (shopGoodsMetaDataByKey.CostItemId3 > 0) { list.Add(shopGoodsMetaDataByKey.CostItemNum3); } if (shopGoodsMetaDataByKey.CostItemId4 > 0) { list.Add(shopGoodsMetaDataByKey.CostItemNum4); } if (shopGoodsMetaDataByKey.CostItemId5 > 0) { list.Add(shopGoodsMetaDataByKey.CostItemNum5); } float num = 1f; int buyTimes = (int)(goods.buy_times + 1); ShopGoodsPriceRateMetaData shopGoodsPriceRateMetaDataByKey = ShopGoodsPriceRateMetaDataReader.GetShopGoodsPriceRateMetaDataByKey(buyTimes); if (shopGoodsMetaDataByKey.PriceRateID == 1) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType1; } else if (shopGoodsMetaDataByKey.PriceRateID == 2) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType2; } else if (shopGoodsMetaDataByKey.PriceRateID == 3) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType3; } else if (shopGoodsMetaDataByKey.PriceRateID == 4) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType4; } else if (shopGoodsMetaDataByKey.PriceRateID == 5) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType5; } else if (shopGoodsMetaDataByKey.PriceRateID == 6) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType6; } else if (shopGoodsMetaDataByKey.PriceRateID == 7) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType7; } else if (shopGoodsMetaDataByKey.PriceRateID == 8) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType8; } else if (shopGoodsMetaDataByKey.PriceRateID == 9) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType9; } else if (shopGoodsMetaDataByKey.PriceRateID == 10) { num *= (float)shopGoodsPriceRateMetaDataByKey.PriceType10; } num /= 100f; for (int i = 0; i < list.Count; i++) { list[i] = Mathf.FloorToInt((float)list[i] * num); } return list; } public static void ShowAppStoreComment(int appCommentId) { if (!Singleton.Instance.IsCommonFinished(appCommentId)) { ShowAppstoreCommentDialog(); Singleton.Instance.MarkCommonIDFinish(appCommentId); } } public static void ShowAppstoreCommentDialog() { if (Singleton.Instance.DispatchSeverData.isReview) { return; } int times = 1; if (Singleton.Instance.IsCommonFinished(CommonIDModule.APP_STORE_COMMENT_ID_1)) { times++; } if (Singleton.Instance.IsCommonFinished(CommonIDModule.APP_STORE_COMMENT_ID_2)) { times++; } times = Mathf.Clamp(times, 1, 2); Singleton.Instance.ShowDialog(new GeneralDialogContext { type = GeneralDialogContext.ButtonType.DoubleButton, title = LocalizationGeneralLogic.GetText("Menu_Title_AppstoreComment"), desc = LocalizationGeneralLogic.GetText("Menu_Desc_AppstoreComment"), okBtnText = LocalizationGeneralLogic.GetText("Menu_OkBtn_AppstoreComment"), cancelBtnText = LocalizationGeneralLogic.GetText("Menu_CancelBtn_AppstoreComment"), notDestroyAfterTouchBG = true, buttonCallBack = delegate(bool confirmed) { if (confirmed) { Application.OpenURL(MiscData.Config.BasicConfig.AppstoreUrl); } Singleton.Instance.RequestCommentReport((CommentType)(confirmed ? 1 : 2), (uint)times); }, destroyCallBack = delegate { Singleton.Instance.RequestCommentReport((CommentType)3, (uint)times); } }); } } }