lucid-super-dream/Assets/Player/MoveCrosshair.cs

67 lines
1.6 KiB
C#
Raw Normal View History

2021-01-04 17:49:48 +01:00
using System;
using Ktyl.Util;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
using PlayerInput = Input.PlayerInput;
public class MoveCrosshair : MonoBehaviour
{
[SerializeField] private SerialFloat speed;
[SerializeField] private RectOffset extents;
[SerializeField] private RectTransform canvas;
private PlayerInput _input;
private Vector2 _currentInput;
private RectTransform _rt;
private Rect _pos;
private void Awake()
{
_rt = GetComponent<RectTransform>();
}
private void OnEnable()
{
_input ??= new PlayerInput();
_input.Enable();
_input.Default.Aim.performed += DoAim;
}
private void OnDisable()
{
_input.Disable();
_input.Default.Aim.performed -= DoAim;
}
private void Update()
{
_rt.anchoredPosition += _currentInput * speed * Time.deltaTime;
_pos = extents.Remove(canvas.rect);
_pos.center += new Vector2(canvas.rect.width / 2f, canvas.rect.height / 2f);
_rt.anchoredPosition = new Vector3(
Mathf.Clamp(_rt.anchoredPosition.x, _pos.xMin, _pos.xMax),
Mathf.Clamp(_rt.anchoredPosition.y, _pos.yMin, _pos.yMax));
}
private void DoAim(InputAction.CallbackContext context)
{
var value = context.ReadValue<Vector2>();
switch (context.control.device)
{
case Gamepad _:
_currentInput = value;
break;
case Mouse _:
_currentInput =Vector2.zero;
transform.position = value;
break;
}
}
}