UltimateZoneBuilder/Source/Core/Map/UniFields.cs

88 lines
2.2 KiB
C#
Raw Normal View History

#region ================== Namespaces
using System;
using System.Collections.Generic;
#endregion
namespace CodeImp.DoomBuilder.Map
{
2009-05-21 08:18:34 +00:00
/// <summary>
/// List of universal fields and their values.
/// </summary>
public class UniFields : SortedList<string, UniValue>
{
// Owner of this list
protected MapElement owner;
public MapElement Owner { get { return owner; } internal set { owner = value; } }
// New constructor
2009-05-21 08:18:34 +00:00
///<summary></summary>
public UniFields() : base(2)
{
}
// New constructor
2009-05-21 08:18:34 +00:00
///<summary></summary>
public UniFields(int capacity) : base(capacity)
{
}
// Copy constructor (makes a deep copy)
2009-05-21 08:18:34 +00:00
///<summary></summary>
public UniFields(UniFields copyfrom) : base(copyfrom.Count)
{
foreach(KeyValuePair<string, UniValue> v in copyfrom)
this.Add(v.Key, new UniValue(v.Value));
}
// New constructor
///<summary></summary>
public UniFields(MapElement owner) : base(2)
{
this.owner = owner;
}
// New constructor
///<summary></summary>
public UniFields(MapElement owner, int capacity) : base(capacity)
{
this.owner = owner;
}
// Copy constructor
///<summary></summary>
public UniFields(MapElement owner, UniFields copyfrom) : base(copyfrom.Count)
{
this.owner = owner;
foreach(KeyValuePair<string, UniValue> v in copyfrom) //mxd. No-no-no, David Blaine, I don't want to copy these by reference!
this.Add(v.Key, new UniValue(v.Value));
}
/// <summary>Call this before making changes to the fields, or they may not be updated correctly with undo/redo!</summary>
public void BeforeFieldsChange()
{
if(owner != null)
owner.BeforeFieldsChange();
}
/// <summary>This returns the value of a field by name, or returns the specified value when no such field exists or the field value fails to convert to the same datatype.</summary>
public T GetValue<T>(string fieldname, T defaultvalue)
{
if(!this.ContainsKey(fieldname))
return defaultvalue;
try
{
T val = (T)this[fieldname].Value;
return val;
}
catch(InvalidCastException)
{
return defaultvalue;
}
}
}
}