| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using LuaInterface;
- using UnityEngine.SceneManagement;
- public class PreviewTeamMgr : SingletonMono<PreviewTeamMgr>
- {
- private List<ActorAvatar> mActors;
- private bool bSceneLoaded = false;
- private bool bActorsLoaded = false;
- private LuaTable mLuaTbl;
- private TowerTeamBornInfo mTeamBornInfo;
- private GameObject mCamGo = null;
- private Camera mCam;
- private bool bInPreview = false;
- public bool InPreview
- {
- get
- {
- return bInPreview;
- }
- }
- int layerMask = 0;
- public override void InitMgr()
- {
- base.InitMgr();
- }
- private void Update()
- {
- if (mCam == null) return;
- for (int idx = 0; idx < mActors.Count; idx++)
- mActors[idx].Update(mCam);
- if (SceneEventCtl.UpdateRaycastHit(mCam, layerMask))
- {
- OnHitActor();
- }
- }
- public void LoadPreviewActorsAndScene(ActorData[] actors, string sceneName, LuaTable tbl)
- {
- if (actors == null || actors.Length == 0 || string.IsNullOrEmpty(sceneName))
- return;
- if (mActors == null)
- mActors = new List<ActorAvatar>();
- else
- CleanActors();
- mLuaTbl = tbl;
- mTeamBornInfo = TowerBattleCfgMgr.Instance.TeamBornData;
- if(mTeamBornInfo == null)
- {
- TowerBattleCfgMgr.Instance.ReadCfg();
- }
-
- for (int idx = 0; idx < actors.Length; idx++)
- {
- ActorAvatar avatar = new ActorAvatar(actors[idx]);
- mActors.Add(avatar);
- avatar.ParseLoad();
- }
- LoadScene(sceneName);
- bInPreview = true;
- }
- public void Show()
- {
- if (mActors == null) return;
- for (int idx = 0; idx < mActors.Count; idx++)
- mActors[idx].IsVisible = true;
- SetCamera();
- BattleFlyWordMgr.Instance.SetHudVisible(true);
- }
- public void Hide()
- {
- if (mActors == null) return;
- for (int idx = 0; idx < mActors.Count; idx++)
- mActors[idx].IsVisible = false;
- }
- public void PlayEffect(int uid)
- {
- ActorAvatar actor = FindAvatarById(uid);
- if (actor == null) return;
- actor.PlayEffect();
- }
-
- public void StopEffect(int uid)
- {
- ActorAvatar actor = FindAvatarById(uid);
- if (actor == null) return;
- actor.StopEffect();
- }
-
- public void PlayAnim(int uid, string animName)
- {
- if (string.IsNullOrEmpty(animName)) return;
- ActorAvatar actor = FindAvatarById(uid);
- if (actor == null) return;
- actor.PlayAnim(animName);
- }
- public void SetBattleFlag(int uid, bool inBattle)
- {
- ActorAvatar actor = FindAvatarById(uid);
- if (actor == null) return;
- actor.SetBattleFlag(inBattle);
- if (inBattle)
- {
- actor.PlayAnim(Constants.ArenaOnBattleAniName);
- actor.PlayEffect();
- }
- else
- {
- actor.PlayAnim(Constants.ArenaOffBattleAniName);
- actor.StopEffect();
- }
- }
- private ActorAvatar FindAvatarById(long uid)
- {
- if (mActors == null) return null;
- for(int idx =0; idx < mActors.Count;idx++)
- {
- if (mActors[idx].Data.ID == uid) return mActors[idx];
- }
- return null;
- }
- private void LoadScene(string sceneName)
- {
- EventMgr.AddEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
- SceneMgr.Instance.AsyncLoadMainScene(sceneName);
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnLoadBegin");
- }
- private void OnSceneLoaded(CoreEvent<string> ce)
- {
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnLoadProgress",0.3f);
- EventMgr.RemoveEventListener<string>(ECoreEventType.EID_Scene_Loaded, OnSceneLoaded);
- bSceneLoaded = true;
- Scene mScene = SceneManager.GetSceneByName(ce.Data);
- if (mScene.isLoaded)
- {
- GameObject[] rootObjs = mScene.GetRootGameObjects();
- mCamGo = rootObjs.FindFirst(a => a.name.CompareTo(Constants.go_name_camera_target) == 0);
- mCamGo.SetActive(true);
- SetCamera();
- }
- layerMask = LayerMask.NameToLayer(BattleCamera.FighterLayerName);
- LoadActors();
- }
- private void LoadActors()
- {
- EventMgr.AddEventListener<bool>(ECoreEventType.EID_PREPARE_LOAD_OK, OnPrepareLoadOk);
- BattlePrepareManager.Instance.StartLoad();
- }
- private void OnPrepareLoadOk(CoreEvent<bool> ce)
- {
- if (ce.Data)
- {
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnLoadProgress", 0.7f);
- EventMgr.RemoveEventListener<bool>(ECoreEventType.EID_PREPARE_LOAD_OK, OnPrepareLoadOk);
- bActorsLoaded = true;
- CheckLoadingStatus();
- }
- }
- private void CheckLoadingStatus()
- {
- if(bSceneLoaded && bActorsLoaded)
- {
- CreateActors();
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnLoadComplete");
- EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_LOAD_COMPLETE, true));
- if (mLuaTbl != null)
- {
- mLuaTbl.CallCS2Lua("OnStartPreview");
- }
- }
- }
- private void CreateActors()
- {
- for(int idx =0; idx < mActors.Count;idx++)
- {
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnLoadProgress", 0.7f + (idx/mActors.Count) * 0.3f);
- mActors[idx].CreateGo(mTeamBornInfo.bornPosList[idx],mCam);
- }
- BattleFlyWordMgr.Instance.SetHudVisible(true);
- }
- private void OnHitActor()
- {
- var hitActorTrans = SceneEventCtl.hit.transform;
- ActorAvatar avatar = FindActorByTrans(hitActorTrans);
- if(avatar!=null)
- {
- if (mLuaTbl != null)
- mLuaTbl.CallCS2Lua("OnHitActor", avatar.Data.ID);
- }
- }
- private ActorAvatar FindActorByTrans(Transform trans)
- {
- if (mActors == null || trans == null) return null;
- for(int idx =0; idx < mActors.Count;idx++)
- {
- if (mActors[idx].AvatarGo != null && mActors[idx].AvatarGo.transform == trans) return mActors[idx];
- }
- return null;
- }
- private void SetCamera()
- {
- if (mCamGo != null)
- {
- Transform camTrans = mCamGo.transform;
- camTrans.position = mTeamBornInfo.camPos;
- camTrans.rotation = Quaternion.Euler(mTeamBornInfo.camRot);
- mCam = mCamGo.GetComponentInChildren<Camera>();
- if (mCam != null)
- {
- mCam.fieldOfView = mTeamBornInfo.fov;
- mCam.enabled = true;
- mCam.cullingMask = BattleCamera.Instance.CullingMask;
- }
- mCamGo.SetActive(true);
- }
- }
- private void CleanActors()
- {
- if (mActors == null) return;
- for(int idx =0; idx < mActors.Count;idx++)
- {
- mActors[idx].Dispose();
- }
- mActors.Clear();
- }
- public void Clean()
- {
- CleanActors();
- mTeamBornInfo = null;
- mLuaTbl = null;
- bSceneLoaded = false;
- bActorsLoaded = false;
- bInPreview = false;
- mCamGo = null;
- mCam = null;
- }
- }
|