public Ability(World world){
		this.world = world;
		mainAbilityThread = new Thread(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				while(OrbGame.isRunning) {
					Gdx.app.log(log, "Run method is getting called and booleans are being checked");
					//checks if the ability is cooling down
					if(isCoolingDown) {
						isCooledDown = false;
						if(currentTimeCoolDown - startTime >= (coolDownTime * NANO)) {
							isCoolingDown = false;
							isCooledDown   = true;
							Gdx.app.log(log, "ability is cooled down");
						}
						
						currentTimeCoolDown = TimeUtils.nanoTime();
					}
					
					if(!needsLocation) {
						if(isClicked) {
							Gdx.app.log(log, "ability doesn't need a location and is clicked");
							isReady       = true;
							isCoolingDown = true;
							
						}
					}else{
						if(hasLocation && isClicked){
							Gdx.app.log(log, "ability needs a location, has a location, and is clicked");
							isClicked     = false;
							isReady       = true;
							isCoolingDown = true;
						}
					}
					//stopAbility will make this false
					if(isReady) {
						Gdx.app.log(log, "ability is starting");
						startAbility();
					}
					
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			
		});
		
		//Start the thread
		mainAbilityThread.start();
	}