Beispiel #1
0
    public void SetInGameCharacterInfo(UICharacter uiCharacter)
    {
        var characterDataSheet = DataBase.Instance.characterDataSheet;

        if (characterDataSheet.TryGetCharacterData(uiCharacter.characterInfo.id, out var characterData))
        {
            // 후에 변경 필요
            if (characterData.HeadImage == null)
            {
                SetCharacterImage(characterData.Image);
            }
            else
            {
                SetCharacterImage(characterData.HeadImage);
            }

            SetNameText(characterData.Name);
            SetTribeImage(characterData.TribeData.Image);
            SetOriginImage(characterData.OriginData.Image);
            SetStarGrade(uiCharacter.characterInfo.star);

            var characterAbilityDataSheet = DataBase.Instance.characterAbilityDataSheet;
            if (characterAbilityDataSheet.TryGetCharacterAbilityData(uiCharacter.characterInfo.id, uiCharacter.characterInfo.star, out var abilityData))
            {
                AbilityData defaultAbilityData = new AbilityData();
                defaultAbilityData.SetAbilityData(abilityData);

                SetCharacterAbilityText(defaultAbilityData, uiCharacter.character.ability);
            }
        }
    }
Beispiel #2
0
    private void Awake()
    {
        transform.GetComponent <RawImage>("RawImage")?.SafeSetActive(true);

        uiCharacter = transform.GetComponent <UICharacter>("RawImage");
        name        = transform.GetComponent <Text>       ("base/name");
        level       = transform.GetComponent <Text>       ("base/name/level_txt");
        equiped     = transform.GetComponent <Transform>  ("base/equiped_img");


        var typeIconRoot = transform.GetComponent <Transform>("base/icon");
        var iconNames    = new string[]
        {
            "sword", "katana", "axe", "fist", "pistol", "suit"
        };

        for (var i = 0; i < iconNames.Length; i++)
        {
            typeIcons.Add(typeIconRoot.GetComponent <Image>(iconNames[i]));
        }

        model = uiCharacter.GetComponentDefault <UIModel>();

        var starGroup = transform.GetComponent <Transform>("base/qualityGrid");

        stars = starGroup.GetChildList().ToArray();
    }
    // Use this for initialization
    void Start()
    {
        char1 = (UICharacter)ui.Add(UIType.Character, npc1, "Sprites/NPC/CoordLady");
        //char1 = (UICharacter)ui.Add(UIType.Character, npc1, "Sprites/NPC/Rentner");

        char1.Emotion = EmotionType.POSITIVE;
    }
    private void EndDrag(UICharacter uiCharacter)
    {
        if (TransformService.ContainPos(uiCharacterArea.transform as RectTransform, uiCharacter.transform.position))
        {
            isMovetoBattleArea = true;
        }
        else if (TransformService.ContainPos(uiPrepareArea.transform as RectTransform, uiCharacter.transform.position))
        {
            isMovetoBattleArea = false;
        }

        uiInGameCharacterInfo.OnHide();
        uiSellArea.OnHide();

        if (isSelling)
        {
            selledCharacterInfo = uiCharacter.DeleteCharacterBySell();
            uiSellArea.gameObject.GetComponent <Image>().color = Color.white;
        }

        //if(!IsNotChanged())
        //{
        //    if (IsPlaceableSpaceFull())
        //    {
        //        if (IsMoveFromPrepareAreaToEmptyBattleArea())
        //        {
        //            SwapCharacters(invisibleCharacter, swappedCharacter);
        //            SwapCharacters(invisibleCharacter, uiCharacter);
        //            isSwapped = false;
        //            return;
        //        }
        //    }
        //}

        //UpdateCurrentPlacedCharacters();
        //SwapCharacters(invisibleCharacter, uiCharacter);
        //UpdateSynergyService(uiCharacter);
        //SetCharacterImage(uiCharacter);


        if (IsPlaceableSpaceFull())
        {
            if (IsMoveFromPrepareAreaToEmptyBattleArea())
            {
                SwapCharacters(invisibleCharacter, swappedCharacter);
                SwapCharacters(invisibleCharacter, uiCharacter);
                isSwapped = false;

                Debug.Log("In!!");
                return;
            }
        }

        SwapCharacters(invisibleCharacter, uiCharacter);
        UpdateCurrentPlacedCharacters(uiCharacter);
        UpdateSynergyService(uiCharacter);
        SetCharacterImage(uiCharacter);

        isSwapped = false;
    }
    void Start()
    {
        mainCamera = GameObject.Find("Main Camera").GetComponent <Camera>();
        root       = transform.root;

        uiCharacter = GetComponent <UICharacter>();
    }
    void SwapCharacters(UICharacter source, UICharacter destination)
    {
        Transform sourceTransform      = source.transform;
        Transform destinationTransform = destination.transform;

        Transform sourceParent      = sourceTransform.parent;
        Transform destinationParent = destinationTransform.parent;

        sourceTransform.SetParent(destinationParent);
        destinationTransform.SetParent(sourceParent);

        Vector3 sourcePosition      = sourceTransform.position;
        Vector3 destinationPosition = destinationTransform.position;

        sourceTransform.position      = destinationPosition;
        destinationTransform.position = sourcePosition;

        source.FollowCharacter();
        destination.FollowCharacter();

        TransformService.SetFullSize(source.transform as RectTransform);
        TransformService.SetFullSize(destination.transform as RectTransform);

        foreach (var arranger in arrangers)
        {
            arranger.UpdateChildren();
        }
    }
        static private void Menu_UICharacterListItem(On.Terraria.GameContent.UI.Elements.UICharacterListItem.orig_DrawSelf orig, UICharacterListItem self, SpriteBatch spriteBatch)
        {
            orig(self, spriteBatch);

            if (!SGAConfigClient.Instance.PlayerWorldData)
            {
                return;
            }

            Vector2 origin = new Vector2(self.GetDimensions().X, self.GetDimensions().Y);

            //hooray double reflection, f**k you vanilla-Scalie
            //I couldn't agree more-IDG
            UICharacter character = (UICharacter)_playerPanel.GetValue(self);

            Player    player         = (Player)_player.GetValue(character);
            SGAPlayer sgaPly         = player.SGAPly();
            bool      drakenUnlocked = sgaPly.dragonFriend;

            if (sgaPly == null)
            {
                return;
            }
            if (sgaPly.nightmareplayer)
            {
                Color     color1 = new Color(204, 130, 204);
                Texture2D tex    = Main.inventoryBack10Texture;
                Color     acolor = Color.Lerp(color1, Color.White, 0.5f);
                Color     color3 = Color.Lerp(color1, Color.Lerp(color1, Color.DarkMagenta, 0.33f), 0.50f + (float)Math.Sin(Main.GlobalTime * 2f) / 2f);
                spriteBatch.Draw(tex, origin + new Vector2(440, 0), new Rectangle(0, 0, 16, 27), acolor, 0, Vector2.Zero, 1f, SpriteEffects.None, 0);
                int i;
                for (i = 16; i < 128 + 16; i += 16)
                {
                    spriteBatch.Draw(tex, origin + new Vector2(440 + i, 0), new Rectangle(16, 0, 16, 27), acolor, 0, Vector2.Zero, 1f, SpriteEffects.None, 0);
                }
                spriteBatch.Draw(tex, origin + new Vector2(440 + i, 0), new Rectangle(32, 0, 16, 27), acolor, 0, Vector2.Zero, 1f, SpriteEffects.None, 0);
                Utils.DrawBorderString(spriteBatch, "NIGHTMARE", origin + new Vector2(454, 5), color3);

                //Hmmm color hearts
                spriteBatch.Draw(SGAmod.Instance.GetTexture("GreyHeart"), origin + new Vector2(80, 37), color3 * (0.50f + (float)Math.Cos(Main.GlobalTime * 2f) / 2f));
            }

            if (drakenUnlocked)
            {
                Texture2D       DergonHeadTex = ModContent.GetTexture("SGAmod/NPCs/TownNPCs/Dergon_Head");
                CalculatedStyle style         = self.GetDimensions();
                Vector2         offset        = style.Position() + new Vector2(style.Width, style.Height);
                float           heartBeat     = (Main.GlobalTime) % 1f;
                if (Main.GlobalTime % 2 >= 1)
                {
                    heartBeat = 1f - ((Main.GlobalTime) % 1f);
                }

                Vector2 drawerPos = offset - new Vector2(self.IsFavorite ? 16 : 48, 16);

                spriteBatch.Draw(Main.heartTexture, drawerPos, null, Color.White, 0, Main.heartTexture.Size() / 2f, 1.5f + MathHelper.SmoothStep(-1f, 1f, (heartBeat) / 2f), SpriteEffects.None, 0f);
                spriteBatch.Draw(DergonHeadTex, drawerPos, null, Color.White, 0, DergonHeadTex.Size() / 2f, 1f, SpriteEffects.None, 0f);
            }
        }
