PreviewTeamMgr.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using LuaInterface;
  5. using UnityEngine.SceneManagement;
  6. public class PreviewTeamMgr : SingletonMono<PreviewTeamMgr>
  7. {
  8. private List<ActorAvatar> mActors;
  9. private bool bSceneLoaded = false;
  10. private bool bActorsLoaded = false;
  11. private LuaTable mLuaTbl;
  12. private TowerTeamBornInfo mTeamBornInfo;
  13. private GameObject mCamGo = null;
  14. private Camera mCam;
  15. private bool bInPreview = false;
  16. public bool InPreview
  17. {
  18. get
  19. {
  20. return bInPreview;
  21. }
  22. }
  23. int layerMask = 0;
  24. public override void InitMgr()
  25. {
  26. base.InitMgr();
  27. }
  28. private void Update()
  29. {
  30. if (mCam == null) return;
  31. for (int idx = 0; idx < mActors.Count; idx++)
  32. mActors[idx].Update(mCam);
  33. if (SceneEventCtl.UpdateRaycastHit(mCam, layerMask))
  34. {
  35. OnHitActor();
  36. }
  37. }
  38. public void LoadPreviewActorsAndScene(ActorData[] actors, string sceneName, LuaTable tbl)
  39. {
  40. if (actors == null || actors.Length == 0 || string.IsNullOrEmpty(sceneName))
  41. return;
  42. if (mActors == null)
  43. mActors = new List<ActorAvatar>();
  44. else
  45. CleanActors();
  46. mLuaTbl = tbl;
  47. mTeamBornInfo = TowerBattleCfgMgr.Instance.TeamBornData;
  48. if(mTeamBornInfo == null)
  49. {
  50. TowerBattleCfgMgr.Instance.ReadCfg();
  51. }
  52. for (int idx = 0; idx < actors.Length; idx++)
  53. {
  54. ActorAvatar avatar = new ActorAvatar(actors[idx]);
  55. mActors.Add(avatar);
  56. avatar.ParseLoad();
  57. }
  58. LoadScene(sceneName);
  59. bInPreview = true;
  60. }
  61. public void Show()
  62. {
  63. if (mActors == null) return;
  64. for (int idx = 0; idx < mActors.Count; idx++)
  65. mActors[idx].IsVisible = true;
  66. SetCamera();
  67. BattleFlyWordMgr.Instance.SetHudVisible(true);
  68. }
  69. public void Hide()
  70. {
  71. if (mActors == null) return;
  72. for (int idx = 0; idx < mActors.Count; idx++)
  73. mActors[idx].IsVisible = false;
  74. }
  75. public void PlayEffect(int uid)
  76. {
  77. ActorAvatar actor = FindAvatarById(uid);
  78. if (actor == null) return;
  79. actor.PlayEffect();
  80. }
  81. public void StopEffect(int uid)
  82. {
  83. ActorAvatar actor = FindAvatarById(uid);
  84. if (actor == null) return;
  85. actor.StopEffect();
  86. }
  87. public void PlayAnim(int uid, string animName)
  88. {
  89. if (string.IsNullOrEmpty(animName)) return;
  90. ActorAvatar actor = FindAvatarById(uid);
  91. if (actor == null) return;
  92. actor.PlayAnim(animName);
  93. }
  94. public void SetBattleFlag(int uid, bool inBattle)
  95. {
  96. ActorAvatar actor = FindAvatarById(uid);
  97. if (actor == null) return;
  98. actor.SetBattleFlag(inBattle);
  99. if (inBattle)
  100. {
  101. actor.PlayAnim(Constants.ArenaOnBattleAniName);
  102. actor.PlayEffect();
  103. }
  104. else
  105. {
  106. actor.PlayAnim(Constants.ArenaOffBattleAniName);
  107. actor.StopEffect();
  108. }
  109. }
  110. private ActorAvatar FindAvatarById(long uid)
  111. {
  112. if (mActors == null) return null;
  113. for(int idx =0; idx < mActors.Count;idx++)
  114. {
  115. if (mActors[idx].Data.ID == uid) return mActors[idx];
  116. }
  117. return null;
  118. }
  119. private void LoadScene(string sceneName)
  120. {
  121. EventMgr.AddEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
  122. SceneMgr.Instance.AsyncLoadMainScene(sceneName);
  123. if (mLuaTbl != null)
  124. mLuaTbl.CallCS2Lua("OnLoadBegin");
  125. }
  126. private void OnSceneLoaded(CoreEvent<string> ce)
  127. {
  128. if (mLuaTbl != null)
  129. mLuaTbl.CallCS2Lua("OnLoadProgress",0.3f);
  130. EventMgr.RemoveEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
  131. bSceneLoaded = true;
  132. Scene mScene = SceneManager.GetSceneByName(ce.Data);
  133. if (mScene.isLoaded)
  134. {
  135. GameObject[] rootObjs = mScene.GetRootGameObjects();
  136. mCamGo = rootObjs.FindFirst(a => a.name.CompareTo(Constants.go_name_camera_target) == 0);
  137. mCamGo.SetActive(true);
  138. SetCamera();
  139. }
  140. layerMask = LayerMask.NameToLayer(BattleCamera.FighterLayerName);
  141. LoadActors();
  142. }
  143. private void LoadActors()
  144. {
  145. EventMgr.AddEventListener<bool>(ECoreEventType.EID_PREPARE_LOAD_OK, OnPrepareLoadOk);
  146. BattlePrepareManager.Instance.StartLoad();
  147. }
  148. private void OnPrepareLoadOk(CoreEvent<bool> ce)
  149. {
  150. if (ce.Data)
  151. {
  152. if (mLuaTbl != null)
  153. mLuaTbl.CallCS2Lua("OnLoadProgress", 0.7f);
  154. EventMgr.RemoveEventListener<bool>(ECoreEventType.EID_PREPARE_LOAD_OK, OnPrepareLoadOk);
  155. bActorsLoaded = true;
  156. CheckLoadingStatus();
  157. }
  158. }
  159. private void CheckLoadingStatus()
  160. {
  161. if(bSceneLoaded && bActorsLoaded)
  162. {
  163. CreateActors();
  164. if (mLuaTbl != null)
  165. mLuaTbl.CallCS2Lua("OnLoadComplete");
  166. EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_LOAD_COMPLETE, true));
  167. if (mLuaTbl != null)
  168. {
  169. mLuaTbl.CallCS2Lua("OnStartPreview");
  170. }
  171. }
  172. }
  173. private void CreateActors()
  174. {
  175. for(int idx =0; idx < mActors.Count;idx++)
  176. {
  177. if (mLuaTbl != null)
  178. mLuaTbl.CallCS2Lua("OnLoadProgress", 0.7f + (idx/mActors.Count) * 0.3f);
  179. mActors[idx].CreateGo(mTeamBornInfo.bornPosList[idx],mCam);
  180. }
  181. BattleFlyWordMgr.Instance.SetHudVisible(true);
  182. }
  183. private void OnHitActor()
  184. {
  185. var hitActorTrans = SceneEventCtl.hit.transform;
  186. ActorAvatar avatar = FindActorByTrans(hitActorTrans);
  187. if(avatar!=null)
  188. {
  189. if (mLuaTbl != null)
  190. mLuaTbl.CallCS2Lua("OnHitActor", avatar.Data.ID);
  191. }
  192. }
  193. private ActorAvatar FindActorByTrans(Transform trans)
  194. {
  195. if (mActors == null || trans == null) return null;
  196. for(int idx =0; idx < mActors.Count;idx++)
  197. {
  198. if (mActors[idx].AvatarGo != null && mActors[idx].AvatarGo.transform == trans) return mActors[idx];
  199. }
  200. return null;
  201. }
  202. private void SetCamera()
  203. {
  204. if (mCamGo != null)
  205. {
  206. Transform camTrans = mCamGo.transform;
  207. camTrans.position = mTeamBornInfo.camPos;
  208. camTrans.rotation = Quaternion.Euler(mTeamBornInfo.camRot);
  209. mCam = mCamGo.GetComponentInChildren<Camera>();
  210. if (mCam != null)
  211. {
  212. mCam.fieldOfView = mTeamBornInfo.fov;
  213. mCam.enabled = true;
  214. mCam.cullingMask = BattleCamera.Instance.CullingMask;
  215. }
  216. mCamGo.SetActive(true);
  217. }
  218. }
  219. private void CleanActors()
  220. {
  221. if (mActors == null) return;
  222. for(int idx =0; idx < mActors.Count;idx++)
  223. {
  224. mActors[idx].Dispose();
  225. }
  226. mActors.Clear();
  227. }
  228. public void Clean()
  229. {
  230. CleanActors();
  231. mTeamBornInfo = null;
  232. mLuaTbl = null;
  233. bSceneLoaded = false;
  234. bActorsLoaded = false;
  235. bInPreview = false;
  236. mCamGo = null;
  237. mCam = null;
  238. }
  239. }