- Home /
Add a Charger/Cooldown system to a movement script for a 2D Top-Down Shooter.
Hey, so i have this code here which is used to control my 2d top-down player. I want to have a cooldown where i can't hold down the "boost" (Left shift) button for ever. What i mean is that the boost will have a specific timer (Let's say 3 seconds) and after it's finished, you will have to wait, 20 seconds for it to charge up again.
#pragma strict
//Inspector Variables
var playerSpeedForward : float = 16; //speed player moves forwards
var playerSpeedBackward : float = 8; //speed payer moves backwards
function Update ()
{
MoveForward(); // Player Movement
// Generate a plane that intersects the transform's position with an upwards normal.
}
function MoveForward()
{
if(Input.GetKey("w"))//Press up arrow key to move forward on the Y AXIS
{
transform.Translate(0,playerSpeedForward * Time.deltaTime,0);
}
if(Input.GetKey("s"))//Press up arrow key to move forward on the Y AXIS
{
transform.Translate(0,-playerSpeedBackward * Time.deltaTime,0);
}
if(Input.GetKey("left shift")) //THIS IS THE LINE OF CODE WHICH I WANT A COOLDOWN TO EXIST
{
transform.Translate(0,(playerSpeedForward + 4) * Time.deltaTime,0);
}
}
Answer by Landern · Nov 15, 2016 at 06:41 PM
Well you will need a couple new variables, one to track your cool down time, if want it modifiable with say power ups from the game, etc.
var coolDownTime : float = 20.0f;
var currentCoolDownTime: float = 0.0f;
Since Time.deltaTime is the time of the last frame took to render, it will be a float value we will add it to the currentCoolDownTime when the left shift key is hit.
if(Input.GetKey("left shift"))
{
// so if the left shift is down and the currentCoolDownTime is less than coolDownTime
if (currentCoolDownTime < coolDownTime)
{
transform.Translate(0,(playerSpeedForward + 4) * Time.deltaTime,0);
currentCoolDownTime += Time.deltaTime; // add the Time.deltaTime to currentCoolDownTime
if (currentCoolDownTime > coolDownTime)
currentCoolDownTime = coolDownTime; max it out
}
}
else
{
// The left shift is not pressed and if the currentCoolDownTime needs to refresh over time
if (currentCoolDownTime > 0)
{
currentCoolDownTime -= Time.deltaTime;
if (currentCoolDownTime < 0)
currentCoolDownTime = 0; // min it out
}
}
Optionally you could use Input.GetKeyUp and a boolean value to trigger the variables instead. Above is an untested very verbose why of trying to implement a cool down thinger.