public ActionResult CropInfoDelete(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } CropInformation cropInformation = db.CropInformations.Find(id); if (cropInformation == null) { return(HttpNotFound()); } return(View(cropInformation)); }
public void FinishPreview() { if (preview) { Destroy(preview.gameObject); } preview = null; currentInfo = null; WindowsManager.HideAll(false); IsPreviewing = false; #if UNITY_ANDROID ZetanUtility.SetActive(CancelArea, false); #endif }
private void OnEnable() { lineHeight = EditorGUIUtility.singleLineHeight; lineHeightSpace = lineHeight + 5; crop = target as CropInformation; _ID = serializedObject.FindProperty("_ID"); _name = serializedObject.FindProperty("_name"); cropType = serializedObject.FindProperty("cropType"); plantSeason = serializedObject.FindProperty("plantSeason"); stages = serializedObject.FindProperty("stages"); HandlingStageList(); }
public void ShowDescription(SeedItem seed) { if (!seed) { HideDescription(); return; } descriptionWindow.alpha = 1; nameText.text = seed.Crop.Name; int amount = BackpackManager.Instance.GetAmount(seed); icon.SetItem(seed, amount > 0 ? amount.ToString() : null); StringBuilder str = new StringBuilder("占用田地空间:"); str.Append(seed.Crop.Size); str.Append("\n"); str.Append(CropInformation.CropSeasonString(seed.Crop.PlantSeason)); str.Append("\n"); str.Append("生长阶段:"); str.Append("\n"); for (int i = 0; i < seed.Crop.Stages.Count; i++) { CropStage stage = seed.Crop.Stages[i]; str.Append(ZetanUtility.ColorText(CropStage.CropStageName(stage.Stage), Color.yellow)); str.Append("持续"); str.Append(ZetanUtility.ColorText(stage.LastingDays.ToString(), Color.green)); str.Append("天"); if (stage.HarvestAble) { if (stage.RepeatTimes > 0) { str.Append(",可收割"); str.Append(ZetanUtility.ColorText(stage.RepeatTimes.ToString(), Color.green)); str.Append("次"); } else if (stage.RepeatTimes < 0) { str.Append(",可无限收割"); } } if (i != seed.Crop.Stages.Count - 1) { str.Append("\n"); } } description.text = str.ToString(); }
public CropData PlantCrop(CropInformation crop) { if (!crop) { return(null); } if (spaceOccup < crop.Size) { return(null); } CropData cropData = new CropData(crop, this); Crops.Add(cropData); return(cropData); }
private void OnEnable() { lineHeight = EditorGUIUtility.singleLineHeight; lineHeightSpace = lineHeight + 2; crop = target as CropInformation; _ID = serializedObject.FindProperty("_ID"); _name = serializedObject.FindProperty("_name"); cropType = serializedObject.FindProperty("cropType"); temperature = serializedObject.FindProperty("temperature"); humidity = serializedObject.FindProperty("humidity"); size = serializedObject.FindProperty("size"); prefab = serializedObject.FindProperty("prefab"); previewPrefab = serializedObject.FindProperty("previewPrefab"); plantSeason = serializedObject.FindProperty("plantSeason"); stages = serializedObject.FindProperty("stages"); HandlingStageList(); }
public void CreatPreview(CropInformation info) { if (!PlayerManager.Instance.CheckIsNormalWithAlert()) { return; } if (info == null) { return; } HideDescription(); HideBuiltList(); currentInfo = info; preview = Instantiate(currentInfo.PreviewPrefab); WindowsManager.HideAll(true); IsPreviewing = true; #if UNITY_ANDROID ZetanUtility.SetActive(CancelArea, true); #endif ShowAndMovePreview(); }
public void PlantCrop(CropInformation crop, Vector3 position) { if (!crop) { return; } if (FData.spaceOccup < crop.Size) { MessageManager.Instance.New("空间不足"); return; } CropData cropData = FData.PlantCrop(crop); if (cropData) { Crop entity = ObjectPool.Get(crop.Prefab, transform); entity.Init(cropData, this, position); NotifyCenter.PostNotify(FieldManager.FieldCropPlanted, this, cropData); } }
public void Plant(CropInformation info, Field parent = null) { Clear(); Info = info; HarvestAble = false; Parent = parent; totalGrowthDays = 1; TimeManager.Instance.OnDayPassed += UpdateDay; GameManager.Crops.TryGetValue(Info, out var crops); if (crops != null) { RuntimeID = Info.ID + "I" + crops.Count.ToString().PadLeft(4); crops.Add(this); } else { RuntimeID = Info.ID + "I0000"; GameManager.Crops.Add(Info, new List <Crop>() { this }); } }
private static void TestParsing(string value) { var cropInformation = CropInformation.Parse(value); Assert.AreEqual(value, cropInformation.ToString()); }
public override void CreateDefaultConfiguration() { Crops = new Dictionary <int, string> { { 745, "2 1 3 3 3/spring/36/400/4/0/true 1 1 5 .02/false/false" }, { 792, "2 2 3 3 3/spring/41/378/-1/0/true 2 4 8 .2/false/false" }, { 793, "3 3 3 3 3/summer/42/380/-1/0/true 2 4 8 .2/false/false" }, { 794, "4 4 4 4 4/fall/43/380/-1/0/true 2 4 8 .2/false/false" }, { 795, "2 2 2 2 2/spring summer/63/382/-1/0/true 2 4 8 .2/false/false" }, { 796, "5 5 5 5 5/winter/44/386/-1/0/true 2 4 8 .2/false/false" }, { 811, "2 3 3 4/spring/45/809/-1/0/true 1 2 8 .2/false/false" }, { 814, "1 1 1 1/summer/47/813/-1/0/true 1 3 8 .2/false/false" }, { 816, "2 2 2 2 2/fall/48/815/10/0/true 1 3 8 .2/false/false" }, { 821, "3 3 3 3 2/fall/49/820/14/0/true 1 3 8 .2/false/false" }, { 823, "2 2 2 2 3/spring/50/822/11/0/true 1 3 8 .2/false/false" }, { 831, "2 2 3 3 3/fall/56/826/13/0/true 2 3 8 .2/false/false" }, { 833, "1 1 2 2 2/spring/52/832/8/0/true 2 3 8 .2/false/false" }, { 835, "2 2 2 2 3/spring/53/834/11/0/true 1 2 8 .2/false/false" }, { 837, "1 1 1 1 2/summer fall/54/836/6/0/true 1 3 8 .2/false/false" }, { 838, "1 1 1 1 1/spring summer/62/839/10/0/true 10 25 8 .2/false/false" }, { 845, "1 1 2 2 2/fall/59/844/-1/0/true 1 3 8 .5/false/false" }, { 846, "1 1 1 1 1/winter/64/245/-1/0/true 1 3 8 .2/false/false" }, { 847, "1 1 1 1 1/winter/65/246/-1/0/true 1 3 8 .2/false/false" }, { 848, "1 1 1 1 1/winter/57/247/-1/0/true 1 3 8 .2/false/false" }, { 849, "1 1 1 1 1/winter/58/419/-1/0/true 1 3 8 .2/false/false" }, { 858, "1 1 1 2 2/summer/55/830/-1/0/true 1 2 8 .6/false/false" }, { 859, "2 2 2 2/fall/51/824/-1/0/true 1 3 8 .2/false/false" }, { 860, "1 1 1 1 2/fall/40/811/-1/0/true 1 3 8 .2/false/false" }, { 863, "1 1 2 2/spring/60/861/-1/0/true 1 2 8 .2/false/false" }, { 866, "1 2 2 2/summer/61/864/-1/0/true 1 2 8 .2/false/false" }, { 867, "1 1 1 1 1/spring summer/46/802/5/0/true 2 3 8 .2/false/false" }, { 871, "2 2 2 2 2/summer/67/870/-1/0/true 2 3 8 .2/false/false" }, { 872, "1 1 2 2 2/spring/66/869/8/0/true 1 3 8 .2/false/false" }, { 874, "1 1 2 2/fall/68/873/6/0/true 1 3 8 .2/false/false" }, }.Select(kv => CropInformation.Parse(kv.Value, kv.Key)).ToList(); Crops.ForEach(c => { if (c.TextureIndex >= 40) { c.ResourceIndex = c.TextureIndex - 40; } }); Items = new Dictionary <int, string> { { 792, "Copper Seeds/20/-300/Seeds -74/Plant these to grow copper ore.Grows only in spring. Ore in 13 days." }, { 793, "Iron Seeds/30/-300/Seeds -74/Plant these to grow iron ore. Grows only in summer. Ore in 15 days." }, { 794, "Gold Seeds/40/-300/Seeds -74/Plant these to grow gold ore. Grows only in fall. Ore in 20 days." }, { 795, "Coal Seeds/10/-300/Seeds -74/Plant these to grow coal ore. Grows in spring and summer. Ore in 10 days." }, { 796, "Iridium Seeds/100/-300/Seeds -74/Plant these to grow iridium ore. Grows only inside the greenhouse. Ore in 25 days." }, { 797, "Copper Sapling/500/-300/Basic -74/Takes 28 days to produce a copper tree. Bears ore in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 798, "Iron Sapling/600/-300/Basic -74/Takes 28 days to produce a iron tree. Bears ore in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 799, "Gold Sapling/800/-300/Basic -74/Takes 28 days to produce a gold tree. Bears ore in the fall. Only grows if the 8 surrounding \"tiles\" are empty." }, { 800, "Coal Sapling/500/-300/Basic -74/Takes 28 days to produce a coal tree. Bears ore in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 801, "Iridium Sapling/500/-300/Basic -74/Takes 28 days to produce a iridium tree. Only grows if the 8 surrounding \"tiles\" are empty." }, { 802, "Beef/80/-300/Seeds -74/Not a good idea to eat it raw. Plant it or cook it!(problably in hot weather)." }, { 803, "Bacon/70/10/Basic -5/BACON! Maybe it's magical, maybe you should cook it." }, { 804, "Cooked Beef/150/64/Cooking -7/No vegans allowed./food/0 0 0 0 0 0 0 40 0 1 0/300" }, { 805, "Cooked Bacon/200/64/Cooking -7/To hell with eating healthy./food/0 0 0 0 0 0 0 40 0 1 0/300" }, { 806, "Bacon Sapling/60/-300/Basic -74/Takes 28 days to grow into a bacon tree. Yeah a BACON TREE!! Bears BACON in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 807, "Cocoa Sapling/30/-300/Basic -74/Takes 28 days to produce a cocoa tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 808, "Cocoa/145/-300/Basic -75/Beans used to make famous treads." }, { 809, "Violet /70/-300/Basic -16/Beautiful purple thing, better not eat it." }, { 811, "Violet Seeds/10/-300/Seeds -74/Seeds to grow vioet flower. Grows in spring. Takes 8 days to produce flowers." }, { 812, "Olive/250/-300/Basic -79/Find some good cheese and a nice beer to eat these." }, { 813, "Lettuce /65/-300/Basic -75/Its round, its green.It is lettuce!." }, { 814, "Lettuce Seed/5/-300/Seeds -74/Grows in summer, 4 days." }, { 815, "Bell Pepper/90/-300/Basic -79/Not as spicy, still really delicious!" }, { 816, "Red Pepper Seeds/10/-300/Seeds -74/Plant these to grow red pepper. Grows only in fall. Pepper in 10 days." }, { 817, "Lemon/200/-300/Basic -79/The most sour of the sour fruits." }, { 818, "Papaya/183/-300/Basic -79/Sweet fruit used most to make deserts. Very healthy too!." }, { 819, "Papaya Sapling/12/-300/Basic -74/Takes 28 days to produce a papaya tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 820, "Watermelon/175/-300/Basic -79/Man, this is heavier than I tought!" }, { 821, "Watermelon Seed/20/-300/Seeds -74/Grows in fall.Takes 14 days to produce." }, { 822, "Cannary Melon/120/-300/Basic -79/It's not that heavy..." }, { 823, "Cannary Melon Seed/6/-300/Seeds -74/Grows in spring.Takes 11 days to produce." }, { 824, "Onion/117/-300/Basic -79/Here comes the bad breath! Grows in fall,8 days" }, { 825, "Banana/245/-300/Basic -79/If you happen to find a monkey you can feed him this!" }, { 826, "Money/100/-300/Basic/Money makes the world spin." }, { 827, "Olive Sapling/15/-300/Basic -74/Takes 28 days to produce a olive tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 828, "Lemon Sapling/15/-300/Basic -74/Takes 28 days to produce a lemon tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 829, "Banana Sapling/15/-300/Basic -74/Takes 28 days to produce a banana tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 830, "Cassava/80/-300/Basic -79/Grows in summer, 7 days. Not that famous, but still delicious when fried!" }, { 831, "Money Seeds/10/-300/Seeds -74/Plant these in fall. Takes 13 days to mature. Have you ever dreamed about doing this??" }, { 832, "Pineaple/83/-300/Basic -79/The king of the fruits!." }, { 833, "Pineaple Seeds/20/-300/Seeds -74/Plant these in spring. Takes 8 days to mature." }, { 834, "Cucumber /98/-300/Basic -75/ Don't you even think about doing it!" }, { 835, "Cucumber Seeds/5/-300/Seeds -74/Plant these in spring. Takes 11 days to mature." }, { 836, "Cotton/64/-300/Basic/Plant these soldier!" }, { 837, "Cotton Seeds/30/-300/Seeds -74/Plant these in summer and fall. Takes 6 days to produce." }, { 838, "Rice Seeds/8/-300/Seeds -74/Plant these in spring and summer. Takes 5 days to produce." }, { 839, "Rice/7/-300/Basic -75/It is rainning rice!" }, { 840, "Dragonfruit/160/-300/Basic -79/A fruit that looks like a dragon egg" }, { 841, "Dragonfruit Sapling/12/-300/Basic -74/Takes 28 days to produce a dragonfruit tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 842, "Avocado/170/-300/Basic -79/Bear Grills said this is the best fruit..." }, { 843, "Avocado Sapling/14/-300/Basic -74/Takes 28 days to produce an avocado tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." }, { 844, "Purple Sweet Potato/86/-300/Basic -79/Eat this with chicken to become a bodybuilder!" }, { 845, "Purple Sweet Potato Seeds/16/-300/Seeds -74/Plant these in fall. Takes 8 days to mature." }, { 846, "Sugar Seeds/11/-300/Seeds -74/Plant these in greenhouse. Takes 5 days to mature. Confusing but sweet..." }, { 847, "Flour Seeds/11/-300/Seeds -74/Plant these in the greenhouse. Takes 5 days to mature." }, { 848, "Oil Seeds/11/-300/Seeds -74/Plant these in the greenhouse. Takes 5 days to mature." }, { 849, "Vinegar Seeds/11/-300/Seeds -74/Plant these in the greenhouse. Takes 5 days to mature." }, { 850, "Fig/154/-300/Basic -79/A really swwet fruit." }, { 851, "Fig Sapling/35/-300/Basic -74/Takes 28 days to produce a fig tree. Bears fruit in the winter. Only grows if the 8 surrounding \"tiles\" are empty." }, { 852, "Pear/178/-300/Basic -79/The sexy fruit." }, { 853, "Pear Sapling/35/-300/Basic -74/Takes 28 days to produce a pear tree. Bears fruit in the winter. Only grows if the 8 surrounding \"tiles\" are empty." }, { 854, "Persimmon/166/-300/Basic -79/Not the same as tomato." }, { 855, "Persimmon Sapling/35/-300/Basic -74/Takes 28 days to produce a persimmon tree. Bears fruit in the winter. Only grows if the 8 surrounding \"tiles\" are empty." }, { 856, "Lime Sapling/35/-300/Basic -74/Takes 28 days to produce a lime tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." }, { 857, "Lime/160/-300/Basic -79/A different colored lemon." }, { 858, "Cassava Seed/20/-300/Seeds -74/Grows in summer.Takes 7 days to mature." }, { 859, "Onion Seed/6/-300/Seeds -74/Grows in fall.Takes 8 days to produce." }, { 860, "Carrot Seed/6/-300/Seeds -74/Grows in fall.Takes 6 days to produce." }, { 861, "Pink Cat /100/-300/Basic -16/A plant native to the far off Mineral Town. It is known for its minty scent." }, { 863, "Pink Cat Seed/6/-300/Seeds -74/Grows in spring.Takes 6 days to produce." }, { 864, "Blue Mist /160/-300/Basic -16/Often a popular present for young ladies, these star-shaped blossoms bloom on the hillsides." }, { 866, "Blue Mist Seed/6/-300/Seeds -74/Grows in ssummer.Takes 7 days to produce." }, { 867, "Beef Seeds/3/-300/Seeds -74/Plant these to grow beef crop. Grows in summer and spring. Meat in 5 days." }, { 868, "Carrot/60/-300/Basic -79/Grows in fall, 6 days. Maybe you could try to feed it to a rabbit..." }, { 869, "Coffee Grains /75/-300/Basic -16/Need. To. Stay. Awoken." }, { 870, "Sugar Cane /100/-300/Basic -75/ Eat all the sugar!!" }, { 871, "Sugar Cane Seeds/11/-300/Seeds -74/Plant these in the summer. Takes 10 days to mature." }, { 872, "Coffee Seeds/11/-300/Seeds -74/Plant these in the spring. Takes 8 days to mature." }, { 873, "Peanut /60/-300/Basic -75/ Hard shell, delicious inside!" }, { 874, "Peanut Seeds/11/-300/Seeds -74/Plant these in the fall. Takes 6 days to mature." }, }.Select(kv => ItemInformation.Parse(kv.Value, kv.Key)).ToList(); Items.ForEach(c => { if (c.ID >= 792) { c.ResourceIndex = c.ID - 792; } }); Trees = new Dictionary <int, string> { { 797, "1/spring/378/3000" }, { 798, "2/summer/380/3000" }, { 799, "3/fall/384/3000" }, { 800, "4/spring/382/3000" }, { 801, "0/winter/386/3000" }, { 806, "1/summer/803/3000" }, { 807, "2/spring/808/3000" }, { 819, "3/summer/818/3000" }, { 827, "4/spring/812/3000" }, { 828, "5/spring/817/3000" }, { 829, "6/summer/825/3000" }, { 841, "0/summer/840/3000" }, { 843, "1/winter/842/3000" }, { 851, "2/summer/850/3000" }, { 853, "3/winter/852/3000" }, { 855, "4/winter/854/3000" }, { 856, "0/spring/857/3000" }, }.Select(kv => TreeInformation.Parse(kv.Value, kv.Key)).ToList(); }
void HandlingStageList() { stageList = new ReorderableList(serializedObject, stages, false, true, true, true); stageList.drawElementCallback = (rect, index, isActive, isFocused) => { serializedObject.Update(); EditorGUI.BeginChangeCheck(); SerializedProperty cropStage = stages.GetArrayElementAtIndex(index); SerializedProperty lastingDays = cropStage.FindPropertyRelative("lastingDays"); SerializedProperty repeatTimes = cropStage.FindPropertyRelative("repeatTimes"); SerializedProperty indexToReturn = cropStage.FindPropertyRelative("indexToReturn"); SerializedProperty gatherType = cropStage.FindPropertyRelative("gatherType"); SerializedProperty gatherTime = cropStage.FindPropertyRelative("gatherTime"); SerializedProperty lootPrefab = cropStage.FindPropertyRelative("lootPrefab"); SerializedProperty productItems = cropStage.FindPropertyRelative("productItems"); SerializedProperty graph = cropStage.FindPropertyRelative("graph"); ReorderableList productItemsList = null; string name = "[阶段" + index + "]"; switch (crop.Stages[index].Stage) { case CropStages.Seed: name += "种子期"; break; case CropStages.Seedling: name += "幼苗期"; break; case CropStages.Growing: name += "成长期"; break; case CropStages.Flowering: name += "开花期"; break; case CropStages.Bearing: name += "结果期"; break; case CropStages.Maturity: name += "成熟期"; break; case CropStages.OverMature: name += "过熟期"; break; case CropStages.Harvested: name += "收割期"; break; case CropStages.Withered: name += "枯萎期"; break; case CropStages.Decay: name += "腐朽期"; break; } EditorGUI.PropertyField(new Rect(rect.x + 8, rect.y, rect.width / 4 - 8, lineHeight), cropStage, new GUIContent(name)); EditorGUI.LabelField(new Rect(rect.x + rect.width - 166, rect.y, 30, lineHeight), "持续"); EditorGUI.PropertyField(new Rect(rect.x + rect.width - 138, rect.y, 26, lineHeight), lastingDays, new GUIContent(string.Empty)); if (lastingDays.intValue < 1) { lastingDays.intValue = 1; } EditorGUI.LabelField(new Rect(rect.x + rect.width - 110, rect.y, 16, lineHeight), "天"); EditorGUI.LabelField(new Rect(rect.x + rect.width - 86, rect.y, 40, lineHeight), "可收割"); EditorGUI.PropertyField(new Rect(rect.x + rect.width - 46, rect.y, 26, lineHeight), repeatTimes, new GUIContent(string.Empty)); if (repeatTimes.intValue < 0) { repeatTimes.intValue = 0; } EditorGUI.LabelField(new Rect(rect.x + rect.width - 18, rect.y, 16, lineHeight), "次"); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } int lineCount = 1; graph.objectReferenceValue = EditorGUI.ObjectField(new Rect(rect.x - rect.width + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - 8, lineHeight * 3.5f), string.Empty, graph.objectReferenceValue as Sprite, typeof(Sprite), false); if (repeatTimes.intValue > 0) { EditorGUI.PropertyField(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), gatherType, new GUIContent("采集方式")); lineCount++; EditorGUI.PropertyField(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), gatherTime, new GUIContent("采集耗时(秒)")); lineCount++; EditorGUI.PropertyField(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), lootPrefab, new GUIContent("掉落物预制件")); lineCount++; } if (cropStage.isExpanded) { serializedObject.Update(); EditorGUI.BeginChangeCheck(); if (repeatTimes.intValue > 1 && index > 0) { EditorGUI.IntSlider(new Rect(rect.x + 8, rect.y + lineHeightSpace * lineCount, rect.width - 8, lineHeight), indexToReturn, 0, index - 1, new GUIContent("收割后返回阶段")); lineCount++; } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } if (repeatTimes.intValue > 0) { serializedObject.Update(); EditorGUI.BeginChangeCheck(); EditorGUI.PropertyField(new Rect(rect.x + 16, rect.y + lineHeightSpace * lineCount, rect.width - 16, lineHeight), productItems, new GUIContent("产出道具" + (productItems.isExpanded ? string.Empty : ("\t\t" + (productItems.arraySize < 1 ? "无" : "数量:" + productItems.arraySize))))); lineCount++; if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } if (productItems.isExpanded) { productItemsLists.TryGetValue(crop.Stages[index], out productItemsList); if (productItemsList == null) { productItemsList = new ReorderableList(cropStage.serializedObject, productItems, true, true, true, true); productItemsLists.Add(crop.Stages[index], productItemsList); productItemsList.drawElementCallback = (_rect, _index, _isActive, _isForcus) => { cropStage.serializedObject.Update(); SerializedProperty itemInfo = productItems.GetArrayElementAtIndex(_index); var productItem = crop.Stages[index].ProductItems[_index]; if (productItem != null && productItem.Item != null) { EditorGUI.PropertyField(new Rect(_rect.x + 8, _rect.y, _rect.width / 2, lineHeight), itemInfo, new GUIContent(productItem.ItemName)); } else { EditorGUI.PropertyField(new Rect(_rect.x + 8, _rect.y, _rect.width / 2, lineHeight), itemInfo, new GUIContent("(空)")); } EditorGUI.BeginChangeCheck(); SerializedProperty item = itemInfo.FindPropertyRelative("item"); SerializedProperty amount = itemInfo.FindPropertyRelative("amount"); SerializedProperty dropRate = itemInfo.FindPropertyRelative("dropRate"); SerializedProperty onlyDropForQuest = itemInfo.FindPropertyRelative("onlyDropForQuest"); SerializedProperty binedQuest = itemInfo.FindPropertyRelative("bindedQuest"); EditorGUI.PropertyField(new Rect(_rect.x + _rect.width / 2f, _rect.y, _rect.width / 2f, lineHeight), item, new GUIContent(string.Empty)); if (itemInfo.isExpanded) { int _lineCount = 1; EditorGUI.PropertyField(new Rect(_rect.x, _rect.y + lineHeightSpace * _lineCount, _rect.width, lineHeight), amount, new GUIContent("最大掉落数量")); if (amount.intValue < 1) { amount.intValue = 1; } _lineCount++; EditorGUI.PropertyField(new Rect(_rect.x, _rect.y + lineHeightSpace * _lineCount, _rect.width, lineHeight), dropRate, new GUIContent("掉落概率百分比")); if (dropRate.floatValue < 0) { dropRate.floatValue = 0.0f; } _lineCount++; EditorGUI.PropertyField(new Rect(_rect.x, _rect.y + lineHeightSpace * _lineCount, _rect.width, lineHeight), onlyDropForQuest, new GUIContent("只在进行任务时产出")); _lineCount++; if (onlyDropForQuest.boolValue) { EditorGUI.PropertyField(new Rect(_rect.x, _rect.y + lineHeightSpace * _lineCount, _rect.width, lineHeight), binedQuest, new GUIContent("相关任务")); _lineCount++; if (binedQuest.objectReferenceValue) { EditorGUI.LabelField(new Rect(_rect.x, _rect.y + lineHeightSpace * _lineCount, _rect.width, lineHeight), "任务名称", (binedQuest.objectReferenceValue as Quest).Title); _lineCount++; } } } if (EditorGUI.EndChangeCheck()) { cropStage.serializedObject.ApplyModifiedProperties(); } }; productItemsList.elementHeightCallback = (int _index) => { int _lineCount = 1; if (productItems.GetArrayElementAtIndex(_index).isExpanded) { _lineCount += 3;//数量、百分比、只在 if (crop.Stages[index].ProductItems[_index].OnlyDropForQuest) { _lineCount++;//任务 if (crop.Stages[index].ProductItems[_index].BindedQuest) { _lineCount++;//任务标题 } } } return(_lineCount * lineHeightSpace); }; productItemsList.onAddCallback = (_list) => { cropStage.serializedObject.Update(); EditorGUI.BeginChangeCheck(); crop.Stages[index].ProductItems.Add(new DropItemInfo() { Amount = 1, DropRate = 100.0f }); if (EditorGUI.EndChangeCheck()) { cropStage.serializedObject.ApplyModifiedProperties(); } }; productItemsList.onRemoveCallback = (_list) => { cropStage.serializedObject.Update(); EditorGUI.BeginChangeCheck(); if (EditorUtility.DisplayDialog("删除", "确定删除这个产出道具吗?", "确定", "取消")) { crop.Stages[index].ProductItems.RemoveAt(_list.index); } if (EditorGUI.EndChangeCheck()) { cropStage.serializedObject.ApplyModifiedProperties(); } }; productItemsList.drawHeaderCallback = (_rect) => { int notCmpltCount = crop.Stages[index].ProductItems.FindAll(x => !x.Item).Count; EditorGUI.LabelField(_rect, "产出道具列表", "数量:" + crop.Stages[index].ProductItems.Count + (notCmpltCount > 0 ? "未补全:" + notCmpltCount : string.Empty)); }; productItemsList.drawNoneElementCallback = (_rect) => { EditorGUI.LabelField(_rect, "空列表"); }; } cropStage.serializedObject.Update(); productItemsList.DoList(new Rect(rect.x + 8, rect.y + lineHeightSpace * lineCount, rect.width - 8, lineHeight * (productItems.arraySize + 1))); cropStage.serializedObject.ApplyModifiedProperties(); } } } }; stageList.elementHeightCallback = (index) => { int lineCount = 1; float listHeight = 0; SerializedProperty cropStage = stages.GetArrayElementAtIndex(index); SerializedProperty productItems = cropStage.FindPropertyRelative("productItems"); lineCount += 3; if (cropStage.isExpanded) { if (cropStage.FindPropertyRelative("repeatTimes").intValue > 1 && index > 0) { lineCount++; } if (cropStage.FindPropertyRelative("repeatTimes").intValue > 0) { lineCount += 1; if (productItems.isExpanded) { if (productItemsLists.TryGetValue(crop.Stages[index], out var productItemList)) { listHeight += productItemList.GetHeight(); } } } } return(lineHeightSpace * lineCount + listHeight); }; stageList.onRemoveCallback = (list) => { if (crop.Stages.Count < 10) { serializedObject.Update(); EditorGUI.BeginChangeCheck(); if (EditorUtility.DisplayDialog("删除", "确定删除这个阶段吗?", "确定", "取消")) { serializedObject.FindProperty("stages").DeleteArrayElementAtIndex(list.index); } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } } }; stageList.onAddDropdownCallback = (_rect, _list) => { GenericMenu menu = new GenericMenu(); if (!crop.Stages.Exists(s => s.Stage == CropStages.Seed)) { menu.AddItem(new GUIContent("种子期"), false, OnAddOption, CropStages.Seed); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Seedling)) { menu.AddItem(new GUIContent("幼苗期"), false, OnAddOption, CropStages.Seedling); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Growing)) { menu.AddItem(new GUIContent("成长期"), false, OnAddOption, CropStages.Growing); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Flowering)) { menu.AddItem(new GUIContent("开花期"), false, OnAddOption, CropStages.Flowering); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Bearing)) { menu.AddItem(new GUIContent("结果期"), false, OnAddOption, CropStages.Bearing); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Maturity)) { menu.AddItem(new GUIContent("成熟期"), false, OnAddOption, CropStages.Maturity); } if (!crop.Stages.Exists(s => s.Stage == CropStages.OverMature)) { menu.AddItem(new GUIContent("过熟期"), false, OnAddOption, CropStages.OverMature); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Harvested)) { menu.AddItem(new GUIContent("收割期"), false, OnAddOption, CropStages.Harvested); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Withered)) { menu.AddItem(new GUIContent("枯萎期"), false, OnAddOption, CropStages.Withered); } if (!crop.Stages.Exists(s => s.Stage == CropStages.Decay)) { menu.AddItem(new GUIContent("腐朽期"), false, OnAddOption, CropStages.Decay); } menu.DropDown(_rect); void OnAddOption(object data) { var cropStage = (CropStages)data; crop.Stages.Add(new CropStage(1, cropStage)); Dictionary <CropStage, CropStage> returnStages = new Dictionary <CropStage, CropStage>(); for (int i = 0; i < crop.Stages.Count; i++) { returnStages.Add(crop.Stages[i], crop.Stages[crop.Stages[i].IndexToReturn]); } crop.Stages.Sort((x, y) => { if (x.Stage < y.Stage) { return(-1); } else if (x.Stage > y.Stage) { return(1); } else { return(0); } }); serializedObject.Update(); EditorGUI.BeginChangeCheck(); foreach (var returnStage in returnStages) { SerializedProperty stage = stages.GetArrayElementAtIndex(crop.Stages.IndexOf(returnStage.Key)); stage.FindPropertyRelative("indexToReturn").intValue = crop.Stages.IndexOf(returnStage.Value); } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } } }; stageList.drawHeaderCallback = (rect) => { EditorGUI.LabelField(rect, "阶段列表"); }; stageList.drawNoneElementCallback = (rect) => { EditorGUI.LabelField(rect, "空列表"); }; } string GetAutoID() { string newID = string.Empty; CropInformation[] crops = Resources.LoadAll <CropInformation>(""); for (int i = 1; i < 1000; i++) { newID = "CROP" + i.ToString().PadLeft(3, '0'); if (!Array.Exists(crops, x => x.ID == newID)) { break; } } return(newID); } bool ExistsID() { CropInformation[] crops = Resources.LoadAll <CropInformation>(""); CropInformation find = Array.Find(crops, x => x.ID == _ID.stringValue); if (!find) { return(false); //若没有找到,则ID可用 } //找到的对象不是原对象 或者 找到的对象是原对象且同ID超过一个 时为true return(find != crop || (find == crop && Array.FindAll(crops, x => x.ID == _ID.stringValue).Length > 1)); } }
void HandlingStageList() { stageList = new ReorderableList(serializedObject, stages, false, true, true, true); stageList.drawElementCallback = (rect, index, isActive, isFocused) => { serializedObject.UpdateIfRequiredOrScript(); EditorGUI.BeginChangeCheck(); SerializedProperty cropStage = stages.GetArrayElementAtIndex(index); SerializedProperty lastingDays = cropStage.FindPropertyRelative("lastingDays"); SerializedProperty repeatTimes = cropStage.FindPropertyRelative("repeatTimes"); SerializedProperty indexToReturn = cropStage.FindPropertyRelative("indexToReturn"); SerializedProperty gatherInfo = cropStage.FindPropertyRelative("gatherInfo"); SerializedProperty graph = cropStage.FindPropertyRelative("graph"); string name = "[阶段" + index + "]"; switch (crop.Stages[index].Stage) { case CropStageType.Seed: name += "种子期"; break; case CropStageType.Seedling: name += "幼苗期"; break; case CropStageType.Growing: name += "成长期"; break; case CropStageType.Flowering: name += "开花期"; break; case CropStageType.Bearing: name += "结果期"; break; case CropStageType.Maturity: name += "成熟期"; break; case CropStageType.OverMature: name += "过熟期"; break; case CropStageType.Harvested: name += "收割期"; break; case CropStageType.Withered: name += "枯萎期"; break; case CropStageType.Decay: name += "腐朽期"; break; } EditorGUI.PropertyField(new Rect(rect.x + 8, rect.y, rect.width / 4 - 8, lineHeight), cropStage, new GUIContent(name)); EditorGUI.LabelField(new Rect(rect.x + rect.width - 166, rect.y, 30, lineHeight), "持续"); EditorGUI.PropertyField(new Rect(rect.x + rect.width - 138, rect.y, 26, lineHeight), lastingDays, new GUIContent(string.Empty)); if (lastingDays.intValue < 1) { if (index == stages.arraySize - 1) { lastingDays.intValue = -1; } else { lastingDays.intValue = 1; } } EditorGUI.LabelField(new Rect(rect.x + rect.width - 110, rect.y, 16, lineHeight), "天"); EditorGUI.LabelField(new Rect(rect.x + rect.width - 86, rect.y, 40, lineHeight), "可收割"); EditorGUI.PropertyField(new Rect(rect.x + rect.width - 46, rect.y, 26, lineHeight), repeatTimes, new GUIContent(string.Empty)); if (repeatTimes.intValue < 0) { repeatTimes.intValue = -1; } EditorGUI.LabelField(new Rect(rect.x + rect.width - 18, rect.y, 16, lineHeight), "次"); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } if (cropStage.isExpanded) { int lineCount = 1; serializedObject.UpdateIfRequiredOrScript(); EditorGUI.BeginChangeCheck(); graph.objectReferenceValue = EditorGUI.ObjectField(new Rect(rect.x - rect.width + lineHeight * 4.2f, rect.y + lineHeightSpace * lineCount, rect.width - 8, lineHeight * 3.2f), string.Empty, graph.objectReferenceValue, typeof(Sprite), false); if (repeatTimes.intValue != 0) { if (!gatherInfo.objectReferenceValue || gatherInfo.objectReferenceValue && !AssetDatabase.IsSubAsset(gatherInfo.objectReferenceValue)) { EditorGUI.PropertyField(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), gatherInfo, new GUIContent("对应采集物信息")); lineCount++; } else if (AssetDatabase.IsSubAsset(gatherInfo.objectReferenceValue)) { EditorGUI.LabelField(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), $"对应采集物信息{((gatherInfo.objectReferenceValue as ResourceInformation).IsValid ? string.Empty : "(未补全)")}"); lineCount++; } if (gatherInfo.objectReferenceValue) { if (GUI.Button(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), "编辑")) { EditorUtility.OpenPropertyEditor(gatherInfo.objectReferenceValue); } lineCount++; if (AssetDatabase.IsSubAsset(gatherInfo.objectReferenceValue)) { if (GUI.Button(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), "删除")) { AssetDatabase.RemoveObjectFromAsset(gatherInfo.objectReferenceValue); gatherInfo.objectReferenceValue = null; } lineCount++; } } else if (GUI.Button(new Rect(rect.x - 4 + lineHeight * 4.5f, rect.y + lineHeightSpace * lineCount, rect.width - lineHeight * 4f, lineHeight), "新建")) { ResourceInformation infoInstance = CreateInstance <ResourceInformation>(); infoInstance.SetBaseName("resource info"); AssetDatabase.AddObjectToAsset(infoInstance, target); gatherInfo.objectReferenceValue = infoInstance; SerializedObject gInfoObj = new SerializedObject(gatherInfo.objectReferenceValue); SerializedProperty _ID = gInfoObj.FindProperty("_ID"); SerializedProperty _name = gInfoObj.FindProperty("_name"); _ID.stringValue = this._ID.stringValue + "S" + index; _name.stringValue = this._name.stringValue; gInfoObj.ApplyModifiedProperties(); EditorUtility.OpenPropertyEditor(infoInstance); } lineCount++; } if ((repeatTimes.intValue < 0 || repeatTimes.intValue > 1) && index > 0) { lineCount = 4; EditorGUI.IntSlider(new Rect(rect.x + 8, rect.y + lineHeightSpace * lineCount, rect.width - 8, lineHeight), indexToReturn, 0, index - 1, new GUIContent("收割后返回阶段")); } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } } }; stageList.elementHeightCallback = (index) => { int lineCount = 1; float listHeight = 0; SerializedProperty cropStage = stages.GetArrayElementAtIndex(index); SerializedProperty gatherInfo = cropStage.FindPropertyRelative("gatherInfo"); SerializedProperty repeatTimes = cropStage.FindPropertyRelative("repeatTimes"); if (cropStage.isExpanded) { lineCount += 3;//空白 if ((repeatTimes.intValue < 0 || repeatTimes.intValue > 1) && index > 0) { lineCount++; } } return(lineHeightSpace * lineCount + listHeight); }; stageList.onRemoveCallback = (list) => { if (crop.Stages.Count < 10) { serializedObject.UpdateIfRequiredOrScript(); EditorGUI.BeginChangeCheck(); if (EditorUtility.DisplayDialog("删除", "确定删除这个阶段吗?", "确定", "取消")) { serializedObject.FindProperty("stages").DeleteArrayElementAtIndex(list.index); } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } } }; stageList.onAddDropdownCallback = (_rect, _list) => { GenericMenu menu = new GenericMenu(); if (!crop.Stages.Exists(s => s.Stage == CropStageType.Seed)) { menu.AddItem(new GUIContent("种子期"), false, OnAddOption, CropStageType.Seed); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Seedling)) { menu.AddItem(new GUIContent("幼苗期"), false, OnAddOption, CropStageType.Seedling); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Growing)) { menu.AddItem(new GUIContent("成长期"), false, OnAddOption, CropStageType.Growing); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Flowering)) { menu.AddItem(new GUIContent("开花期"), false, OnAddOption, CropStageType.Flowering); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Bearing)) { menu.AddItem(new GUIContent("结果期"), false, OnAddOption, CropStageType.Bearing); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Maturity)) { menu.AddItem(new GUIContent("成熟期"), false, OnAddOption, CropStageType.Maturity); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.OverMature)) { menu.AddItem(new GUIContent("过熟期"), false, OnAddOption, CropStageType.OverMature); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Harvested)) { menu.AddItem(new GUIContent("收割期"), false, OnAddOption, CropStageType.Harvested); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Withered)) { menu.AddItem(new GUIContent("枯萎期"), false, OnAddOption, CropStageType.Withered); } if (!crop.Stages.Exists(s => s.Stage == CropStageType.Decay)) { menu.AddItem(new GUIContent("腐朽期"), false, OnAddOption, CropStageType.Decay); } menu.DropDown(_rect); void OnAddOption(object data) { var cropStage = (CropStageType)data; crop.Stages.Add(new CropStage(1, cropStage)); Dictionary <CropStage, CropStage> returnStages = new Dictionary <CropStage, CropStage>(); for (int i = 0; i < crop.Stages.Count; i++) { returnStages.Add(crop.Stages[i], crop.Stages[crop.Stages[i].IndexToReturn]); } crop.Stages.Sort((x, y) => { if (x.Stage < y.Stage) { return(-1); } else if (x.Stage > y.Stage) { return(1); } else { return(0); } }); serializedObject.UpdateIfRequiredOrScript(); EditorGUI.BeginChangeCheck(); foreach (var returnStage in returnStages) { SerializedProperty stage = stages.GetArrayElementAtIndex(crop.Stages.IndexOf(returnStage.Key)); stage.FindPropertyRelative("indexToReturn").intValue = crop.Stages.IndexOf(returnStage.Value); } if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); } } }; stageList.drawHeaderCallback = (rect) => { EditorGUI.LabelField(rect, "阶段列表"); }; stageList.drawNoneElementCallback = (rect) => { EditorGUI.LabelField(rect, "空列表"); }; } string GetAutoID() { string newID = string.Empty; CropInformation[] crops = Resources.LoadAll <CropInformation>("Configuration"); for (int i = 1; i < 1000; i++) { newID = "CROP" + i.ToString().PadLeft(3, '0'); if (!Array.Exists(crops, x => x.ID == newID)) { break; } } return(newID); } bool ExistsID() { CropInformation[] crops = Resources.LoadAll <CropInformation>("Configuration"); CropInformation find = Array.Find(crops, x => x.ID == _ID.stringValue); if (!find) { return(false); //若没有找到,则ID可用 } //找到的对象不是原对象 或者 找到的对象是原对象且同ID超过一个 时为true return(find != crop || (find == crop && Array.FindAll(crops, x => x.ID == _ID.stringValue).Length > 1)); } }