Beispiel #8
0
    private void OnSelectCharacter(UICharacter ui)
    {
        buttonStart.gameObject.SetActive(true);
        buttonDelete.gameObject.SetActive(true);
        characterModelContainer.SetChildrenActive(false);
        var playerCharacter = ui.Data as IPlayerCharacterData;

        ShowCharacter(playerCharacter.Id);
    }
 public void Setup(UICharacter currentCharacter, CharactersLoader currentCharactersLoader)
 {
     character        = currentCharacter;
     name.text        = character.name;
     level.text       = character.level;
     weapon.text      = character.weapon;
     armor.text       = character.armor;
     quality          = character.quality;
     weapon.color     = quality;
     armor.color      = quality;
     charactersLoader = currentCharactersLoader;
 }
Beispiel #10
0
    /// <summary>
    /// 조합으로 인한 배틀 공간에 배치한 캐릭터 수 1감소
    /// </summary>
    /// <param name="uiCharacter"></param>
    /// <param name="isFirstCharacter"></param>
    public void SubCurrentPlacedCharacterFromCombinations(UICharacter uiCharacter, bool isFirstCharacter)
    {
        if (isFirstCharacter)
        {
            return;
        }

        if (uiCharacter.GetArea <UIBattleArea>() != null)
        {
            SubCurrentPlacedCharacter();
        }
    }
