Exemple #1
0
    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;
    }
Exemple #2
0
    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);
        }
    }