| 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<T> : 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<T> : BaseProperty | 
| { | 
|     List<T> collect = new List<T>(); | 
|   | 
|     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<T> 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<T> comparison) | 
|     { | 
|         collect.Sort(comparison); | 
|         this.dirty = true; | 
|     } | 
|   | 
|     public List<T> Fetch() | 
|     { | 
|         this.dirty = false; | 
|         return this.collect; | 
|     } | 
|   | 
| } | 
|   | 
| public sealed class LogicStruct<T> : 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; | 
|     } | 
|   | 
| } |