コード例 #1
0
        /// <summary>
        /// 设置Skill的UI
        /// </summary>
        /// <param name="skill"></param>
        /// <param name="card"></param>
        public void setSkill(Skill skill, TouhouCardEngine.Card card)
        {
            CardSkinData skin = getSkin(card);

            skill.Image.sprite = skin.image;
            skill.CostPropNumber.asText.text = card.getCost(game).ToString();
            if (card.isUsed(game))
            {
                // skill.IsUsedController = Skill.IsUsed.True;
                skill.isUsed = true;
            }
            else
            {
                // skill.IsUsedController = Skill.IsUsed.False;
                skill.isUsed = false;
            }
            if (card.isUsable(game, player, out _) && //技能是可用的
                !isSelectingTarget &&                 //没有在选择目标
                canControl                            //是自己的回合
                )
            {
                // skill.IsUsableController = Skill.IsUsable.True;
                skill.isUsable = true;
                skill.asButton.interactable = true;
            }
            else
            {
                // skill.IsUsableController = Skill.IsUsable.False;
                skill.isUsable = false;
                skill.asButton.interactable = false;
            }
        }
コード例 #2
0
        /// <summary>
        /// 加载文件中的皮肤
        /// </summary>
        /// <param name="path"></param>
        /// <param name="platform">当前平台</param>
        /// <param name="logger">提示用Logger</param>
        /// <returns></returns>
        public async Task <CardSkinData[]> loadSkins(string path, PlatformCompability platform = null, ILogger logger = null)
        {
            platform = platform ?? PlatformCompability.Current;

            DataSet dataset = platform.SupportExcelReading ?
                              await getManager <ResourceManager>().loadExcelAsDataSet(path, platform) :
                              await getManager <ResourceManager>().loadDataSet(path, platform);

            if (dataset.Tables.Count < 1)
            {
                throw new Exception("空数据集");
            }
            var table = dataset.Tables[0];
            List <CardSkinData> skins = new List <CardSkinData>();

            for (int i = 1; i < table.Rows.Count; i++)
            {
                try
                {
                    var datarow = table.Rows[i];

                    if (datarow.ReadCol("Ignore", false))
                    {
                        continue;
                    }

                    var skin = new CardSkinData()
                    {
                        id   = datarow.ReadCol <int>("ID"),
                        name = datarow.ReadCol <string>("Name"),
                        desc = datarow.ReadCol <string>("Desc", "")
                    };

                    logger?.log("加载卡片资源: " + skin.name);
                    string imagePath = datarow.ReadCol("Image", "");
                    try
                    {
                        Texture2D texture = await getManager <ResourceManager>().loadTexture(imagePath, Path.GetDirectoryName(path));

                        Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
                        skin.image = sprite;
                    }
                    catch (Exception e)
                    {
                        Debug.LogWarning("加载贴图 " + imagePath + " 失败:" + e);
                        skin.image = await getDefaultSprite();
                    }

                    skins.Add(skin);
                }
                catch (Exception e)
                {
                    Debug.LogWarning($"Error when loading {path} (row {i}): " + e);
                }
            }
            return(skins.ToArray());
        }
コード例 #3
0
        /// <summary>
        /// 设置Master的UI
        /// </summary>
        /// <param name="master"></param>
        /// <param name="card"></param>
        /// <param name="isSelectable"></param>
        public void setMaster(Master master, TouhouCardEngine.Card card, bool isSelectable = false)
        {
            CardSkinData skin = getSkin(card);

            master.Image.sprite = skin.image;
            master.LifePropNumber.asText.text = card.getCurrentLife(game).ToString();
            //if (card.getCurrentLife() == card.getLife())
            //    HpText.color = Color.white;
            //else
            //    HpText.color = Color.red;
            if (card.getAttack(game) > 0)
            {
                master.AttackPropNumber.asText.text = card.getAttack(game).ToString();
                master.AttackPropNumber.asText.display();
                master.AttackPropNumber.asText.display();
            }
            else
            {
                master.AttackPropNumber.asText.hide();
                master.AtkImage.hide();
            }
            if (card.getArmor(game) > 0)
            {
                master.ArmorPropNumber.asText.text = card.getArmor(game).ToString();
                master.ArmorPropNumber.display();
                master.ArmorImage.display();
            }
            else
            {
                master.ArmorPropNumber.asText.hide();
                master.ArmorImage.hide();
            }

            if (isSelectable)
            {
                // master.HighlightController = Master.Highlight.Yellow;
                master.onSelectableTrue.invokeBeforeAnim();
                master.onSelectableTrue.afterAnim.Invoke();
            }
            else
            {
                master.onSelectableFalse.invokeBeforeAnim();
                master.onSelectableFalse.afterAnim.Invoke();
            }
            if (card.getOwner() == player && game.currentPlayer == player && card.canAttack(game))
            {
                // master.HighlightController = Master.Highlight.Green;
                master.onCanAttackTrue.invokeBeforeAnim();
                master.onCanAttackTrue.afterAnim.Invoke();
            }
            else
            {
                // master.HighlightController = Master.Highlight.None;
                master.onCanAttackFalse.invokeBeforeAnim();
                master.onCanAttackFalse.afterAnim.Invoke();
            }
        }
コード例 #4
0
        public void setItem(Item item, TouhouCardEngine.Card card)
        {
            CardSkinData skin = getSkin(card);

            item.Image.sprite = skin.image;

            item.AttackPropNumber.asText.text     = card.getAttack(game).ToString();
            item.DurabilityPropNumber.asText.text = card.getCurrentLife(game).ToString();
        }
