ShootingStars/ShootingTest/src/mygame/PlayerShootControl.java

75 lines
2.2 KiB
Java

package mygame;
import com.jme3.input.InputManager;
import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.input.controls.MouseButtonTrigger;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.AbstractControl;
import com.jme3.scene.control.Control;
/**
*
* @author Snowsun
*/
public class PlayerShootControl extends AbstractControl implements ActionListener {
private InputManager inputManager;
private final float maxTimeToOverheat = 3f;
private float timeToOverheat = maxTimeToOverheat;
private boolean isShooting = false;
public PlayerShootControl(InputManager inputmanager) {
this.inputManager = inputmanager;
initMappings();
}
@Override
protected void controlUpdate(float tpf) {
if (isShooting) {
timeToOverheat -= tpf;
if (timeToOverheat <= 0) {
isShooting = false;
}
}
}
@Override
public void setSpatial(Spatial spatial) {
super.setSpatial(spatial);
}
public boolean getIsShooting() {
return this.isShooting;
}
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
public Control cloneForSpatial(Spatial spatial) {
PlayerShootControl control = new PlayerShootControl(inputManager);
spatial.addControl(control);
return control;
}
public void onAction(String name, boolean isPressed, float tpf) {
if (name.equals("PLAYER_Mouse_Left_Click") && isPressed) {
isShooting = true;
} else if (name.equals("PLAYER_Mouse_Left_Click") && !isPressed) {
isShooting = false;
timeToOverheat = maxTimeToOverheat;
}
}
private void initMappings() {
inputManager.addMapping("PLAYER_Mouse_Left_Click", new MouseButtonTrigger(MouseInput.BUTTON_LEFT),
new KeyTrigger(KeyInput.KEY_DOWN));
inputManager.addListener(this, new String[]{"PLAYER_Mouse_Left_Click"});
}
}