| New file |
| | |
| | | using System;
|
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | namespace Snxxz.UI
|
| | | {
|
| | | public class RealmBossShow : MonoBehaviour
|
| | | {
|
| | | [SerializeField, Header("特效id")] int m_EffectId = 0;
|
| | | [SerializeField, Header("隐藏场景时间")] float m_HideGroundTime = 2.02f;
|
| | | [SerializeField, Header("展示时间")] float m_DisplayTime = 15f;
|
| | | [SerializeField, Header("特效位置")] Vector3 m_EffectPosition = Vector3.zero;
|
| | |
|
| | | UI3DShowHero showHero = new UI3DShowHero();
|
| | |
|
| | | static RealmBossShow m_Instance = null;
|
| | | public static RealmBossShow Instance
|
| | | {
|
| | | get
|
| | | {
|
| | | if (m_Instance == null)
|
| | | {
|
| | | var gameObject = Instantiate(UILoader.LoadPrefab("RealmBossShow"));
|
| | | m_Instance = gameObject.GetComponent<RealmBossShow>();
|
| | | m_Instance.transform.position = new Vector3(0, 4000, 5000);
|
| | | m_Instance.name = "RealmBossShow";
|
| | | m_Instance.IsOpen = false;
|
| | | m_Instance.gameObject.SetActive(true);
|
| | | DontDestroyOnLoad(gameObject);
|
| | | }
|
| | | return m_Instance;
|
| | | }
|
| | | }
|
| | |
|
| | | PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
|
| | | DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
| | |
|
| | | SFXController m_Effect;
|
| | | Camera showCamera;
|
| | | Transform m_HeroStage;
|
| | |
|
| | | public bool IsOpen { get; private set; }
|
| | |
|
| | | DateTime overdueTime = DateTime.Now;
|
| | | DateTime hideGroundTime = DateTime.Now;
|
| | | DateTime forceCloseTime = DateTime.Now;
|
| | |
|
| | | public void Open()
|
| | | {
|
| | | if (IsOpen)
|
| | | {
|
| | | return;
|
| | | }
|
| | | try
|
| | | {
|
| | | IsOpen = true;
|
| | | transform.localPosition = Vector3.zero;
|
| | | m_Effect = SFXPlayUtility.Instance.Play(m_EffectId, transform);
|
| | | m_Effect.duration = 0;
|
| | | m_Effect.transform.localPosition = Vector3.zero;
|
| | | LayerUtility.SetLayer(m_Effect.gameObject, LayerUtility.BossShow, true);
|
| | | showCamera = m_Effect.transform.GetComponentInChildren<Camera>();
|
| | | m_HeroStage = m_Effect.transform.Find("Animation/zhujue/guadian");
|
| | | overdueTime = DateTime.Now.AddSeconds(m_DisplayTime);
|
| | | hideGroundTime = DateTime.Now.AddSeconds(m_HideGroundTime);
|
| | | forceCloseTime = DateTime.Now.AddSeconds(m_DisplayTime + 10);
|
| | | showCamera.cullingMask = 1 << LayerUtility.GroundLayer;
|
| | | CameraUtility.AddCullingMask(showCamera, LayerUtility.DefaultLayer);
|
| | | CameraUtility.AddCullingMask(showCamera, LayerUtility.BossShow);
|
| | | showCamera.enabled = true;
|
| | | LoadHero();
|
| | | }
|
| | | catch (Exception e)
|
| | | {
|
| | | IsOpen = false;
|
| | | ExitDungeon();
|
| | | DesignDebug.LogError(e.Message);
|
| | | return;
|
| | | }
|
| | | CameraController.Instance.CameraObject.gameObject.SetActive(false);
|
| | | WindowCenter.Instance.uiRoot.uicamera.enabled = false;
|
| | |
|
| | | StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
|
| | | StageManager.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
|
| | | }
|
| | |
|
| | | void LoadHero()
|
| | | {
|
| | | var _job = PlayerDatas.Instance.baseData.Job;
|
| | | #region 装备
|
| | | var clothes = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retClothes);
|
| | | var _clothesId = clothes == null ? 0 : (int)clothes.itemInfo.ItemID;
|
| | |
|
| | | var weapon = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retWeapon);
|
| | | var _weaponId = weapon == null ? 0 : (int)weapon.itemInfo.ItemID;
|
| | |
|
| | | var wings = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retWing);
|
| | | var _wingsId = wings == null ? 0 : (int)wings.itemInfo.ItemID;
|
| | |
|
| | | var secondary = playerPack.GetItemModelByIndex(PackType.rptEquip, (int)RoleEquipType.retWeapon2);
|
| | | var _secondaryId = secondary == null ? 0 : (int)secondary.itemInfo.ItemID;
|
| | |
|
| | | int _suitLevel = 0;
|
| | |
|
| | | if (clothes != null)
|
| | | {
|
| | | if (clothes.itemInfo.IsSuite == 1)
|
| | | {
|
| | | if (clothes.GetUseDataModel(30) != null && clothes.GetUseDataModel(30)[0] != 0)
|
| | | {
|
| | | _suitLevel = clothes.GetUseDataModel(30)[0];
|
| | | }
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | var _hero = showHero.Show(_job, _clothesId, _suitLevel, _weaponId, _wingsId, _secondaryId, m_HeroStage);
|
| | | if (_hero != null)
|
| | | {
|
| | | showHero.SitDown();
|
| | | LayerUtility.SetLayer(m_HeroStage.gameObject, LayerUtility.BossShow, true);
|
| | | }
|
| | | }
|
| | |
|
| | | private void LateUpdate()
|
| | | {
|
| | | if (IsOpen && DateTime.Now > overdueTime)
|
| | | {
|
| | | ExitDungeon();
|
| | | }
|
| | | if (IsOpen && DateTime.Now > forceCloseTime)
|
| | | {
|
| | | Stop();
|
| | | }
|
| | | if (IsOpen && DateTime.Now > hideGroundTime)
|
| | | {
|
| | | HideGound();
|
| | | }
|
| | | }
|
| | |
|
| | | public void HideGound()
|
| | | {
|
| | | CameraUtility.RemoveCullingMask(showCamera, LayerUtility.GroundLayer);
|
| | | CameraUtility.RemoveCullingMask(showCamera, LayerUtility.DefaultLayer);
|
| | | }
|
| | |
|
| | | void ExitDungeon()
|
| | | {
|
| | | IsOpen = false;
|
| | | dungeonModel.ExitCurrentDungeon();
|
| | | }
|
| | |
|
| | | private void OnStartStageLoadingEvent(int obj)
|
| | | {
|
| | | Stop();
|
| | | }
|
| | |
|
| | | public void Stop()
|
| | | {
|
| | | IsOpen = false;
|
| | | StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
|
| | | CameraController.Instance.CameraObject.gameObject.SetActive(true);
|
| | | WindowCenter.Instance.uiRoot.uicamera.enabled = true;
|
| | | showCamera.enabled = false;
|
| | | m_Effect.gameObject.SetActive(false);
|
| | | transform.localPosition = new Vector3(0, 4000, 5000);
|
| | | showHero.Dispose();
|
| | | if (m_Effect != null)
|
| | | {
|
| | | SFXPlayUtility.Instance.Release(m_Effect);
|
| | | m_Effect = null;
|
| | | }
|
| | | }
|
| | | }
|
| | | } |
| | | |