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