using Fie.Camera; using Fie.Manager; using Fie.Object; using Fie.Ponies; using UnityEngine; public class FieInputGamePadAndKeyboard : FieInputControllerBase { private enum KeyTypes { NONE = 0, EVASION = 1, BASE_ATTACK = 2, JUMP = 4, ABILITIES_1 = 8, ABILITIES_2 = 0x10, ABILITIES_3 = 0x20, INTERACT = 0x40, SWITCHED_LOCKON_MODE = 0x80, MENU = 0x100, RESTART = 0x200 } private struct KeyDownInfo { public KeyTypes keyType; public float downCount; public KeyDownInfo(KeyTypes keyType, float downCount) { this.keyType = keyType; this.downCount = downCount; } } private const float TARGET_CHANGE_AXIS_THRESHOLD = 0.5f; private const float HORIZONTAL_MOVE_AXIS_THRESHOLD = 0.3f; private const float HORIZONTAL_GALLOP_AXIS_THRESHOLD = 0.7f; private const float FIRE_TRIGGER_AXIS_THRESHOLD = 0.3f; private const float TARGET_MAKER_MOVE_AXIS_THRESHOLD = 0.05f; private const float TARGET_MAKER_MOVE_SPEED_PER_SEC = 6f; private KeyTypes _keyTypes; private KeyDownInfo[] _keyDownCounts = new KeyDownInfo[11] { new KeyDownInfo(KeyTypes.NONE, 0f), new KeyDownInfo(KeyTypes.EVASION, 0f), new KeyDownInfo(KeyTypes.BASE_ATTACK, 0f), new KeyDownInfo(KeyTypes.JUMP, 0f), new KeyDownInfo(KeyTypes.ABILITIES_1, 0f), new KeyDownInfo(KeyTypes.ABILITIES_2, 0f), new KeyDownInfo(KeyTypes.ABILITIES_3, 0f), new KeyDownInfo(KeyTypes.INTERACT, 0f), new KeyDownInfo(KeyTypes.SWITCHED_LOCKON_MODE, 0f), new KeyDownInfo(KeyTypes.MENU, 0f), new KeyDownInfo(KeyTypes.RESTART, 0f) }; private KeyTypes[] _keyTypeList = new KeyTypes[11] { KeyTypes.NONE, KeyTypes.EVASION, KeyTypes.BASE_ATTACK, KeyTypes.JUMP, KeyTypes.ABILITIES_1, KeyTypes.ABILITIES_2, KeyTypes.ABILITIES_3, KeyTypes.INTERACT, KeyTypes.SWITCHED_LOCKON_MODE, KeyTypes.MENU, KeyTypes.RESTART }; private float _rightHorizontalAxisPower; private float _rightVerticalAxisPower; private Vector3 _leftAxisVector = Vector3.zero; private Vector3 _rightAxisVector = Vector3.zero; private float _rightAxisCount; private float _leftAxisInputForce; private float _rightAxisInputForce; private bool _isMouseViewMode; private float _timeScale = 1f; private void Start() { } private Vector3 getMovemenetAxis() { Vector3 zero = Vector3.zero; zero.x = FieManagerBehaviour.I.GetPlayer().GetAxis("Move Horizontal"); zero.y = FieManagerBehaviour.I.GetPlayer().GetAxis("Move Vertical"); zero.x = Mathf.Clamp(zero.x, -1f, 1f); zero.y = Mathf.Clamp(zero.y, -1f, 1f); return zero; } private void Update() { if (!(base.ownerCharacter == null)) { if (!FieManagerBehaviour.I.isEnableControll) { base.ownerCharacter.SetExternalForces(Vector3.zero, 0f); } else { updateKeyFlags(); _rightHorizontalAxisPower = FieManagerBehaviour.I.GetPlayer().GetAxis("Camera Horizontal"); _rightVerticalAxisPower = FieManagerBehaviour.I.GetPlayer().GetAxis("Camera Vertical"); _leftAxisVector = getMovemenetAxis(); _leftAxisInputForce = Mathf.Clamp(Vector3.Distance(b: new Vector3(_leftAxisVector.x, _leftAxisVector.y), a: Vector3.zero), 0f, 1f); _leftAxisVector.Normalize(); _rightAxisVector = new Vector3(_rightHorizontalAxisPower, _rightVerticalAxisPower, 0f); Vector3 b2 = new Vector3(_rightAxisVector.x, _rightAxisVector.y); float x = b2.x; Vector3 normalized = _rightAxisVector.normalized; float min = 0f - Mathf.Abs(normalized.x); Vector3 normalized2 = b2.normalized; b2.x = Mathf.Clamp(x, min, Mathf.Abs(normalized2.x)); float y = b2.y; Vector3 normalized3 = _rightAxisVector.normalized; float min2 = 0f - Mathf.Abs(normalized3.y); Vector3 normalized4 = b2.normalized; b2.y = Mathf.Clamp(y, min2, Mathf.Abs(normalized4.y)); _rightAxisInputForce = Mathf.Clamp(Vector3.Distance(Vector3.zero, b2), 0f, 1f); _rightAxisVector.Normalize(); if (_leftAxisInputForce > 0.7f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Base); } else if (_leftAxisInputForce > 0.3f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Base); } if (GetKeyDownCount(KeyTypes.EVASION) > 0f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Base); } if (GetKeyDownCount(KeyTypes.JUMP) > 0f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Base); } if (FieManagerBehaviour.I.gameCamera != null) { FieGameCameraTaskLockOn fieGameCameraTaskLockOn = FieManagerBehaviour.I.gameCamera.GetCameraTask() as FieGameCameraTaskLockOn; if (fieGameCameraTaskLockOn != null) { if (_isMouseViewMode) { ControllTargetCursorByMouse(fieGameCameraTaskLockOn); } else if (Input.GetAxis("Mouse X") > 50f * Time.deltaTime || Input.GetAxis("Mouse Y") > 50f * Time.deltaTime) { _isMouseViewMode = true; } else { ControllTargetCursorByPad(fieGameCameraTaskLockOn); } } } bool flag = false; if (GetKeyDownCount(KeyTypes.ABILITIES_1) > 0f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Attack); flag = ((byte)((flag ? 1 : 0) | 1) != 0); } if (GetKeyDownCount(KeyTypes.ABILITIES_2) > 0f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Attack); flag = ((byte)((flag ? 1 : 0) | 1) != 0); } if (GetKeyDownCount(KeyTypes.ABILITIES_3) > 0f) { base.ownerCharacter.RequestToChangeState(_leftAxisVector, _leftAxisInputForce, FieGameCharacter.StateMachineType.Attack); flag = ((byte)((flag ? 1 : 0) | 1) != 0); } if (GetKeyDownCount(KeyTypes.BASE_ATTACK) > 0f) { base.ownerCharacter.RequestToChangeState(Vector3.zero, 0f, FieGameCharacter.StateMachineType.Attack); flag = ((byte)((flag ? 1 : 0) | 1) != 0); } if (!flag) { base.ownerCharacter.RequestToChangeState(Vector3.zero, 0f, FieGameCharacter.StateMachineType.Attack); } if (GetKeyDownCount(KeyTypes.INTERACT) > 0f) { FiePonies fiePonies = base.ownerCharacter as FiePonies; if (fiePonies != null) { fiePonies.TryToRevive(); } } if (GetKeyDownCount(KeyTypes.MENU) > 3f) { Application.Quit(); } if (GetKeyDownCount(KeyTypes.RESTART) > 3f) { FieManagerFactory.I.Restart(); } base.ownerCharacter.SetExternalForces(_leftAxisVector, _leftAxisInputForce); } } } private void ControllTargetCursorByMouse(FieGameCameraTaskLockOn lockonTask) { if (_rightAxisInputForce > 0.05f || GetKeyDownCount(KeyTypes.SWITCHED_LOCKON_MODE) > 0f) { _isMouseViewMode = false; } else { lockonTask.isCameraHorming = false; FieGameCamera gameCamera = FieManagerBehaviour.I.gameCamera; Vector3 mousePosition = Input.mousePosition; float x = mousePosition.x; Vector3 mousePosition2 = Input.mousePosition; gameCamera.SetTargetMakerScreenPos(new Vector3(x, mousePosition2.y, 0f)); base.ownerCharacter.detector.ChangeLockonTargetFromNearestWorldPosition(FieManagerBehaviour.I.gameCamera.camera.ScreenToWorldPoint(FieManagerBehaviour.I.gameCamera.tagetMakerScreenPos), 0.5f); } } private void ControllTargetCursorByPad(FieGameCameraTaskLockOn lockonTask) { if (GetKeyDownCount(KeyTypes.SWITCHED_LOCKON_MODE) > 0f) { lockonTask.isCameraHorming = !lockonTask.isCameraHorming; } if (!lockonTask.isCameraHorming) { if (_rightAxisInputForce > 0.05f) { FieManagerBehaviour.I.gameCamera.AddTargetMakerScreenPos(_rightAxisVector * _rightAxisInputForce * (float)(Screen.height + Screen.width) * GetTargetMakerSpeedMagnify() * Time.deltaTime); } base.ownerCharacter.detector.ChangeLockonTargetFromNearestWorldPosition(FieManagerBehaviour.I.gameCamera.camera.ScreenToWorldPoint(FieManagerBehaviour.I.gameCamera.tagetMakerScreenPos), 0.5f); } else { if (_rightAxisInputForce > 0.5f && _rightAxisCount <= 0f) { base.ownerCharacter.detector.ChangeLockonTargetByScreenDirection(FieManagerBehaviour.I.gameCamera.camera, _rightAxisVector); _rightAxisCount = 0.2f; } if (_rightAxisCount > 0f) { _rightAxisCount -= Time.deltaTime; } } } private float GetTargetMakerSpeedMagnify() { return 1f; } private void LateUpdate() { } private float GetKeyDownCount(KeyTypes _keyType) { for (int i = 0; i < _keyTypeList.Length; i++) { if (_keyDownCounts[i].keyType == _keyType) { return _keyDownCounts[i].downCount; } } return 0f; } private void updateKeyFlags() { _keyTypes = KeyTypes.NONE; if (FieManagerBehaviour.I.GetPlayer().GetButtonDown("Jump")) { _keyTypes |= KeyTypes.JUMP; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Evasion")) { _keyTypes |= KeyTypes.EVASION; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Ability1")) { _keyTypes |= KeyTypes.ABILITIES_1; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Ability2")) { _keyTypes |= KeyTypes.ABILITIES_2; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Ability3")) { _keyTypes |= KeyTypes.ABILITIES_3; } float axis = FieManagerBehaviour.I.GetPlayer().GetAxis("Base Attack"); if (axis > 0.3f) { _keyTypes |= KeyTypes.BASE_ATTACK; } if (FieManagerBehaviour.I.GetPlayer().GetButtonDown("Switched Lockon Mode")) { _keyTypes |= KeyTypes.SWITCHED_LOCKON_MODE; } if (FieManagerBehaviour.I.GetPlayer().GetButtonDown("Interact")) { _keyTypes |= KeyTypes.INTERACT; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Menu")) { _keyTypes |= KeyTypes.MENU; } if (FieManagerBehaviour.I.GetPlayer().GetButton("Restart")) { _keyTypes |= KeyTypes.RESTART; } for (int i = 0; i < _keyTypeList.Length; i++) { if ((_keyTypes & _keyTypeList[i]) == _keyTypeList[i]) { _keyDownCounts[i].downCount += Time.deltaTime; } else { _keyDownCounts[i].downCount = 0f; } } } }