- 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.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                