예제 #1
0
    static void LoadCards()
    {
        // フォルダー列挙
        var directory = System.IO.Directory.GetParent(Application.dataPath).ToString() + "/CardDatas";

        string[] subFolders = oulFile.EnumDirectory(directory);

        // 曲の分の配列確保
        //cardDatas = new CardData[subFolders.Length];
        cardDatas           = new Queue <CardData>();
        createOnlyCardDatas = new Queue <CardData>();

        int deckCardNo   = 0;
        int createCardNo = 0;

        for (int i = 0; i < subFolders.Length; i++)
        {
            var cardData = new CardData();

            var folderName = subFolders[i];

            // フォルダー名=保存
            //m_aCardDatas[i].folderName = folderName;

            var path = directory + "/" + folderName;

            // テキスト情報読み込み
            {
                //Debug.Log(path + "/info.txt");

                //oulFile.OutPutLog(Application.dataPath + "/log.txt", "テキストオープン\r\n");

                //oulFile.OutPutLog(path + "/log.txt", "キテルグマ");

                var loader = new TextLoader();
                loader.LoadText(path + "/info.txt");

                //oulFile.OutPutLog(Application.dataPath + "/log.txt", "テキストロード開始\r\n");

                // 読み飛ばし用
                string skip;

                // 生成専用かどうか分岐
                skip = loader.ReadString();
                Debug.Assert(skip == "[CREATE_ONLY]", "生成専用テキストがない");
                skip = loader.ReadString();
                if (skip == "ON")
                {
                    cardData.id = createCardNo++;
                    createOnlyCardDatas.Enqueue(cardData);
                }
                else
                {
                    cardData.id = deckCardNo++;
                    cardDatas.Enqueue(cardData);
                }

                // カードタイプ(ファイターor効果ファイターorイベント)
                skip = loader.ReadString();
                Debug.Assert(skip == "[TYPE]", "カードID" + i + "のテキストずれてるクマ");
                var cardType = (CardType)loader.ReadInt();
                switch (cardType)
                {
                case CardType.Fighter:
                    cardData.fighterCard = new FighterCard();
                    break;

                case CardType.AbilityFighter:
                    cardData.abilityFighterCard = new AbilityFighterCard();
                    break;

                case CardType.Joker:
                    cardData.jokerCard = new JokerCard();
                    break;

                case CardType.Support:
                    cardData.supportCard = new SupportCard();
                    break;

                case CardType.Connect:
                    cardData.connectCard = new ConnectCard();
                    break;

                case CardType.Intercept:
                    cardData.interceptCard = new InterceptCard();
                    break;

                default:
                    ExceptionMessage.MessageBox("text error.", "card type error." + folderName);
                    break;
                }

                cardData.cardType = cardType;

                // カード名
                skip = loader.ReadString();
                Debug.Assert(skip == "[NAME]", "カードID" + i + "のテキストずれてるクマ");
                cardData.cardName = loader.ReadString();

                // レア度
                skip = loader.ReadString();
                Debug.Assert(skip == "[RARE]", "カードID" + i + "のテキストずれてるクマ");
                cardData.rarelity = (Rarelity)loader.ReadInt();

                // 効果テキスト
                skip = loader.ReadString();
                Debug.Assert(skip == "[A_TEXT]", "カードID" + i + "のテキストずれてるクマ");
                while (true)
                {
                    var str = loader.ReadLine();
                    if (str == "")
                    {
                        continue;
                    }
                    if (str == "[F_TEXT]")
                    {
                        break;
                    }

                    cardData.abilityText += str + "\r\n";
                }

                // フレーバーテキスト
                skip = loader.ReadString();
                while (true)
                {
                    var str = loader.ReadLine();
                    if (str == "")
                    {
                        continue;
                    }
                    if (str.ToCharArray()[0] == '[')
                    {
                        break;
                    }

                    cardData.flavorText += str + "\r\n";
                }

                // パワー
                //skip = loader.ReadString();
                cardData.power = loader.ReadInt();

                // タイプによって分岐
                switch (cardType)
                {
                case CardType.Fighter:
                {
                    // 種族
                    skip = loader.ReadLine();
                    // 種族の個数
                    int numSyuzoku = loader.ReadInt();
                    cardData.fighterCard.syuzokus = new Syuzoku[numSyuzoku];
                    // 個数に応じて読み込み
                    for (int j = 0; j < numSyuzoku; j++)
                    {
                        cardData.fighterCard.syuzokus[j] = (Syuzoku)loader.ReadInt();
                    }
                }
                break;

                case CardType.AbilityFighter:
                {
                    var abilityFighterCard = cardData.abilityFighterCard;

                    // 種族
                    skip = loader.ReadLine();
                    // 種族の個数
                    int numSyuzoku = loader.ReadInt();
                    abilityFighterCard.syuzokus = new Syuzoku[numSyuzoku];
                    // 個数に応じて読み込み
                    for (int j = 0; j < numSyuzoku; j++)
                    {
                        abilityFighterCard.syuzokus[j] = (Syuzoku)loader.ReadInt();
                    }

                    // 効果読み込み
                    skip = loader.ReadString();
                    var numAbility = loader.ReadInt();
                    abilityFighterCard.abilityDatas = new CardAbilityData[numAbility];
                    for (int j = 0; j < numAbility; j++)
                    {
                        abilityFighterCard.abilityDatas[j] = new CardAbilityData();
                        LoadAbility(loader, out abilityFighterCard.abilityDatas[j]);
                    }
                }
                break;

                case CardType.Joker:
                    // 効果
                {
                    var jokerCard = cardData.GetJokerCard();

                    // [NEW] 今は種族考慮せず
                    //// 種族
                    //skip = loader.ReadLine();
                    //// 種族の個数
                    //int numSyuzoku = loader.ReadInt();
                    //jokerCard.syuzokus = new Syuzoku[numSyuzoku];
                    //// 個数に応じて読み込み
                    //for (int j = 0; j < numSyuzoku; j++)
                    //    abilityFighterCard.syuzokus[j] = (Syuzoku)loader.ReadInt();


                    // 効果
                    var numAbility = loader.ReadInt();
                    jokerCard.abilityDatas = new CardAbilityData[numAbility];
                    for (int j = 0; j < numAbility; j++)
                    {
                        jokerCard.abilityDatas[j] = new CardAbilityData();
                        LoadAbility(loader, out jokerCard.abilityDatas[j]);
                    }
                }
                break;

                case CardType.Support:
                case CardType.Connect:
                case CardType.Intercept:
                {
                    var eventCard = cardData.GetEventCard();

                    // 効果
                    var numAbility = loader.ReadInt();
                    eventCard.abilityDatas = new CardAbilityData[numAbility];
                    for (int j = 0; j < numAbility; j++)
                    {
                        eventCard.abilityDatas[j] = new CardAbilityData();
                        LoadAbility(loader, out eventCard.abilityDatas[j]);
                    }
                }
                break;
                }
            }

            // キャラ画像
            var texture = PngLoader.LoadPNG(path + "/image.png");
            if (texture)
            {
                cardData.image = /*texture;*/ Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
            }

            //Debug.Log("カードID" + i + "番の読み込みが完了");
        }
    }