CreateRoleMgr.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine.SceneManagement;
  5. using LuaInterface;
  6. public class CreateRoleMgr : Singleton<CreateRoleMgr>
  7. {
  8. private bool bLoaded = false;
  9. private bool bHasStartLoad = false;
  10. private GameObject mMaleRoot;
  11. private GameObject mFemaleRoot;
  12. private GameObject mShowRoot;
  13. private Camera mCam;
  14. private DepthOfFieldPostEffect dof;
  15. private int layerMask = 0;
  16. private int mUpdateTimer = -1;
  17. private LuaTable mCreateRoleLuaTbl;
  18. private Animator mAnimator;
  19. private int mTransferEffectId = 0;
  20. private CapsuleCollider mMaleCapsuleCollider = null;
  21. private CapsuleCollider mFemaleCapsuleCollider = null;
  22. public GameObject MaleRoot
  23. {
  24. get { return mMaleRoot; }
  25. }
  26. public GameObject FemaleRoot
  27. {
  28. get { return mFemaleRoot; }
  29. }
  30. public GameObject ShowRoot
  31. {
  32. get { return mShowRoot; }
  33. }
  34. private GameObject mMaleGo;
  35. private GameObject mFemaleGo;
  36. public override void Init()
  37. {
  38. base.Init();
  39. layerMask = 1 << LayerMask.NameToLayer(BattleCamera.FighterLayerName);
  40. }
  41. public void Clear()
  42. {
  43. if (mMaleGo != null)
  44. {
  45. GameObject.Destroy(mMaleGo);
  46. mMaleGo = null;
  47. }
  48. if (mFemaleGo != null)
  49. {
  50. GameObject.Destroy(mFemaleGo);
  51. mFemaleGo = null;
  52. }
  53. bLoaded = false;
  54. bHasStartLoad = false;
  55. mCreateRoleLuaTbl = null;
  56. if (mUpdateTimer > 0)
  57. {
  58. TimerManager.Instance.RemoveTimer(mUpdateTimer);
  59. mUpdateTimer = 0;
  60. }
  61. }
  62. public void SetLuaTable(LuaTable luaTbl)
  63. {
  64. mCreateRoleLuaTbl = luaTbl;
  65. if (mCreateRoleLuaTbl != null)
  66. {
  67. Animator maleAnim = mMaleGo.GetComponent<Animator>();
  68. Animator femaleAnim = mFemaleGo.GetComponent<Animator>();
  69. mCreateRoleLuaTbl.CallCS2Lua("SetActorAnim", maleAnim, femaleAnim);
  70. }
  71. }
  72. public void LoadScene()
  73. {
  74. if (bHasStartLoad) return;
  75. bHasStartLoad = true;
  76. EventMgr.AddEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
  77. EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_LOAD_BEGIN, true));
  78. SceneMgr.Instance.AsyncLoadMainScene("Scene_CreateRole");
  79. if (mUpdateTimer > 0)
  80. {
  81. TimerManager.Instance.RemoveTimer(mUpdateTimer);
  82. }
  83. mUpdateTimer = TimerManager.Instance.AddTimer(16, -1, Update);
  84. }
  85. public void PlayAnim(string animName, bool forward)
  86. {
  87. if (mAnimator != null)
  88. {
  89. mAnimator.Play(animName);
  90. }
  91. }
  92. public bool IsPlayAnimEnd(string animName)
  93. {
  94. if (mAnimator == null)
  95. {
  96. return false;
  97. }
  98. var stateInfo = mAnimator.GetCurrentAnimatorStateInfo(0);
  99. if (!stateInfo.IsName(animName))
  100. {
  101. return false;
  102. }
  103. if (stateInfo.loop)
  104. {
  105. return false;
  106. }
  107. if (stateInfo.normalizedTime < 1)
  108. {
  109. return false;
  110. }
  111. return true;
  112. }
  113. public void EnableCam()
  114. {
  115. if (mCam != null)
  116. mCam.gameObject.SetActive(true);
  117. }
  118. public void OpenDof()
  119. {
  120. if (dof != null)
  121. dof.enabled = true;
  122. }
  123. public void CloseDof()
  124. {
  125. if (dof != null)
  126. dof.enabled = false;
  127. }
  128. public void PlayTransferEffect()
  129. {
  130. if (mTransferEffectId == 0) return;
  131. EffectManager.Instance.PlayEffect(mTransferEffectId, selectedRole, selectedRole);
  132. }
  133. private void OnSceneLoaded(CoreEvent<string> sceneName)
  134. {
  135. EventMgr.RemoveEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
  136. bLoaded = true;
  137. bHasStartLoad = false;
  138. string bgmName = GlobalConfig.Instance.GetConfigStrValue(132);
  139. if (!string.IsNullOrEmpty(bgmName))
  140. MusicMgr.Instance.PlayBGMusic(bgmName);
  141. Scene scene = SceneManager.GetSceneByName(sceneName.Data);
  142. GameObject[] rootObjs = scene.GetRootGameObjects();
  143. mMaleRoot = rootObjs.FindFirst(a => a.name.CompareTo("MaleRoot") == 0);
  144. mFemaleRoot = rootObjs.FindFirst(a => a.name.CompareTo("FemaleRoot") == 0);
  145. mShowRoot = rootObjs.FindFirst(a => a.name.CompareTo("ShowRoot") == 0);
  146. mCam = Camera.main;
  147. mAnimator = mCam.GetComponent<Animator>();
  148. dof = mCam.GetComponent<DepthOfFieldPostEffect>();
  149. if (dof != null)
  150. dof.enabled = false;
  151. string malePrefabName = GlobalConfig.Instance.GetConfigStrValue(128);
  152. string femalePrefabName = GlobalConfig.Instance.GetConfigStrValue(129);
  153. List<string> models = new List<string>();
  154. if (!string.IsNullOrEmpty(malePrefabName))
  155. models.Add(malePrefabName);
  156. if (!string.IsNullOrEmpty(femalePrefabName))
  157. models.Add(femalePrefabName);
  158. ResourceMgr.Instance.LoadAsset<List<GameObject>>(OnLoadModelCompleted, Constants.HeroPath, models.ToArray());
  159. mTransferEffectId = GlobalConfig.Instance.GetConfigIntValue(134); //开启传送门特效
  160. if (mTransferEffectId > 0)
  161. {
  162. BattlePrepareManager.Instance.PrecacheEffect(mTransferEffectId);
  163. BattlePrepareManager.Instance.StartLoad();
  164. }
  165. }
  166. private void OnLoadModelCompleted(List<GameObject> goes, string assetPath, string[] assetNames)
  167. {
  168. mMaleGo = GameObject.Instantiate(goes[0]);
  169. if (mMaleRoot != null)
  170. {
  171. mMaleGo.transform.SetParent(mMaleRoot.transform);
  172. mMaleGo.transform.localPosition = Vector3.zero;
  173. mMaleGo.transform.localRotation = Quaternion.identity;
  174. mMaleGo.name = "Male";
  175. mMaleCapsuleCollider = LuaBattleBridge.AddCapsuleCollider(mMaleGo, 2.5f, new Vector3(0, 1, 0));
  176. }
  177. mFemaleGo = GameObject.Instantiate(goes[1]);
  178. if (mFemaleRoot != null)
  179. {
  180. mFemaleGo.transform.SetParent(mFemaleRoot.transform);
  181. mFemaleGo.transform.localPosition = Vector3.zero;
  182. mFemaleGo.transform.localRotation = Quaternion.identity;
  183. mFemaleGo.name = "Female";
  184. mFemaleCapsuleCollider = LuaBattleBridge.AddCapsuleCollider(mFemaleGo, 2.5f, new Vector3(0, 1, 0));
  185. }
  186. //DebugHelper.LogError(DebugHelper.Tag_BHY + " CreateRoleMgr LoadCompleted");
  187. EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_LOAD_COMPLETE, true));
  188. }
  189. private void Update(int timer)
  190. {
  191. if (mCam == null) return;
  192. if (SceneEventCtl.UpdateRaycastHit(mCam, layerMask))
  193. {
  194. OnHitActor();
  195. }
  196. //else if(Input.GetMouseButtonUp(0))
  197. //{
  198. // OnCancelActor();
  199. //}
  200. }
  201. private Transform selectedRole = null;
  202. private void OnHitActor()
  203. {
  204. var newSelectedRole = SceneEventCtl.hit.transform;
  205. bool isMale = newSelectedRole.name == "Male";
  206. if (mCreateRoleLuaTbl != null)
  207. {
  208. bool changed = mCreateRoleLuaTbl.InvokeCS2Lua<bool, GameObject, bool>("OnSelectRole", isMale, newSelectedRole.gameObject);
  209. if (changed)
  210. {
  211. selectedRole = newSelectedRole;
  212. mFemaleCapsuleCollider.radius = 1;
  213. mMaleCapsuleCollider.radius = 1;
  214. if (isMale)
  215. {
  216. mFemaleCapsuleCollider.enabled = true;
  217. mMaleCapsuleCollider.enabled = false;
  218. }
  219. else
  220. {
  221. mFemaleCapsuleCollider.enabled = false;
  222. mMaleCapsuleCollider.enabled = true;
  223. }
  224. }
  225. }
  226. }
  227. private void OnCancelActor()
  228. {
  229. if (selectedRole != null)
  230. {
  231. if (mCreateRoleLuaTbl != null)
  232. {
  233. mCreateRoleLuaTbl.CallCS2Lua("CancelSelected");
  234. }
  235. selectedRole = null;
  236. }
  237. }
  238. }