summaryrefslogtreecommitdiff
path: root/GameCode/GeneralInput.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/GeneralInput.cs')
-rw-r--r--GameCode/GeneralInput.cs274
1 files changed, 274 insertions, 0 deletions
diff --git a/GameCode/GeneralInput.cs b/GameCode/GeneralInput.cs
new file mode 100644
index 0000000..0487def
--- /dev/null
+++ b/GameCode/GeneralInput.cs
@@ -0,0 +1,274 @@
+using System.Collections;
+using UnityEngine;
+
+public class GeneralInput : MonoBehaviour
+{
+ public enum InputType
+ {
+ Controller,
+ Keyboard,
+ Either
+ }
+
+ public enum StickDirection
+ {
+ Left,
+ Right,
+ None
+ }
+
+ public bool controlledElseWhere;
+
+ public bool stunnedInput;
+
+ public bool silencedInput;
+
+ public KeyCode left;
+
+ public KeyCode right;
+
+ public KeyCode up;
+
+ public KeyCode down;
+
+ public KeyCode jump;
+
+ public KeyCode shoot;
+
+ public KeyCode shield;
+
+ public Vector3 direction;
+
+ public Vector3 latestPressedDirection;
+
+ public Vector3 aimDirection;
+
+ public Vector3 lastAimDirection;
+
+ public bool jumpWasPressed;
+
+ public bool jumpIsPressed;
+
+ public bool shootWasPressed;
+
+ public bool shootIsPressed;
+
+ public bool shootWasReleased;
+
+ public bool shieldWasPressed;
+
+ public bool acceptWasPressed;
+
+ public InputType inputType;
+
+ private StickDirection lastStickDirection;
+
+ public StickDirection stickPressDir = StickDirection.None;
+
+ private CharacterData data;
+
+ private int snapNumber = 16;
+
+ private void Start()
+ {
+ data = GetComponent<CharacterData>();
+ }
+
+ public void ResetInput()
+ {
+ direction = Vector3.zero;
+ aimDirection = Vector3.zero;
+ jumpIsPressed = false;
+ jumpWasPressed = false;
+ shootIsPressed = false;
+ shootWasPressed = false;
+ shootWasReleased = false;
+ shieldWasPressed = false;
+ acceptWasPressed = false;
+ }
+
+ private void Update()
+ {
+ if (controlledElseWhere)
+ {
+ return;
+ }
+ ResetInput();
+ DoUIInput();
+ if (GameManager.lockInput || stunnedInput || !data.isPlaying || data.playerActions == null)
+ {
+ return;
+ }
+ direction += (Vector3)data.playerActions.Move;
+ direction = MakeEightDirections(direction);
+ if (direction != Vector3.zero)
+ {
+ latestPressedDirection = direction;
+ }
+ if (data.playerActions.Device == null)
+ {
+ aimDirection = MainCam.instance.cam.ScreenToWorldPoint(Input.mousePosition) - base.transform.position;
+ aimDirection.z = 0f;
+ aimDirection.Normalize();
+ if (Optionshandler.lockMouse)
+ {
+ aimDirection = MakeEightDirections(aimDirection);
+ }
+ }
+ else
+ {
+ aimDirection.x += data.playerActions.Aim.X;
+ aimDirection.y += data.playerActions.Aim.Y;
+ if (Optionshandler.lockStick)
+ {
+ aimDirection = MakeEightDirections(aimDirection);
+ }
+ }
+ if (aimDirection != Vector3.zero)
+ {
+ aimDirection += Vector3.up * 0.13f / Mathf.Clamp(data.weaponHandler.gun.projectileSpeed, 1f, 100f);
+ }
+ if (aimDirection != Vector3.zero)
+ {
+ lastAimDirection = aimDirection;
+ }
+ if (data.playerActions.Jump.IsPressed)
+ {
+ jumpIsPressed = true;
+ }
+ if (data.playerActions.Jump.WasPressed)
+ {
+ jumpWasPressed = true;
+ }
+ if (!silencedInput)
+ {
+ if (data.playerActions.Fire.IsPressed)
+ {
+ shootIsPressed = true;
+ }
+ if (data.playerActions.Fire.WasPressed)
+ {
+ shootWasPressed = true;
+ }
+ if (data.playerActions.Fire.WasReleased)
+ {
+ shootWasReleased = true;
+ }
+ if (data.playerActions.Block.WasPressed)
+ {
+ shieldWasPressed = true;
+ }
+ }
+ }
+
+ private void DoUIInput()
+ {
+ StickDirection stickDirection = StickDirection.None;
+ if (data.playerActions.Move.X > 0.7f)
+ {
+ stickDirection = StickDirection.Right;
+ }
+ if (data.playerActions.Move.X < -0.7f)
+ {
+ stickDirection = StickDirection.Left;
+ }
+ if (stickDirection != lastStickDirection)
+ {
+ stickPressDir = stickDirection;
+ lastStickDirection = stickDirection;
+ }
+ else
+ {
+ stickPressDir = StickDirection.None;
+ }
+ if (data.playerActions.Jump.WasPressed)
+ {
+ acceptWasPressed = true;
+ }
+ }
+
+ public void DoStun(float stun)
+ {
+ if (base.gameObject.activeSelf)
+ {
+ StartCoroutine(Stun(stun));
+ }
+ }
+
+ private IEnumerator Stun(float stun)
+ {
+ base.enabled = false;
+ ResetInput();
+ yield return new WaitForSeconds(stun);
+ base.enabled = true;
+ }
+
+ public void SetState(Vector3 pos, bool isGrounded)
+ {
+ base.transform.position = pos;
+ }
+
+ public void Move(bool right, bool left, bool up, bool down, bool jump)
+ {
+ ResetInput();
+ if (left)
+ {
+ direction += Vector3.left;
+ }
+ if (right)
+ {
+ direction += Vector3.right;
+ }
+ if (up)
+ {
+ direction += Vector3.up;
+ }
+ if (down)
+ {
+ direction += Vector3.down;
+ }
+ if (jump)
+ {
+ jumpWasPressed = true;
+ }
+ Debug.Log("Move: Right: " + right + " Left: " + left + " Jump: " + jump);
+ if (Input.GetKey(shoot))
+ {
+ shootIsPressed = true;
+ }
+ if (Input.GetKeyDown(shoot))
+ {
+ shootWasPressed = true;
+ }
+ if (Input.GetKeyUp(shoot))
+ {
+ shootWasReleased = true;
+ }
+ }
+
+ private Vector3 MakeEightDirections(Vector3 dir)
+ {
+ _ = Vector3.zero;
+ float num = 360f / (float)snapNumber;
+ Vector3 vector = Vector3.up;
+ Vector3 vector2 = vector;
+ float num2 = 999f;
+ Vector3 result = dir;
+ for (int i = 0; i < snapNumber; i++)
+ {
+ vector2 = Quaternion.Euler(Vector3.forward * num * i) * vector;
+ float num3 = Vector3.Angle(dir, vector2);
+ if (num3 < num2)
+ {
+ num2 = num3;
+ result = vector2;
+ }
+ }
+ if (dir == Vector3.zero)
+ {
+ return Vector3.zero;
+ }
+ dir = dir.normalized;
+ return result;
+ }
+}