Beispiel #11
0
    public void SubCharacterFromCombinations(UICharacter uiCharacter, bool isFirstCharacter)
    {
        if (isFirstCharacter)
        {
            return;
        }

        if (uiCharacter.GetArea <UIBattleArea>() != null)
        {
            InGameManager.instance.synergySystem.SubCharacter(uiCharacter.characterInfo);
        }
    }
    public void Initialize()
    {
        uiInGameCharacterInfo.Initialize();

        InitializeArrangers();

        isSelling            = false;
        isSwapped            = false;
        isMoveFromBattleArea = false;
        swappedCharacter     = null;
        originalSize         = 0.0f;
    }
    private void AddCharacters(List <UICharacter> characters, PlayerPartyData playerPartyData)
    {
        // will need to add empty slots if there are empty characters
        for (int i = 0; i < characters.Count; i++)
        {
            UICharacter character    = characters[i];
            GameObject  newCharacter = GameObject.Find("CharacterObjectPool").GetComponent <SimpleObjectPool>().GetObject();
            newCharacter.transform.SetParent(contentPanel);

            SampleCharacter sampleCharacter = newCharacter.GetComponent <SampleCharacter>();
            sampleCharacter.Setup(character, this, playerPartyData);
        }
    }
    private void AddCharacters(List <UICharacter> characters, MenuPartyData menuPartyData)
    {
        // will need to add empty slots if there are empty characters
        for (int i = 0; i < characters.Count; i++)
        {
            UICharacter character    = characters[i];
            GameObject  newCharacter = characterObjectPool.GetObject();
            newCharacter.transform.SetParent(contentPanel);

            SampleCharacter sampleCharacter = newCharacter.GetComponent <SampleCharacter>();
            Debug.Log(party.name);
            sampleCharacter.Setup(character, this, menuPartyData);
        }
    }
Beispiel #15
0
 public void Setup(UICharacter currentCharacter, ScrollParty currentScrollParty, MenuPartyData currentParty)
 {
     // todo handle ID
     character    = currentCharacter;
     name.text    = character.name;
     level.text   = character.level;
     weapon.text  = character.weapon;
     armor.text   = character.armor;
     quality      = character.quality;
     weapon.color = quality;
     armor.color  = quality;
     partyId      = character.partyId;
     party        = currentParty;
     scrollParty  = currentScrollParty;
 }