コード例 #5
0
        /// <summary>
        /// 加载文件中的皮肤
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public async Task <CardSkinData[]> loadSkins(string path, RuntimePlatform?platform = null)
        {
#if UNITY_ANDROID
            if (platform == null)
            {
                platform = RuntimePlatform.Android;
            }
#endif
            var dataset = platform != RuntimePlatform.Android ?
                          await getManager <ResourceManager>().loadExcelAsDataSet(path, platform) :
                          await getManager <ResourceManager>().loadDataSet(path, platform);

            if (dataset.Tables.Count < 1)
            {
                throw new Exception("空数据集");
            }
            var table = dataset.Tables[0];
            List <CardSkinData> skins = new List <CardSkinData>();

            for (int i = 1; i < table.Rows.Count; i++)
            {
                var datarow = table.Rows[i];

                if (datarow.ReadCol("Ignore", false))
                {
                    continue;
                }

                var skin = new CardSkinData()
                {
                    id   = datarow.ReadCol <int>("ID"),
                    name = datarow.ReadCol <string>("Name"),
                    desc = datarow.ReadCol <string>("Desc", "")
                };
                string imagePath = datarow.ReadCol("Image", "");
                try
                {
                    Texture2D texture = await getManager <ResourceManager>().loadTexture(imagePath);

                    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
                    skin.image = sprite;
                }
                catch (Exception e)
                {
                    skin.image = await getDefaultSprite();

                    Debug.LogWarning("加载贴图" + imagePath + "失败:" + e);
                }

                skins.Add(skin);
            }
            return(skins.ToArray());
        }
コード例 #6
0
 public void AddCardSkinTemp(CardSkinData skin)
 {
     if (skinDic.ContainsKey(skin.id))
     {
         Debug.LogError("已存在相同的皮肤" + skinDic[skin.id]);
         return;
     }
     if (tempSkinDic.ContainsKey(skin.id))
     {
         Debug.LogError("已存在相同的皮肤" + tempSkinDic[skin.id]);
         return;
     }
     tempSkinDic.Add(skin.id, skin);
 }
コード例 #7
0
        public void setItem(Item item, Card card)
        {
            if (card == null)
            {
                item.hide();
                return;
            }
            item.display();
            CardSkinData skin = getSkin(card);

            item.Image.sprite = skin.image;

            item.AttackPropNumber.asText.text     = card.getAttack(game).ToString();
            item.DurabilityPropNumber.asText.text = card.getCurrentLife(game).ToString();
        }
コード例 #8
0
        static async Task <KeyValuePair <CardDefine, CardSkinData> > readCardDefine(ResourceManager resource, CardDefine card, DataRow datarow, Sprite defaultSprite)
        {
            if (card == null)
            {
                card = new GeneratedCardDefine();
            }

            card.id   = datarow.ReadCol <int>("ID");
            card.type = datarow.ReadCol <string>("Type");
            card.setProp(nameof(ServantCardDefine.cost), datarow.ReadCol <int>("Cost"));
            card.setProp(nameof(ServantCardDefine.attack), datarow.ReadCol <int>("Attack", 0));
            card.setProp(nameof(ServantCardDefine.life), datarow.ReadCol <int>("Life", 0));
            card.setProp(nameof(ServantCardDefine.tags), datarow.ReadCol <string>("Tags", "").Split(','));
            card.setProp(nameof(ServantCardDefine.keywords), datarow.ReadCol <string>("Keywords", "").Split(','));
            card.setProp(nameof(ServantCardDefine.isToken), datarow.ReadCol <bool>("IsToken", false));
            CardSkinData skin;

            if (datarow.ReadCol("Ignore", false))
            {
                return(new KeyValuePair <CardDefine, CardSkinData>(null, null));
            }

            skin = new CardSkinData()
            {
                id = card.id
            };
            string imagePath = datarow.ReadCol("Image", "");

            try
            {
                Texture2D texture = await resource.loadTexture(imagePath);

                Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
                skin.image = sprite;
            }
            catch (Exception e)
            {
                skin.image = defaultSprite;
                Debug.LogWarning("加载贴图" + imagePath + "失败:" + e);
            }

            skin.name = datarow.ReadCol <string>("Name");
            skin.desc = datarow.ReadCol <string>("Desc", "");
            return(new KeyValuePair <CardDefine, CardSkinData>(card, skin));
        }
コード例 #9
0
 public bool tryGetSkin(int id, out CardSkinData skin)
 {
     if (tempSkinDic.ContainsKey(id))
     {
         skin = tempSkinDic[id];
         return(true);
     }
     else if (skinDic.ContainsKey(id))
     {
         skin = skinDic[id];
         return(true);
     }
     else
     {
         skin = null;
         return(false);
     }
 }
コード例 #10
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);
        }
コード例 #11
0
        static async Task <KeyValuePair <CardDefine, CardSkinData> > readCardDefine(ResourceManager resource, CardDefine card, Worksheet sheet, int row, Sprite defaultSprite)
        {
            if (card == null)
            {
                card = new GeneratedCardDefine();
            }
            int idIndex = findColIndex(sheet, "ID");

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

            card.type = sheet.Cells[row, typeIndex].StringValue;
            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);
            int          ignoreIndex = findColIndex(sheet, "Ignore");
            CardSkinData skin;

            if (sheet.Cells[row, ignoreIndex].Value is bool b && b)
            {
                return(new KeyValuePair <CardDefine, CardSkinData>(null, null));
            }

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

            try
            {
                Texture2D texture = await resource.loadTexture(imagePath);

                Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
                skin.image = sprite;
            }
            catch (Exception e)
            {
                skin.image = defaultSprite;
                Debug.LogWarning("加载贴图" + imagePath + "失败:" + e);
            }

            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(new KeyValuePair <CardDefine, CardSkinData>(card, skin));
        }