public bool check_is_recipe_valid(CraftRecipe r, Actor a, World w) { for (int x = 0; x < r.input.Count; x++) { item_descriptor t = Acc.get_item_by_name(r.input[x].Key); if (t.item_type == ItemType.Empty || t.item_id == -1 || !a.items.has_item(t.item_type, t.item_id, r.input[x].Value)) { return(false); } } for (int x = 0; x < r.furniture_require.Length; x++) { bool contained = false; for (int i = 0; i < id_nearby_furniture.Count; i++) { if (Exilania.furniture_manager.furniture[w.furniture[id_nearby_furniture[i]].furniture_id].name.ToLower() == r.furniture_require[x].ToLower()) { contained = true; } } if (!contained) { return(false); } } return(true); }
public void take_item_requirements(CraftRecipe r, Actor a, World w) { for (int x = 0; x < r.input.Count; x++) { item_descriptor t = Acc.get_item_by_name(r.input[x].Key); if (t.item_type != ItemType.Empty && t.item_id != -1) { a.items.use_item(a, t.item_type, t.item_id, r.input[x].Value); } } }
public void write_info_about_item(SpriteBatch s, CraftRecipe r, Point loc, Display d) { if (r.output[0].item_id != infos_item_type.item_id || r.output[0].type != infos_item_type.item_type) { infos_item_type.item_id = r.output[0].item_id; infos_item_type.item_type = r.output[0].type; infos = new List <KeyValuePair <string, Vector2> >(); string writing = ""; switch (cur_available_crafts[hover_over].output[0].type) { case ItemType.Block: writing = r.output[0].item_quantity + " " + Exilania.block_types.blocks[cur_available_crafts[hover_over].output[0].item_id].name; infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); break; case ItemType.Furniture: writing = r.output[0].item_quantity + " " + Exilania.furniture_manager.furniture[r.output[0].item_id].name; infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); break; case ItemType.ItemPiece: writing = Exilania.item_manager.item_pieces[r.output[0].item_id].name; infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); break; case ItemType.Material: writing = Exilania.material_manager.materials[r.output[0].item_id].name; infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); break; } if (r.furniture_require.Length > 0) { writing = ""; for (int x = 0; x < r.furniture_require.Length; x++) { if (x == 0) { writing = "Equipment Required: " + r.furniture_require[x]; } else { writing += ", " + r.furniture_require[x]; } } infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); } writing = "Requires: " + r.ToString(); draw_size = new Point(0, infos.Count * 20 + 40); infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); writing = "Complexity: " + r.complexity; infos.Add(new KeyValuePair <string, Vector2>(writing, d.small_font.MeasureString(writing))); for (int x = 0; x < infos.Count; x++) { if (infos[x].Value.X > draw_size.X) { draw_size.X = (int)infos[x].Value.X; } } draw_size.X += 20; draw_size.Y += 20; } d.draw_bounding_box(s, new Rectangle((int)loc.X - draw_size.X, (int)loc.Y, draw_size.X, draw_size.Y)); d.draw_bounding_box(s, new Rectangle((int)loc.X - draw_size.X, (int)loc.Y, draw_size.X, draw_size.Y)); for (int x = 0; x < infos.Count; x++) { d.draw_text(s, d.small_font, "@00" + infos[x].Key, (int)loc.X + 10 - draw_size.X, (int)loc.Y + 10 + (x * 20), 600); } }
public CraftManager() { recipes = new List <CraftRecipe>(); if (System.IO.File.Exists(@"craft_recipes.txt")) { System.IO.StreamReader r = new System.IO.StreamReader(@"craft_recipes.txt"); string line = ""; CraftRecipe p = new CraftRecipe(); bool cont = true; while (cont) { line = r.ReadLine().Trim(); if (line.Length == 0 || line[0] == '#') { //skip this line } else { string[] items = line.Split(':'); switch (items[0].ToLower()) { case "name": if (p.name == "") { p.name = items[1].Trim(); } else { p.crafting_id = (ushort)recipes.Count; recipes.Add(p); Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded."); p = new CraftRecipe(); p.name = items[1].Trim(); } break; case "output": items = items[1].Split(','); for (int i = 0; i < items.Length; i++) { item_descriptor t = Acc.get_item_by_name(Acc.script_remove_content_of_outer_parenthesis(items[i])); Output_Type pr = new Output_Type(t.item_type, t.item_id, int.Parse(Acc.script_remove_outer_parentheses(items[i]))); p.output.Add(pr); } break; case "input": items = items[1].Split(','); for (int x = 0; x < items.Length; x++) { p.input.Add(new KeyValuePair <string, int>(Acc.script_remove_content_of_outer_parenthesis(items[x]), int.Parse(Acc.script_remove_outer_parentheses(items[x])))); } break; case "complexity": p.complexity = int.Parse(items[1]); break; case "furniture-require": items = items[1].Split(','); p.furniture_require = new string[items.Length]; for (int x = 0; x < items.Length; x++) { p.furniture_require[x] = items[x]; } break; default: Exilania.text_stream.WriteLine("UNHANDLED type " + items[0]); break; } } if (r.EndOfStream) { p.crafting_id = (ushort)recipes.Count; recipes.Add(p); Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded."); cont = false; } } r.Close(); for (int x = 0; x < Exilania.item_manager.item_pieces.Count; x++) { p = new CraftRecipe(); p.name = Exilania.item_manager.item_pieces[x].name; p.output.Add(new Output_Type(ItemType.ItemPiece, x, 1)); if (Exilania.item_manager.item_pieces[x].craft_require != "") { p.furniture_require = Exilania.item_manager.item_pieces[x].craft_require.Split(','); } else { p.furniture_require = new string[0]; } if (Exilania.item_manager.item_pieces[x].materials.Count > 0) { foreach (var mats in Exilania.item_manager.item_pieces[x].materials) { p.input.Add(new KeyValuePair <string, int>(mats.Key, mats.Value)); } } p.complexity = Exilania.item_manager.item_pieces[x].complexity; p.crafting_id = (ushort)recipes.Count; recipes.Add(p); Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded."); } for (int x = 0; x < Exilania.furniture_manager.furniture.Count; x++) { p = new CraftRecipe(); p.name = Exilania.furniture_manager.furniture[x].name; p.output.Add(new Output_Type(ItemType.Furniture, x, 1)); if (Exilania.furniture_manager.furniture[x].craft_require.Length > 0) { p.furniture_require = Exilania.furniture_manager.furniture[x].craft_require; } if (Exilania.furniture_manager.furniture[x].materials.Count > 0) { foreach (var mats in Exilania.furniture_manager.furniture[x].materials) { p.input.Add(new KeyValuePair <string, int>(mats.Key, mats.Value)); } } p.complexity = Exilania.furniture_manager.furniture[x].complexity; p.crafting_id = (ushort)recipes.Count; recipes.Add(p); Exilania.text_stream.WriteLine("Crafting Recipe '" + p.name + "' Loaded."); } } else { Exilania.text_stream.Write("ERROR! No craft_recipes.txt file."); } }