コード例 #1
0
ファイル: Patchouli.cs プロジェクト: ufii4/TouhouHeartstone
        public static string[] getElements(CardDefine define)
        {
            List <string> list = new List <string>();

            if (define.hasTag(METAL))
            {
                list.Add(METAL);
            }
            if (define.hasTag(WOOD))
            {
                list.Add(WOOD);
            }
            if (define.hasTag(WATER))
            {
                list.Add(WATER);
            }
            if (define.hasTag(FIRE))
            {
                list.Add(FIRE);
            }
            if (define.hasTag(EARTH))
            {
                list.Add(EARTH);
            }
            return(list.ToArray());
        }
コード例 #2
0
        public override Card createCard(CardDefine define)
        {
            Card card = base.createCard(define);

            if (define is ServantCardDefine servant)
            {
                foreach (string keyword in servant.keywords)
                {
                    if (string.IsNullOrEmpty(keyword))
                    {
                        continue;
                    }
                    switch (keyword)
                    {
                    case Keyword.TAUNT:
                        card.setTaunt(true);
                        break;

                    case Keyword.CHARGE:
                        card.setCharge(true);
                        break;

                    default:
                        throw new UnknowKeywordException("未知关键词" + keyword);
                    }
                }
            }
            return(card);
        }
コード例 #3
0
        /// <summary>
        /// 创建并开始本地游戏
        /// </summary>
        public void startLocalGame()
        {
            game = new THHGame(_option, getManager <CardManager>().GetCardDefines())
            {
                answers  = new GameObject(nameof(AnswerManager)).AddComponent <AnswerManager>(),
                triggers = new GameObject(nameof(TriggerManager)).AddComponent <TriggerManager>(),
                time     = new GameObject(nameof(TimeManager)).AddComponent <TimeManager>(),
                logger   = new UnityLogger()
            };
            (game.answers as AnswerManager).game = game;

            //检查卡组合法性
            int[] deck = _deck;
            checkDeckValid(deck);

            CardDefine playerMaster = game.getCardDefine(deck[0]);

            CardDefine[] playerDeck  = deck.Skip(1).Select(id => game.getCardDefine(id)).ToArray();
            THHPlayer    localPlayer = game.createPlayer(1, "本地玩家", playerMaster as MasterCardDefine,
                                                         playerDeck);
            THHPlayer aiPlayer = game.createPlayer(2, "AI", playerMaster as MasterCardDefine,
                                                   deck.Skip(1).Select(id => game.getCardDefine(id)));

            displayGameUI(localPlayer);
            //AI玩家用AI
            new AI(game, aiPlayer);
            gameTask = game.run();
        }
