private void Start() { p = GetComponent <PlayerController>(); canForward = true; canBackward = true; canLeft = true; canRight = true; canJump = false; forwardAxisChange = AxisChangeEnum.Neutral; strafeAxisChange = AxisChangeEnum.Neutral; _jumpInput = false; _movement = new Vector2(0, 0); gc = GameObject.FindObjectOfType <GameController>(); }
private void axisEnumChange(ref AxisChangeEnum axisEnum, float rawAxis) { if (Mathf.Approximately(rawAxis, 0f)) { //if raw input is 0, changeEnum is Neutral. axisEnum = AxisChangeEnum.Neutral; } else if (rawAxis < 0f) { //if rawAxis is negative switch (axisEnum) { //if the axis wasn't already negative case AxisChangeEnum.PositiveFromNeutral: case AxisChangeEnum.Positive: case AxisChangeEnum.Neutral: //it now is axisEnum = AxisChangeEnum.NegativeFromNeutral; break; default: break; } } else { //if rawAxis is positive switch (axisEnum) { //if it wasn't already positive case AxisChangeEnum.NegativeFromNeutral: case AxisChangeEnum.Negative: case AxisChangeEnum.Neutral: //it now is. axisEnum = AxisChangeEnum.PositiveFromNeutral; break; default: break; } } }
private void Update() { if (!gc.Paused) { float rawStrafeAxis = CrossPlatformInputManager.GetAxisRaw("Horizontal"); axisEnumChange(ref strafeAxisChange, rawStrafeAxis); switch (strafeAxisChange) { case AxisChangeEnum.PositiveFromNeutral: if (!canRight) { p.gc.MakePickupPlayNoise(ControlPickupEnum.Right); } strafeAxisChange = AxisChangeEnum.Positive; break; case AxisChangeEnum.NegativeFromNeutral: if (!canLeft) { p.gc.MakePickupPlayNoise(ControlPickupEnum.Left); } strafeAxisChange = AxisChangeEnum.Negative; break; } float rawForwardAxis = CrossPlatformInputManager.GetAxisRaw("Vertical"); axisEnumChange(ref forwardAxisChange, rawForwardAxis); switch (forwardAxisChange) { case AxisChangeEnum.PositiveFromNeutral: if (!canForward) { p.gc.MakePickupPlayNoise(ControlPickupEnum.Forward); } forwardAxisChange = AxisChangeEnum.Positive; break; case AxisChangeEnum.NegativeFromNeutral: if (!canBackward) { p.gc.MakePickupPlayNoise(ControlPickupEnum.Backward); } forwardAxisChange = AxisChangeEnum.Negative; break; } if (CrossPlatformInputManager.GetButtonDown("Jump")) { if (canJump) { _jumpInput = true; } else { p.gc.MakePickupPlayNoise(ControlPickupEnum.Jump); } } float strafe = CrossPlatformInputManager.GetAxis("Horizontal"); float advance = CrossPlatformInputManager.GetAxis("Vertical"); Vector2 desired = new Vector2(strafe, advance); if (desired.magnitude > 1) { desired = desired.normalized; } float actualStrafe = desired.x; //if trying to move right if (strafe > 0) { if (!canRight) { actualStrafe = 0; } } else if (!canLeft) { actualStrafe = 0; } float actualForward = desired.y; if (actualForward > 0) { if (!canForward) { actualForward = 0; } } else if (!canBackward) { actualForward = 0; } _movement = new Vector2(actualStrafe, actualForward); } }