/// <summary> /// 加载文件中的卡片 /// </summary> /// <param name="path"></param> /// <returns></returns> public async Task <CardDefine[]> loadCards(string path, PlatformCompability platform = 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 <CardDefine> cards = new List <CardDefine>(); for (int i = 1; i < table.Rows.Count; i++) { try { var datarow = table.Rows[i]; if (datarow.ReadCol("Ignore", false)) { continue; } var card = new GeneratedCardDefine(); card.id = datarow.ReadCol <int>("ID"); card.type = datarow.ReadCol <string>("Type"); card.setProp(nameof(ServantCardDefine.cost), datarow.ReadCol("Cost", 0)); card.setProp(nameof(ServantCardDefine.attack), datarow.ReadCol("Attack", 0)); card.setProp(nameof(ServantCardDefine.life), datarow.ReadCol("Life", 0)); card.setProp(nameof(ServantCardDefine.tags), datarow.ReadCol("Tags", "").Split(',')); card.setProp(nameof(ServantCardDefine.keywords), datarow.ReadCol("Keywords", "").Split(',')); card.setProp(nameof(ServantCardDefine.isToken), datarow.ReadCol("IsToken", false)); card.setProp(nameof(ServantCardDefine.isActive), datarow.ReadCol("IsActive", false)); cards.Add(card); } catch (Exception e) { Debug.LogWarning($"Error when loading {path} (row {i}): " + e); } } return(cards.ToArray()); }
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)); }
/// <summary> /// 加载文件中的卡片 /// </summary> /// <param name="path"></param> /// <returns></returns> public async Task <CardDefine[]> loadCards(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 <CardDefine> cards = new List <CardDefine>(); for (int i = 1; i < table.Rows.Count; i++) { var datarow = table.Rows[i]; if (datarow.ReadCol("Ignore", false)) { continue; } var card = new GeneratedCardDefine(); card.id = datarow.ReadCol <int>("ID"); card.type = datarow.ReadCol <string>("Type"); card.setProp(nameof(ServantCardDefine.cost), datarow.ReadCol <int>("Cost", 0)); 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)); cards.Add(card); } return(cards.ToArray()); }
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)); }