| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using DynamicShadowProjector; |
| | | using Snxxz.UI; |
| | | using TableConfig; |
| | | |
| | | public class ActorShadowCaster : MonoBehaviour |
| | | using Snxxz.UI;
|
| | | using TableConfig;
|
| | |
|
| | | public class ActorShadowCaster : MonoBehaviour
|
| | | { |
| | | [SerializeField] Projector m_Projector; |
| | | [SerializeField] DrawTargetObject m_DrawTargetObject; |
| | | [SerializeField] Transform m_Target; |
| | | |
| | | public static ActorShadowCaster Cast(Transform _followTarget, Transform _castTarget) |
| | | { |
| | | var shadow = ActorShadowCasterPool.Require(); |
| | | if (shadow != null) |
| | | { |
| | | shadow.Follow(_followTarget); |
| | | shadow.Cast(_castTarget); |
| | | shadow.gameObject.SetActive(true); |
| | | } |
| | | |
| | | return shadow; |
| | | public static ActorShadowCaster Cast(Transform _followTarget, Transform _castTarget)
|
| | | {
|
| | | var shadow = ActorShadowCasterPool.Require();
|
| | | if (shadow != null)
|
| | | {
|
| | | shadow.Follow(_followTarget);
|
| | | shadow.Cast(_castTarget);
|
| | | shadow.gameObject.SetActive(true);
|
| | | }
|
| | |
|
| | | return shadow;
|
| | | } |
| | | |
| | | public void Follow(Transform _target) |
| | | { |
| | | m_Target = _target; |
| | | this.transform.rotation = Quaternion.identity; |
| | | |
| | | BossShowModel.Instance.bossShowPreparedEvent -= OnBeginBossShow; |
| | | BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted; |
| | | BossShowModel.Instance.bossShowPreparedEvent += OnBeginBossShow; |
| | | BossShowModel.Instance.bossShowCompletedEvent += OnBossShowCompleted; |
| | | public void Follow(Transform _target)
|
| | | {
|
| | | m_Target = _target;
|
| | | this.transform.rotation = Quaternion.identity;
|
| | |
|
| | | BossShowModel.Instance.bossShowPreparedEvent -= OnBeginBossShow;
|
| | | BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted;
|
| | | BossShowModel.Instance.bossShowPreparedEvent += OnBeginBossShow;
|
| | | BossShowModel.Instance.bossShowCompletedEvent += OnBossShowCompleted;
|
| | | } |
| | | |
| | | public void Cast(Transform _target) |
| | | { |
| | | m_DrawTargetObject.target = _target; |
| | | m_DrawTargetObject.followTarget = false; |
| | | m_DrawTargetObject.SetCommandBufferDirty(); |
| | | |
| | | var config = ConfigManager.Instance.GetTemplate<SceneShadowConfig>(StageManager.Instance.stageAssetName); |
| | | if (config != null) |
| | | { |
| | | m_Projector.transform.localEulerAngles = config.Rotation; |
| | | m_Projector.material.SetFloat("_Alpha", config.Intensity); |
| | | } |
| | | public void Cast(Transform _target)
|
| | | {
|
| | | m_DrawTargetObject.target = _target;
|
| | | m_DrawTargetObject.followTarget = false;
|
| | | m_DrawTargetObject.SetCommandBufferDirty();
|
| | |
|
| | | var config = Config.Instance.Get<SceneShadowConfig>(StageManager.Instance.stageAssetName);
|
| | | if (config != null)
|
| | | {
|
| | | m_Projector.transform.localEulerAngles = config.Rotation;
|
| | | m_Projector.material.SetFloat("_Alpha", config.Intensity);
|
| | | }
|
| | | } |
| | | |
| | | public void Stop() |
| | | { |
| | | BossShowModel.Instance.bossShowPreparedEvent -= OnBeginBossShow; |
| | | BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted; |
| | | ActorShadowCasterPool.Reycle(this); |
| | | public void Stop()
|
| | | {
|
| | | BossShowModel.Instance.bossShowPreparedEvent -= OnBeginBossShow;
|
| | | BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted;
|
| | | ActorShadowCasterPool.Reycle(this);
|
| | | } |
| | | |
| | | private void LateUpdate() |
| | | { |
| | | if (m_Target == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | this.transform.position = m_Target.position; |
| | | private void LateUpdate()
|
| | | {
|
| | | if (m_Target == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | this.transform.position = m_Target.position;
|
| | | } |
| | | |
| | | private void OnBeginBossShow() |
| | | { |
| | | if (m_Projector != null) |
| | | { |
| | | m_Projector.enabled = false; |
| | | } |
| | | private void OnBeginBossShow()
|
| | | {
|
| | | if (m_Projector != null)
|
| | | {
|
| | | m_Projector.enabled = false;
|
| | | }
|
| | | } |
| | | |
| | | private void OnBossShowCompleted() |
| | | { |
| | | if (m_Projector != null) |
| | | { |
| | | m_Projector.enabled = true; |
| | | } |
| | | private void OnBossShowCompleted()
|
| | | {
|
| | | if (m_Projector != null)
|
| | | {
|
| | | m_Projector.enabled = true;
|
| | | }
|
| | | } |
| | | |
| | | public static class ActorShadowCasterPool |
| | | { |
| | | static GameObjectPoolManager.GameObjectPool pool; |
| | | |
| | | public static ActorShadowCaster Require() |
| | | { |
| | | if (pool == null) |
| | | { |
| | | var prefab = Resources.Load<GameObject>("Prefabs/ActorShadowCaster"); |
| | | if (prefab != null) |
| | | { |
| | | pool = GameObjectPoolManager.Instance.RequestPool(prefab); |
| | | } |
| | | } |
| | | |
| | | var instance = pool.Request(); |
| | | GameObject.DontDestroyOnLoad(instance); |
| | | return instance.GetComponent<ActorShadowCaster>(); |
| | | } |
| | | |
| | | public static void Reycle(ActorShadowCaster _shadowCaster) |
| | | { |
| | | if (pool != null) |
| | | { |
| | | pool.Release(_shadowCaster.gameObject); |
| | | _shadowCaster.transform.SetParent(null); |
| | | _shadowCaster.gameObject.SetActive(false); |
| | | } |
| | | } |
| | | |
| | | public static class ActorShadowCasterPool
|
| | | {
|
| | | static GameObjectPoolManager.GameObjectPool pool;
|
| | |
|
| | | public static ActorShadowCaster Require()
|
| | | {
|
| | | if (pool == null)
|
| | | {
|
| | | var prefab = Resources.Load<GameObject>("Prefabs/ActorShadowCaster");
|
| | | if (prefab != null)
|
| | | {
|
| | | pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
| | | }
|
| | | }
|
| | |
|
| | | var instance = pool.Request();
|
| | | GameObject.DontDestroyOnLoad(instance);
|
| | | return instance.GetComponent<ActorShadowCaster>();
|
| | | }
|
| | |
|
| | | public static void Reycle(ActorShadowCaster _shadowCaster)
|
| | | {
|
| | | if (pool != null)
|
| | | {
|
| | | pool.Release(_shadowCaster.gameObject);
|
| | | _shadowCaster.transform.SetParent(null);
|
| | | _shadowCaster.gameObject.SetActive(false);
|
| | | }
|
| | | }
|
| | |
|
| | | } |
| | | |
| | | |