public void add(CraftData craft, bool save = true) { if (!this.rule_based) { this.craft.AddUnique(Tags.craft_reference_key(craft)); craft.tag_name_cache = null; if (save) { Tags.save(); } } }
public void remove(CraftData craft, bool save = true) { if (!this.rule_based && this.craft.Contains(Tags.craft_reference_key(craft))) { this.craft.Remove(Tags.craft_reference_key(craft)); craft.tag_name_cache = null; if (save) { Tags.save(); } } }
//returns list of craft_references which match the criteria of the tag's rule public List <string> rule() { List <string> data = new List <string>(); List <CraftData> found = CraftData.all_craft.FindAll(craft => { var c_attr = craft.GetType().GetProperty(rule_attribute).GetValue(craft, null); float n; bool is_numeric = float.TryParse(c_attr.ToString(), out n); if (is_numeric) { if (rule_comparitor == "greater_than") { return(float.Parse(c_attr.ToString()) > float.Parse(rule_value)); } else if (rule_comparitor == "less_than") { return(float.Parse(c_attr.ToString()) < float.Parse(rule_value)); } else { return(float.Parse(c_attr.ToString()) == float.Parse(rule_value)); } } else { if (rule_comparitor == "includes") { return(c_attr.ToString().ToLower().Contains(rule_value.ToLower())); } else if (rule_comparitor == "starts_with") { return(c_attr.ToString().ToLower().StartsWith(rule_value.ToLower())); } else { return(c_attr.ToString().ToLower() == rule_value.ToLower()); } } }); foreach (CraftData c in found) { data.AddUnique(Tags.craft_reference_key(c)); } return(data); }
//returns the number of craft associated with a given tag name. Takes a second optional argument to specify if the count //is for all loaded craft ("<all_saves>"), or limited to the search results ("filtered") public static int craft_count_for(string tag_name, string mode = "") { List <Tag> tags = Tags.find_all(tag_name); int count = 0; if (mode == "filtered") { foreach (Tag tag in tags) { count += CraftData.filtered.FindAll(c => tag.save_dir == c.save_dir && tag.craft.Contains(Tags.craft_reference_key(c))).Count; } } else if (mode == "raw_count") { foreach (Tag tag in tags) { count += tag.craft.Count; } } else { foreach (Tag tag in tags) { count += CraftData.all_craft.FindAll(c => tag.save_dir == c.save_dir && tag.craft.Contains(Tags.craft_reference_key(c))).Count; } } return(count); }