コード例 #4
0
 private bool isStandardCard(CardDefine c)
 {
     if (c.id == 0)
     {
         return(false);
     }
     //if (!(c is SpellCardDefine))
     //{
     //    if (!(c is ServantCardDefine) && !(c is GeneratedCardDefine))
     //        return false;
     //}
     if (!(c is ServantCardDefine) && !(c is GeneratedCardDefine))
     {
         return(false);
     }
     if (c is ServantCardDefine servant)
     {
         if (servant.isToken)
         {
             return(false);
         }
     }
     else if (c is GeneratedCardDefine generated)
     {
         if (generated.type != CardDefineType.SERVANT)
         {
             return(false);
         }
         if (generated.getProp <bool>(nameof(ServantCardDefine.isToken)))
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #5
0
        public async Task <bool> createToken(THHGame game, CardDefine define, int position)
        {
            if (game == null)
            {
                throw new ArgumentNullException(nameof(game));
            }
            if (define == null)
            {
                throw new ArgumentNullException(nameof(define));
            }
            if (field.count >= field.maxCount)
            {
                return(false);
            }
            await game.triggers.doEvent(new CreateTokenEventArg()
            {
                player = this, define = define, position = position
            }, async arg =>
            {
                THHPlayer player = arg.player;
                define           = arg.define;
                position         = arg.position;
                if (field.count >= field.maxCount)
                {
                    return;
                }
                game.logger.log(player + "召唤" + define.GetType().Name + "位于" + position);
                arg.card = game.createCard(define);
                await tryPutIntoField(game, null, arg.card, position);
            });

            return(true);
        }
コード例 #6
0
        public static CardDefine[] GetCardDefines(Assembly[] assemblies, Dictionary <Workbook, string> workbooks, out CardSkinData[] skins)
        {
            List <CardDefine>   cardList = new List <CardDefine>(CardHelper.getCardDefines(assemblies));
            List <CardSkinData> skinList = new List <CardSkinData>();

            foreach (var pBook in workbooks)
            {
                Worksheet worksheet = pBook.Key.Worksheets[0];
                int       idIndex   = findColIndex(worksheet, "ID");
                foreach (var pRow in worksheet.Cells.Rows)
                {
                    if (pRow.Key != 0)
                    {
                        int        id   = numberToInt(pRow.Value.GetCell(idIndex).Value);
                        CardDefine card = cardList.FirstOrDefault(c => c.id == id);
                        card = readCardDefine(card, pBook.Value, worksheet, pRow.Key, out var skin);
                        if (card == null)
                        {
                            cardList.RemoveAll(c => c.id == id);
                            Debug.Log("忽略卡片" + id);
                        }
                        else
                        {
                            cardList.Add(card);
                            skinList.Add(skin);
                            Debug.Log("读取Excel卡片" + card + ",皮肤:" + skin);
                        }
                    }
                }
            }
            skins = skinList.ToArray();
            return(cardList.ToArray());
        }
コード例 #7
0
 public override void merge(CardDefine newVersion)
 {
     if (newVersion.type != type)
     {
         UberDebug.LogWarning(newVersion + "的类型与" + this + "不同,可能是一次非法的数据合并!");
     }
     cost = newVersion.getProp <int>(nameof(cost));
 }
コード例 #8
0
        public void update(CardDefine card, CardSkinData skin, int count)
        {
            this.card  = card;
            this.count = count;

            Image.sprite = skin.image;
            Text.text    = skin.name;
        }
コード例 #9
0
 public void update(CardDefine card, CardSkinData skin)
 {
     if (skin != null)
     {
         Image.sprite = skin.image;
     }
     AttackTextPropNumber.asText.text = card.getAttack().ToString();
     HpTextPropNumber.asText.text     = card.getLife().ToString();
 }
コード例 #10
0
ファイル: THHCard.cs プロジェクト: hbn2020/TouhouHeartstone
 public static bool hasTag(this CardDefine define, string tag)
 {
     string[] tags = define.getProp <string[]>(nameof(ServantCardDefine.tags));
     if (tags == null)
     {
         return(false);
     }
     return(tags.Contains(tag));
 }
コード例 #11
0
        public static int getAttack(this CardDefine card)
        {
            int result = card.getProp <int>(nameof(ServantCardDefine.attack));

            if (result < 0)
            {
                result = 0;
            }
            return(result);
        }
コード例 #12
0
        public void update(CardDefine card, CardSkinData skin)
        {
            CostText.text   = card.getCost().ToString();
            AttackText.text = card.getAttack().ToString();
            LifeText.text   = card.getLife().ToString();

            Image.sprite       = skin.image;
            NameText.text      = skin.name;
            DescText.text      = skin.desc;
            IsFaceupController = IsFaceup.True;
        }
コード例 #13
0
        public bool cardFilter(CardDefine cd, CardSkinData sd)
        {
            // 过滤费用
            if (filterCost != 0)
            {
                if (filterCost < 8)
                {
                    if (cd.getCost() != filterCost)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (cd.getCost() < 8)
                    {
                        return(false);
                    }
                }
            }

            // 过滤类型
            if (!string.IsNullOrEmpty(filterType))
            {
                if (!string.Equals(filterType, cd.type))
                {
                    return(false);
                }
            }

            // 过滤稀有度
            if (filterRare != 0)
            {
                // todo: 稀有度判断
            }

            // 过滤角色
            if (filterCharacter != 0)
            {
                // todo: 角色判断
            }

            // 过滤名字
            if (!string.IsNullOrEmpty(filterKeyword))
            {
                if (!sd.name.Contains(filterKeyword))
                {
                    return(false);
                }
            }


            return(true);
        }
コード例 #14
0
        static GenericMenu getMenu(SerializedProperty property)
        {
            int         id   = property.intValue;
            GenericMenu menu = new GenericMenu();

            menu.AddItem(new GUIContent("None"), id == 0, () =>
            {
                property.intValue = 0;
                property.serializedObject.ApplyModifiedProperties();
            });
            foreach (var group in getCardDefines().GroupBy(c => c.getCharacterID()))
            {
                CardDefine character = getCardDefines().FirstOrDefault(c => c.id == group.Key);
                foreach (var define in group.OrderBy(c => c.GetType().Name))
                {
                    string path = "";
                    if (character != null)
                    {
                        path = character.GetType().Name;
                    }
                    else
                    {
                        path = "Neutral";
                    }
                    int typeId = define.getCategory();
                    if (typeId == CardCategory.SERVANT)
                    {
                        path += "/Servant";
                    }
                    else if (typeId == CardCategory.SKILL)
                    {
                        path += "/Skill";
                    }
                    else if (typeId == CardCategory.SPELL)
                    {
                        path += "/Spell";
                    }
                    else if (typeId == CardCategory.ITEM)
                    {
                        path += "/Item";
                    }
                    path += "/" + define.GetType().Name;
                    menu.AddItem(new GUIContent(path), define.id == id, () =>
                    {
                        property.intValue = define.id;
                        property.serializedObject.ApplyModifiedProperties();
                    });
                }
            }
            return(menu);
        }
コード例 #15
0
 public override void merge(CardDefine newVersion)
 {
     if (newVersion.type != type)
     {
         UberDebug.LogWarning(newVersion + "的类型与" + this + "不同,可能是一次非法的数据合并!");
     }
     if (newVersion is GeneratedCardDefine generated)
     {
         if (generated.hasProp(nameof(cost)))
         {
             cost = generated.getProp <int>(nameof(cost));
         }
     }
 }
コード例 #16
0
 public override void merge(CardDefine newVersion)
 {
     if (newVersion.type != type)
     {
         UberDebug.LogWarning(newVersion + "的类型与" + this + "不同,可能是一次非法的数据合并!");
     }
     cost        = newVersion.getProp <int>(nameof(cost));
     attack      = newVersion.getProp <int>(nameof(attack));
     life        = newVersion.getProp <int>(nameof(life));
     spellDamage = newVersion.getProp <int>(nameof(spellDamage));
     isToken     = newVersion.getProp <bool>(nameof(isToken));
     tags        = newVersion.getProp <string[]>(nameof(tags));
     keywords    = newVersion.getProp <string[]>(nameof(keywords));
 }
コード例 #17
0
        public override Card createCard(CardDefine define)
        {
            Card card = base.createCard(define);

            if (define is MasterCardDefine master)
            {
                card.setLife(master.life);
            }
            else if (define is ServantCardDefine servant)
            {
                card.setCost(servant.cost);
                card.setAttack(servant.attack);
                card.setLife(servant.life);
                card.setSpellDamage(servant.spellDamage);
                foreach (string keyword in servant.keywords)
                {
                    if (string.IsNullOrEmpty(keyword))
                    {
                        continue;
                    }
                    card.setProp(keyword, true);
                }
                card.setProp(nameof(ServantCardDefine.keywords), servant.keywords);
                card.setProp(nameof(ServantCardDefine.tags), servant.tags);
            }
            else if (define is SpellCardDefine spell)
            {
                card.setCost(spell.cost);
                foreach (var keyword in spell.keywords)
                {
                    if (string.IsNullOrEmpty(keyword))
                    {
                        continue;
                    }
                    card.setProp(keyword, true);
                }
            }
            else if (define is SkillCardDefine skill)
            {
                card.setCost(skill.cost);
            }
            else if (define is ItemCardDefine item)
            {
                card.setCost(item.cost);
                card.setAttack(item.attack);
                card.setLife(item.life);
            }
            return(card);
        }
コード例 #18
0
 void onDragItem(CardDefine card, Vector2 position)
 {
     DragCard.display();
     DragCard.rectTransform.position = position;
     if (DeckViewScroll.GetComponent <RectTransform>().rect.Contains(DeckViewScroll.GetComponent <RectTransform>().InverseTransformPoint(position)))
     {
         DragCard.BuildDeckListItem.display();
         DragCard.Card.hide();
     }
     else
     {
         DragCard.Card.display();
         DragCard.BuildDeckListItem.hide();
     }
     DragCard.BuildDeckListItem.update(card, parent.game.cards.GetCardSkin(card.id), 1);
     DragCard.Card.update(card, parent.game.cards.GetCardSkin(card.id));
 }
コード例 #19
0
        bool isExcelContainCard(Worksheet sheet, CardDefine card)
        {
            int idIndex    = findColIndex(sheet, "ID");
            int classIndex = findColIndex(sheet, "Class");

            foreach (var pRow in sheet.Cells.Rows)
            {
                if (numberToInt(pRow.Value.GetCell(idIndex).Value) == card.id)
                {
                    return(true);
                }
                else if (pRow.Value.GetCell(classIndex).StringValue == card.GetType().Name)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #20
0
        void saveCardToXml(CardDefine card, XmlDocument xml)
        {
            xml["Card"]["ID"].InnerText = card.id.ToString();
            if (card is ServantCardDefine)
            {
                xml["Card"]["Type"].InnerText = "Servant";
            }
            else if (card is MasterCardDefine)
            {
                xml["Card"]["Type"].InnerText = "Master";
            }
            else if (card is SkillCardDefine)
            {
                xml["Card"]["Type"].InnerText = "Skill";
            }
            xml["Card"]["Cost"].InnerText   = card.getProp <int>("cost").ToString();
            xml["Card"]["Attack"].InnerText = card.getProp <int>("attack").ToString();
            xml["Card"]["Life"].InnerText   = card.getProp <int>("life").ToString();
            if (card.getProp <string[]>("tags") is string[] tags)
            {
                xml["Card"]["Tags"].InnerText = string.Join(",", tags);
            }
            else
            {
                xml["Card"]["Tags"].InnerText = null;
            }
            if (card.getProp <string[]>("keywords") is string[] keywords)
            {
                xml["Card"]["Keywords"].InnerText = string.Join(",", keywords);
            }
            else
            {
                xml["Card"]["Keywords"].InnerText = null;
            }
            if (_manager != null)
            {
                var skin = _manager.getSkin(card.id);
                xml["Card"]["Skin"]["Image"].InnerText = skin == null ? null : skin.image != null ? skin.image.name + ".png" : null;
                xml["Card"]["Skin"]["Name"].InnerText  = skin == null?card.GetType().Name : skin.name;

                xml["Card"]["Skin"]["Desc"].InnerText = skin == null ? null : skin.desc;
            }
        }
コード例 #21
0
        public override Card createCard(CardDefine define)
        {
            Card card = base.createCard(define);

            if (define is ServantCardDefine servant)
            {
                foreach (string keyword in servant.keywords)
                {
                    if (string.IsNullOrEmpty(keyword))
                    {
                        continue;
                    }
                    switch (keyword)
                    {
                    case Keyword.TAUNT:
                        card.setTaunt(true);
                        break;

                    case Keyword.CHARGE:
                        card.setCharge(true);
                        break;

                    case Keyword.RUSH:
                        card.setRush(true);
                        break;

                    case Keyword.SHIELD:
                        card.setShield(true);
                        break;

                    case Keyword.STEALTH:
                        card.setStealth(true);
                        break;

                    default:
                        throw new UnknowKeywordException("未知关键词" + keyword);
                    }
                }
                card.setProp(nameof(ServantCardDefine.tags), servant.tags);
            }
            return(card);
        }
コード例 #22
0
        public static async Task <KeyValuePair <CardDefine[], CardSkinData[]> > GetCardDefines(ResourceManager resource, Assembly[] assemblies, Dictionary <Workbook, string> workbooks, Sprite defaultSprite)
        {
            List <CardDefine>   cardList = new List <CardDefine>(CardHelper.getCardDefines(assemblies));
            List <CardSkinData> skinList = new List <CardSkinData>();

            foreach (var pBook in workbooks)
            {
                Worksheet worksheet = pBook.Key.Worksheets[0];
                int       idIndex   = findColIndex(worksheet, "ID");
                foreach (var pRow in worksheet.Cells.Rows)
                {
                    if (pRow.Key != 0)
                    {
                        int id = numberToInt(pRow.Value.GetCell(idIndex).Value);
                        if (id < 1)
                        {
                            continue;
                        }
                        CardDefine   card = cardList.FirstOrDefault(c => c.id == id);
                        CardSkinData skin;
                        var          pair = await readCardDefine(resource, card, worksheet, pRow.Key, defaultSprite);

                        card = pair.Key;
                        skin = pair.Value;
                        if (card == null)
                        {
                            cardList.RemoveAll(c => c.id == id);
                            Debug.Log("忽略卡片" + id);
                        }
                        else
                        {
                            cardList.Add(card);
                            skinList.Add(skin);
                            Debug.Log("读取Excel卡片" + card + ",皮肤:" + skin);
                        }
                    }
                }
            }
            return(new KeyValuePair <CardDefine[], CardSkinData[]>(cardList.ToArray(), skinList.ToArray()));
        }
コード例 #23
0
 public override void merge(CardDefine newVersion)
 {
     if (newVersion.type != type)
     {
         UberDebug.LogWarning(newVersion + "的类型与" + this + "不同,可能是一次非法的数据合并!");
     }
     if (newVersion is GeneratedCardDefine generated)
     {
         if (generated.hasProp(nameof(cost)))
         {
             cost = newVersion.getProp <int>(nameof(cost));
         }
         if (generated.hasProp(nameof(attack)))
         {
             attack = newVersion.getProp <int>(nameof(attack));
         }
         if (generated.hasProp(nameof(life)))
         {
             life = newVersion.getProp <int>(nameof(life));
         }
         if (generated.hasProp(nameof(spellDamage)))
         {
             spellDamage = newVersion.getProp <int>(nameof(spellDamage));
         }
         if (generated.hasProp(nameof(isToken)))
         {
             isToken = newVersion.getProp <bool>(nameof(isToken));
         }
         if (generated.hasProp(nameof(tags)))
         {
             tags = newVersion.getProp <string[]>(nameof(tags));
         }
         if (generated.hasProp(nameof(keywords)))
         {
             keywords = newVersion.getProp <string[]>(nameof(keywords));
         }
     }
 }
コード例 #24
0
        public static async Task <KeyValuePair <CardDefine[], CardSkinData[]> > GetCardDefines(ResourceManager resource, Assembly[] assemblies, Dictionary <DataSet, string> tables, Sprite defaultSprite)
        {
            List <CardDefine>   cardList = new List <CardDefine>(CardHelper.getCardDefines(assemblies));
            List <CardSkinData> skinList = new List <CardSkinData>();

            foreach (var pTable in tables)
            {
                DataTable worksheet = pTable.Key.Tables[0];
                for (int i = 1; i < worksheet.Rows.Count; i++)
                {
                    var row = worksheet.Rows[i];

                    int id = row.ReadCol <int>("ID");
                    if (id < 1)
                    {
                        continue;
                    }
                    CardDefine   card = cardList.FirstOrDefault(c => c.id == id);
                    CardSkinData skin;
                    var          pair = await readCardDefine(resource, card, row, defaultSprite);

                    card = pair.Key;
                    skin = pair.Value;
                    if (card == null)
                    {
                        cardList.RemoveAll(c => c.id == id);
                        Debug.Log("忽略卡片" + id);
                    }
                    else
                    {
                        cardList.Add(card);
                        skinList.Add(skin);
                        Debug.Log("读取Excel卡片" + card + ",皮肤:" + skin);
                    }
                }
            }
            return(new KeyValuePair <CardDefine[], CardSkinData[]>(cardList.ToArray(), skinList.ToArray()));
        }
コード例 #25
0
 public override void merge(CardDefine newVersion)
 {
     if (newVersion.type != type)
     {
         UberDebug.LogWarning(newVersion + "的类型与" + this + "不同,可能是一次非法的数据合并!");
     }
     if (newVersion is MasterCardDefine master)
     {
         life    = master.life;
         skillID = master.skillID;
     }
     else if (newVersion is GeneratedCardDefine generated)
     {
         if (generated.hasProp(nameof(life)))
         {
             life = generated.getProp <int>(nameof(life));
         }
         if (generated.hasProp(nameof(skillID)))
         {
             skillID = generated.getProp <int>(nameof(skillID));
         }
     }
 }
コード例 #26
0
        static CardDefine readCardDefine(CardDefine card, string dir, Worksheet sheet, int row, out CardSkinData skin)
        {
            if (card == null)
            {
                card = new GeneratedCardDefine();
            }
            int idIndex = findColIndex(sheet, "ID");

            card.id = numberToInt(sheet.Cells[row, idIndex].Value);
            int typeIndex = findColIndex(sheet, "Type");

            if (sheet.Cells[row, typeIndex].StringValue == "Servant")
            {
                card.type = CardDefineType.servant;
            }
            else if (sheet.Cells[row, typeIndex].StringValue == "Spell")
            {
                card.type = CardDefineType.spell;
            }
            else if (sheet.Cells[row, typeIndex].StringValue == "Master")
            {
                card.type = CardDefineType.master;
            }
            else if (sheet.Cells[row, typeIndex].StringValue == "Skill")
            {
                card.type = CardDefineType.skill;
            }
            int costIndex = findColIndex(sheet, "Cost");

            card.setProp(nameof(ServantCardDefine.cost), numberToInt(sheet.Cells[row, costIndex].Value));
            int attackIndex = findColIndex(sheet, "Attack");

            card.setProp(nameof(ServantCardDefine.attack), numberToInt(sheet.Cells[row, attackIndex].Value));
            int lifeIndex = findColIndex(sheet, "Life");

            card.setProp(nameof(ServantCardDefine.life), numberToInt(sheet.Cells[row, lifeIndex].Value));
            int tagsIndex = findColIndex(sheet, "Tags");

            card.setProp(nameof(ServantCardDefine.tags), sheet.Cells[row, tagsIndex].StringValue.Split(','));
            int keywordsIndex = findColIndex(sheet, "Keywords");

            card.setProp(nameof(ServantCardDefine.keywords), sheet.Cells[row, keywordsIndex].StringValue.Split(','));
            int isTokenIndex = findColIndex(sheet, "IsToken");

            card.setProp(nameof(ServantCardDefine.isToken), sheet.Cells[row, isTokenIndex].Value);

            skin = new CardSkinData()
            {
                id = card.id
            };
            int    imageIndex = findColIndex(sheet, "Image");
            string imagePath  = sheet.Cells[row, imageIndex].StringValue;

            if (File.Exists(dir + "/" + imagePath))
            {
                using (FileStream stream = new FileStream(dir + "/" + imagePath, FileMode.Open))
                {
                    Texture2D texture = new Texture2D(512, 512);
                    byte[]    bytes   = new byte[stream.Length];
                    stream.Read(bytes, 0, (int)stream.Length);
                    texture.LoadImage(bytes);
                    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, 512, 512), new Vector2(.5f, .5f), 100);
                    skin.image = sprite;
                }
            }
            else if (File.Exists(Application.streamingAssetsPath + "/" + imagePath))
            {
                using (FileStream stream = new FileStream(Application.streamingAssetsPath + "/" + imagePath, FileMode.Open))
                {
                    Texture2D texture = new Texture2D(512, 512);
                    byte[]    bytes   = new byte[stream.Length];
                    stream.Read(bytes, 0, (int)stream.Length);
                    texture.LoadImage(bytes);
                    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
                    skin.image = sprite;
                }
            }
            else if (File.Exists(Application.streamingAssetsPath + "/" + "Textures/砰砰博士.png"))
            {
                using (FileStream stream = new FileStream(Application.streamingAssetsPath + "/" + "Textures/砰砰博士.png", FileMode.Open))
                {
                    Texture2D texture = new Texture2D(512, 512);
                    byte[]    bytes   = new byte[stream.Length];
                    stream.Read(bytes, 0, (int)stream.Length);
                    texture.LoadImage(bytes);
                    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, 512, 512), new Vector2(.5f, .5f), 100);
                    skin.image = sprite;
                }
            }

            int nameIndex = findColIndex(sheet, "Name");

            skin.name = sheet.Cells[row, nameIndex].StringValue;
            int descIndex = findColIndex(sheet, "Desc");

            skin.desc = sheet.Cells[row, descIndex].StringValue;
            return(card);
        }
