I have implemented a double tap run script in my game and it works but I need to simplify it either creating 4 functions for each direction or creating a single new function but still pass the same variables.
Current script.
// dash settings
double buttonrefreshd = 0.5;
int buttontapd = 0;
double buttonrefreshl = 0.5;
int buttontapl = 0;
double buttonrefreshr = 0.5;
int buttontapr = 0;
double buttonrefreshu = 0.5;
int buttontapu = 0;
float oldspeed;
void Start()
{
// get old movement speed
mv_Model = GetComponent<CharacterMovementModel>();
oldspeed = mv_Model.speed;
}
void Update()
{
// stop moving if opposite key is pressed
if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow))
{
can_move = false;
}
if (Input.GetKey(KeyCode.DownArrow) && Input.GetKey(KeyCode.UpArrow))
{
can_move = false;
}
if (Input.anyKey == false)
{
can_move = true;
}
// Resume moving if opposite key is released
if (Input.GetKeyUp(KeyCode.DownArrow) || Input.GetKeyUp(KeyCode.LeftArrow) || Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.UpArrow))
{
can_move = true;
}
// Allow movement if no key is pressed
if (Input.anyKey == false)
{
can_move = true;
isMoving = false;
}
UpdateDirection();
}
void UpdateDirection()
{
Vector2 newDir = Vector2.zero;
mv_Model = GetComponent<CharacterMovementModel>();
// double tap dash
// down
if (Input.GetKeyDown(KeyCode.DownArrow))
{
// double tap running
if (buttonrefreshd >= 0 && buttontapd == 1)
{
mv_Model.speed = 9;
}
else
{
buttonrefreshd = 0.5;
buttontapd += 1;
}
}
else if (Input.anyKey == false)
{
// if a button hasn't been pressed reset the tap count
if (buttonrefreshd > 0)
{
buttonrefreshd -= 1 * Time.deltaTime;
}
else
{
mv_Model.speed = oldspeed;
buttontapd = 0;
}
}
// left
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
// double tap running
if (buttonrefreshl >= 0 && buttontapl == 1)
{
mv_Model.speed = 9;
}
else
{
buttonrefreshl = 0.5;
buttontapl += 1;
}
}
else if (Input.anyKey == false)
{
// if a button hasn't been pressed reset the tap count
if (buttonrefreshl > 0)
{
buttonrefreshl -= 1 * Time.deltaTime;
}
else
{
mv_Model.speed = oldspeed;
buttontapl = 0;
}
}
// right
if (Input.GetKeyDown(KeyCode.RightArrow))
{
// double tap running
if (buttonrefreshr >= 0 && buttontapr == 1)
{
mv_Model.speed = 9;
}
else
{
buttonrefreshr = 0.5;
buttontapr += 1;
}
}
else if (Input.anyKey == false)
{
// if a button hasn't been pressed reset the tap count
if (buttonrefreshr > 0)
{
buttonrefreshr -= 1 * Time.deltaTime;
}
else
{
mv_Model.speed = oldspeed;
buttontapr = 0;
}
}
// up
if (Input.GetKeyDown(KeyCode.UpArrow))
{
// double tap running
if (buttonrefreshu >= 0 && buttontapu == 1)
{
mv_Model.speed = 9;
}
else
{
buttonrefreshu = 0.5;
buttontapu += 1;
}
}
else if (Input.anyKey == false)
{
// if a button hasn't been pressed reset the tap count
if (buttonrefreshu > 0)
{
buttonrefreshu -= 1 * Time.deltaTime;
}
else
{
mv_Model.speed = oldspeed;
buttontapu = 0;
}
}
// don't allow diagonal taps
if (isMoving == true)
{
buttonrefreshd -= 1 * Time.deltaTime;
buttonrefreshl -= 1 * Time.deltaTime;
buttonrefreshr -= 1 * Time.deltaTime;
buttonrefreshu -= 1 * Time.deltaTime;
}
}
Any help is appreciated, just trying to reduce the code as much as possible.
The reason why I have 4 refresh and tap variables is to basically prevent running when I’m walking diagonally but can still run diagonally.