Initial commit
This commit is contained in:
202
Assets/Scripts/PlayerInput.cs
Normal file
202
Assets/Scripts/PlayerInput.cs
Normal file
@@ -0,0 +1,202 @@
|
||||
namespace Marro.PacManUdon
|
||||
{
|
||||
using System;
|
||||
using UdonSharp;
|
||||
using UnityEngine;
|
||||
using VRC.SDKBase;
|
||||
using VRC.Udon;
|
||||
using VRC.Udon.Common;
|
||||
|
||||
public class PlayerInput : UdonSharpBehaviour
|
||||
{
|
||||
public bool active;
|
||||
private GameController gameController;
|
||||
Vector2 inputHorizontal;
|
||||
Vector2 inputVertical;
|
||||
float horizontalValue;
|
||||
float verticalValue;
|
||||
bool horizontalPriority;
|
||||
VRCPlayerApi player;
|
||||
|
||||
public void Initialize(GameController gameController)
|
||||
{
|
||||
this.gameController = gameController;
|
||||
inputHorizontal = Vector2.zero;
|
||||
inputVertical = Vector2.zero;
|
||||
horizontalPriority = false;
|
||||
player = Networking.LocalPlayer;
|
||||
}
|
||||
|
||||
public void Activate()
|
||||
{
|
||||
Debug.Log($"{gameObject} got activated, {player} was immobilized");
|
||||
active = true;
|
||||
player.SetWalkSpeed(0);
|
||||
player.SetRunSpeed(0);
|
||||
player.SetStrafeSpeed(0);
|
||||
|
||||
gameController.JoystickGrabbed();
|
||||
}
|
||||
|
||||
public void Deactivate()
|
||||
{
|
||||
Debug.Log($"{gameObject} got deactivated, {player} was released");
|
||||
player.SetWalkSpeed(2);
|
||||
player.SetRunSpeed(4);
|
||||
player.SetStrafeSpeed(2);
|
||||
active = false;
|
||||
|
||||
gameController.JoystickReleased();
|
||||
}
|
||||
|
||||
public override void InputJump(bool pressed, UdonInputEventArgs args)
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (pressed)
|
||||
{
|
||||
Deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
public override void InputMoveHorizontal(float value, UdonInputEventArgs args)
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
horizontalValue = Math.Abs(value);
|
||||
if (value < -0.5)
|
||||
{
|
||||
inputHorizontal = Vector2.left;
|
||||
if (horizontalValue >= verticalValue)
|
||||
{
|
||||
// horizontalPriority = true;
|
||||
SetPriority(true);
|
||||
}
|
||||
}
|
||||
else if (value > 0.5)
|
||||
{
|
||||
inputHorizontal = Vector2.right;
|
||||
if (horizontalValue >= verticalValue)
|
||||
{
|
||||
// horizontalPriority = true;
|
||||
SetPriority(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inputHorizontal = Vector2.zero;
|
||||
// horizontalPriority = false;
|
||||
SetPriority(false);
|
||||
}
|
||||
|
||||
// Debug.Log("Horizontal Input Event: " + value + " | Direction: " + direction + " | lastDirection: " + lastDirection + " | Left: " + left + " | Right: " + right);
|
||||
}
|
||||
|
||||
public override void InputMoveVertical(float value, UdonInputEventArgs args)
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
verticalValue = Math.Abs(value);
|
||||
if (value < -0.5)
|
||||
{
|
||||
inputVertical = Vector2.down;
|
||||
if (verticalValue >= horizontalValue)
|
||||
{
|
||||
// horizontalPriority = false;
|
||||
SetPriority(false);
|
||||
}
|
||||
}
|
||||
else if (value > 0.5)
|
||||
{
|
||||
inputVertical = Vector2.up;
|
||||
if (verticalValue >= horizontalValue)
|
||||
{
|
||||
// horizontalPriority = false;
|
||||
SetPriority(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inputVertical = Vector2.zero;
|
||||
// horizontalPriority = true;
|
||||
SetPriority(true);
|
||||
}
|
||||
// Debug.Log("Vertical Input Event: " + value + " | Direction: " + direction + " | lastDirection : " + lastDirection);
|
||||
}
|
||||
|
||||
private void SetPriority(bool horizontalPriority)
|
||||
{
|
||||
if (this.horizontalPriority != horizontalPriority)
|
||||
{
|
||||
player.PlayHapticEventInHand(VRC_Pickup.PickupHand.Left, 0.1f, 0.15f, 75);
|
||||
this.horizontalPriority = horizontalPriority;
|
||||
}
|
||||
}
|
||||
|
||||
// public Vector2[] GetDirections() {
|
||||
// return new Vector2[]{inputHorizontal, inputVertical};
|
||||
// }
|
||||
|
||||
public Vector2 GetDirection()
|
||||
{
|
||||
if (horizontalPriority)
|
||||
{
|
||||
return inputHorizontal;
|
||||
}
|
||||
else
|
||||
{
|
||||
return inputVertical;
|
||||
}
|
||||
}
|
||||
|
||||
public void OverrideDirection(Vector2 direction) // For recording the demo only, should not be used when shipped as it is very much a hack
|
||||
{
|
||||
inputHorizontal = new Vector2(direction.x, direction.y);
|
||||
horizontalPriority = true;
|
||||
}
|
||||
|
||||
// public Vector2 GetRotatedDirection() {
|
||||
// return RotateDirection(GetDirection(), rotation);
|
||||
// }
|
||||
|
||||
// public Vector2 RotateDirection(Vector2 direction, int rotation) {
|
||||
// rotation = rotation%4;
|
||||
// // Debug.Log(direction + " " + rotation);
|
||||
// switch(rotation) {
|
||||
// default:
|
||||
// return direction;
|
||||
// case 1:
|
||||
// return new Vector2(direction.y, -direction.x);
|
||||
// case 2:
|
||||
// return new Vector2(-direction.x, -direction.y);
|
||||
// case 3:
|
||||
// return new Vector2(-direction.y, direction.x);
|
||||
// }
|
||||
// }
|
||||
|
||||
// public override void InputLookHorizontal(float value, UdonInputEventArgs args)
|
||||
// {
|
||||
// float rotation = player.GetRotation().eulerAngles.y;
|
||||
// if(rotation > 45 && rotation <= 135) {
|
||||
// // Debug.Log("Right");
|
||||
// this.rotation = 1;
|
||||
// } else if(rotation > 135 && rotation <= 225) {
|
||||
// // Debug.Log("Backward");
|
||||
// this.rotation = 2;
|
||||
// } else if(rotation > 225 && rotation <= 315) {
|
||||
// // Debug.Log("Left");
|
||||
// this.rotation = 3;
|
||||
// } else if(rotation > 315 || rotation <= 45) {
|
||||
// // Debug.Log("Forward");
|
||||
// this.rotation = 0;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user