use of com.jme3.input.controls.ActionListener in project jmonkeyengine by jMonkeyEngine.
the class TestIK method simpleInitApp.
@Override
public void simpleInitApp() {
super.simpleInitApp();
final KinematicRagdollControl ikControl = model.getControl(KinematicRagdollControl.class);
inputManager.addListener(new ActionListener() {
public void onAction(String name, boolean isPressed, float tpf) {
if (name.equals("stop") && isPressed) {
ikControl.setEnabled(!ikControl.isEnabled());
ikControl.setIKMode();
}
if (name.equals("one") && isPressed) {
//ragdoll.setKinematicMode();
targetPoint = model.getWorldTranslation().add(new Vector3f(0, 2, 4));
targetNode.setLocalTranslation(targetPoint);
ikControl.setIKTarget(ikControl.getBone("Hand.L"), targetPoint, 2);
ikControl.setIKMode();
}
if (name.equals("two") && isPressed) {
//ragdoll.setKinematicMode();
targetPoint = model.getWorldTranslation().add(new Vector3f(-3, 3, 0));
targetNode.setLocalTranslation(targetPoint);
ikControl.setIKTarget(ikControl.getBone("Hand.R"), targetPoint, 3);
ikControl.setIKMode();
}
}
}, "one", "two");
inputManager.addMapping("one", new KeyTrigger(KeyInput.KEY_1));
inputManager.addMapping("two", new KeyTrigger(KeyInput.KEY_2));
inputManager.addMapping("stop", new KeyTrigger(KeyInput.KEY_H));
}
use of com.jme3.input.controls.ActionListener in project TeachingInSimulation by ScOrPiOzzy.
the class CircuitState method bindCircuitBoardEvents.
private void bindCircuitBoardEvents() {
// 给电路板添加监听
addMapping("CONNECT_ON_DESKTOP_AXIR_X+", new MouseAxisTrigger(MouseInput.AXIS_X, true));
addMapping("CONNECT_ON_DESKTOP_AXIR_X-", new MouseAxisTrigger(MouseInput.AXIS_X, false));
addMapping("CONNECT_ON_DESKTOP_AXIR_Y+", new MouseAxisTrigger(MouseInput.AXIS_Y, true));
addMapping("CONNECT_ON_DESKTOP_AXIR_Y-", new MouseAxisTrigger(MouseInput.AXIS_Y, false));
String[] hoverMapping = new String[] { "CONNECT_ON_DESKTOP_AXIR_X+", "CONNECT_ON_DESKTOP_AXIR_X-", "CONNECT_ON_DESKTOP_AXIR_Y+", "CONNECT_ON_DESKTOP_AXIR_Y-" };
addListener((AnalogListener) (name, value, tpf) -> {
if (state == null) {
return;
}
// 先判断鼠标是否在元器件上
collision = JmeUtil.getCollisionFromCursor(rootCompNode, cam, inputManager);
// 如果没有宣导元器件
if (collision == null) {
// 再尝试和桌面碰撞
collision = JmeUtil.getCollisionFromCursor(desktop, cam, inputManager);
}
if (collision == null) {
return;
}
Vector3f point = collision.getContactPoint();
// 离电路板略高一些。
point.addLocal(0, minHeight, 0);
if (state == State.Starting) {
// 开头
Vector3f project = point.subtract(startLine1.getStart()).project(dir);
if (project.dot(dir) < minLen) {
return;
}
Vector3f line1EndPoint = startLine1.getStart().add(project);
startLine1.updatePoints(startLine1.getStart(), line1EndPoint);
Vector3f line2EndPoint = line1EndPoint.add(point.subtract(line1EndPoint).project(Vector3f.UNIT_Y));
startLine2.updatePoints(line1EndPoint, line2EndPoint);
// Vector3f line3EndPoint = point;
startLine3.updatePoints(line2EndPoint, point);
} else if (state == State.Mid) {
// 计算midLine1.getStart() 与 鼠标point 向量在X与Z轴的投影。
Vector3f tmpPoint = null;
tmpPoint = midLine1.getStart().add(point.subtract(midLine1.getStart()).project(midAxis));
midLine1.updatePoints(midLine1.getStart(), tmpPoint);
midLine2.updatePoints(tmpPoint, point);
} else if (state == State.Ending) {
// endLine1.updatePoints(endLine1.getStart(), point);
}
}, hoverMapping);
addMapping("CLICKED_ON_BOARD", new MouseButtonTrigger(MouseInput.BUTTON_LEFT));
addMapping("CANCEL_ON_CONNECTING", new MouseButtonTrigger(MouseInput.BUTTON_RIGHT));
addListener((ActionListener) (name, isPressed, tpf) -> {
if (collision == null) {
return;
}
if (desktop != collision.getGeometry()) {
return;
}
if ("CANCEL_ON_CONNECTING".equals(name) && isPressed) {
if (state == State.Starting || state == State.Mid) {
connectClean();
}
}
if ("CLICKED_ON_BOARD".equals(name) && isPressed) {
if (state == null) {
return;
}
if (state == State.Starting) {
connectStarting();
// 设置当前接线状态为接线中
state = State.Mid;
} else if (state == State.Mid) {
connectMid();
} else if (state == State.Ending) {
// do nothing
}
}
}, "CLICKED_ON_BOARD", "CANCEL_ON_CONNECTING");
}
Aggregations