/// <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; } }
/// <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()); }
/// <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(); } }
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(); }
/// <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()); }
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); }
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(); }
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)); }
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); } }
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); }
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)); }