Beispiel #16
0
    // 파라미터로 받은 캐릭터의 (드래그한)위치가 캐릭터리스트에 있는 캐릭터들 중 하나의 위치에 오면 그 위치에 있는 캐릭터를 반환
    public UICharacter GetCharacterByPosition(UICharacter draggedUICharacter)
    {
        UICharacter targetCharacter = null;

        for (int i = 0; i < uiCharacters.Count; ++i)
        {
            if (TransformService.ContainPos(uiCharacters[i].transform as RectTransform, draggedUICharacter.transform.position))
            {
                targetCharacter = uiCharacters[i];
                break;
            }
        }

        return(targetCharacter);
    }
Beispiel #17
0
        protected override void OnClickDelete()
        {
            UICharacter selectedUI = CacheCharacterSelectionManager.SelectedUI;

            if (selectedUI == null)
            {
                UISceneGlobal.Singleton.ShowMessageDialog("Cannot delete character", "Please choose character to delete");
                Debug.LogWarning("Cannot delete character, No chosen character");
                return;
            }

            IPlayerCharacterData playerCharacter = selectedUI.Data as IPlayerCharacterData;

            MMOClientInstance.Singleton.RequestDeleteCharacter(playerCharacter.Id, OnRequestedDeleteCharacter);
        }
Beispiel #18
0
        public override void OnClickDelete()
        {
            UICharacter selectedUI = CacheCharacterSelectionManager.SelectedUI;

            if (selectedUI == null)
            {
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UITextKeys.UI_ERROR_NO_CHOSEN_CHARACTER_TO_DELETE.ToString()));
                Debug.LogWarning("Cannot delete character, No chosen character");
                return;
            }

            IPlayerCharacterData playerCharacter = selectedUI.Data as IPlayerCharacterData;

            MMOClientInstance.Singleton.RequestDeleteCharacter(playerCharacter.Id, OnRequestedDeleteCharacter);
        }
Beispiel #19
0
        public override void OnClickStart()
        {
            UICharacter selectedUI = CacheCharacterSelectionManager.SelectedUI;

            if (selectedUI == null)
            {
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UITextKeys.UI_ERROR_NO_CHOSEN_CHARACTER_TO_START.ToString()));
                Debug.LogWarning("Cannot start game, No chosen character");
                return;
            }
            // Load gameplay scene, we're going to manage maps in gameplay scene later
            // So we can add gameplay UI just once in gameplay scene
            IPlayerCharacterData playerCharacter = selectedUI.Data as IPlayerCharacterData;

            MMOClientInstance.Singleton.RequestSelectCharacter(playerCharacter.Id, OnRequestedSelectCharacter);
        }
