Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 16 additions & 21 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build Multi-Platform
name: Build and upload project

on:
push:
Expand All @@ -9,35 +9,30 @@ on:
jobs:
build:
runs-on: ubuntu-latest
name: Build Universal Jar

name: Build All
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- uses: gradle/actions/setup-gradle@v4

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Build Client (ShadowJar) & Server
run: ./gradlew shadowJar buildServer
- name: Build Desktop & Server
run: ./gradlew :lwjgl3:shadowJar :server:buildServer

- name: Upload Client Shadow Jar
uses: actions/upload-artifact@v4
with:
name: TheEndlessWeave-Client-Universal
path: build/libs/*-client.jar

name: TheEndlessWeave-Desktop
path: lwjgl3/build/libs/*-client.jar
- name: Upload Server Jar
uses: actions/upload-artifact@v4
with:
name: TheEndlessWeave-Server-x64
path: build/libs/*-server.jar
name: TheEndlessWeave-Server
path: lwjgl3/build/libs/*-server.jar
- name: Upload Android APK
uses: actions/upload-artifact@v4
with:
name: TheEndlessWeave-Android
path: android/build/outputs/apk/debug/*.apk
5 changes: 5 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,17 @@ java -jar filename-client.jar --server
- [X] создать ветку и настроить `build.gradle.kts`.
- Баги/проблемы (исправить)
- ? Из-за написанного кода под javafx, на клиенте могут возникать проблемы с логикой из-за другой системы координат в libgdx, например, при просчёте логики полёта пуль, необходимо домножать скорость на размер тайлов.
- [ ] коллизия/рендер пулек поломались и они могут заходить сквозь стены.
- ? вероятно при нестандарных размерах экрана рендер ломается.
- [X] сервер не удаляет игрока, если он отключился.
- [ ] клиент рендерит других игроков как врагов.
- [X] ui не масштабируется как надо при изменении размера окна.
- [ ] при очень высоких значениях fps плавное движение камеры менее заметно.
- [ ] при fullscreen размер окна равен разрешению в настройках
- [ ] если на мобильном устройстве поменять разрешение в настройках то игра крашнет
- solution: скрыть для мобильных устройств настройки разрешения.
- сделать в Main метод isMobile для проверки среды без и с учётом выбранного управления

- [ ] Сделать возможность подключения к внешним серверам. Обезопасить интегрированный сервер от не локальных подключений.
- ! Вернуться к фазовым планам.
---
Expand Down
105 changes: 105 additions & 0 deletions android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
plugins {
id("com.android.application")
kotlin("android")
}
evaluationDependsOn(":core")

val gdxVersion: String by project

val natives = configurations.create("natives")

android {
namespace = "xyz.samiker.theendlessweave"
compileSdk = 35

defaultConfig {
applicationId = "xyz.samiker.theendlessweave"
minSdk = 28
targetSdk = 35
versionCode = 1
versionName = "0.4.0"
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
isCoreLibraryDesugaringEnabled = true
}

kotlinOptions {
jvmTarget = "1.8"
}

sourceSets {
getByName("main") {
assets.srcDirs("../assets")
jniLibs.srcDirs("libs")

val coreProjectDir = project(":core").projectDir
assets.srcDir("$coreProjectDir/build/generated/resources")
}
}

applicationVariants.all {
val variant = this
variant.outputs.all {
val output = this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
val name = "TheEndlessWeave.apk"
output.outputFileName = name
}
}
}

dependencies {
implementation(project(":core"))
implementation("com.badlogicgames.gdx:gdx-backend-android:$gdxVersion")

add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a")
add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a")
add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86")
add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64")

coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
}

tasks.register("copyAndroidNatives") {
doFirst {
file("libs/armeabi-v7a/").mkdirs()
file("libs/arm64-v8a/").mkdirs()
file("libs/x86_64/").mkdirs()
file("libs/x86/").mkdirs()

natives.files.forEach { jar ->
var outputDir: File? = null
if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a/")
if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a/")
if (jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64/")
if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86/")

if (outputDir != null) {
copy {
from(zipTree(jar))
into(outputDir)
include("*.so")
}
}
}
}
}

tasks.matching { it.name.contains("merge") && it.name.contains("JniLibFolders") }.configureEach {
dependsOn("copyAndroidNatives")
}

val generateManifestTask = project(":core").tasks.named("generateResourceManifest")

tasks.withType<com.android.build.gradle.tasks.MergeSourceSetFolders>().configureEach {
dependsOn(generateManifestTask)
}

afterEvaluate {
val genTask = project(":core").tasks.named("generateResourceManifest")
tasks.withType<com.android.build.gradle.tasks.MergeSourceSetFolders>().configureEach {
dependsOn(genTask)
}
}
21 changes: 21 additions & 0 deletions android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/GdxTheme">
<activity
android:name=".AndroidLauncher"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenSize|screenLayout"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package xyz.samiker.theendlessweave;

import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import xyz.samiker.theendlessweave.Main;

import java.io.File;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.util.Date;

public class AndroidLauncher extends AndroidApplication {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

config.useAccelerometer = false;
config.useCompass = false;
config.useImmersiveMode = true;

initialize(new Main(), config);

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
logError(throwable);
System.exit(1);
}
});
}
private void logError(Throwable t) {
File logFile = new File(getExternalFilesDir(null), "crash_log.txt");
try (PrintWriter pw = new PrintWriter(new FileOutputStream(logFile, true))) {
pw.println("\n--- CRASH ---");
pw.println("Date: " + new Date());
t.printStackTrace(pw);
pw.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Binary file added android/src/main/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions android/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">The Endless Weave</string>
</resources>
8 changes: 8 additions & 0 deletions android/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="GdxTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
<item name="android:windowBackground">@android:color/black</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes
Loading
Loading