using System; using System.Collections.Generic; public class BaseProperty { bool m_Dirty = true; public bool dirty { get { return this.m_Dirty; } set { lock (this) { this.m_Dirty = value; } } } public BaseProperty() { } } public sealed class LogicInt : BaseProperty { int m_Value; public int value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicInt() { } public LogicInt(int value) { this.value = value; } public int Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicFloat : BaseProperty { float m_Value; public float value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicFloat() { } public LogicFloat(float value) { this.value = value; } public float Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicBool : BaseProperty { bool m_Value; public bool value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicBool() { } public LogicBool(bool value) { this.value = value; } public bool Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicString : BaseProperty { string m_Value = string.Empty; public string value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicString() { } public LogicString(string value) { this.value = value; } public string Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicLong : BaseProperty { long m_Value; public long value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicLong() { } public LogicLong(long value) { this.value = value; } public long Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicInt2 : BaseProperty { Int2 m_Value = Int2.zero; public Int2 value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicInt2() { } public LogicInt2(Int2 value) { this.value = value; } public Int2 Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicInt3 : BaseProperty { Int3 m_Value = Int3.zero; public Int3 value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicInt3() { } public LogicInt3(Int3 value) { this.value = value; } public Int3 Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicDateTime : BaseProperty { DateTime m_Value = DateTime.MinValue; public DateTime value { get { return this.m_Value; } set { lock (this) { if (this.m_Value != value) { this.m_Value = value; this.dirty = true; } } } } public LogicDateTime() { } public LogicDateTime(DateTime value) { this.value = value; } public DateTime Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicEnum : BaseProperty where T : struct { T m_Value; public T value { get { return this.m_Value; } set { lock (this) { this.m_Value = value; this.dirty = true; } } } public LogicEnum(T value) { if (typeof(Enum) != typeof(T).BaseType) { throw new ArgumentException("参数必须是枚举类型!"); } this.value = value; } public T Fetch() { this.dirty = false; return this.m_Value; } } public sealed class LogicList : BaseProperty { List collect = new List(); public T this[int index] { get { return this.collect[index]; } } public int Count { get { return collect.Count; } } public void Add(T element) { collect.Add(element); this.dirty = true; } public void AddRange(IList elements) { collect.AddRange(elements); this.dirty = true; } public void Remove(T element) { collect.Remove(element); this.dirty = true; } public void RemoveAt(int index) { collect.RemoveAt(index); this.dirty = true; } public bool Contains(T element) { return collect.Contains(element); } public void Clear() { collect.Clear(); this.dirty = true; } public void Sort(Comparison comparison) { collect.Sort(comparison); this.dirty = true; } public List Fetch() { this.dirty = false; return this.collect; } } public sealed class LogicStruct : BaseProperty where T : struct { T m_Value; public T value { get { return this.m_Value; } set { lock (this) { this.m_Value = value; this.dirty = true; } } } public LogicStruct() { } public LogicStruct(T value) { this.value = value; } public T Fetch() { this.dirty = false; return this.m_Value; } }