Beispiel #20
0
        protected override void OnClickStart()
        {
            UICharacter selectedUI = CacheCharacterSelectionManager.SelectedUI;

            if (selectedUI == null)
            {
                UISceneGlobal.Singleton.ShowMessageDialog("Cannot start game", "Please choose character to start game");
                Debug.LogWarning("Cannot start game, No chosen character");
                return;
            }
            // Load gameplay scene, we're going to manage maps in gameplay scene later
            // So we can add gameplay UI just once in gameplay scene
            IPlayerCharacterData playerCharacter = selectedUI.Data as IPlayerCharacterData;

            MMOClientInstance.Singleton.RequestSelectCharacter(playerCharacter.Id, OnRequestedSelectCharacter);
        }
    private void AddCharacters(PlayerCharacterData[] characters)
    {
        // will need to add empty slots if there are empty characters
        for (int i = 0; i < characters.Length; i++)
        {
            int         charId       = characters[i].id;
            UICharacter character    = dataFormat.CreateUICharacter(characters[i], data);
            GameObject  newCharacter = GameObject.Find("CharacterObjectPool").GetComponent <SimpleObjectPool>().GetObject();
            newCharacter.transform.SetParent(GameObject.Find("CharacterContainer").transform);
            newCharacter.GetComponent <Button>().interactable = true;
            newCharacter.GetComponent <Button>().onClick.RemoveAllListeners();
            newCharacter.GetComponent <Button>().onClick.AddListener(delegate { SelectPartyCharacter(charId); });

            SampleCharacter sampleCharacter = newCharacter.GetComponent <SampleCharacter>();
            sampleCharacter.Setup(character, this);
        }
    }
 public void Setup(UICharacter currentCharacter, ScrollParty currentScrollParty, PlayerPartyData currentParty)
 {
     character    = currentCharacter;
     name.text    = character.name;
     level.text   = character.level;
     weapon.text  = character.weapon;
     armor.text   = character.armor;
     quality      = character.quality;
     weapon.color = quality;
     armor.color  = quality;
     partyId      = character.partyId;
     party        = currentParty;
     characterId  = character.id;
     scrollParty  = currentScrollParty;
     gameObject.GetComponent <Button>().onClick.RemoveAllListeners();
     gameObject.GetComponent <Button>().onClick.AddListener(SwapPartyCharacter);
 }
    private void BeginDrag(UICharacter uiCharacter)
    {
        if (TransformService.ContainPos(uiCharacterArea.transform as RectTransform, uiCharacter.transform.position))
        {
            isMoveFromBattleArea = true;
        }
        else if (TransformService.ContainPos(uiPrepareArea.transform as RectTransform, uiCharacter.transform.position))
        {
            isMoveFromBattleArea = false;
        }

        parentWhenBeginDrag = uiCharacter.GetComponentInParent <UISlot>();
        SwapCharacters(invisibleCharacter, uiCharacter);
        uiCharacter.SetDefaultImage();
        originalSize = uiCharacter.character.GetSize();
        uiSellArea.UpdatePrice(uiCharacter.characterInfo);
        uiSellArea.OnShow();
    }
    // 배치된 공간에 따라서 이미지를 바꿔줌
    private void SetCharacterImage(UICharacter uiCharacter)
    {
        if (uiCharacter.characterInfo == null)
        {
            return;
        }

        if (uiCharacter.GetArea <UICharacterArea>() != null)
        {
            uiCharacter.SetAnimationImage();
            // 일반 이미지로 변경;
        }
        else if (uiCharacter.GetArea <UIPrepareArea>() != null)
        {
            uiCharacter.SetDefaultImage();
            // 애니메이션 이미지로 변경;
        }
    }
