70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
using System;
 | 
						|
using UnityEngine;
 | 
						|
using UnityEngine.InputSystem;
 | 
						|
 | 
						|
public abstract class InputBase : MonoBehaviour
 | 
						|
{
 | 
						|
    public Action<AttackState> AttackCallback;
 | 
						|
    public abstract float GetMovementDirection();
 | 
						|
}
 | 
						|
 | 
						|
public class Input : InputBase
 | 
						|
{
 | 
						|
    // Will want to create an "Input Actions" asset, this should allow the user to set their bindings in a menu and I'll be able to load that during the game.
 | 
						|
    // The above is super important for this prototype, but could be used for all other prototypes.
 | 
						|
    public InputActionAsset controlScheme;
 | 
						|
 | 
						|
    private InputActionMap _inputActionMap;
 | 
						|
    private InputAction _movementAction;
 | 
						|
    //private InputAction _jumpAction;
 | 
						|
    //private InputAction _crouchAction;
 | 
						|
    private InputAction _lightPunch;
 | 
						|
    private InputAction _mediumPunch;
 | 
						|
    private InputAction _heavyPunch;
 | 
						|
 | 
						|
    // This looks dumb, but I think will make the AI setup better.
 | 
						|
    public override float GetMovementDirection()
 | 
						|
    {
 | 
						|
        return _movementAction.ReadValue<float>();
 | 
						|
    }
 | 
						|
    
 | 
						|
    private void Start()
 | 
						|
    {
 | 
						|
        _inputActionMap = controlScheme.FindActionMap("P1");
 | 
						|
 | 
						|
        _movementAction = _inputActionMap["MovementAction"];
 | 
						|
        _movementAction.Enable();
 | 
						|
 | 
						|
        _lightPunch = _inputActionMap["LightPunch"];
 | 
						|
        _lightPunch.Enable();
 | 
						|
        _lightPunch.performed += LightPunchPerformed;
 | 
						|
 | 
						|
        _mediumPunch = _inputActionMap["MediumPunch"];
 | 
						|
        _mediumPunch.Enable();
 | 
						|
        _mediumPunch.performed += MediumPunchPerformed;
 | 
						|
 | 
						|
        _heavyPunch = _inputActionMap["HeavyPunch"];
 | 
						|
        _heavyPunch.Enable();
 | 
						|
        _heavyPunch.performed += HeavyPunchPerformed;
 | 
						|
    }
 | 
						|
    
 | 
						|
    // TODO: probably need to handle input better.
 | 
						|
    // In terms of performance this is good, 0 latency from when the program gets the input and the animation starting.
 | 
						|
    // Obviously this will change as I think buffered input is good, but it's nice to know that I'm starting at 0ms.
 | 
						|
    // Also as combos and buffered input become a thing I'll want to handle this differently, maybe a flag/bitmask?
 | 
						|
    private void HeavyPunchPerformed(InputAction.CallbackContext obj)
 | 
						|
    {
 | 
						|
        AttackCallback(AttackState.Heavy);
 | 
						|
    }
 | 
						|
 | 
						|
    private void MediumPunchPerformed(InputAction.CallbackContext obj)
 | 
						|
    {
 | 
						|
        AttackCallback(AttackState.Medium);
 | 
						|
    }
 | 
						|
 | 
						|
    private void LightPunchPerformed(InputAction.CallbackContext obj)
 | 
						|
    {
 | 
						|
        AttackCallback(AttackState.Light);
 | 
						|
    }
 | 
						|
}
 |