- Home /
Trying to get Timed button presses within a timed window
I'm trying to have this behave in such a way that pressing button repeatedly performs and action like say flap wings or whatever with time set via a float that sets the time between presses the effect lasts before starting to descend, to avoid insane mashing.
furthermore to have an internal timer that starts on the first press and after a set time it disables the button use entering a tired state with the player falling, with it resetting once grounded.
Now i have it working to a point just everything is inconsistent, in that i press the button too slow it gets tired after one press, if i mash it fast enough i gain infinite height. i have 2 intended variables. Hover Duration the time between each press, and Hover time being the overall time, I've been trying various things but i'm starting to become lost in my own work and cant see what probably is obvious
#region Hover Methods
void Hover_InitialEvents()
{
HoverTimer = HoverDurration;
// Sounds.FlySound();
isTired = false;
//Disable Multiple Flights
SpecialActionAvailiable = false;
//Set Animator Parameters
CharacterAnimator.SetTrigger("GenericT");
CharacterAnimator.SetInteger("Action", 82);
CharacterAnimator.SetFloat("YSpeed", Player.p_rigidbody.velocity.y);
CharacterAnimator.SetFloat("GroundSpeed", Player.p_rigidbody.velocity.magnitude);
CharacterAnimator.SetBool("Grounded", Player.Grounded);
CharacterAnimator.SetBool("isRolling", false);
if (HoverTimer <= 0)
{
CharacterAnimator.SetBool("isTired", true);
}
else
{
CharacterAnimator.SetBool("isTired", false);
}
CharacterAnimator.SetInteger("Homing End Int", 0);
// Sounds.FlySound();
}
void Hover_FixedUpdate()
{
//Do flight timer countdown
HoverTimer -= Time.deltaTime;
if (Player.p_rigidbody.velocity.y < FallSpeed)
{
Player.p_rigidbody.velocity = new Vector3(Player.p_rigidbody.velocity.x, FallSpeed, Player.p_rigidbody.velocity.z);
}
if (Player.Grounded)
{
isTired = false;
Actions.ChangeAction(0);
Actions.Action06.BounceCount = 0;
// Sounds.StopAudioLoop();
}
}
void Hover_Update()
{
CharacterAnimator.SetFloat("YSpeed", Player.p_rigidbody.velocity.y);
HoverTimer -= Time.deltaTime;
if (HoverTimer < 0 && !isTired)
{
HoverTimer = 0f;
isTired = true;
}
//check if player is tapping R1 and isn't tired
if (InputManager.GetButtonDown("R1-Roll") && !isTired)
{
Debug.Log("Testing if tapped key");
Player.AddVelocity(new Vector3(0, FlyAccell, 0));
}
//set animation angle
if (!Player.Grounded)
{
Vector3 VelocityMod = new Vector3(Player.p_rigidbody.velocity.x, 0, Player.p_rigidbody.velocity.z);
Vector3 RotateMod = new Vector3(Player.RawInput.x, 0, Player.RawInput.y);
Quaternion GlideRot = Quaternion.LookRotation(RotateMod, transform.up);
Quaternion CharRot = Quaternion.LookRotation(VelocityMod, transform.up);
CharacterAnimator.transform.rotation = Quaternion.Lerp(CharacterAnimator.transform.rotation, CharRot, Time.deltaTime * 200);
}
}
#endregion
Answer by wyatts · Jul 09, 2021 at 04:29 AM
The only thing stopping repeat wing flapping is the variable isTired = true
And from what I can see you only get tired after the HoverTimer
runs out.
I think you're meaning to set isTired = true
immediately after the flap and then set it to false after the timer runs out.
Might help to update the name to something more specific like canFlap
or flapOnCooldown
Your answer
![](https://koobas.hobune.stream/wayback/20220613040043im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to add a delay to a bomb explostion 1 Answer
How to implement a delay between each time my gun fires (using coroutines or otherwise)?... 2 Answers
android audio delayed 1 Answer
cooldown timers 0 Answers
Shoot Bullet Delay Enemy 0 Answers