using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using Variables; using NaughtyAttributes; public class CharacterInputController : MonoBehaviour { [SerializeField, Header("References")] private CharacterController2D m_characterController; [SerializeField] private Reference m_playerInput; [SerializeField] private Reference m_noInputAllowed; [SerializeField] private Reference m_isPlayerDead; [SerializeField] private Reference m_isVictory; [SerializeField] private Animator m_animator; [SerializeField] private AudioClip m_DeathSound; [SerializeField] private AudioClip m_VictoryClip; [SerializeField] private AudioClip m_JumpSound; [SerializeField] private AudioClip m_LandSound; [SerializeField] private AudioClip m_SpikeSound; [SerializeField] private AudioClip m_PoisonSound; [SerializeField] private AudioClip m_MooseSound; [SerializeField, BoxGroup("Settings")] private float m_speed = 2.0f; [ShowNonSerializedField] private Vector2 m_movement; [ShowNonSerializedField] private bool m_jump; private void OnEnable() { m_isPlayerDead.OnValueChanged += OnDeath; m_isVictory.OnValueChanged += OnVictory; } private void OnDisable() { m_isPlayerDead.OnValueChanged -= OnDeath; m_isVictory.OnValueChanged -= OnVictory; } public void OnMove(InputAction.CallbackContext context) { m_movement = context.ReadValue(); } public void OnJump(InputAction.CallbackContext context) { m_jump = context.ReadValueAsButton(); } private void Update() { if (!m_noInputAllowed) { m_characterController.Move(m_movement.x * m_speed, false, m_jump); m_playerInput.Value = m_movement.magnitude != 0 || m_jump; } else { m_characterController.Move(0, false, false); m_playerInput.Value = false; } m_animator.SetBool("isMoving", m_playerInput); } public void OnLandHappened() { m_animator.SetTrigger("Land"); AudioSource.PlayClipAtPoint(m_LandSound, transform.position); } public void OnJumpHappened() { m_animator.SetTrigger("Land"); AudioSource.PlayClipAtPoint(m_JumpSound, transform.position); } public void OnDeath(bool value) { if (value) { m_animator.SetTrigger("Death"); AudioSource.PlayClipAtPoint(m_DeathSound, transform.position); } else m_animator.SetTrigger("Respawn"); } public void OnVictory(bool value) { if (value) { m_animator.SetTrigger("Victory"); AudioSource.PlayClipAtPoint(m_VictoryClip, transform.position); } } private void OnTriggerEnter2D(Collider2D collision) { Debug.Log($"Collision with {collision.gameObject.name}"); if (collision.CompareTag("Spikes")) { AudioSource.PlayClipAtPoint(m_SpikeSound, transform.position); } if (collision.CompareTag("Poison")) { AudioSource.PlayClipAtPoint(m_PoisonSound, transform.position); } if (collision.CompareTag("Moose")) { AudioSource.PlayClipAtPoint(m_MooseSound, transform.position); } } }