PageRenderTime 81ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/AimGameEngine/AimGameEngine/AimGameEngine/EditorObject/NodeObject.cs

#
C# | 339 lines | 261 code | 69 blank | 9 comment | 21 complexity | 858670e9e5da4e3a52d9afabd72092f9 MD5 | raw file
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using Microsoft.Xna.Framework;
  7. using Microsoft.Xna.Framework.Graphics;
  8. using AimGameLibrary;
  9. using AimGameLibrary.GameObject;
  10. namespace AimGameEngine.EditorObject
  11. {
  12. public class CallBack
  13. {
  14. public virtual void Deactivate(object sender, EventArgs e)
  15. {
  16. }
  17. }
  18. public enum SaveMode
  19. {
  20. Project,
  21. Generator
  22. }
  23. public class NodeObject : Image2D, ICloneable
  24. {
  25. #region System
  26. protected SpriteFont Font;
  27. protected Texture2D backupTextureConnectpoint;
  28. protected float FontDepth;
  29. public Rectangle NodeBody;
  30. public String Name;
  31. #endregion
  32. #region System List,Dictionary
  33. protected List<IDraw> MyListDraw;
  34. protected List<IUpdateMainTime> MyListUpdateTime;
  35. protected Dictionary<String, NodeObject> MyDictionaryObject;
  36. protected Dictionary<String, NodeObject> MyDictionaryType;
  37. public List<Connecter> ListConnectpoint;
  38. public List<Connecter> ListConnectpointInput;
  39. public List<Connecter> ListConnectpointOutput;
  40. public List<LinkLine> LinklinetoConnecter;
  41. public List<LinkLine> LinklineInputForSave;
  42. #endregion
  43. public NodeObject(SpriteBatch inputspritebatch, Camera inputcamera, NodeData MyData
  44. , List<IDraw> MyListDraw, List<IUpdateMainTime> MyListUpdateTime, Dictionary<String, NodeObject> MyListObject, Dictionary<String, NodeObject> MyListType)
  45. : base(inputspritebatch, inputcamera)
  46. {
  47. this.MyData = MyData.Copy();
  48. MyViewData.Name = MyData.MyName;
  49. MyData.Data = "NULL";
  50. InputMode = NodeInputMode.None;
  51. //SetupDepth = MyViewData.Depth;
  52. ListConnectpoint = new List<Connecter>();
  53. ListConnectpointInput = new List<Connecter>();
  54. ListConnectpointOutput = new List<Connecter>();
  55. LinklinetoConnecter = new List<LinkLine>();
  56. LinklineInputForSave = new List<LinkLine>();
  57. this.MyListUpdateTime = MyListUpdateTime;
  58. this.MyListDraw = MyListDraw;
  59. this.MyDictionaryObject = MyListObject;
  60. this.MyDictionaryType = MyListType;
  61. }
  62. #region Add & Remove Node
  63. public void AddMetoList()
  64. {
  65. MyListUpdateTime.Add(this);
  66. MyListDraw.Add(this);
  67. MyDictionaryObject.Add(MyData.MyName, this);
  68. if (MyDictionaryType != null)
  69. MyDictionaryType.Add(MyData.MyName, this);
  70. foreach (IDraw connecter in ListConnectpoint)
  71. MyListDraw.Add(connecter);
  72. foreach (IUpdateMainTime connecter in ListConnectpoint)
  73. MyListUpdateTime.Add(connecter);
  74. foreach (Connecter connecter in ListConnectpoint)
  75. if (connecter.MySyco == Syco.Input)
  76. ListConnectpointInput.Add(connecter);
  77. else
  78. ListConnectpointOutput.Add(connecter);
  79. SetupDepth();
  80. }
  81. public virtual void Remove()
  82. {
  83. MyListDraw.Remove(this);
  84. MyDictionaryObject.Remove(MyData.MyName);
  85. if (MyDictionaryType != null)
  86. MyDictionaryType.Remove(MyData.MyName);
  87. /// Will Chack Line to Remove
  88. if (ListConnectpoint != null)
  89. {
  90. foreach (IDraw connecter in ListConnectpoint)
  91. MyListDraw.Remove(connecter);
  92. foreach (IUpdateMainTime connecter in ListConnectpoint)
  93. MyListUpdateTime.Remove(connecter);
  94. //ListConnectpoint.Clear();
  95. }
  96. if (LinklinetoConnecter.Count > 0)
  97. foreach (LinkLine Link in LinklinetoConnecter)
  98. Link.Isconnect = false;
  99. ListConnectpointInput.Clear();
  100. ListConnectpointOutput.Clear();
  101. LinklinetoConnecter.Clear();
  102. LinklineInputForSave.Clear();
  103. }
  104. #endregion
  105. #region Sava & Load Data
  106. public virtual void SaveData(ArrayList Thislist, SaveMode inputsavemode)
  107. {
  108. Thislist.Add(MyData);
  109. if (inputsavemode == SaveMode.Project)
  110. {
  111. Thislist.Add(MyViewData.Name);
  112. Point temp;
  113. temp.X = (int)MyViewData.Position.X;
  114. temp.Y = (int)MyViewData.Position.Y;
  115. Thislist.Add(temp);
  116. }
  117. }
  118. public virtual void LoadData(Identification getdata, int IndexData)
  119. {
  120. }
  121. public Dictionary<String, NodeObject> GetPartNode()
  122. {
  123. Dictionary<String, NodeObject> TempNode = new Dictionary<string, NodeObject>();
  124. TempNode = GetDictionaryNode(TempNode);
  125. return TempNode;
  126. }
  127. protected virtual Dictionary<String, NodeObject> GetDictionaryNode(Dictionary<String, NodeObject> TempNode)
  128. {
  129. return TempNode;
  130. }
  131. public virtual String CreateData(Dictionary<String, NodeObject> DictionaryObject)
  132. {
  133. String TempPacketName = String.Empty;
  134. int Tempcount = 0;
  135. foreach (String key0 in DictionaryObject.Keys)
  136. {
  137. if (Tempcount > 0)
  138. TempPacketName += "|";
  139. //TempPacketName += DictionaryObjectUpdateIsdown[key0].MyData.MyName;
  140. TempPacketName += key0;
  141. Tempcount++;
  142. }
  143. return TempPacketName;
  144. }
  145. #endregion
  146. #region Setup Interface
  147. public virtual void Setup(Texture2D inputTexture, SpriteFont inputFont)
  148. {
  149. this.SetupSourceAndTexture(inputTexture);
  150. Font = inputFont;
  151. this.NodeBody = MyViewData.Source;
  152. }
  153. public virtual void Setup(Texture2D inputTexture, Texture2D inputTexturePoint, SpriteFont inputFont)
  154. {
  155. this.SetupSourceAndTexture(inputTexture);
  156. Font = inputFont;
  157. this.NodeBody = MyViewData.Source;
  158. //
  159. foreach (Connecter connect in ListConnectpoint)
  160. connect.SetupSourceAndTexture(inputTexturePoint);
  161. backupTextureConnectpoint = inputTexturePoint;
  162. }
  163. public virtual void Setup(Texture2D inputTexture, Texture2D inputTexturePoint, Texture2D outputTexturePoint, SpriteFont inputFont)
  164. {
  165. this.SetupSourceAndTexture(inputTexture);
  166. Font = inputFont;
  167. this.NodeBody = MyViewData.Source;
  168. //
  169. foreach (Connecter connect in ListConnectpoint)
  170. if (connect.MySyco == Syco.Input)
  171. connect.SetupSourceAndTexture(inputTexturePoint);
  172. else if (connect.MySyco == Syco.Output)
  173. connect.SetupSourceAndTexture(outputTexturePoint);
  174. backupTextureConnectpoint = inputTexturePoint;
  175. }
  176. void SetupDepth()
  177. {
  178. // Setup Follow AddMetoList()
  179. MyViewData.Depth = (float)MyListDraw.Count / 1000f;
  180. foreach (Connecter connecter in ListConnectpoint)
  181. connecter.MyViewData.Depth = MyViewData.Depth;
  182. }
  183. #endregion
  184. #region System
  185. protected override void SubDraw()
  186. {
  187. base.SubDraw();
  188. #region Draw Font
  189. if (Font != null)
  190. this.spritebatch.DrawString(
  191. this.Font
  192. , MyViewData.Name
  193. , this.camera.ApplyPosition(this) + new Vector2(3, 3)
  194. , Color.Black
  195. , MyViewData.Rotation
  196. , MyViewData.Origin
  197. , MyViewData.Scale
  198. , MyViewData.Spriteeffects
  199. , MyViewData.Depth - 0.001f);
  200. #endregion
  201. }
  202. public override void UpdateTime(TimeSpan timespan)
  203. {
  204. base.UpdateTime(timespan);
  205. NodeBody = new Rectangle((int)this.camera.ApplyPosition(this).X, (int)this.camera.ApplyPosition(this).Y, NodeBody.Width, NodeBody.Height);
  206. }
  207. #endregion
  208. #region SetupInput and Clear Input Node
  209. public virtual void SetupInput(Connecter Thisconnect, Connecter connectOutput)
  210. {
  211. }
  212. public virtual void ClearInput(Connecter ThisInputConnect, Connecter ThisConnectClear, String NameThisClear)
  213. {
  214. }
  215. #endregion
  216. #region Setup Proprety Node and Recheck Connecter
  217. public virtual void ShowProprety(ArrayList Temp, CallBack input)
  218. {
  219. Temp.Clear();
  220. SaveData(Temp, SaveMode.Project);
  221. }
  222. public virtual void SetupProprety()
  223. {
  224. /// Clean ListOutput and Draw
  225. foreach (Connecter connect in ListConnectpointInput)
  226. {
  227. this.MyListDraw.Remove(connect);
  228. this.MyListUpdateTime.Remove(connect);
  229. this.ListConnectpoint.Remove(connect);
  230. }
  231. ListConnectpointInput = new List<Connecter>();
  232. foreach (LinkLine link in this.LinklinetoConnecter)
  233. link.Isconnect = false;
  234. /// New obj and add
  235. }
  236. protected void AfterSetupProprety()
  237. {
  238. foreach (Connecter connecter in ListConnectpoint)
  239. if (connecter.MySyco == Syco.Input)
  240. {
  241. connecter.SetupSourceAndTexture(backupTextureConnectpoint);
  242. ListConnectpointInput.Add(connecter);
  243. MyListDraw.Add(connecter);
  244. MyListUpdateTime.Add(connecter);
  245. }
  246. }
  247. public void Rename()
  248. {
  249. PropretyRename rename = new PropretyRename(this);
  250. rename.ShowDialog();
  251. }
  252. public virtual void ClearConnecter()
  253. {
  254. ListConnectpoint.Clear();
  255. ListConnectpointInput.Clear();
  256. ListConnectpointOutput.Clear();
  257. }
  258. #endregion
  259. #region ICloneable Members
  260. public object Clone()
  261. {
  262. return this.MemberwiseClone();
  263. }
  264. public NodeObject Copy()
  265. {
  266. return (NodeObject)this.Clone();
  267. }
  268. #endregion
  269. }
  270. }