using System; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using UnityEngine; using UnityEngine.InputSystem; public class ArtefactPreview : MonoBehaviour { [SerializeField] private PlayerInputSettings _inputSettings; [SerializeField] private PlayerInput _playerInput; private GameObject _artefactInstance; private Quaternion _artefactRotation = Quaternion.identity; private bool _isPressed = false; private bool _useVelocity = false; private Vector2 _velocity = Vector2.zero; private bool Active => gameObject.activeSelf && ( _isPressed && !_useVelocity ); public const string PCMR = "PCMR"; public const string GAMEPAD = "Gamepad"; private void OnEnable() { ChangeInput( _playerInput ); } public void Preview( GameObject artefact ) { if ( _artefactInstance ) Destroy( _artefactInstance ); _artefactInstance = Instantiate( artefact, transform ); _playerInput.enabled = true; } public void Dismiss() { _playerInput.enabled = false; } public void PreviewEnable( InputAction.CallbackContext context ) { _isPressed = context.ReadValueAsButton(); } public void PreviewVelocity(InputAction.CallbackContext context) { _velocity = context.ReadValue(); } public void PreviewDelta(InputAction.CallbackContext context) { if ( _artefactInstance && Active ) { Rotate( context.ReadValue() * _inputSettings.MouseSensitivity ); } } private void Rotate( Vector2 delta ) { var axes = new Vector3( delta.y, -delta.x, 0f ); _artefactInstance.transform.Rotate( axes, Space.World ); } public void ChangeInput( PlayerInput playerInput ) { switch ( playerInput.currentControlScheme ) { case PCMR: _useVelocity = false; break; case GAMEPAD: _useVelocity = true; break; default: _useVelocity = false; break; } } void Update() { if ( gameObject.activeSelf && _useVelocity ) { Rotate( _velocity * ( Time.deltaTime * _inputSettings.JoypadSensitivity ) ); } } }