using MoreMountains.Feedbacks; using UnityEngine; namespace MoreMountains.Feel { /// /// An example class part of the Feel demos /// This class acts as a character controller for the Duck in the FeelDuck demo scene /// It looks for input, and jumps when instructed to /// public class Duck : MonoBehaviour { [Header("Cooldown")] /// a duration, in seconds, between two jumps, during which jumps are prevented [Tooltip("a duration, in seconds, between two jumps, during which jumps are prevented")] public float CooldownDuration = 1f; [Header("Feedbacks")] /// a feedback to call when jumping [Tooltip("a feedback to call when jumping")] public MMFeedbacks JumpFeedback; /// a feedback to call when landing [Tooltip("a feedback to call when landing")] public MMFeedbacks LandingFeedback; /// a feedback to call when trying to jump while in cooldown [Tooltip("a feedback to call when trying to jump while in cooldown")] public MMFeedbacks DeniedFeedback; protected float _lastJumpStartedAt = -100f; /// /// On Update we look for input /// protected virtual void Update() { HandleInput(); } /// /// Detects input /// protected virtual void HandleInput() { if (FeelDemosInputHelper.CheckMainActionInputPressedThisFrame()) { Jump(); } } /// /// Performs a jump if possible, otherwise plays a denied feedback /// protected virtual void Jump() { if (Time.time - _lastJumpStartedAt < CooldownDuration) { DeniedFeedback?.PlayFeedbacks(); } else { JumpFeedback?.PlayFeedbacks(); _lastJumpStartedAt = Time.time; } } /// /// This method is called by the duck animator on the frame where it makes contact with the ground. /// In an actual game context, this may be called when you detect contact with the ground via a physics collision, a downward raycast, etc. /// public virtual void Land() { LandingFeedback?.PlayFeedbacks(); } } }