172 lines
5.0 KiB
C#
172 lines
5.0 KiB
C#
using System.Collections.Generic;
|
|
using Code.Scripts.Gameplay.Utils;
|
|
using Cysharp.Threading.Tasks;
|
|
using Framework;
|
|
using Gameplay.Unit;
|
|
using PhxhSDK;
|
|
using UnityEngine.Rendering.Universal;
|
|
using Constants = Framework.Constants;
|
|
|
|
namespace Gameplay.Skill
|
|
{
|
|
using Common;
|
|
using UnityEngine;
|
|
|
|
public class SkillScreenEffect
|
|
{
|
|
|
|
public Camera skillCamera;
|
|
|
|
private List<GameObject> _cacheObjs;
|
|
private List<int> _cacheLayers;
|
|
|
|
private List<GameUnit> _cacheUnits;
|
|
public List<GameUnit> cacheUnits
|
|
{
|
|
get
|
|
{
|
|
return _cacheUnits;
|
|
}
|
|
}
|
|
|
|
public bool isHide;
|
|
|
|
public SkillRotateCamera rotateCamera;
|
|
|
|
public void Init()
|
|
{
|
|
skillCamera = CmpObjRef.instance.m_SkillCamera;
|
|
skillCamera.gameObject.SetActive(false);
|
|
_cacheObjs = new List<GameObject>();
|
|
_cacheLayers = new List<int>();
|
|
_cacheUnits = new List<GameUnit>();
|
|
rotateCamera = new SkillRotateCamera();
|
|
}
|
|
|
|
public void Restore()
|
|
{
|
|
if (skillCamera == null) return;
|
|
if (skillCamera.gameObject == null) return;
|
|
skillCamera.gameObject.SetActive(true);
|
|
}
|
|
|
|
public void Show()
|
|
{
|
|
isHide = false;
|
|
// 通知UI黑屏
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_START);
|
|
_SyncCameraParams();
|
|
|
|
skillCamera.gameObject.SetActive(true);
|
|
}
|
|
|
|
public void ShowRotateCamera() {
|
|
if (GameSettingManager.Instance.SettingData.enableSkillRotateCamera)
|
|
{
|
|
_ShowRotateCamera();
|
|
}
|
|
}
|
|
|
|
private void _SyncCameraParams()
|
|
{
|
|
var mainCamera = CameraManager.Instance.MainCamera;
|
|
if (mainCamera == null) return;
|
|
// 同步相机参数
|
|
var transform = mainCamera.transform;
|
|
var transform1 = skillCamera.transform;
|
|
transform1.position = transform.position;
|
|
transform1.rotation = transform.rotation;
|
|
skillCamera.orthographic = mainCamera.orthographic;
|
|
skillCamera.orthographicSize = mainCamera.orthographicSize;
|
|
skillCamera.fieldOfView = mainCamera.fieldOfView;
|
|
skillCamera.nearClipPlane = mainCamera.nearClipPlane;
|
|
skillCamera.farClipPlane = mainCamera.farClipPlane;
|
|
}
|
|
|
|
private async void _ShowRotateCamera()
|
|
{
|
|
rotateCamera.Show();
|
|
var rotateTime = TableManager.Instance.Tables.GlobalConfig.SkillCameraRotateTime;
|
|
await UniTask.WaitForSeconds(rotateTime);
|
|
rotateCamera.Hide();
|
|
}
|
|
|
|
public async void StartHide()
|
|
{
|
|
// 通知UI黑屏结束
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_BLACK_SCREEN_END);
|
|
|
|
// 等待播放完成
|
|
await UniTask.Delay(250);
|
|
|
|
skillCamera.gameObject.SetActive(false);
|
|
// // 开启主相机post效果
|
|
// var mainCamera = Camera.main;
|
|
// if (mainCamera != null)
|
|
// {
|
|
// var urpDataMain = mainCamera.GetComponent<UniversalAdditionalCameraData>();
|
|
// urpDataMain.renderPostProcessing = true;
|
|
// }
|
|
|
|
for (var i = 0; i < _cacheObjs.Count; ++i)
|
|
{
|
|
var cacheObj = _cacheObjs[i];
|
|
var cacheLayer = _cacheLayers[i];
|
|
cacheObj.SetLayerEx(cacheLayer);
|
|
}
|
|
_cacheObjs.Clear();
|
|
_cacheLayers.Clear();
|
|
_cacheUnits.Clear();
|
|
|
|
isHide = true;
|
|
}
|
|
|
|
public void AttachObj(GameObject obj)
|
|
{
|
|
if (_cacheObjs.Contains(obj)) return;
|
|
_cacheObjs.Add(obj);
|
|
_cacheLayers.Add(obj.layer);
|
|
obj.SetLayerEx(LayerDefine.Skill);
|
|
}
|
|
|
|
public void DeAttachObj(GameObject obj)
|
|
{
|
|
if (!_cacheObjs.Contains(obj)) return;
|
|
var index = _cacheObjs.IndexOf(obj);
|
|
var cacheLayer = _cacheLayers[index];
|
|
obj.SetLayerEx(cacheLayer);
|
|
_cacheObjs.Remove(obj);
|
|
_cacheLayers.RemoveAt(index);
|
|
}
|
|
|
|
public void AttachUnit(GameUnit unit)
|
|
{
|
|
if (_cacheUnits.Contains(unit)) return;
|
|
_cacheUnits.Add(unit);
|
|
AttachObj(unit.Node.GameObject);
|
|
EventManager.Instance.Send(EventManager.EventName.INFIGHT_SKILL_ACTON_UNIT, unit);
|
|
}
|
|
|
|
public void DeAttachUnit(GameUnit unit)
|
|
{
|
|
if (!_cacheUnits.Contains(unit)) return;
|
|
_cacheUnits.Remove(unit);
|
|
DeAttachObj(unit.Node.GameObject);
|
|
}
|
|
|
|
public void LogicUpdate()
|
|
{
|
|
if (skillCamera.gameObject.activeInHierarchy)
|
|
{
|
|
// 同步相机参数
|
|
_SyncCameraParams();
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
|
|
}
|
|
}
|