Beispiel #25
0
    private UICharacter CreateUICharacter(MenuCharacterData character, DataController data)
    {
        UICharacter member = new UICharacter();

        member.id    = character.id;
        member.name  = character.name;
        member.level = FormatCharacterLevel(character.level);
        if (character.offHand > -1)
        {
            member.weapon = GetWeaponName(character.weapon, data) + " / " + GetWeaponName(character.offHand, data);
        }
        else
        {
            member.weapon = GetWeaponName(character.weapon, data);
        }
        member.armor   = GetArmorName(character.armor);
        member.quality = ColorConvertQuality(character.quality);
        return(member);
    }
    /// <summary>
    /// 현재 배치된 캐릭터들의 시너지 적용
    /// </summary>
    /// <param name="uiCharacter"></param>
    public void UpdateSynergyService(UICharacter uiCharacter)
    {
        var synergySystem = InGameManager.instance.synergySystem;

        if (isSelling && isMoveFromBattleArea)
        {
            synergySystem.SubCharacter(selledCharacterInfo);
            return;
        }

        if (IsNotChanged(uiCharacter) || isSelling)
        {
            return;
        }

        if (IsMoveFromBattleAreaToPrepareArea())
        {
            uiCharacter.character.ResetAbility();

            if (IsReplaceWithEmptySpace())
            {
                synergySystem.SubCharacter(uiCharacter.characterInfo);
            }
            else
            {
                synergySystem.SubCharacter(uiCharacter.characterInfo);
                synergySystem.AddCharacter(swappedCharacter.characterInfo);
            }
        }
        else if (IsMoveFromPrepareAreaToBattleArea())
        {
            if (IsReplaceWithEmptySpace())
            {
                synergySystem.AddCharacter(uiCharacter.characterInfo);
            }
            else
            {
                synergySystem.AddCharacter(uiCharacter.characterInfo);
                synergySystem.SubCharacter(swappedCharacter.characterInfo);
            }
        }
    }
    private void AddCharacters(PlayerCharacterData[] characters)
    {
        // will need to add empty slots if there are empty characters
        for (int i = 0; i < characters.Length; i++)
        {
            int charId = characters[i].id;
            int slot1  = -1;
            int slot2  = -1;
            int slot3  = -1;
            int slot4  = -1;

            if (data.GetPreviousPage() == 3)
            {
                PlayerPartyData party = data.GetPartyToEdit();
                slot1 = party.slotOneCharacterId;
                slot2 = party.slotTwoCharacterId;
                slot3 = party.slotThreeCharacterId;
                slot4 = party.slotFourCharacterId;
                GameObject.Find("Backbutton").GetComponent <Button>().onClick.RemoveAllListeners();
                GameObject.Find("Backbutton").GetComponent <Button>().onClick.AddListener(delegate { new SceneLoader().PartiesMenu(); });
            }
            if (charId != slot1 && charId != slot2 && charId != slot3 && charId != slot4)
            {
                UICharacter character    = dataFormat.CreateUICharacter(characters[i], data);
                GameObject  newCharacter = GameObject.Find("CharacterObjectPool").GetComponent <SimpleObjectPool>().GetObject();
                newCharacter.transform.SetParent(GameObject.Find("CharacterContainer").transform);
                newCharacter.GetComponent <Button>().interactable = true;
                newCharacter.GetComponent <Button>().onClick.RemoveAllListeners();
                if (data.GetPreviousPage() == 3)
                {
                    newCharacter.GetComponent <Button>().onClick.AddListener(delegate { SelectPartyCharacter(charId); });
                }
                else
                {
                    newCharacter.GetComponent <Button>().onClick.AddListener(delegate { EditPartyCharacter(charId); });
                }

                SampleCharacter sampleCharacter = newCharacter.GetComponent <SampleCharacter>();
                sampleCharacter.Setup(character, this);
            }
        }
    }
    /// <summary>
    /// 필드에 배치된 캐릭터 수 업데이트.
    /// </summary>
    public void UpdateCurrentPlacedCharacters(UICharacter uiCharacter)
    {
        if (isSelling && isMoveFromBattleArea)
        {
            uiCharacterArea.SubCurrentPlacedCharacter();
            return;
        }

        if (IsNotChanged(uiCharacter))
        {
            return;
        }

        if (IsMoveFromBattleAreaToEmptyPrepareArea())
        {
            uiCharacterArea.SubCurrentPlacedCharacter();
        }
        else if (IsMoveFromPrepareAreaToEmptyBattleArea())
        {
            uiCharacterArea.AddCurrentPlacedCharacter();
        }
    }
Beispiel #29
0
        private void ShiftTextOver(On.Terraria.GameContent.UI.Elements.UICharacterListItem.orig_ctor orig, UICharacterListItem self, PlayerFileData data, int snapPointIndex)
        {
            orig(self, data, snapPointIndex);

            FieldInfo info = typeof(UICharacterListItem).GetField("_buttonLabel", BindingFlags.Instance | BindingFlags.NonPublic);
            UIText    text = info.GetValue(self) as UIText;

            text.Left.Set(280, 0);

            UICharacter character = (UICharacter)_playerPanel.GetValue(self);
            Player      player    = (Player)_player.GetValue(character);
            MedalPlayer mp3       = player.GetModPlayer <MedalPlayer>();

            if (mp3.player == player && mp3.medals.Count > 0) //expand only if medals are earned
            {
                self.Height.Set(152, 0);

                var elements = (List <UIElement>)Elements.GetValue(self);
                foreach (UIElement e in elements.Where(n => n.VAlign == 1))
                {
                    e.Top.Set(-56, 0);
                }
            }
        }
