/*
Copyright 2012 Jan Ove Saltvedt
This file is part of KBot.
KBot is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KBot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KBot. If not, see <http://www.gnu.org/licenses/>.
*/
package com.kbotpro.scriptsystem.input.jobs;
import com.kbotpro.bot.BotEnvironment;
import com.kbotpro.scriptsystem.input.callbacks.HoldKeyCallback;
/**
* Class to hold keys.
*/
public class HoldKeyJob extends KeyboardJob {
private int key;
private HoldKeyCallback callback;
private boolean done = false;
private boolean releasedKey = false;
public HoldKeyJob(BotEnvironment botEnv, int key, HoldKeyCallback holdKeyCallback) {
super(botEnv);
this.key = key;
this.callback = holdKeyCallback;
runnable = new Runnable() {
public void run() {
long lastSent = System.currentTimeMillis();
eventFactory.sendKeyPressedEvent((char) HoldKeyJob.this.key);
while(!done){
callback.update(HoldKeyJob.this);
HoldKeyJob.this.sleep(10, 22);
if(System.currentTimeMillis() - lastSent > 38){
eventFactory.sendKeyPressedEvent((char) HoldKeyJob.this.key);
}
}
if(!releasedKey){
eventFactory.sendKeyReleasedEvent((char) HoldKeyJob.this.key);
}
releasedKey = true;
callback.onFinished(HoldKeyJob.this);
}
};
}
public void stopHolding(){
done = true;
}
protected void onCancelled() {
done = true;
callback.onFinished(this);
if(!releasedKey){
eventFactory.sendKeyReleasedEvent((char) HoldKeyJob.this.key);
}
}
protected void onStart() {
done = false;
releasedKey = false;
}
}