shaoxiadiablo/Assets/AGame/Scripts/Game/Entity/EntityPlayer.Input.cs
2025-05-18 01:04:31 +08:00

384 lines
8.1 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "Cha_Control" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
using UnityEngine;
namespace G
{
partial class EntityPlayer
{
private const float STOP_MOVE_THRESHOLD = 0.01F;
private const float START_MOVE_THRESHOLD = 0.03F;
private bool _keydown;
private bool _saveTouchPosition;
private Vector3 _currTouchPosistion;
private Vector3 _prevTouchPosistion;
private bool _skillDown;
private float _lastAttackTime;
private float _lastMoveTime;
public bool anyKey
{
get { return Input.anyKey; }
}
public bool anyKeyDown
{
get { return Input.anyKeyDown; }
}
public Vector3 mousePosition
{
get { return Input.mousePosition; }
}
public Vector3 joystick
{
get
{
var dir = UI_Ingame.Instance.joystickDirection;
return new Vector3(dir.x, 0f, dir.y);
}
}
public void OnSPBtnClick()
{
if (sp < 100)
return;
SpCharge(-100);
SpSkill();
}
public void OnSkillBtnClick(Cha_Moves.MovesInfo buffInfo)
{
if (_isPlaying && moveState < MoveState.Generalstate100)
{
CancelAtk();
_pressDelay = 1f;
_skillDown = scriptMoves.CastSkill(buffInfo);
}
_skillDown = true;
}
public void OnAttackBtnClick()
{
if (_isPlaying && moveState <= MoveState.state10_Atk_T && moveState >= MoveState.state0_Idle)
{
if (Time.time - _lastAttackTime > 0.2f)
{
_lastAttackTime = Time.time;
if (targetEnemy)
{
AttackOn(targetEnemy.position);
}
else if (_targetProp)
{
AttackOn(_targetProp.position);
}
else
{
AttackOn(this.transform.TransformPoint(Vector3.forward), false);
}
}
}
//else if (chamovestat == MoveState.state212)
//{
// Attack_spear(targetenemy.transform.position);
//}
//else if (chamovestat == MoveState.state203)
//{
// Attack_arrow(targetenemy.transform.position);
//}
//else if (grabstart && !general)
//{
// targetenemy.gameObject.SendMessage("Grabed");
// grabstart = false;
//}
}
/// <summary>
///
/// </summary>
public void OnDodgeBtnClick()
{
Dodge();
}
private bool _autoAttackTarget;
/// <summary>
/// 自动攻击
/// </summary>
public bool autoAttack
{
get { return _autoAttackTarget; }
set { _autoAttackTarget = value; }
}
private bool _autoCastSkill;
/// <summary>
/// 自动释放技能
/// </summary>
public bool autoCastSkill
{
get { return _autoCastSkill; }
set { _autoCastSkill = value; }
}
public bool autoStudySkill
{
get
{
#if !UNITY_WEBGL && UNITY_EDITOR
if (KGMOptions.Instance.)
return true;
#endif
return _autoCastSkill;
}
}
/// <summary>
///
/// </summary>
public bool autoSelectAdventure
{
get { return _autoCastSkill; }
}
public void AutoSelectTarget(Transform target)
{
targetEnemy = target;
}
Transform _targetProp;
public void AutoSelectProp(Transform target)
{
_targetProp = target;
}
public void AutoAttackTarget(Transform target)
{
if (!_isPlaying || anyKey)
return;
float sqrDistance = -1f;
if (moveState == MoveState.state222_wheelwind)
{
sqrDistance = 0.04f;
}
else if (moveState >= MoveState.state0_Idle && moveState <= MoveState.state10_Atk_T)
{
sqrDistance = _weaponAttackRange * _weaponAttackRange;
}
else
{
return;
}
if (GameLevel.Instance.autoTrackEnemy)
{
var vector = target.position - this.position;
vector.y = 0f;
if (vector.sqrMagnitude > sqrDistance)
{
_direction = vector.normalized;
_directionFactor = 6.5f;
return;
}
}
if (Time.time - _lastAttackTime < 0.25f || moveState == MoveState.state222_wheelwind || (moveState == MoveState.state10_Atk_T && stateTime < 0.08f))
return;
attackEnemy = target;
_lastAttackTime = Time.time;
AttackOn(target.position);
}
public void AutoCastSkill()
{
if (_isPlaying && isLife && targetEnemy)
{
scriptMoves.AutoCastSkill();
}
}
public void AutoFindPortal()
{
if (!_isPlaying || anyKey || Time.time - _lastMoveTime < 1f)
return;
float sqrDistance = -1f;
Vector3 targetPos;
if (EntityPortal.Instance)
{
sqrDistance = 0.01f;
targetPos = EntityPortal.Instance.position;
}
else if (EntityGiftBox.Instance && EntityGiftBox.Instance.canOpen)
{
sqrDistance = 0.008f;
targetPos = EntityGiftBox.Instance.position;
}
else
{
return;
}
var vector = targetPos - this.position;
vector.y = 0f;
if (vector.sqrMagnitude > sqrDistance)
{
_direction = vector.normalized;
_directionFactor = 6.5f;
return;
}
}
//Vector3 _prevPoint;
private void UpdateInput()
{
if (this.anyKeyDown)
{
//处理技能
_saveTouchPosition = false;
//_prevPoint = Input.mousePosition;
_pressDelay = 0f;
_keydown = true;
}
else if (this.anyKey)
{
//Vector3 dir = Input.mousePosition - _prevPoint;// this.joystick;
//dir.z = dir.y;
//dir.y = 0;
//_prevPoint = Input.mousePosition;
//Debug.Log("press " + dir + " " + joystick);
Vector3 dir = this.joystick;
if (!_skillDown && dir != Vector3.zero)
{
dir *= 0.2f;
_currTouchPosistion = dir + this.transform.position;// casthit.point;
if (!_saveTouchPosition)
{
_prevTouchPosistion = _currTouchPosistion;
_saveTouchPosition = true;
}
//var tempdir = currentTouchPos - mytransform.position;
//tempdir.y = 0f;
var dirMag = dir.magnitude;
dir /= dirMag;
var m_hold = STOP_MOVE_THRESHOLD;
//if (attackHold > 0.2f)
// m_hold = 0.06f;
//双击
if (dirMag < m_hold)
{
_direction = Vector3.zero;
//if (rideon)
//{
// script_horse.RunStart(false);
// if (clone_ride != null)
// {
// clone_ride.speed = 0.1f;
// }
//}
}
else if (dirMag > START_MOVE_THRESHOLD)
{
_direction = dir;
_directionFactor = 6.5f;
_lastMoveTime = Time.time;
}
}
else
{
}
if (moveState < MoveState.state19_dash)
{
_pressDelay += Time.deltaTime;
//if (_pressDelay > 0.3f)
//{
// Exstart();
//}
// else
// //无双技能
// //if (superModeBtn && superMode != 0)
// if (_pressDelay < 0.1f && !general && !grabstart && (/*sp >= 50f ||*/ superMode != 0) && Vector3.Distance(prevPoint, currentTouchPos) > 0.2f)
// {
// Wushuan();
// }
}
}
else
{
if (_keydown)
{
_saveTouchPosition = false;
_keydown = false;
_skillDown = false;
ResetPower();
//GlobalNotifier.PostNotification(GlobalDefine.EVENT_HOLD_STATE, 0F);
//transform.Find("xuli_fx").gameObject.SetActive(false);
//transform.Find("xuli2_fx").gameObject.SetActive(false);
//if (attackHold > 0.6f)
//{
// attackHold = 0f;
// //script_skill.skillatk = maxAtk * 2f;
// //script_skill.LaunchSkill(0);
// return;
//}
//attackHold = 0f;
//if (moveState < MoveState.attackState11 && moveState >= MoveState.state0)
//{
// //if (Time.time - _lastTime < 0.1f)
// //var dir = JoystickPlayerExample.Instance.variableJoystick.Direction;
// //if (!Input.anyKey)
// {
// //if (_pressDelay > 0.5f)
// //{
// // script_skill.LaunchSkill(0);
// //}
// //else
// //{
// if (_targetEnemy)
// {
// AttackOn(_targetEnemy.position, false);
// _targetEnemy = null;
// }
// else
// {
// AttackOn(transform.position + transform.forward, false);
// }
// //}
// _attackTime = Time.time;
// //AttackOn(_targetEnemy.position);
// _myCollider.enabled = false;
// }
//}
}
}
}
}
}