109 lines
2.6 KiB
C#
109 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Subsurface
|
|
{
|
|
class RelatedItem
|
|
{
|
|
[Flags]
|
|
public enum RelationType
|
|
{
|
|
None = 0,
|
|
Contained = 1,
|
|
Equipped = 2,
|
|
Picked = 4
|
|
}
|
|
|
|
string[] names;
|
|
|
|
RelationType type;
|
|
|
|
public readonly List<StatusEffect> statusEffects;
|
|
|
|
//public string[] Names
|
|
//{
|
|
// get { return names; }
|
|
//}
|
|
|
|
public RelationType Type
|
|
{
|
|
get { return type; }
|
|
}
|
|
|
|
public bool MatchesItem(Item item)
|
|
{
|
|
if (item == null) return false;
|
|
return names.Any(name => item.Name == name || item.HasTag(name));
|
|
}
|
|
|
|
public string JoinedNames
|
|
{
|
|
get { return string.Join(",", names); }
|
|
set
|
|
{
|
|
if (value == null) return;
|
|
|
|
names = value.Split(',');
|
|
for (int i = 0; i < names.Length;i++ )
|
|
{
|
|
names[i] = names[i].Trim();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public string[] Names
|
|
{
|
|
get { return names; }
|
|
}
|
|
|
|
public RelatedItem(string[] names)
|
|
{
|
|
for (int i = 0; i < names.Length; i++)
|
|
{
|
|
names[i] = names[i].Trim();
|
|
}
|
|
this.names = names;
|
|
statusEffects = new List<StatusEffect>();
|
|
}
|
|
|
|
public void Save(XElement element)
|
|
{
|
|
element.Add(
|
|
new XAttribute("name", JoinedNames),
|
|
new XAttribute("type", type.ToString()));
|
|
}
|
|
|
|
public static RelatedItem Load(XElement element)
|
|
{
|
|
string nameString = ToolBox.GetAttributeString(element, "name", "");
|
|
if (nameString == "") return null;
|
|
|
|
string[] names = nameString.Split(',');
|
|
|
|
RelatedItem ri = new RelatedItem(names);
|
|
|
|
try
|
|
{
|
|
ri.type = (RelationType)Enum.Parse(typeof(RelationType), ToolBox.GetAttributeString(element, "type", "None"));
|
|
}
|
|
|
|
catch
|
|
{
|
|
ri.type = RelationType.None;
|
|
}
|
|
|
|
foreach (XElement subElement in element.Elements())
|
|
{
|
|
if (subElement.Name.ToString().ToLower() != "statuseffect") continue;
|
|
|
|
ri.statusEffects.Add(StatusEffect.Load(subElement));
|
|
}
|
|
|
|
return ri;
|
|
}
|
|
}
|
|
}
|