summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/windows/src/java/net/java/games/input/DirectAndRawInputEnvironmentPlugin.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/plugins/windows/src/java/net/java/games/input/DirectAndRawInputEnvironmentPlugin.java b/plugins/windows/src/java/net/java/games/input/DirectAndRawInputEnvironmentPlugin.java
new file mode 100644
index 0000000..29e2b40
--- /dev/null
+++ b/plugins/windows/src/java/net/java/games/input/DirectAndRawInputEnvironmentPlugin.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (C) 2007 Jeremy Booth ([email protected])
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer. Redistributions in binary
+ * form must reproduce the above copyright notice, this list of conditions and
+ * the following disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * The name of the author may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+ */
+package net.java.games.input;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class DirectAndRawInputEnvironmentPlugin extends ControllerEnvironment {
+
+ private RawInputEnvironmentPlugin rawPlugin;
+ private DirectInputEnvironmentPlugin dinputPlugin;
+ private Controller[] controllers = null;
+
+ public DirectAndRawInputEnvironmentPlugin() {
+ // These two *must* be loaded in this order for raw devices to work.
+ dinputPlugin = new DirectInputEnvironmentPlugin();
+ rawPlugin = new RawInputEnvironmentPlugin();
+ }
+
+ public Controller[] getControllers() {
+ if(controllers == null) {
+ boolean rawKeyboardFound = false;
+ boolean rawMouseFound = false;
+ List tempControllers = new ArrayList();
+ Controller[] dinputControllers = dinputPlugin.getControllers();
+ Controller[] rawControllers = rawPlugin.getControllers();
+ for(int i=0;i<rawControllers.length;i++) {
+ tempControllers.add(rawControllers[i]);
+ if(rawControllers[i].getType()==Controller.Type.KEYBOARD) {
+ rawKeyboardFound = true;
+ } else if(rawControllers[i].getType()==Controller.Type.MOUSE) {
+ rawMouseFound = true;
+ }
+ }
+ for(int i=0;i<dinputControllers.length;i++) {
+ if(dinputControllers[i].getType()==Controller.Type.KEYBOARD) {
+ if(!rawKeyboardFound) {
+ tempControllers.add(dinputControllers[i]);
+ }
+ } else if(dinputControllers[i].getType()==Controller.Type.MOUSE) {
+ if(!rawMouseFound) {
+ tempControllers.add(dinputControllers[i]);
+ }
+ } else {
+ tempControllers.add(dinputControllers[i]);
+ }
+ }
+
+ controllers = (Controller[]) tempControllers.toArray(new Controller[]{});
+ }
+
+ return controllers;
+ }
+
+ public boolean isSupported() {
+ return rawPlugin.isSupported() || dinputPlugin.isSupported();
+ }
+
+}