mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
parent
780a3a8cca
commit
0ff17fc2fb
|
@ -16,6 +16,7 @@
|
||||||
package org.teavm.jso.browser;
|
package org.teavm.jso.browser;
|
||||||
|
|
||||||
import org.teavm.jso.JSBody;
|
import org.teavm.jso.JSBody;
|
||||||
|
import org.teavm.jso.gamepad.Gamepad;
|
||||||
import org.teavm.jso.geolocation.Geolocation;
|
import org.teavm.jso.geolocation.Geolocation;
|
||||||
|
|
||||||
public final class Navigator {
|
public final class Navigator {
|
||||||
|
@ -36,4 +37,7 @@ public final class Navigator {
|
||||||
|
|
||||||
@JSBody(script = "return navigator.languages;")
|
@JSBody(script = "return navigator.languages;")
|
||||||
public static native String[] getLanguages();
|
public static native String[] getLanguages();
|
||||||
|
|
||||||
|
@JSBody(script = "return navigator.getGamepads();")
|
||||||
|
public static native Gamepad[] getGamepads();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.teavm.jso.dom.events.Event;
|
||||||
import org.teavm.jso.dom.events.EventListener;
|
import org.teavm.jso.dom.events.EventListener;
|
||||||
import org.teavm.jso.dom.events.EventTarget;
|
import org.teavm.jso.dom.events.EventTarget;
|
||||||
import org.teavm.jso.dom.events.FocusEventTarget;
|
import org.teavm.jso.dom.events.FocusEventTarget;
|
||||||
|
import org.teavm.jso.dom.events.GamepadEventTarget;
|
||||||
import org.teavm.jso.dom.events.HashChangeEvent;
|
import org.teavm.jso.dom.events.HashChangeEvent;
|
||||||
import org.teavm.jso.dom.events.KeyboardEventTarget;
|
import org.teavm.jso.dom.events.KeyboardEventTarget;
|
||||||
import org.teavm.jso.dom.events.LoadEventTarget;
|
import org.teavm.jso.dom.events.LoadEventTarget;
|
||||||
|
@ -26,7 +27,7 @@ import org.teavm.jso.dom.events.MessageEvent;
|
||||||
import org.teavm.jso.dom.events.MouseEventTarget;
|
import org.teavm.jso.dom.events.MouseEventTarget;
|
||||||
|
|
||||||
public interface WindowEventTarget extends EventTarget, FocusEventTarget, MouseEventTarget, KeyboardEventTarget,
|
public interface WindowEventTarget extends EventTarget, FocusEventTarget, MouseEventTarget, KeyboardEventTarget,
|
||||||
LoadEventTarget {
|
LoadEventTarget, GamepadEventTarget {
|
||||||
default void listenBeforeOnload(EventListener<Event> listener) {
|
default void listenBeforeOnload(EventListener<Event> listener) {
|
||||||
addEventListener("beforeunload", listener);
|
addEventListener("beforeunload", listener);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 devnewton.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.jso.dom.events;
|
||||||
|
|
||||||
|
import org.teavm.jso.gamepad.GamepadEvent;
|
||||||
|
|
||||||
|
public interface GamepadEventTarget extends EventTarget {
|
||||||
|
default void listenGamepadConnected(EventListener<GamepadEvent> listener) {
|
||||||
|
addEventListener("gamepadconnected", listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void neglectGamepadConnected(EventListener<GamepadEvent> listener) {
|
||||||
|
removeEventListener("gamepadconnected", listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void listenGamepadDisconnected(EventListener<GamepadEvent> listener) {
|
||||||
|
addEventListener("gamepaddisconnected", listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void neglectGamepadDisconnected(EventListener<GamepadEvent> listener) {
|
||||||
|
removeEventListener("gamepaddisconnected", listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
jso/apis/src/main/java/org/teavm/jso/gamepad/Gamepad.java
Normal file
45
jso/apis/src/main/java/org/teavm/jso/gamepad/Gamepad.java
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 devnewton.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.jso.gamepad;
|
||||||
|
|
||||||
|
import org.teavm.jso.JSObject;
|
||||||
|
import org.teavm.jso.JSProperty;
|
||||||
|
|
||||||
|
public interface Gamepad extends JSObject {
|
||||||
|
@JSProperty
|
||||||
|
double[] getAxes();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
GamepadButton[] getButtons();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isConnected();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getId();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getDisplayId();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getIndex();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getMapping();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
double getTimestamp();
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 devnewton.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.jso.gamepad;
|
||||||
|
|
||||||
|
import org.teavm.jso.JSObject;
|
||||||
|
import org.teavm.jso.JSProperty;
|
||||||
|
|
||||||
|
public interface GamepadButton extends JSObject {
|
||||||
|
@JSProperty
|
||||||
|
double getValue();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isPressed();
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 devnewton.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.jso.gamepad;
|
||||||
|
|
||||||
|
import org.teavm.jso.JSProperty;
|
||||||
|
import org.teavm.jso.dom.events.Event;
|
||||||
|
|
||||||
|
public interface GamepadEvent extends Event {
|
||||||
|
@JSProperty
|
||||||
|
Gamepad getGamepad();
|
||||||
|
}
|
106
samples/gamepad/pom.xml
Normal file
106
samples/gamepad/pom.xml
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<!--
|
||||||
|
Copyright 2014 Alexey Andreev.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-samples</artifactId>
|
||||||
|
<version>0.7.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>teavm-samples-gamepad</artifactId>
|
||||||
|
|
||||||
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
<name>TeaVM Web gamepad web application</name>
|
||||||
|
<description>A sample application that demonstrate how to use Web gamepad API.</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-classlib</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-jso-apis</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<webResources>
|
||||||
|
<resource>
|
||||||
|
<directory>${project.build.directory}/generated/js</directory>
|
||||||
|
</resource>
|
||||||
|
</webResources>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-maven-plugin</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>web-client</id>
|
||||||
|
<phase>prepare-package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<targetDirectory>${project.build.directory}/generated/js/teavm</targetDirectory>
|
||||||
|
<mainClass>org.teavm.samples.gamepad.Application</mainClass>
|
||||||
|
<minifying>false</minifying>
|
||||||
|
<debugInformationGenerated>true</debugInformationGenerated>
|
||||||
|
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||||
|
<sourceFilesCopied>true</sourceFilesCopied>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<configLocation>../../checkstyle.xml</configLocation>
|
||||||
|
<propertyExpansion>config_loc=${basedir}/../..</propertyExpansion>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 devnewton.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.teavm.samples.gamepad;
|
||||||
|
|
||||||
|
import org.teavm.jso.browser.Navigator;
|
||||||
|
import org.teavm.jso.browser.Window;
|
||||||
|
import org.teavm.jso.dom.html.HTMLDocument;
|
||||||
|
import org.teavm.jso.dom.html.HTMLElement;
|
||||||
|
import org.teavm.jso.gamepad.Gamepad;
|
||||||
|
import org.teavm.jso.gamepad.GamepadButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author devnewton
|
||||||
|
*/
|
||||||
|
public final class Application {
|
||||||
|
|
||||||
|
private static final HTMLDocument document = Window.current().getDocument();
|
||||||
|
|
||||||
|
private Application() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
refresh(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void refresh(double timestamp) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (Gamepad pad : Navigator.getGamepads()) {
|
||||||
|
if (null != pad) {
|
||||||
|
sb.append("<p>");
|
||||||
|
sb.append("Pad: ").append(pad.getId()).append("<br>");
|
||||||
|
|
||||||
|
sb.append("Axes: ");
|
||||||
|
double[] axes = pad.getAxes();
|
||||||
|
for (int a = 0; a < axes.length; ++a) {
|
||||||
|
sb.append(axes[a]).append(" ");
|
||||||
|
}
|
||||||
|
sb.append("<br>");
|
||||||
|
|
||||||
|
sb.append("Buttons pressed: ");
|
||||||
|
int buttonNum = 1;
|
||||||
|
for (GamepadButton button : pad.getButtons()) {
|
||||||
|
if (button.isPressed()) {
|
||||||
|
sb.append(buttonNum).append(" ");
|
||||||
|
}
|
||||||
|
++buttonNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append("</p>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HTMLElement status = document.getElementById("gamepad-status");
|
||||||
|
status.setInnerHTML(sb.toString());
|
||||||
|
Window.requestAnimationFrame(Application::refresh);
|
||||||
|
}
|
||||||
|
}
|
21
samples/gamepad/src/main/webapp/WEB-INF/web.xml
Normal file
21
samples/gamepad/src/main/webapp/WEB-INF/web.xml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2014 Alexey Andreev.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||||
|
version="3.0">
|
||||||
|
</web-app>
|
28
samples/gamepad/src/main/webapp/index.html
Normal file
28
samples/gamepad/src/main/webapp/index.html
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<!--
|
||||||
|
Copyright 2014 Alexey Andreev.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Web Gamepad web application</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||||
|
<script type="text/javascript" charset="utf-8" src="teavm/classes.js"></script>
|
||||||
|
</head>
|
||||||
|
<body onload="main()">
|
||||||
|
<h1>Gamepad test application</h1>
|
||||||
|
Plug your gamepad and press some buttons.
|
||||||
|
<div id="gamepad-status"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -37,5 +37,6 @@
|
||||||
<module>async</module>
|
<module>async</module>
|
||||||
<module>kotlin</module>
|
<module>kotlin</module>
|
||||||
<module>scala</module>
|
<module>scala</module>
|
||||||
|
<module>gamepad</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user