SpawnPointCfg.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System;
  5. using System.Security;
  6. public enum SpawnPointType
  7. {
  8. Monster = 1, //小怪出生点
  9. Boss = 2, //boss出生点
  10. }
  11. [Serializable]
  12. public struct MonsterSpawnLoc
  13. {
  14. public Vector3 pos;
  15. public Vector3 rot;
  16. public int npcId;
  17. public long npcInstanceId;
  18. }
  19. public class SpawnPointCfg
  20. {
  21. private SpawnPointType mType = SpawnPointType.Monster;
  22. public SpawnPointType PointType
  23. {
  24. get { return mType; }
  25. }
  26. private Vector3 mPos;
  27. public Vector3 Pos
  28. {
  29. get { return mPos; }
  30. }
  31. private Vector3 mRot;
  32. public Vector3 Rot
  33. {
  34. get { return mRot; }
  35. }
  36. private Vector3 mTransferPos;
  37. public Vector3 TransferPos
  38. {
  39. get { return mTransferPos; }
  40. }
  41. private Vector3 mTransferRot;
  42. public Vector3 TransferRot
  43. {
  44. get { return mTransferRot; }
  45. }
  46. private Vector3 mBossCamPos;
  47. public Vector3 BossCamPos
  48. {
  49. get { return mBossCamPos; }
  50. }
  51. private Vector3 mBossCamRot;
  52. public Vector3 BossCamRot
  53. {
  54. get { return mBossCamRot; }
  55. }
  56. private float mCamFar;
  57. public float CamFar
  58. {
  59. get { return mCamFar; }
  60. }
  61. private List<MonsterSpawnLoc> mPointList;
  62. public List<MonsterSpawnLoc> PointList
  63. {
  64. get { return mPointList; }
  65. }
  66. private SpawnPoint mCurrentSpawnPoint = null;
  67. public SpawnPoint CurrentSpawnPoint
  68. {
  69. get
  70. {
  71. return mCurrentSpawnPoint;
  72. }
  73. set
  74. {
  75. mCurrentSpawnPoint = value;
  76. }
  77. }
  78. private float mActorDist = 3;
  79. public float ActorReadyDist
  80. {
  81. get { return mActorDist; }
  82. }
  83. private float mHorSpace = 2;
  84. public float HorSpace
  85. {
  86. get { return mHorSpace; }
  87. }
  88. private float mVerSpace = 2;
  89. public float VerSpace
  90. {
  91. get { return mVerSpace; }
  92. }
  93. public SpawnPointCfg()
  94. {
  95. mPointList = new List<MonsterSpawnLoc>();
  96. }
  97. public void LoadCfgXml(SecurityElement spNode)
  98. {
  99. mPointList.Clear();
  100. if (spNode == null) return;
  101. if (spNode.Children == null) return;
  102. int type = 0;
  103. int.TryParse(spNode.Attribute("type"), out type);
  104. mType = (SpawnPointType)type;
  105. float.TryParse(spNode.Attribute("px"), out mPos.x);
  106. float.TryParse(spNode.Attribute("py"), out mPos.y);
  107. float.TryParse(spNode.Attribute("pz"), out mPos.z);
  108. float.TryParse(spNode.Attribute("rx"), out mRot.x);
  109. float.TryParse(spNode.Attribute("ry"), out mRot.y);
  110. float.TryParse(spNode.Attribute("rz"), out mRot.z);
  111. float.TryParse(spNode.Attribute("actorReadyDist"), out mActorDist);
  112. float.TryParse(spNode.Attribute("hSpace"), out mHorSpace);
  113. float.TryParse(spNode.Attribute("vSpace"), out mVerSpace);
  114. for (int idx =0; idx < spNode.Children.Count;idx++)
  115. {
  116. var pointNode = spNode.Children[idx] as SecurityElement;
  117. if(pointNode.Tag.CompareTo("Transfer") == 0)
  118. {
  119. float.TryParse(pointNode.Attribute("px"), out mTransferPos.x);
  120. float.TryParse(pointNode.Attribute("py"), out mTransferPos.y);
  121. float.TryParse(pointNode.Attribute("pz"), out mTransferPos.z);
  122. float.TryParse(pointNode.Attribute("rx"), out mTransferRot.x);
  123. float.TryParse(pointNode.Attribute("ry"), out mTransferRot.y);
  124. float.TryParse(pointNode.Attribute("rz"), out mTransferRot.z);
  125. } else if(pointNode.Tag.CompareTo("Camera") == 0)
  126. {
  127. float.TryParse(pointNode.Attribute("px"), out mBossCamPos.x);
  128. float.TryParse(pointNode.Attribute("py"), out mBossCamPos.y);
  129. float.TryParse(pointNode.Attribute("pz"), out mBossCamPos.z);
  130. float.TryParse(pointNode.Attribute("rx"), out mBossCamRot.x);
  131. float.TryParse(pointNode.Attribute("ry"), out mBossCamRot.y);
  132. float.TryParse(pointNode.Attribute("rz"), out mBossCamRot.z);
  133. float.TryParse(pointNode.Attribute("far"), out mCamFar);
  134. }
  135. else
  136. {
  137. MonsterSpawnLoc loc = new MonsterSpawnLoc();
  138. float.TryParse(pointNode.Attribute("px"), out loc.pos.x);
  139. float.TryParse(pointNode.Attribute("py"), out loc.pos.y);
  140. float.TryParse(pointNode.Attribute("pz"), out loc.pos.z);
  141. float.TryParse(pointNode.Attribute("rx"), out loc.rot.x);
  142. float.TryParse(pointNode.Attribute("ry"), out loc.rot.y);
  143. float.TryParse(pointNode.Attribute("rz"), out loc.rot.z);
  144. int.TryParse(pointNode.Attribute("npcId"), out loc.npcId);
  145. mPointList.Add(loc);
  146. }
  147. }
  148. }
  149. public SecurityElement SaveCfgToXml()
  150. {
  151. if (mPointList == null || mPointList.Count == 0) return null;
  152. if (mCurrentSpawnPoint != null)
  153. {
  154. mCurrentSpawnPoint.SavePoint();
  155. SaveCfg(mCurrentSpawnPoint);
  156. }
  157. SecurityElement spNode = new SecurityElement("SpawnPoint");
  158. spNode.AddAttribute("type", ((int)mType).ToString());
  159. spNode.AddAttribute("px", mPos.x.ToString());
  160. spNode.AddAttribute("py", mPos.y.ToString());
  161. spNode.AddAttribute("pz", mPos.z.ToString());
  162. spNode.AddAttribute("rx", mRot.x.ToString());
  163. spNode.AddAttribute("ry", mRot.y.ToString());
  164. spNode.AddAttribute("rz", mRot.z.ToString());
  165. spNode.AddAttribute("actorReadyDist", mActorDist.ToString());
  166. spNode.AddAttribute("hSpace", mHorSpace.ToString());
  167. spNode.AddAttribute("vSpace", mVerSpace.ToString());
  168. for (int idx =0; idx < mPointList.Count;idx++)
  169. {
  170. MonsterSpawnLoc loc = mPointList[idx];
  171. SecurityElement pointNode = new SecurityElement("Point");
  172. pointNode.AddAttribute("px", loc.pos.x.ToString());
  173. pointNode.AddAttribute("py", loc.pos.y.ToString());
  174. pointNode.AddAttribute("pz", loc.pos.z.ToString());
  175. pointNode.AddAttribute("rx", loc.rot.x.ToString());
  176. pointNode.AddAttribute("ry", loc.rot.y.ToString());
  177. pointNode.AddAttribute("rz", loc.rot.z.ToString());
  178. pointNode.AddAttribute("npcId", loc.npcId.ToString());
  179. spNode.AddChild(pointNode);
  180. }
  181. if(mType == SpawnPointType.Boss)
  182. {
  183. SecurityElement transferNode = new SecurityElement("Transfer");
  184. transferNode.AddAttribute("px", mTransferPos.x.ToString());
  185. transferNode.AddAttribute("py", mTransferPos.y.ToString());
  186. transferNode.AddAttribute("pz", mTransferPos.z.ToString());
  187. transferNode.AddAttribute("rx", mTransferRot.x.ToString());
  188. transferNode.AddAttribute("ry", mTransferRot.y.ToString());
  189. transferNode.AddAttribute("rz", mTransferRot.z.ToString());
  190. spNode.AddChild(transferNode);
  191. SecurityElement camNode = new SecurityElement("Camera");
  192. camNode.AddAttribute("px", mBossCamPos.x.ToString());
  193. camNode.AddAttribute("py", mBossCamPos.y.ToString());
  194. camNode.AddAttribute("pz", mBossCamPos.z.ToString());
  195. camNode.AddAttribute("rx", mBossCamRot.x.ToString());
  196. camNode.AddAttribute("ry", mBossCamRot.y.ToString());
  197. camNode.AddAttribute("rz", mBossCamRot.z.ToString());
  198. camNode.AddAttribute("far", mCamFar.ToString());
  199. spNode.AddChild(camNode);
  200. }
  201. return spNode;
  202. }
  203. public void SaveCfg(SpawnPoint sp)
  204. {
  205. mCurrentSpawnPoint = sp;
  206. mPos = sp.transform.position;
  207. mRot = sp.transform.eulerAngles;
  208. mType = sp.type;
  209. mTransferPos = sp.transferPos;
  210. mTransferRot = sp.transferRot;
  211. mActorDist = sp.fActorReadyDist;
  212. mHorSpace = sp.fHorSpace;
  213. mVerSpace = sp.fVerSpace;
  214. mBossCamPos = sp.camPos;
  215. mBossCamRot = sp.camRot;
  216. mCamFar = sp.camFar;
  217. mPointList.Clear();
  218. mPointList.AddRange(sp.spawnLocs);
  219. }
  220. public void AddPoint(Vector3 pos,Vector3 rot)
  221. {
  222. MonsterSpawnLoc loc = new MonsterSpawnLoc();
  223. loc.pos = pos;
  224. loc.rot = rot;
  225. mPointList.Add(loc);
  226. }
  227. public void DeletePoint(MonsterSpawnLoc loc)
  228. {
  229. mPointList.Remove(loc);
  230. }
  231. }