summaryrefslogtreecommitdiff
path: root/html
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-01-20 19:29:50 +0500
committerilotterytea <iltsu@alright.party>2025-01-20 19:29:50 +0500
commit043834fa0adf502f61ba09fe312fa3e90b8a6bcc (patch)
tree6b140cc4fdb73c954d564b2baf6ff1086a4ada76 /html
initial commit
Diffstat (limited to 'html')
-rw-r--r--html/build.gradle157
-rw-r--r--html/src/main/java/kz/ilotterytea/frogartha/GdxDefinition.gwt.xml35
-rw-r--r--html/src/main/java/kz/ilotterytea/frogartha/GdxDefinitionSuperdev.gwt.xml9
-rw-r--r--html/src/main/java/kz/ilotterytea/frogartha/gwt/GwtLauncher.java28
-rw-r--r--html/webapp/WEB-INF/web.xml3
-rw-r--r--html/webapp/index.html31
-rw-r--r--html/webapp/refresh.pngbin0 -> 232 bytes
-rw-r--r--html/webapp/styles.css53
8 files changed, 316 insertions, 0 deletions
diff --git a/html/build.gradle b/html/build.gradle
new file mode 100644
index 0000000..2036b11
--- /dev/null
+++ b/html/build.gradle
@@ -0,0 +1,157 @@
+
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'org.gretty:gretty:3.1.0'
+ classpath "org.docstr:gwt-gradle-plugin:$gwtPluginVersion"
+
+ }
+}
+apply plugin: "gwt"
+apply plugin: "war"
+apply plugin: "org.gretty"
+
+gwt {
+ gwtVersion = "$gwtFrameworkVersion" // Should match the version used for building the GWT backend. See gradle.properties.
+ maxHeapSize = '1G' // Default 256m is not enough for the GWT compiler. GWT is HUNGRY.
+ minHeapSize = '1G'
+
+ src = files(file('src/main/java')) // Needs to be in front of "modules" below.
+ modules 'kz.ilotterytea.frogartha.GdxDefinition'
+ devModules 'kz.ilotterytea.frogartha.GdxDefinitionSuperdev'
+ project.webAppDirName = 'webapp'
+
+ compiler.strict = true
+ compiler.disableCastChecking = true
+ //// The next line can be useful to uncomment if you want output that hasn't been obfuscated.
+// compiler.style = org.docstr.gradle.plugins.gwt.Style.DETAILED
+
+ sourceLevel = 1.11
+}
+
+dependencies {
+ implementation "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion"
+ implementation "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources"
+ implementation "com.badlogicgames.gdx:gdx:$gdxVersion:sources"
+ implementation "com.github.mgsx-dev.gdx-gltf:gltf:$gdxGltfVersion:sources"
+ implementation project(':core')
+
+}
+
+import org.akhikhl.gretty.AppBeforeIntegrationTestTask
+import org.docstr.gradle.plugins.gwt.GwtSuperDev
+
+gretty.httpPort = 8080
+// The line below will need to be changed only if you change the build directory to something other than "build".
+gretty.resourceBase = "${project.layout.buildDirectory.asFile.get().absolutePath}/gwt/draftOut"
+gretty.contextPath = "/"
+gretty.portPropertiesFileName = "TEMP_PORTS.properties"
+
+task startHttpServer (dependsOn: [draftCompileGwt]) {
+ doFirst {
+ copy {
+ from "webapp"
+ into gretty.resourceBase
+ }
+ copy {
+ from "war"
+ into gretty.resourceBase
+ }
+ }
+}
+task beforeRun(type: AppBeforeIntegrationTestTask, dependsOn: startHttpServer) {
+ // The next line allows ports to be reused instead of
+ // needing a process to be manually terminated.
+ file("build/TEMP_PORTS.properties").delete()
+ // Somewhat of a hack; uses Gretty's support for wrapping a task in
+ // a start and then stop of a Jetty server that serves files while
+ // also running the SuperDev code server.
+ integrationTestTask 'superDev'
+
+ interactive false
+}
+
+task superDev(type: GwtSuperDev) {
+ doFirst {
+ gwt.modules = gwt.devModules
+ }
+}
+
+//// We delete the (temporary) war/ folder because if any extra files get into it, problems occur.
+//// The war/ folder shouldn't be committed to version control.
+clean.delete += [file("war")]
+
+// This next line can be changed if you want to, for instance, always build into the
+// docs/ folder of a Git repo, which can be set to automatically publish on GitHub Pages.
+// This is relative to the html/ folder.
+var outputPath = "build/dist/"
+
+task dist(dependsOn: [clean, compileGwt]) {
+ doLast {
+ // Uncomment the next line if you have changed outputPath and know that its contents
+ // should be replaced by a new dist build. Some large JS files are not cleaned up by
+ // default unless the outputPath is inside build/ (then the clean task removes them).
+ // Do not uncomment the next line if you changed outputPath to a folder that has
+ // non-generated files that you want to keep!
+ //delete(file(outputPath))
+
+ file(outputPath).mkdirs()
+ copy {
+ from("build/gwt/out"){
+ exclude '**/*.symbolMap' // Not used by a dist, and these can be large.
+ }
+ into outputPath
+ }
+ copy {
+ from("webapp") {
+ exclude 'index.html' // We edit this HTML file later.
+ exclude 'refresh.png' // We don't need this button; this saves some bytes.
+ }
+ into outputPath
+ }
+ copy {
+ from("webapp") {
+ // These next two lines take the index.html page and remove the superdev refresh button.
+ include 'index.html'
+ filter { String line -> line.replaceAll('<a class="superdev" .+', '') }
+ // This does not modify the original index.html, only the copy in the dist.
+ // If you decide to manually remove or comment out the superdev button from index.html, you should also
+ // either remove or comment out only the "filter" line above this.
+ }
+ into outputPath
+ }
+ copy {
+ from "war"
+ into outputPath
+ }
+ }
+}
+
+task addSource {
+ doLast {
+ sourceSets.main.compileClasspath += files(project(':core').sourceSets.main.allJava.srcDirs)
+ sourceSets.main.compileClasspath += files("../core/build/generated/sources/annotationProcessor/java/main")
+ sourceSets.main.compileClasspath += files(project(':shared').sourceSets.main.allJava.srcDirs)
+ }
+}
+
+task distZip(type: Zip, dependsOn: dist){
+ //// This uses the output of the dist task, which removes the superdev button from index.html .
+ from(outputPath)
+ archiveVersion = projectVersion
+ archiveBaseName.set("${appName}-dist")
+ //// The result will be in html/build/ with a name containing "-dist".
+ destinationDirectory.set(file("build"))
+}
+
+tasks.compileGwt.dependsOn(addSource)
+tasks.draftCompileGwt.dependsOn(addSource)
+tasks.checkGwt.dependsOn(addSource)
+
+java.sourceCompatibility = JavaVersion.VERSION_11
+java.targetCompatibility = JavaVersion.VERSION_11
+sourceSets.main.java.srcDirs = [ "src/main/java/" ]
+
+eclipse.project.name = appName + "-html"
diff --git a/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinition.gwt.xml b/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinition.gwt.xml
new file mode 100644
index 0000000..3f287d1
--- /dev/null
+++ b/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinition.gwt.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.11.0//EN" "https://www.gwtproject.org/doctype/2.11.0/gwt-module.dtd">
+<module rename-to="html">
+ <!-- Paths to source are relative to this file and separated by slashes ('/'). -->
+ <source path="" />
+
+ <!-- "Inherits" lines are how GWT knows where to look for code and configuration in other projects or libraries. -->
+ <inherits name="com.badlogic.gdx.backends.gdx_backends_gwt" />
+ <inherits name="GLTF" />
+ <inherits name="kz.ilotterytea.frogartha.FrogarthaGame" />
+ <inherits name="kz.ilotterytea.frogartha.Shared" />
+
+ <!-- You must change this if you rename packages later, or rename GwtLauncher. -->
+ <entry-point class="kz.ilotterytea.frogartha.gwt.GwtLauncher" />
+
+ <!-- Reflection includes may be needed for your code or library code. Each value is separated by periods ('.'). -->
+ <!-- You can include a full package by not including the name of a type at the end. -->
+ <!-- This is a feature of libGDX, so these lines go after the above "inherits" that brings in libGDX. -->
+ <!-- <extend-configuration-property name="gdx.reflect.include" value="fully.qualified.TypeName" /> -->
+
+ <!-- Rarely, projects may need to include files but do not have access to the complete assets. -->
+ <!-- This happens for libraries and shared projects, typically, and the configuration goes in that project. -->
+ <!-- The value is a path, separated by forward slashes, where the root is your html project's resources root. -->
+ <!-- You can include individual files like this, and access them with Gdx.files.classpath("path/to/file.png") : -->
+ <!-- This is also a feature of libGDX, so these lines go after the above "inherits" that brings in libGDX. -->
+ <!-- <extend-configuration-property name="gdx.files.classpath" value="path/to/file.png" /> -->
+
+ <!-- You usually won't need to make changes to the rest of this. -->
+ <set-configuration-property name="gdx.assetpath" value="../assets" />
+ <set-configuration-property name="xsiframe.failIfScriptTag" value="FALSE"/>
+ <!-- These two lines reduce the work GWT has to do during compilation and also shrink output size. -->
+ <set-property name="user.agent" value="gecko1_8, safari"/>
+ <collapse-property name="user.agent" values="*" />
+ <!-- Remove the "user.agent" lines above if you encounter issues with Safari or other Gecko browsers. -->
+</module> \ No newline at end of file
diff --git a/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinitionSuperdev.gwt.xml b/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinitionSuperdev.gwt.xml
new file mode 100644
index 0000000..86d6eac
--- /dev/null
+++ b/html/src/main/java/kz/ilotterytea/frogartha/GdxDefinitionSuperdev.gwt.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.11.0//EN" "https://www.gwtproject.org/doctype/2.11.0/gwt-module.dtd">
+<module rename-to="html">
+ <inherits name="kz.ilotterytea.frogartha.GdxDefinition" />
+ <collapse-all-properties />
+ <add-linker name="xsiframe"/>
+ <set-configuration-property name="devModeRedirectEnabled" value="true"/>
+ <set-configuration-property name="xsiframe.failIfScriptTag" value="FALSE"/>
+</module> \ No newline at end of file
diff --git a/html/src/main/java/kz/ilotterytea/frogartha/gwt/GwtLauncher.java b/html/src/main/java/kz/ilotterytea/frogartha/gwt/GwtLauncher.java
new file mode 100644
index 0000000..a4e7ea3
--- /dev/null
+++ b/html/src/main/java/kz/ilotterytea/frogartha/gwt/GwtLauncher.java
@@ -0,0 +1,28 @@
+package kz.ilotterytea.frogartha.gwt;
+
+import com.badlogic.gdx.ApplicationListener;
+import com.badlogic.gdx.backends.gwt.GwtApplication;
+import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration;
+import kz.ilotterytea.frogartha.FrogarthaGame;
+
+/**
+ * Launches the GWT application.
+ */
+public class GwtLauncher extends GwtApplication {
+ @Override
+ public GwtApplicationConfiguration getConfig() {
+ // Resizable application, uses available space in browser with no padding:
+ GwtApplicationConfiguration cfg = new GwtApplicationConfiguration(true);
+ cfg.padVertical = 0;
+ cfg.padHorizontal = 0;
+ return cfg;
+ // If you want a fixed size application, comment out the above resizable section,
+ // and uncomment below:
+ //return new GwtApplicationConfiguration(640, 480);
+ }
+
+ @Override
+ public ApplicationListener createApplicationListener() {
+ return FrogarthaGame.getInstance();
+ }
+}
diff --git a/html/webapp/WEB-INF/web.xml b/html/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..4301df2
--- /dev/null
+++ b/html/webapp/WEB-INF/web.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" ?>
+<web-app>
+</web-app> \ No newline at end of file
diff --git a/html/webapp/index.html b/html/webapp/index.html
new file mode 100644
index 0000000..01f2f40
--- /dev/null
+++ b/html/webapp/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html>
+<head>
+ <title>Frogartha</title>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <meta id="gameViewport" name="viewport" content="width=device-width initial-scale=1">
+ <link href="styles.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<a class="superdev" href="javascript:%7B%20window.__gwt_bookmarklet_params%20%3D%20%7B'server_url'%3A'http%3A%2F%2Flocalhost%3A9876%2F'%7D%3B%20var%20s%20%3D%20document.createElement('script')%3B%20s.src%20%3D%20'http%3A%2F%2Flocalhost%3A9876%2Fdev_mode_on.js'%3B%20void(document.getElementsByTagName('head')%5B0%5D.appendChild(s))%3B%7D">&#8635;</a>
+<div align="center" id="embed-html"></div>
+<script type="text/javascript" src="html/html.nocache.js"></script>
+</body>
+
+<script>
+function handleMouseDown(evt) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ window.focus();
+}
+
+function handleMouseUp(evt) {
+ evt.preventDefault();
+ evt.stopPropagation();
+}
+document.addEventListener('contextmenu', event => event.preventDefault());
+document.getElementById('embed-html').addEventListener('mousedown', handleMouseDown, false);
+document.getElementById('embed-html').addEventListener('mouseup', handleMouseUp, false);
+</script>
+</html>
diff --git a/html/webapp/refresh.png b/html/webapp/refresh.png
new file mode 100644
index 0000000..aab1e38
--- /dev/null
+++ b/html/webapp/refresh.png
Binary files differ
diff --git a/html/webapp/styles.css b/html/webapp/styles.css
new file mode 100644
index 0000000..e768a39
--- /dev/null
+++ b/html/webapp/styles.css
@@ -0,0 +1,53 @@
+canvas {
+ cursor: default;
+ outline: none;
+}
+
+body {
+ background-color: #222222;
+}
+
+p {
+ text-align: center;
+ color: #eeeeee;
+}
+
+a {
+ text-align: center;
+ color: #bbbbff;
+}
+
+.superdev {
+ color: rgb(37,37,37);
+ text-shadow: 0px 1px 1px rgba(250,250,250,0.1);
+ font-size: 50pt;
+ display: block;
+ position: relative;
+ text-decoration: none;
+ background-color: rgb(83,87,93);
+ box-shadow: 0px 3px 0px 0px rgb(34,34,34),
+ 0px 7px 10px 0px rgb(17,17,17),
+ inset 0px 1px 1px 0px rgba(250, 250, 250, .2),
+ inset 0px -12px 35px 0px rgba(0, 0, 0, .5);
+ width: 70px;
+ height: 70px;
+ border: 0;
+ border-radius: 35px;
+ text-align: center;
+ line-height: 68px;
+}
+
+.superdev:active {
+ box-shadow: 0px 0px 0px 0px rgb(34,34,34),
+ 0px 3px 7px 0px rgb(17,17,17),
+ inset 0px 1px 1px 0px rgba(250, 250, 250, .2),
+ inset 0px -10px 35px 5px rgba(0, 0, 0, .5);
+ background-color: rgb(83,87,93);
+ top: 3px;
+ color: #fff;
+ text-shadow: 0px 0px 3px rgb(250,250,250);
+}
+
+.superdev:hover {
+ background-color: rgb(100,100,100);
+}