コード例 #27
0
 public static int getLife(this CardDefine card)
 {
     return(card.getProp <int>(nameof(ServantCardDefine.life)));
 }
コード例 #28
0
 public static int getCost(this CardDefine card)
 {
     return(card.getProp <int>(nameof(ServantCardDefine.cost)));
 }
コード例 #29
0
        void saveCardToExcel(CardDefine card, Worksheet sheet)
        {
            int idIndex    = findColIndex(sheet, "ID");
            int classIndex = findColIndex(sheet, "Class");
            int cardRow    = sheet.Cells.Rows.Count;//如果表里没有这张卡,那么就新增

            foreach (var pRow in sheet.Cells.Rows)
            {
                if (numberToInt(pRow.Value.GetCell(idIndex).Value) == card.id)
                {
                    cardRow = pRow.Key;//如果有相同ID的卡,复写
                    sheet.Cells[cardRow, classIndex] = new Cell(card.GetType().Name);
                }
                else if (pRow.Value.GetCell(classIndex).StringValue == card.GetType().Name)
                {
                    cardRow = pRow.Key;//如果有相同类型的卡,复写
                    sheet.Cells[cardRow, idIndex] = new Cell(card.id);
                }
            }

            sheet.Cells[cardRow, idIndex] = new Cell(card.id);
            int typeIndex = findColIndex(sheet, "Type");

            if (card is ServantCardDefine)
            {
                sheet.Cells[cardRow, typeIndex] = new Cell("Servant");
            }
            else if (card is MasterCardDefine)
            {
                sheet.Cells[cardRow, typeIndex] = new Cell("Master");
            }
            else if (card is SkillCardDefine)
            {
                sheet.Cells[cardRow, typeIndex] = new Cell("Skill");
            }
            else if (card is SpellCardDefine)
            {
                sheet.Cells[cardRow, typeIndex] = new Cell("Spell");
            }
            else if (card is ItemCardDefine)
            {
                sheet.Cells[cardRow, typeIndex] = new Cell("Item");
            }
            int costIndex = findColIndex(sheet, "Cost");

            sheet.Cells[cardRow, costIndex] = new Cell(card.getProp <int>("cost"));
            int attackIndex = findColIndex(sheet, "Attack");

            sheet.Cells[cardRow, attackIndex] = new Cell(card.getProp <int>("attack"));
            int lifeIndex = findColIndex(sheet, "Life");

            sheet.Cells[cardRow, lifeIndex] = new Cell(card.getProp <int>("life"));
            int tagsIndex = findColIndex(sheet, "Tags");

            if (card.getProp <string[]>("tags") is string[] tags)
            {
                sheet.Cells[cardRow, tagsIndex] = new Cell(string.Join(",", tags));
            }
            else
            {
                sheet.Cells[cardRow, tagsIndex] = new Cell(null);
            }
            int keywordsIndex = findColIndex(sheet, "Keywords");

            if (card.getProp <string[]>("keywords") is string[] keywords)
            {
                sheet.Cells[cardRow, keywordsIndex] = new Cell(string.Join(",", keywords));
            }
            else
            {
                sheet.Cells[cardRow, keywordsIndex] = new Cell(null);
            }
            if (_manager != null)
            {
                var skin       = _manager.getSkin(card.id);
                int imageIndex = findColIndex(sheet, "Image");
                if (skin == null)
                {
                    sheet.Cells[cardRow, imageIndex] = new Cell(sheet.Cells[cardRow, imageIndex].StringValue);
                }
                else
                {
                    if (skin.image != null && !string.IsNullOrEmpty(skin.image.name))
                    {
                        string path = AssetDatabase.GetAssetPath(skin.image);
                        if (path.Contains("Resources/"))
                        {
                            path = path.removeHead("Resources/").removeRear(".");
                            sheet.Cells[cardRow, imageIndex] = new Cell("res:" + path);
                        }
                        else
                        {
                            sheet.Cells[cardRow, imageIndex] = new Cell(skin.image.name + ".png");
                        }
                    }
                    else
                    {
                        sheet.Cells[cardRow, imageIndex] = new Cell(sheet.Cells[cardRow, imageIndex].StringValue);
                    }
                }
                int nameIndex = findColIndex(sheet, "Name");
                sheet.Cells[cardRow, nameIndex] = new Cell(skin == null ? (!string.IsNullOrEmpty(sheet.Cells[cardRow, nameIndex].StringValue) ? sheet.Cells[cardRow, nameIndex].StringValue : card.GetType().Name) : skin.name);
                int descIndex = findColIndex(sheet, "Desc");
                sheet.Cells[cardRow, descIndex] = new Cell(skin == null ? sheet.Cells[cardRow, descIndex].StringValue : skin.desc);
            }
        }
コード例 #30
0
ファイル: Patchouli.cs プロジェクト: ufii4/TouhouHeartstone
        public static CardDefine[] getMixCards(THHGame game, CardDefine a, CardDefine b)
        {
            var elements = getElements(a).Concat(getElements(b)).Distinct().ToArray();

            return(getMixCards(game).Where(c => elements.isSubset(getElements(c)) && c.id != a.id && c.id != b.id).ToArray());
        }