public async void LoadCharacter(CharacterMeta meta) { ParallaxHolder.WillDelaySet = true; var isNewCharacter = Context.CharacterManager.ActiveCharacterBundleId != meta.AssetId; if (isNewCharacter) { SpinnerOverlay.Show(); infoCard.Leave(false); characterTransitionElement.Leave(false); } var character = await Context.CharacterManager.SetActiveCharacter(meta.AssetId); if (character == null) { throw new Exception("Character not downloaded or corrupted"); } if (isNewCharacter) { await UniTask.Delay(TimeSpan.FromSeconds(0.4f)); } nameText.text = meta.Name; nameGradient.SetGradient(character.nameGradient.GetGradient()); descriptionText.text = meta.Description; levelCard.SetModel(meta.Level.ToLevel(LevelType.User)); illustratorText.text = meta.Illustrator.Name; illustratorProfileButton.onPointerClick.SetListener(_ => Application.OpenURL(meta.Illustrator.Url)); if (meta.CharacterDesigner != null && !meta.CharacterDesigner.Name.IsNullOrEmptyTrimmed()) { characterDesignerHolder.gameObject.SetActive(true); characterDesignerText.text = meta.CharacterDesigner.Name; characterDesignerProfileButton.onPointerClick.SetListener(_ => Application.OpenURL(meta.CharacterDesigner.Url)); } else { characterDesignerHolder.gameObject.SetActive(false); } infoCard.transform.RebuildLayout(); if (character.musicAudio == null) { muteButtonImage.sprite = volumeSprite; muteButtonImage.SetAlpha(0.3f); muteButton.scaleOnClick = false; muteButton.onPointerClick.RemoveAllListeners(); } else { muteButtonImage.sprite = Context.Player.Settings.PlayCharacterTheme ? volumeSprite : volumeMuteSprite; muteButtonImage.SetAlpha(1f); muteButton.scaleOnClick = true; muteButton.onPointerClick.SetListener(_ => { Context.Player.Settings.PlayCharacterTheme = !Context.Player.Settings.PlayCharacterTheme; Context.Player.SaveSettings(); LoopAudioPlayer.Instance.SetMainAudio(Context.Player.Settings.PlayCharacterTheme ? character.musicAudio : LoopAudioPlayer.Instance.defaultLoopAudio); muteButtonImage.sprite = Context.Player.Settings.PlayCharacterTheme ? volumeSprite : volumeMuteSprite; }); } await characterDisplay.Load(CharacterAsset.GetTachieBundleId(meta.AssetId)); NavigationBackdrop.Instance.UpdateBlur(); infoCard.Enter(); characterTransitionElement.Leave(false, true); characterTransitionElement.Enter(); characterTransitionElement.Apply(it => { it.enterMultiplier = 0.4f; it.enterDelay = 0.4f; it.enterDuration = 0.8f; }); if (Context.IsOffline()) { SpinnerOverlay.Hide(); } else { RestClient.Post(new RequestHelper { Uri = $"{Context.ApiUrl}/profile/{Context.Player.Id}/character", Headers = Context.OnlinePlayer.GetRequestHeaders(), EnableDebug = true, Body = new CharacterPostData { characterId = meta.Id } }) .CatchRequestError(error => { Debug.LogError(error); Toast.Next(Toast.Status.Failure, "TOAST_FAILED_TO_UPDATE_PROFILE_CHARACTER".Get()); }) .Finally(() => { SpinnerOverlay.Hide(); }); } ParallaxHolder.WillDelaySet = false; }
public void SetModel(TierData tier) { Tier = tier; IsScrollRectFix = tier.isScrollRectFix; if (IsScrollRectFix) { foreach (Transform child in transform) { child.gameObject.SetActive(false); } } else { Index = tier.index; canvasGroup.alpha = 1f; foreach (Transform child in transform) { child.gameObject.SetActive(true); } active = true; screenCenter = this.GetScreenParent <TierSelectionScreen>().ScreenCenter; characterRoot.gameObject.SetActive(tier.Meta.character != null); if (tier.Meta.character != null) { characterDisplay.Load(CharacterAsset.GetTachieBundleId(tier.Meta.character.AssetId)); characterDisplay.canvasGroup.alpha = 0; } gradientPane.SetModel(tier); for (var stage = 0; stage < Math.Min(3, tier.Meta.stages.Count); stage++) { stageCards[stage].SetModel( tier.Meta.parsedStages[stage], new ColorGradient(tier.Meta.colorPalette.stages[stage], 90f) ); } lockedOverlayRoot.SetActive(tier.locked || !tier.StagesValid); if (tier.locked) { lockedOverlayIcon.sprite = lockedIcon; lockedOverlayText.text = "TIER_LOCKED".Get(); } else if (!tier.StagesValid) { lockedOverlayIcon.sprite = unlockedIcon; lockedOverlayText.text = "TIER_NOT_DOWNLOADED".Get(); } foreach (Transform child in criteriaHolder.transform) { Destroy(child.gameObject); } foreach (var criterion in tier.Meta.parsedCriteria) { var criterionEntry = Instantiate(criterionEntryPrefab, criteriaHolder.transform); criterionEntry.SetModel(criterion.Description, CriterionState.Passed); } LayoutFixer.Fix(criteriaHolder.transform); } }