using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Chronos;
using UnityEngine.PostProcessing;
using Cinemachine;
using UnityGameFramework.Runtime;
using GameFramework.Event;
using AdonGameKit;
///
/// 角色控制
///
public class RPGPlayerController : MonoBehaviour
{
/////
///// 单键
/////
//private static RPGPlayerController m_Instance;
/////
///// 看向的目标
/////
//private HeadLookAtTarget mHeadLookAtTarget = null;
/////
///// 攻击锁定时间
/////
//private float mAttackLockTime = 0;
/////
///// A按键信息(普通攻击)
/////
//private List mKeyInfoJ = null;
/////
///// N按键信息(冲刺)
/////
//private List mKeyInfoI = null;
/////
///// 武器技能
/////
//private List mKeyInfoK = null;
/////
///// 必杀
/////
//private List mKeyInfoL = null;
/////
///// 所以连击信息
/////
//private List mAllComboInfos = new List();
/////
///// 当前按键宏列表
/////
//private List mCurKeys = new List();
/////
///// 当前的连击列表
/////
//private List mCurCombos = new List();
/////
///// 当前连击信息
/////
//public KeyComboInfo mCurComboInfo = null;
/////
///// 当前连击索引
/////
//private int mCurComboIndex = 1;
/////
///// 是否
/////
//private bool mPush = false;
/////
///// 推进的速度
/////
//private float mPushSpeed = 20;
/////
///// 推进时间
/////
//private float mPushTime = 0.35f;
/////
///// 推进的方向
/////
//private Vector3 mPushDir = Vector3.zero;
/////
///// 移动中
/////
//private bool mMoveing = false;
/////
///// 是否淡入移动动画
/////
//private bool bCrossMoveAni = false;
/////
///// 相机动画
/////
////private Animator _cameraAnimator = null;
/////
///// 0 默认状态,1相机自由状态,2锁定状态
/////
//private int _cameraType = 0;
/////
///// 当前控制的角色
/////
//private Role mRole = null;
/////
///// 是否锁定连招中
/////
//private bool bLockCombo = false;
/////
///// 是否可移动
/////
//private bool bCanMove = true;
/////
///// 是否检测静止状态
/////
//private bool IsCheckIdle = true;
/////
///// 最后一个生效的慢动作角色
/////
//private Role slowTimeRole = null;
/////
///// 玩家播放速度
/////
//private float _playerSpeed = 1.0f;
//private Transform _cmFollowPos;
//public Camera mainCamera;
//public float comboSpaceTime = 5;
//public float comboNowTime = 0;
//private int _castSkillIndex = 0;
//public HeroGameVo_Yanling _castYLSkillVO = null;
/////
///// 后期文件
/////
//PostProcessingProfile _PostProcessingProfile;
/////
///// 根时钟
/////
//private Clock _clockRoot;
/////
///// 玩家时钟
/////
//private Clock _clockPlayer;
/////
///// 敌人时钟
/////
//private Clock _clockEnemy;
/////
///// 提示箭头的目标
/////
//private Transform tipArrowTarget = null;
//public Timeline time
//{
// get
// {
// return GetComponent();
// }
//}
/////
///// 单键
/////
//public static RPGPlayerController Instance
//{
// get
// {
// if (m_Instance == null)
// {
// GameObject obj = new GameObject("RPGPlayerController");
// m_Instance = obj.AddComponent();
// }
// return m_Instance;
// }
//}
/////
///// 玩家
/////
//public Role Player
//{
// get
// {
// return mRole;
// }
//}
/////
///// 开始
/////
//private void Start()
//{
// _clockRoot = Timekeeper.instance.Clock("Root");
// _clockPlayer = Timekeeper.instance.Clock("Player");
// _clockEnemy = Timekeeper.instance.Clock("Enemy");
// //_PostProcessingProfile = Camera.main.GetComponent().profile;
// //BattleCanvas.Instance.SetCorrectCameraUI(this.CorrectCamera);
//}
/////
///// 设置控制的玩家
/////
//public void SetPlayer(Role role)
//{
// if (role == null)
// {
// return;
// }
// if (mRole != null && mRole != role && mRole.isDie == false)
// {
// mRole.IsTeamLeader = false;
// mRole.mBehaviorTree.SetVariableValue("followTarget", role.transform);
// mRole.mBehaviorTree.EnableBehavior();
// mRole.mNavMeshAgent.enabled = false;
// mRole.HidemArrow();
// Rigidbody rbody = mRole.GetComponent();
// Destroy(rbody);
// GameObject cm = mRole.gameObject.transform.Find("CMStateDrivenCamera").gameObject;
// if (cm)
// {
// cm.SetActive(true);
// }
// }
// mRole = role;
// mRole.IsTeamLeader = true;
// mHeadLookAtTarget = mRole.GetComponentInChildren();
// mRole.mBehaviorTree.SetVariableValue("followTarget", null);
// mRole.mBehaviorTree.DisableBehavior();
// mRole.mNavMeshAgent.enabled = true;
// mRole.PlayAnimation("Idle");
// Rigidbody rb = mRole.GetComponent();
// if (rb == null)
// {
// rb = mRole.gameObject.AddComponent();
// rb.useGravity = false;
// rb.isKinematic = true;
// }
// mKeyInfoJ = mRole.GetKeyComboInfo(E_KeyType.J);
// mKeyInfoK = mRole.GetKeyComboInfo(E_KeyType.K);
// mKeyInfoL = mRole.GetKeyComboInfo(E_KeyType.L);
// mKeyInfoI = mRole.GetKeyComboInfo(E_KeyType.I);
// /// 更新血量
// BattleCanvas.Instance.ShowPlayerHP(mRole.mData.HP_Final, mRole.mData.MaxHP_Final);
// // 更新能量条
// BattleCanvas.Instance.ShowPlayerPower(mRole.mData.MP_Final, mRole.mData.MaxMP_Final);
// // 更新按键
// BattleCanvas.Instance.UpdatePlayerKey(mRole);
// m_Instance = this;
// // 连击
// mAllComboInfos.Clear();
// ComboData data = new ComboData(E_ComboType.Common);
// sm_skill skill = GameConfigData.Ins.GetskillMo(int.Parse(role.mData.GetSKillNormal()));
// data.comboInfos.Clear();
// KeyComboInfo kInfo = new KeyComboInfo();
// kInfo.Key = E_KeyType.J;
// kInfo.Skill = skill;
// data.comboInfos.Add(kInfo);
// while (skill.nextSkill > 0)
// {
// skill = GameConfigData.Ins.GetskillMo(skill.nextSkill);
// kInfo = new KeyComboInfo();
// kInfo.Key = E_KeyType.J;
// kInfo.Skill = skill;
// data.comboInfos.Add(kInfo);
// }
// mAllComboInfos.Add(data);
// // 动画帧移动事件
// mRole.mSkillEvent.mOnSkillFire = AnimationEvent_Attack;
// mRole.mSkillEvent.PlayerSkill = AnimationEvent_PlayerSkill;
// ShowEffect("Juese_chuchang");
// JoystickHelper.JoystickMoveStart_AC = JoystickMoveStart;
// JoystickHelper.JoystickMove_AC = JoystickMove;
// JoystickHelper.JoystickMoveEnd_AC = JoystickMoveEnd;
// //JoystickHelper.KeyDownJ_AC = KeyDownJ;
// JoystickHelper.KeyDownK_AC = KeyDownK;
// JoystickHelper.KeyDownL_AC = KeyDownL;
// JoystickHelper.KeyDownI_AC = KeyDownI;
// JoystickHelper.KeySkill_YL1 = KeySkillYanling1;
// JoystickHelper.KeySkill_YL2 = KeySkillYanling2;
// JoystickHelper.KeySkill_YL3 = KeySkillYanling3;
// JoystickHelper.KeySkill_HT1 = KeySkillHeti1;
// JoystickHelper.KeySkill_HT2 = KeySkillHeti2;
// JoystickHelper.KeySkill_HT3 = KeySkillHeti3;
// JoystickHelper.KeySkill_HT4 = KeySkillHeti4;
// //CMCameraManager.Instance.ResetRole(role);
//}
/////
///// 晚于更新(角色控制)
/////
//private void LateUpdate()
//{
// if (IsCheckIdle)
// {
// // 攻击锁定期间无法操作
// mAttackLockTime -= Time.unscaledDeltaTime;
// if (mAttackLockTime > 0)
// {
// return;
// }
// else
// {
// if (IsPlaying())
// {
// return;
// }
// // 判断有没有后续连击
// if (mCurCombos.Count > 0)
// {
// KeyComboInfo info = mCurCombos[0];
// mCurCombos.RemoveAt(0);
// PlayComboAnimation(info);
// mCurComboIndex++;
// return;
// }
// }
// Invoke("LateIdle", 0.1f);
// IsCheckIdle = false;
// }
//}
/////
///// 极限闪避提示开始
/////
//public void OnSlowTimeStart(Role role)
//{
// if (role == mRole.TargetRole)
// {
// slowTimeRole = role;
// RPGEffectManager.Instance.ShouDodgeTip();
// }
//}
/////
///// 极限闪避提示结束
/////
//public void OnSlowTimeEnd(Role role)
//{
// if (role == mRole.TargetRole)
// {
// RPGEffectManager.Instance.HideDodgeTip();
// slowTimeRole = null;
// }
//}
/////
///// 摇杆开始移动
/////
//public void JoystickMoveStart()
//{
// if (bCanMove == false)
// {
// return;
// }
// if (bLockCombo)
// {
// return;
// }
// if (Player == null)
// {
// return;
// }
// ClearCombos(false);
// bCrossMoveAni = true;
// PlayAnimation("Walk", 0.25f);
// ProcedureComponent procedureObj = GameObject.Find("YLGameFramework").transform.Find("Procedure").gameObject.GetComponent();
// if (procedureObj.CurrentProcedure != null &&
// (procedureObj.CurrentProcedure.GetType().ToString() == "GameFrameworkYLSJ.ProcedureNoviceGuideStart" ||
// procedureObj.CurrentProcedure.GetType().ToString() == "GameFrameworkYLSJ.ProcedureNoviceGuideAtoB"))
// {
// YL_BattleNovice novice = PanelHelper.Instance.GetPanelByName("YL_BattleNovice").GetComponent();
// novice.HideMask();
// PanelHelper.Instance.ClosePanel("YL_BattleNovice");
// }
// else if (procedureObj.CurrentProcedure == null)
// {
// TimeControl.Instance.GameNormal();
// }
//}
/////
///// 摇杆移动中
/////
/////
//public void JoystickMove(Vector2 v2Dir)
//{
// //if (bCanMove == false)
// //{
// // return;
// //}
// //if (bLockCombo)
// //{
// // return;
// //}
// //if (Player == null)
// //{
// // return;
// //}
// //// 推进中 不可移动
// //if (mPush)
// //{
// // return;
// //}
// //// buff状态不可移动中
// //if (Player.buffCanMove == false)
// //{
// // return;
// //}
// //if (v2Dir.magnitude < 0.01f)
// //{
// // return;
// //}
// //if (bCrossMoveAni == false)
// //{
// // bCrossMoveAni = true;
// // PlayAnimation("Walk", 0.25f);
// //}
// //mMoveing = true;
// //CheckNearTarget();
// //if (Player.TargetRole == null)
// //{
// // Player.cameraLock = false;
// // if (_cameraType != 1)
// // {
// // SwitchCameraState(false);
// // _cameraType = 1;
// // }
// // this.ConvertMoveByCM(v2Dir);
// //}
// //else
// //{
// // Player.cameraLock = true;
// // if (_cameraType != 2)
// // {
// // SwitchCameraState(false);
// // _cameraType = 2;
// // }
// // this.ConvertMoveByTargt(v2Dir);
// //}
//}
//public void SwitchCameraState(bool update)
//{
// if (update)
// {
// Player.cameraState++;
// }
// if (Player.cameraState > 1)
// {
// Player.cameraState = 0;
// }
// if (Player.cameraLock)
// {
// Player.mBattleCameraAnim.Play("Locking");
// }
// else
// {
// switch (Player.cameraState)
// {
// case 0:
// Player.mBattleCameraAnim.Play("DefaultOne");
// break;
// case 1:
// Player.mBattleCameraAnim.Play("DefaultTwo");
// break;
// }
// }
//}
/////
///// 自由移动
/////
/////
//public void ConvertMoveByCM(Vector2 v2Dir)
//{
// Vector3 joyDir = new Vector3(v2Dir.x, 0, v2Dir.y);
// Vector3 cmForward = Camera.main.transform.forward;
// cmForward.y = 0;
// float angle = Vector3.Angle(Vector3.forward, joyDir);
// if (v2Dir.x < 0)
// {
// angle = -angle;
// }
// float cmAngle = Vector3.Angle(Vector3.forward, cmForward);
// if (cmForward.magnitude < 0.1f)
// {
// cmAngle = 0.0f;
// }
// if (cmForward.x < 0)
// {
// cmAngle = -cmAngle;
// }
// angle += cmAngle;
// // 旋转速度
// float actualTurnSpeed = 720;
// Quaternion targetRotation = Quaternion.RotateTowards(Player.transform.rotation, Quaternion.AngleAxis(angle, Vector3.up), actualTurnSpeed * Time.deltaTime);
// Player.transform.rotation = targetRotation;
// // 每次刚起步有个缓动过程
// if (_playerSpeed < 1)
// {
// _playerSpeed += Time.deltaTime * 2.5f;
// }
// float speed = Player.mData.MSP_Final * _playerSpeed;
// Player.mNavMeshAgent.velocity = Player.transform.forward * speed;
// if (_lastLookTarget)
// {
// buffTime = Time.time;
// _lastLookTarget = null;
// }
//}
//private float buffTime = 0;
//private Role _lastLookTarget = null;
/////
///// 围绕目标移动
/////
/////
//public void ConvertMoveByTargt(Vector2 v2Dir)
//{
// // 由目标模式进入相机模式,0.5秒内不再进入目标模式,防止临界区来回切换
// if (buffTime + 0.5 > Time.time)
// {
// ConvertMoveByCM(v2Dir);
// return;
// }
// _lastLookTarget = mRole.TargetRole;
// Vector3 pos = mRole.TargetRole.transform.position;
// pos.y = Player.transform.position.y;
// Player.transform.LookAt(pos);
// // 每次刚起步有个缓动过程
// if (_playerSpeed < 1)
// {
// _playerSpeed += Time.deltaTime * 2.5f;
// }
// float speed = Player.mData.MSP_Final * _playerSpeed;
// // 到达2米距离不再向目标移动
// float dis = Vector3.Distance(Player.transform.position, Player.TargetRole.transform.position);
// if (dis <= 2.0f)
// {
// if (Mathf.Abs(v2Dir.x) > 0.01f || v2Dir.y > 0.01f)
// {
// v2Dir.y = 0;
// }
// }
// Vector3 joyDir = (Player.transform.right * v2Dir.x) + (Player.transform.forward * v2Dir.y);
// Player.mNavMeshAgent.velocity = joyDir * speed;
//}
/////
///// 摇杆移动结束
/////
//public void JoystickMoveEnd()
//{
// if (bLockCombo)
// {
// return;
// }
// if (Player == null)
// {
// return;
// }
// // 停止移动后有个轻微惯性
// Player.mNavMeshAgent.velocity = Player.transform.forward * 2;
// PlayAnimation("Idle", 0.2f);
// mMoveing = false;
// bCrossMoveAni = false;
//}
/////
///// 按键J
/////
//public void KeyDownJ()
//{
// if (Player == null)
// {
// return;
// }
// if (bLockCombo)
// {
// return;
// }
// // buff状态不可攻击状态中
// if (Player.buffCanAttack == false)
// {
// return;
// }
// CheckNearTarget();
// PressKey(E_KeyType.J);
//}
/////
///// 按键K 武器
/////
//private void KeyDownK()
//{
// if (bLockCombo)
// {
// return;
// }
// if (Player == null)
// {
// return;
// }
// // buff状态不可攻击状态中
// if (Player.buffCanAttack == false)
// {
// return;
// }
//}
/////
///// 按键L 必杀
/////
//private void KeyDownL()
//{
// if (bLockCombo)
// {
// return;
// }
// if (Player == null)
// {
// return;
// }
// // buff状态不可攻击状态中
// if (Player.buffCanAttack == false)
// {
// return;
// }
// GameDateManager.Instance.PlayerUseSkillCount++;
// CheckNearTarget();
// PressKey(E_KeyType.L);
//}
/////
///// 按键I
/////
//public void KeyDownI()
//{
// if (bLockCombo)
// {
// return;
// }
// if (Player == null)
// {
// return;
// }
// // buff状态不可攻击状态中
// if (Player.buffCanAttack == false || Player.buffCanMove == false)
// {
// return;
// }
// Player.mInvincible = true;
// float speed = 3.0f;
// float dis = 2.0f;
// Vector3 dir = Vector3.zero;
// if (mMoveing == false)
// {
// dir = -Player.transform.forward;
// speed = Player.mData.MSP_Final * 0.5f;
// dis = 1.5f;
// PlayAnimation("Dodge");
// }
// else
// {
// dir = Player.transform.forward;
// speed = Player.mData.MSP_Final * 2;
// dis = 4.0f;
// PlayAnimation("Rush");
// }
// // 执行闪避慢动作
// if (slowTimeRole != null)
// {
// // 恢复能量
// Player.mData.UpdateMP(2, true);
// ShowEffect("Juese_shanbi_00");
// _PostProcessingProfile.eyeAdaptation.enabled = true;
// _PostProcessingProfile.motionBlur.enabled = true;
// MotionBlurModel.Settings mbSet = _PostProcessingProfile.motionBlur.settings;
// mbSet.frameBlending = 1;
// _PostProcessingProfile.motionBlur.settings = mbSet;
// // 角色执行了极限闪避,只播放动作无需实际进行位移闪避
// _clockEnemy.localTimeScale = 0.03f;
// _clockPlayer.localTimeScale = 0.2f;
// Invoke("FreeSlowTimePlayer", 1);
// Invoke("FreeSlowTimeEnemy", 5);
// return;
// }
// else
// {
// bLockCombo = true;
// IsCheckIdle = true;
// ShowEffect("Juese_shanbi_00");
// }
// // 法师 传送门闪避
// if (Player.mData.TID == 202011)
// {
// Player.gameObject.AddComponent().Init(Player, dir, speed);
// }
// else
// {
// Player.gameObject.AddComponent().Init(Player, dir, speed);
// }
//}
/////
///// 释放慢动作
/////
//private void FreeSlowTimePlayer()
//{
// Player.mInvincible = false;
// _clockPlayer.localTimeScale = 1;
//}
/////
///// 释放慢动作
/////
//private void FreeSlowTimeEnemy()
//{
// _PostProcessingProfile.motionBlur.enabled = false;
// _PostProcessingProfile.eyeAdaptation.enabled = false;
// _clockEnemy.localTimeScale = 1;
//}
/////
///// 消耗蓝
/////
/////
//private void CostMP(string skillID)
//{
// sm_skill skill = sm_skill.GetMoByID(int.Parse(skillID));
// if (skill != null)
// {
// Player.mData.UpdateMP(-skill.costPowerPoint, true);
// }
//}
//public void OnSkillYanling(HeroGameVo_Yanling yanlingVO, int index)
//{
// sm_skill smsk = GameConfigData.Ins.GetskillMo(int.Parse(BattleCanvas.Instance.GetSkillID(index)));
// if (smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_TARGET ||
// smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_TARGETAROUND ||
// smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_RONDOMMOREENEMY)
// {
// if (Player.TargetRole == null)
// {
// return;
// }
// _castSkillIndex = index;
// _castYLSkillVO = yanlingVO;
// CostMP(BattleCanvas.Instance.GetSkillID(_castSkillIndex));
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(_castSkillIndex),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
// //EventComponent nowEvent = GameEntry.GetComponent();
// //nowEvent.FireNow(this, new BattleEventYLSkillFeatureS(yanlingVO));
// }
// else if (smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_SELF ||
// smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_SELFAROUND ||
// smsk.aim == (int)BattleDefine.ERoleAIMType.EROLE_AIM_ALLFRIENDS)
// {
// _castSkillIndex = index;
// _castYLSkillVO = yanlingVO;
// EventComponent nowEvent = GameEntry.GetComponent();
// nowEvent.FireNow(this, new BattleEventYLSkillFeatureS(yanlingVO));
// }
//}
//public void SkillYanLingFeatureEnd()
//{
// CostMP(BattleCanvas.Instance.GetSkillID(_castSkillIndex));
// PlayAnimation("YLJ_S");
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(_castSkillIndex),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
//}
//public void KeySkillYanling1()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// HeroGameVo_Yanling yanlingVO = Player.mData.mHeroVo.yanling[1];
// _castSkillIndex = 3;
// EventComponent nowEvent = GameEntry.GetComponent();
// nowEvent.FireNow(this, new BattleEventYLSkillFeatureS(yanlingVO));
//}
//public void KeySkillYanling2()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// HeroGameVo_Yanling yanlingVO = Player.mData.mHeroVo.yanling[2];
// _castSkillIndex = 4;
// EventComponent nowEvent = GameEntry.GetComponent();
// nowEvent.FireNow(this, new BattleEventYLSkillFeatureS(yanlingVO));
//}
//public void KeySkillYanling3()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// HeroGameVo_Yanling yanlingVO = Player.mData.mHeroVo.yanling[3];
// _castSkillIndex = 5;
// EventComponent nowEvent = GameEntry.GetComponent();
// nowEvent.FireNow(this, new BattleEventYLSkillFeatureS(yanlingVO));
//}
//public void KeySkillHeti1()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// CostMP(BattleCanvas.Instance.GetSkillID(6));
// PlayAnimation("HTJ_S");
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(6),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
//}
//public void KeySkillHeti2()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// CostMP(BattleCanvas.Instance.GetSkillID(7));
// PlayAnimation("HTJ_S");
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(7),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
//}
//public void KeySkillHeti3()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// CostMP(BattleCanvas.Instance.GetSkillID(8));
// PlayAnimation("HTJ_S");
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(8),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
//}
//public void KeySkillHeti4()
//{
// if (Player.TargetRole == null)
// {
// return;
// }
// TimeControl.Instance.EnemyTimePause();
// CostMP(BattleCanvas.Instance.GetSkillID(9));
// PlayAnimation("HTJ_S");
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, BattleCanvas.Instance.GetSkillID(9),
// false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, int.Parse(Player.TargetRole.ID()), false);
//}
/////
///// 延迟静止
/////
//private void LateIdle()
//{
// if (Player)
// {
// Player.mInvincible = false;
// }
// // 清除按键列表
// ClearCombos(true);
//}
/////
///// 更新
/////
//private void FixedUpdate()
//{
// // 推进
// if (mPush)
// {
// mPushTime -= Time.deltaTime;
// if (mPushTime > 0)
// {
// Player.mNavMeshAgent.velocity = mPushDir * mPushSpeed;
// }
// else
// {
// Player.mNavMeshAgent.velocity = Vector3.zero;
// mPush = false;
// }
// }
//}
/////
///// 更新
/////
//private void Update()
//{
// //if (Input.touchCount > 0 || Input.GetMouseButtonDown(0))
// //{
// // this.CorrectCamera();
// //}
// // combo
// this.comboNowTime -= Time.deltaTime;
// if (this.comboNowTime <= 0)
// {
// LocalSettings.BattleComboCount = 0;
// }
// if (Player != null)
// {
// // 刷新箭头方向
// for (int i = 0; i < Player.mArrows.Count; i++)
// {
// if (i >= RoleManager.Instance.GetLiveMonsters().Count)
// {
// Player.mArrows[i].gameObject.SetActive(false);
// }
// else
// {
// if (RoleManager.Instance.GetLiveMonsters()[i] != null)
// {
// Player.mArrows[i].gameObject.SetActive(true);
// Vector3 lookPos = RoleManager.Instance.GetLiveMonsters()[i].transform.position;
// lookPos.y = Player.mArrows[i].position.y;
// Player.mArrows[i].LookAt(lookPos);
// }
// else
// {
// Player.mArrows[i].gameObject.SetActive(false);
// }
// }
// }
// // 提示箭头
// if (tipArrowTarget != null)
// {
// Vector3 lookPos = tipArrowTarget.position;
// lookPos.y = Player.mTipArrowTran.position.y;
// Player.mTipArrowTran.LookAt(lookPos);
// Player.UpdatemTipArrow(tipArrowTarget);
// }
// }
//}
/////
///// 显示提示箭头
/////
/////
//public void ShowTipArrow(Transform tipTarget)
//{
// tipArrowTarget = tipTarget;
// Player.mTipArrowTran.gameObject.SetActive(true);
//}
/////
///// 隐藏提示箭头
/////
//public void HideTipArrow()
//{
// tipArrowTarget = null;
// Player.mTipArrowTran.gameObject.SetActive(false);
//}
//void UpdateScoreDisplay(float newScore)
//{
// //cmVC.m_XAxis.Value = newScore;
//}
//public void CorrectCameraComplete()
//{
// Transform cmTrans = mRole.transform.Find("CMStateDrivenCamera/CMDefault1");
// CinemachineVirtualCamera cmVC = cmTrans.GetComponent();
// CinemachineTransposer transposer = cmVC.GetCinemachineComponent();
// transposer.m_BindingMode = CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp;
//}
//public void CorrectCameraFollow()
//{
// Transform cmTrans = mRole.transform.Find("CMStateDrivenCamera/CMDefault1");
// CinemachineVirtualCamera cmVC = cmTrans.GetComponent();
// CinemachineStateDrivenCamera cmSDC = cmVC.transform.parent.GetComponent();
// cmSDC.Follow = this._cmFollowPos;
//}
/////
///// 按键
/////
///// 按键类型
//public void PressKey(E_KeyType keyType)
//{
// // 主角不是待机状态,中断
// //*//if (mRole.roleStateName != "RoleState_Idle")
// //*//{
// //*//return;
// //*//}
// // 人物死亡 中断
// if (mRole.isDie)
// {
// return;
// }
// // 连招锁定中,按键无效
// if (bLockCombo)
// {
// return;
// }
// if (mCurKeys.Count < 1)
// {
// KeyEvent(keyType);
// }
// else
// {
// mCurKeys.Add(keyType);
// // 检测连击
// if (IsCombo(mCurKeys))
// {
// return;
// }
// // 有后续连击,中断,等待连击播放完
// if (mCurCombos.Count > 0)
// {
// return;
// }
// // 没有匹配到连击,清除按键列表
// ClearCombos();
// KeyEvent(keyType);
// }
//}
/////
///// 按键事件
/////
///// 按键类型
//private void KeyEvent(E_KeyType keyType)
//{
// // 没有播放其他动作才可执行新动作
// if (IsPlaying() == false)
// {
// // do nothing
// }
// else
// {
// return;
// }
// // 普通攻击
// if (keyType == E_KeyType.J)
// {
// bCanMove = false;
// for (int i = 0; i < mKeyInfoJ.Count; i++)
// {
// if (i == 0)
// {
// PlayComboAnimation(mKeyInfoJ[i]);
// }
// mCurKeys.Add(mKeyInfoJ[i].Key);
// }
// }
// // 冲刺/闪避
// else if (keyType == E_KeyType.I)
// {
// for (int i = 0; i < mKeyInfoI.Count; i++)
// {
// if (i == 0)
// {
// PlayComboAnimation(mKeyInfoI[i]);
// }
// mCurKeys.Add(mKeyInfoI[i].Key);
// }
// }
// // 武器技能
// else if (keyType == E_KeyType.K)
// {
// ClearCombos();
// bLockCombo = true;
// for (int i = 0; i < mKeyInfoK.Count; i++)
// {
// if (i == 0)
// {
// PlayComboAnimation(mKeyInfoK[i]);
// }
// else
// {
// mCurCombos.Add(mKeyInfoK[i]);
// }
// }
// }
// // 必杀
// else if (keyType == E_KeyType.L)
// {
// ClearCombos();
// bLockCombo = true;
// for (int i = 0; i < mKeyInfoL.Count; i++)
// {
// if (i == 0)
// {
// PlayComboAnimation(mKeyInfoL[i]);
// }
// else
// {
// mCurCombos.Add(mKeyInfoL[i]);
// }
// }
// }
//}
/////
///// 检测最近的目标(参数false时有目标则不进行搜索,参数true时重新搜索最近的目标)
/////
///// 是否强制搜索
/////
//private Role CheckNearTarget(bool forceFind = false)
//{
// if (forceFind == false && Player.TargetRole != null)
// {
// float dis = Vector3.Distance(Player.TargetRole.transform.position, mRole.transform.position);
// if (dis <= Player.mData.ORG_Final)
// {
// return Player.TargetRole;
// }
// }
// Role targetRole = null;
// // 检测 离的最近的玩家
// Collider[] colliders = Physics.OverlapSphere(mRole.transform.position, Player.mData.ORG_Final, 1 << LayerMask.NameToLayer("Enemy"));
// if (colliders != null && colliders.Length > 0)
// {
// float minDis = 9999;
// for (int i = 0; i < colliders.Length; i++)
// {
// float dis = Vector3.Distance(colliders[i].transform.position, mRole.transform.position);
// if (dis < minDis)
// {
// minDis = dis;
// targetRole = colliders[i].GetComponent();
// }
// }
// }
// if (targetRole != null && Player.TargetRole != targetRole)
// {
// if (Player.TargetRole)
// {
// Player.TargetRole.LockStampEffect.SetActive(false);
// }
// targetRole.LockStampEffect.SetActive(true);
// }
// else if (targetRole == null && Player.TargetRole != targetRole)
// {
// Player.TargetRole.LockStampEffect.SetActive(false);
// }
// Player.TargetRole = targetRole;
// if (targetRole != null)
// {
// BattleCanvas.Instance.ShowLockMonsterHP(targetRole);
// if (mHeadLookAtTarget != null)
// {
// mHeadLookAtTarget.m_TargetObject = targetRole.gameObject;
// }
// }
// else
// {
// BattleCanvas.Instance.HideLockMonsterHP();
// if (mHeadLookAtTarget != null)
// {
// mHeadLookAtTarget.m_TargetObject = null;
// }
// }
// return targetRole;
//}
/////
///// 清理连击信息
/////
//public void ClearCombos(bool idleAni = false)
//{
// Debug.Log("执行清理连击");
// mCurKeys.Clear();
// mCurCombos.Clear();
// mCurComboIndex = 1;
// bLockCombo = false;
// mAttackLockTime = 0;
// IsCheckIdle = false;
// mMoveing = false;
// bCanMove = true;
// bCrossMoveAni = false;
// if (this.mRole)
// {
// this.mRole.mInvincible = false;
// }
// if (idleAni)
// {
// PlayAnimation("Idle", 0.25f);
// }
//}
/////
///// 播放动画
/////
///// 动画名称
///// 淡入时间
//public void PlayAnimation(string aniName, float fadeTime = 0)
//{
// if (mAttackLockTime > 0)
// {
// return;
// }
// // 人物死亡 中断
// if (mRole == null || mRole.isDie)
// {
// return;
// }
// // 直接播放
// if (fadeTime < 0.01f)
// {
// Player.mAnimator.PlayInFixedTime(aniName, 0, 0);
// }
// else
// {
// Player.mAnimator.CrossFadeInFixedTime(aniName, fadeTime);
// }
//}
/////
///// 播放连击动作
/////
///// 信息
///// 自动静止的时间
//private void PlayComboAnimation(KeyComboInfo info, float autoIdleTime = 0.5f)
//{
// if (Player.mData.MP_Final < info.Skill.costPowerPoint)
// {
// Debug.Log("能量不足,无法释放!!!" + info.Skill.name);
// bLockCombo = false;
// return;
// }
// // 检测最近玩家
// if (Player.TargetRole == null || Player.TargetRole.IsDead())
// {
// CheckNearTarget();
// }
// // 检测是否冲刺
// if (Player.TargetRole)
// {
// float dis = Vector3.Distance(Player.transform.position, Player.TargetRole.transform.position);
// if (dis > Player.mData.ARG_Final)
// {
// PlayerPush(Player.transform.position + mPushDir * (dis - Player.mData.ARG_Final));
// // 如果处于连招中,则重新从第一招开始
// if (mCurCombos.Count > 1)
// {
// info = mCurCombos[0];
// ClearCombos();
// }
// }
// }
// IsCheckIdle = true;
// PlayAnimation(info.Skill.actShow);
// mAttackLockTime = autoIdleTime;
// mCurComboInfo = info;
// // 设置使用的技能
// Player.mData.SetCurUseSkill(info.Skill.typeId.ToString());
// // 消耗能量
// Player.mData.UpdateMP(-info.Skill.costPowerPoint, true);
// // 显示特效
// ShowEffect(mCurComboInfo.Skill.effShow);
// // 默认维持人物正方向
// mPushDir = mRole.transform.forward;
// // 存在锁定目标,则朝向锁定目标
// if (Player.TargetRole && info.Skill.skillType < 2)
// {
// mPushDir = Player.TargetRole.transform.position - mRole.transform.position;
// mPushDir.Normalize();
// mRole.SetRotation(mPushDir);
// }
//}
/////
///// 设置玩家位置
/////
///// 设置的transform
//public void SetPlayerPos(Transform tran)
//{
// if (tran == null)
// {
// return;
// }
// Player.transform.position = tran.position;
// Player.transform.localRotation = tran.localRotation;
//}
/////
///// 技能必杀
/////
//private void AnimationEvent_PlayerSkill()
//{
// // 此处可能会有技能的特殊逻辑,暂时没发现有此需求,直接用攻击的逻辑
// AnimationEvent_Attack();
//}
/////
///// 攻击检测
/////
//private void AnimationEvent_Attack()
//{
// /// 0默认值错误值
// /// 1指定角色(指定ID)
// /// 2自己、
// /// 3自身以及相邻单位、
// /// 4所有友方(包括自己)
// /// 5敌方随机N个
// /// 6当前目标及相邻单位
// /// 7所有敌人
// Collider[] colliders;
// switch (mCurComboInfo.Skill.aim)
// {
// case 1:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Enemy"));
// break;
// case 2:
// colliders = new Collider[1];
// colliders[0] = this.mRole.mCollider;
// break;
// case 3:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Player"));
// break;
// case 4:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Player"));
// break;
// case 5:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Enemy"));
// break;
// case 6:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Enemy"));
// break;
// case 7:
// colliders = Physics.OverlapSphere(mRole.transform.position, mCurComboInfo.Skill.attackRadius, 1 << LayerMask.NameToLayer("Enemy"));
// break;
// default:
// colliders = null;
// break;
// }
// if (colliders != null && colliders.Length > 0)
// {
// for (int i = 0; i < colliders.Length; i++)
// {
// // 忽略角色控制器的碰撞
// if (colliders[i] == null || colliders[i] is CharacterController)
// {
// continue;
// }
// float dis = Vector3.Distance(colliders[i].transform.position, mRole.transform.position);
// if (dis > mCurComboInfo.Skill.attackRadius)
// {
// continue;
// }
// Role tRole = colliders[i].GetComponent();
// if (tRole == null)
// {
// continue;
// }
// else if (tRole.isDie == false)
// {
// // 无敌中,不受伤害
// if (tRole.mInvincible)
// {
// continue;
// }
// }
// // 筛选符合攻击范围的玩家
// Vector3 v3Dir = colliders[i].transform.position - mRole.transform.position;
// v3Dir.Normalize();
// float angle = Vector3.Angle(mRole.transform.forward, v3Dir);
// if (angle <= mCurComboInfo.Skill.attackAngle * 0.5f)
// {
// this.comboNowTime = comboSpaceTime;
// LocalSettings.BattleComboCount++;
// if (LocalSettings.MaxCombCount < LocalSettings.BattleComboCount)
// {
// LocalSettings.MaxCombCount = LocalSettings.BattleComboCount;
// }
// // 恢复能量
// Player.mData.UpdateMP(3, true);
// X2Battle.X2BattleManager.Instance.mBulletModel.OnCastSkill(
// Player.mData.UID, Player.mData.GetCurUseSkill(), false, X2Battle.EBulletCastPoint.ECAST_POINT_DEFLUAT, tRole.mData.UID, false);
// Vector3 dir = tRole.transform.position - mRole.transform.position;
// dir.Normalize();
// RPGEffectManager.Instance.CreateEffect(1, tRole.mHitPos.GetPosition(), dir);
// }
// }
// }
//}
/////
///// 显示特效
/////
///// 名称
//public void ShowEffect(string effectName)
//{
// // 特效名无效
// if (string.IsNullOrEmpty(effectName))
// {
// return;
// }
// Transform tran = Player.mAnimator.transform.Find("Effect_000/" + effectName);
// if (tran)
// {
// tran.gameObject.SetActive(false);
// tran.gameObject.SetActive(true);
// }
//}
/////
///// 玩家推进
/////
///// 推进到的位置
///// 推进时间
//public void PlayerPush(Vector3 pos, float pushTime = 0.35f)
//{
// float dis = Vector3.Distance(Player.transform.position, pos);
// mPushTime = pushTime;
// mPushSpeed = dis / pushTime;
// mPush = true;
//}
/////
///// 是否正在播放动画
/////
///// 播放的进度(大于1.0f表示播放完成)
/////
//public bool IsPlaying(float playProgress = 1.0f)
//{
// if (Player == null)
// {
// return false;
// }
// // 获取动画层 0 指Base Layer.
// AnimatorStateInfo stateinfo = Player.mAnimator.GetCurrentAnimatorStateInfo(0);
// if (stateinfo.loop)
// {
// return false;
// }
// else
// {
// if (stateinfo.normalizedTime >= playProgress)
// {
// return false;
// }
// else
// {
// return true;
// }
// }
//}
/////
///// 是否处于连击中
/////
///// 按键列表
///// 处于连击中的状态
//private bool IsCombo(List keylist)
//{
// if (keylist == null || keylist.Count < 1)
// {
// return false;
// }
// for (int aci = 0; aci < mAllComboInfos.Count; aci++)
// {
// ComboData comboData = mAllComboInfos[aci];
// mCurCombos.Clear();
// for (int i = 0; i < keylist.Count; i++)
// {
// if (i >= comboData.comboInfos.Count)
// {
// return true;
// }
// KeyComboInfo comboInfo = comboData.comboInfos[i];
// if (keylist[i] != comboInfo.Key)
// {
// break;
// }
// else
// {
// // 已经播放过的动作不再加入列表
// if (i >= mCurComboIndex)
// {
// mCurCombos.Add(comboInfo);
// }
// }
// }
// // 匹配到连招,中断
// if (mCurCombos.Count > 0)
// {
// return true;
// }
// }
// return true;
//}
}
public enum SkillBtnIconType
{
Yanling1 = 1,
Yanling2 = 2,
Yanling3 = 3,
Heti1 = 4,
Heti2 = 5,
Heti3 = 6,
Heti4 = 7,
Putong = 8,
Bisha = 9,
Shanbi = 10,
Count,
}