Beispiel #30
0
        private void OnRequestedCharacters(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseCharactersMessage response)
        {
            // Clear character list
            CacheCharacterSelectionManager.Clear();
            CacheCharacterList.HideAll();
            // Unable buttons
            buttonStart.gameObject.SetActive(false);
            buttonDelete.gameObject.SetActive(false);
            // Remove all models
            characterModelContainer.RemoveChildren();
            CharacterModelById.Clear();
            // Remove all cached data
            PlayerCharacterDataById.Clear();
            // Proceed response
            List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>();

            if (!responseCode.ShowUnhandledResponseMessageDialog(response.message))
            {
                // Success, so set selectable characters by response's data
                selectableCharacters = response.characters;
            }
            // Show list of created characters
            for (int i = selectableCharacters.Count - 1; i >= 0; --i)
            {
                PlayerCharacterData selectableCharacter = selectableCharacters[i];
                if (selectableCharacter == null ||
                    !GameInstance.PlayerCharacterEntities.ContainsKey(selectableCharacter.EntityId) ||
                    !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId))
                {
                    // If invalid entity id or data id, remove from selectable character list
                    selectableCharacters.RemoveAt(i);
                }
            }

            if (GameInstance.Singleton.maxCharacterSaves > 0 &&
                selectableCharacters.Count >= GameInstance.Singleton.maxCharacterSaves)
            {
                eventOnNotAbleToCreateCharacter.Invoke();
            }
            else
            {
                eventOnAbleToCreateCharacter.Invoke();
            }

            // Clear selected character data, will select first in list if available
            selectedPlayerCharacterData = null;

            // Generate list entry by saved characters
            if (selectableCharacters.Count > 0)
            {
                selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc());
                CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) =>
                {
                    // Cache player character to dictionary, we will use it later
                    PlayerCharacterDataById[characterData.Id] = characterData;
                    // Setup UIs
                    UICharacter uiCharacter = ui.GetComponent <UICharacter>();
                    uiCharacter.Data        = characterData;
                    // Select trigger when add first entry so deactivate all models is okay beacause first model will active
                    BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer);
                    if (characterModel != null)
                    {
                        CharacterModelById[characterData.Id] = characterModel;
                        characterModel.SetEquipWeapons(characterData.EquipWeapons);
                        characterModel.SetEquipItems(characterData.EquipItems);
                        characterModel.gameObject.SetActive(false);
                        CacheCharacterSelectionManager.Add(uiCharacter);
                    }
                });
            }
            else
            {
                eventOnNoCharacter.Invoke();
            }
        }
        private void OnRequestedCharacters(AckResponseCode responseCode, BaseAckMessage message)
        {
            ResponseCharactersMessage castedMessage = (ResponseCharactersMessage)message;

            CacheCharacterSelectionManager.Clear();
            // Unenabled buttons
            buttonStart.gameObject.SetActive(false);
            buttonDelete.gameObject.SetActive(false);
            // Remove all models
            characterModelContainer.RemoveChildren();
            CharacterModelById.Clear();
            // Remove all cached data
            PlayerCharacterDataById.Clear();

            List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>();

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedMessage.error)
                {
                case ResponseCharactersMessage.Error.NotLoggedin:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_NOT_LOGGED_IN.ToString());
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), errorMessage);
                break;

            case AckResponseCode.Timeout:
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UILocaleKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString()));
                break;

            default:
                selectableCharacters = castedMessage.characters;
                break;
            }

            // Show list of created characters
            for (int i = selectableCharacters.Count - 1; i >= 0; --i)
            {
                PlayerCharacterData selectableCharacter = selectableCharacters[i];
                if (selectableCharacter == null || !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId))
                {
                    selectableCharacters.RemoveAt(i);
                }
            }
            selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc());
            CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) =>
            {
                // Cache player character to dictionary, we will use it later
                PlayerCharacterDataById[characterData.Id] = characterData;
                UICharacter uiCharacter = ui.GetComponent <UICharacter>();
                uiCharacter.Data        = characterData;
                // Select trigger when add first entry so deactivate all models is okay beacause first model will active
                BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer);
                if (characterModel != null)
                {
                    CharacterModelById[characterData.Id] = characterModel;
                    characterModel.gameObject.SetActive(false);
                    characterModel.SetEquipWeapons(characterData.EquipWeapons);
                    characterModel.SetEquipItems(characterData.EquipItems);
                    CacheCharacterSelectionManager.Add(uiCharacter);
                }
            });
        }