📄 virtualinputdevice.java
字号:
package org.j3de.input;
import javax.media.j3d.InputDevice;
import javax.media.j3d.Sensor;import javax.media.j3d.SensorRead;import javax.media.j3d.Transform3D;
import javax.vecmath.Point3d;
public class VirtualInputDevice implements InputDevice {
private Sensor[] sensors;
private InputDevice device;
private boolean isActive;
public VirtualInputDevice(InputDevice device, ActivationManager manager) {
this.isActive = true;
this.device = device;
this.sensors = new Sensor[device.getSensorCount()];
for (int i=0; i<device.getSensorCount(); i++) sensors[i] = new VirtualSensor(device.getSensor(i));
manager.addActivationListener(new ActivationListener() {
public void setActivation(boolean isActive) {
VirtualInputDevice.this.isActive = isActive;
}
});
}
public boolean initialize() {
// the device should already have been initialized
return true;
}
public void setNominalPositionAndOrientation() {
// TODO implement
}
public void pollAndProcessInput() {
if (isActive) device.pollAndProcessInput();
}
public void processStreamInput() {
// According to j3d documentation this should remain an empty method ...
}
public void close() {
// an Environment should not be able to close a device.
}
public int getProcessingMode() {
return device.getProcessingMode();
}
public void setProcessingMode(int mode) {
// an Environment should not be able to set the Processing mode.
}
public int getSensorCount() {
return sensors.length;
}
public Sensor getSensor(int sensorIndex) {
return sensors[sensorIndex];
}
private class VirtualSensor extends Sensor { private Sensor originalSensor; private long lasttime; public VirtualSensor(Sensor originalSensor) { super(VirtualInputDevice.this, originalSensor.getSensorReadCount(), originalSensor.getSensorButtonCount()); this.originalSensor = originalSensor; this.lasttime = 0; } public int getPredictor() { return originalSensor.getPredictor(); } public int getPredictionPolicy() { return originalSensor.getPredictionPolicy(); } public void getHotspot(Point3d hotspot) { originalSensor.getHotspot(hotspot); } public InputDevice getDevice() { return VirtualInputDevice.this; } public void getRead(Transform3D read) { if (isActive) originalSensor.getRead(read); else read.setIdentity(); } public void getRead(Transform3D read, long deltaT) { if (isActive) originalSensor.getRead(read, deltaT); else read.setIdentity(); } public void lastRead(Transform3D read) { if (isActive) originalSensor.lastRead(read); else read.setIdentity(); } public void lastRead(Transform3D read, int kth) { if (isActive) originalSensor.lastRead(read, kth); else read.setIdentity(); } public long lastTime() { if (isActive) lasttime = originalSensor.lastTime(); return lasttime; } public long lastTime(int k) { if (isActive) lasttime = originalSensor.lastTime(k); return lasttime; } public void lastButtons(int[] values) { if (isActive) originalSensor.lastButtons(values); // TODO : insert values if not active } public void lastButtons(int k, int[] values) { if (isActive) originalSensor.lastButtons(k, values); // TODO : insert values if not active } public SensorRead getCurrentSensorRead() { if (isActive) return originalSensor.getCurrentSensorRead(); else return new SensorRead(getSensorButtonCount()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -