| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 | using System;using Common.Utility.CombatEvent;using Fort23.Core;using UnityEngine;using Utility;using Utility.CustomizeTimeLogic.FxLogic.TimeLineEvent;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;namespace GameLogic.Combat.CombatTool{    public class CombatCameraControllder : IDisposable, ICameraShaking    {        public Transform root;        public Transform root2;        public Camera Camera;        public CombatController combatController;        public StressReceiver StressReceiver;        private bool isStartShake;        public int FollowHeroId        {            get { return _followHeroId; }        }        private int _followHeroId = -1;        public bool isStop;        private bool isUpdateCameraToPath;        private float currValue;        public float _cameraSelectValue;        private float targetValue;        private float _currTime;        private bool isUpdateFieldOfView;        private float FieldOfViewTime;        private float FieldOfViewTargetValue;        private float FieldOfViewStartValue;        private float FieldOfViewSpeed;        private bool isStartMoveCamera;        private float _MoveCameraTime;        private float _lasetCombatValue;        private float _moveToTargetValue;        public void Init(CombatController combatController, Camera camera)        {            CombatEventManager.Instance.AddEventListener(CombatEventType.SencenBesselPathAlter, SencenBesselPathAlter);            this.combatController = combatController;            Camera = camera;            root2 = Camera.transform.parent;            root = Camera.transform.parent.parent;            StressReceiver = camera.transform.GetComponentInParent<StressReceiver>();            TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this);            EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);            // CameraSelect_onValueChanged(0.7f);            // EventManager.Instance.AddEventListener(CustomEventType.HeroClick, HeroClick);        }        private void SencenBesselPathAlter(IEventData eventData)        {            // isUpdateCameraToPath = true;            // currValue = _cameraSelectValue;            // if (CombatController.currActiveCombat.CombatSenceController.currBesselPath.isCentre)            // {            //     targetValue = 0.5f;            // }            // else            // {            //     targetValue = 0.7f;            // }            //            // _currTime = 0;        }        protected void HeroClick(IEventData eventData)        {            HeroClickEventData heroClickEventData = eventData as HeroClickEventData;            int heroId = heroClickEventData.heroId;            if (_followHeroId == heroId)            {                _followHeroId = -1;            }            else            {                _followHeroId = heroId;            }        }        public void CameraSelect_onValueChanged(float value)        {            _cameraSelectValue = value;            Vector3 pos1 = new Vector3(0, -3, -0.7f);            Vector3 e1 = new Vector3(20, 0, 0);            Vector3 pos2 = new Vector3(9, -1, -1.4f);            Vector3 e2 = new Vector3(17.77f, -28.25f, 1.165f);            Camera.transform.localPosition =                Vector3.Lerp(pos1, pos2, value);            Camera.transform.localEulerAngles =                Vector3.Lerp(e1, e2, value);        }        public void EnterCombat()        {            isStartMoveCamera = true;            _MoveCameraTime = 0;            _lasetCombatValue = _cameraSelectValue;            _moveToTargetValue = 0.5f;        }        public void ExitCombat()        {            isStartMoveCamera = true;            _MoveCameraTime = 0;            _moveToTargetValue = _lasetCombatValue;            _lasetCombatValue = _cameraSelectValue;        }        private void ShakeFinish()        {            isStartShake = false;        }        public void SetFieldOfView(float fieldOfView, float speed)        {            FieldOfViewSpeed = speed;            FieldOfViewTime = 0;            FieldOfViewStartValue = Camera.fieldOfView;            FieldOfViewTargetValue = fieldOfView;            isUpdateFieldOfView = true;        }        public void Update(float t)        {            if (isUpdateFieldOfView)            {                FieldOfViewTime += t * FieldOfViewSpeed;                Camera.fieldOfView = Mathf.Lerp(FieldOfViewStartValue, FieldOfViewTargetValue, FieldOfViewTime);                if (FieldOfViewTime >= 1)                {                    isUpdateFieldOfView = false;                }            }            if (isStartMoveCamera)            {                _MoveCameraTime += t;                float v = Mathf.Lerp(_lasetCombatValue, _moveToTargetValue, _MoveCameraTime);                CameraSelect_onValueChanged(v);                if (_MoveCameraTime >= 1)                {                    isStartMoveCamera = false;                }            }            CombatHeroEntity combatHeroEntities = combatController.playerHeroEntity;            if (!isStartShake && !isStop)            {                if (combatHeroEntities == null)                {                    return;                }                Vector3 dir = combatHeroEntities.faceDir;                // CombatHeroEntity foucusTarget = combatHeroEntities.CombatAIBasic.currFocusTarget as CombatHeroEntity;                // if (foucusTarget != null)                // {                //     dir = foucusTarget.dotPos - combatHeroEntities.dotPos;                //     dir = dir.normalized;                // }                // Quaternion q = Quaternion.LookRotation(dir);                Vector3 myHeroTarget = new Vector3(0, 8, -10);                // myHeroTarget = q * myHeroTarget;                Vector3 p = combatHeroEntities.GameObject.transform.TransformPoint(myHeroTarget);                root.rotation = Quaternion.Lerp(root.rotation, combatHeroEntities.GameObject.transform.rotation,                    1);                root.position = Vector3.Lerp(root.position, p, 1);            }            // MoveRoot2();        }        private void MoveRoot2()        {            CombatHeroEntity combatHeroEntities = combatController.playerHeroEntity;            if (combatHeroEntities == null)            {                return;            }            Vector3 dir = combatHeroEntities.faceDir;            CombatHeroEntity foucusTarget = combatHeroEntities.CombatAIBasic.currFocusTarget as CombatHeroEntity;            if (foucusTarget != null)            {                dir = foucusTarget.dotPos - combatHeroEntities.dotPos;                dir = dir.normalized;            }            Quaternion q = Quaternion.LookRotation(dir);            Vector3 myHeroTarget = new Vector3(0, 8, -10);            myHeroTarget = q * myHeroTarget;            Vector3 p = combatHeroEntities.GameObject.transform.TransformPoint(myHeroTarget);            Vector3 newP = p - root.position;            root2.rotation = Quaternion.Lerp(root2.rotation, q,                0.3f);            root2.localPosition = Vector3.Lerp(root2.localPosition, newP, 0.3f);        }        public void SetPos(Transform target)        {            Vector3 p = target.TransformPoint(new Vector3(0, 8, -10));            root.rotation = Quaternion.Lerp(root.rotation, target.rotation,                1);            root.position = Vector3.Lerp(root.position, p, 1);        }        public void Dispose()        {            EventManager.Instance.RemoveEventListener(CustomEventType.HeroClick, HeroClick);        }        public void Shaking(float time, float size)        {            if (StressReceiver != null)            {                isStartShake = true;                StressReceiver.InduceStress(time, size, ShakeFinish);            }        }        public void Shaking(CameraShakingSerializtion cameraShakingSerializtion)        {            Shaking(cameraShakingSerializtion.qiangDu, 1);        }    }}
 |