diff --git a/.gitignore b/.gitignore index f829fa184..6fe580c45 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ Thumbs.db .DS_Store # Resources that should not be tracked -*.jar assets/mods/basegame/demoworld #assets/mods/basegame/demoworld.gz external_resource_packs.zip diff --git a/TerrarumBuild.jar b/TerrarumBuild.jar new file mode 100644 index 000000000..065b98f1b Binary files /dev/null and b/TerrarumBuild.jar differ diff --git a/lib/GetCpuName.jar b/lib/GetCpuName.jar new file mode 100644 index 000000000..230de90df Binary files /dev/null and b/lib/GetCpuName.jar differ diff --git a/lib/gdx-controllers-desktop-natives.jar b/lib/gdx-controllers-desktop-natives.jar new file mode 100644 index 000000000..013628551 Binary files /dev/null and b/lib/gdx-controllers-desktop-natives.jar differ diff --git a/lib/gdx-controllers-desktop.jar b/lib/gdx-controllers-desktop.jar new file mode 100644 index 000000000..8a7c85d97 Binary files /dev/null and b/lib/gdx-controllers-desktop.jar differ diff --git a/lib/gdx-controllers-lwjgl3.jar b/lib/gdx-controllers-lwjgl3.jar new file mode 100644 index 000000000..219f44aca Binary files /dev/null and b/lib/gdx-controllers-lwjgl3.jar differ diff --git a/lib/gdx-controllers.jar b/lib/gdx-controllers.jar new file mode 100644 index 000000000..1c2497786 Binary files /dev/null and b/lib/gdx-controllers.jar differ diff --git a/lib/javadoc/slick-javadoc.jar b/lib/javadoc/slick-javadoc.jar deleted file mode 100644 index f037ee4fe..000000000 Binary files a/lib/javadoc/slick-javadoc.jar and /dev/null differ diff --git a/lib/source/GetCpuName-src.jar b/lib/source/GetCpuName-src.jar new file mode 100644 index 000000000..acb1d6d83 Binary files /dev/null and b/lib/source/GetCpuName-src.jar differ diff --git a/src/net/torvald/terrarum/AppLoader.java b/src/net/torvald/terrarum/AppLoader.java index f342e2b16..5e0f6a677 100644 --- a/src/net/torvald/terrarum/AppLoader.java +++ b/src/net/torvald/terrarum/AppLoader.java @@ -1,6 +1,9 @@ package net.torvald.terrarum; -import com.badlogic.gdx.*; +import com.badlogic.gdx.ApplicationListener; +import com.badlogic.gdx.Files; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Screen; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.audio.AudioDevice; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; @@ -26,8 +29,6 @@ import net.torvald.terrarum.worlddrawer.BlocksDrawer; import net.torvald.terrarum.worlddrawer.LightmapRenderer; import net.torvald.terrarumsansbitmap.gdx.GameFontBase; import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack; -import org.lwjgl.input.Controller; -import org.lwjgl.input.Controllers; import java.io.File; import java.io.IOException; @@ -174,7 +175,6 @@ public class AppLoader implements ApplicationListener { public static TinyAlphNum fontSmallNumbers; /** A gamepad. Multiple gamepads may controll this single virtualised gamepad. */ - public static org.lwjgl.input.Controller gamepad = null; public static float gamepadDeadzone = 0.1f; /** @@ -305,21 +305,6 @@ public class AppLoader implements ApplicationListener { ); updateFullscreenQuad(appConfig.width, appConfig.height); - // enlist suitable gamepads - try { - Controllers.create(); - - printdbg(this, "Available gamepads: " + Controllers.getControllerCount()); - for (int x = 0; x < Controllers.getControllerCount(); x++) { - Controller gamepad = Controllers.getController(x); - printdbg(this, String.format("Gamepad #%d: %s", x + 1, gamepad.getName())); - } - } - catch (Throwable e) { - printdbg(this, "Exception occured while creating controllers -- there will be no gamepads available."); - printdbg(this, e); - } - // set up renderer info variables renderer = Gdx.graphics.getGLVersion().getRendererString(); @@ -477,7 +462,6 @@ public class AppLoader implements ApplicationListener { } IngameRenderer.INSTANCE.dispose(); - if (Controllers.isCreated()) Controllers.destroy(); Terrarum.INSTANCE.dispose(); diff --git a/src/net/torvald/terrarum/DefaultConfig.kt b/src/net/torvald/terrarum/DefaultConfig.kt index 6b6ac28bb..c1d9b8412 100644 --- a/src/net/torvald/terrarum/DefaultConfig.kt +++ b/src/net/torvald/terrarum/DefaultConfig.kt @@ -28,20 +28,22 @@ object DefaultConfig { // control-gamepad - jsonObject.addProperty("gamepadkeyn", 4) - jsonObject.addProperty("gamepadkeyw", 1) - jsonObject.addProperty("gamepadkeys", 2) - jsonObject.addProperty("gamepadkeye", 3) // logitech indices + jsonObject.addProperty("gamepadkeyn", 3) + jsonObject.addProperty("gamepadkeyw", 2) + jsonObject.addProperty("gamepadkeys", 0) + jsonObject.addProperty("gamepadkeye", 1) // xbox indices jsonObject.addProperty("gamepadlup", 4) jsonObject.addProperty("gamepadrup", 5) - jsonObject.addProperty("gamepadldown", 6) - jsonObject.addProperty("gamepadrdown", 7) // logitech indices + jsonObject.addProperty("gamepadselect", 6) + jsonObject.addProperty("gamepadstart", 7) + + jsonObject.addProperty("gamepadlstickx", 1) + jsonObject.addProperty("gamepadlsticky", 0) + jsonObject.addProperty("gamepadrstickx", 3) + jsonObject.addProperty("gamepadrsticky", 2) // 0-1-2-3 but sometimes 3-2-1-0 ?! what the actual fuck? + jsonObject.addProperty("gamepadtriggeraxis", 4) // positive: LT, negative: RT (xbox pad) - jsonObject.addProperty("gamepadlstickx", 0) - jsonObject.addProperty("gamepadlsticky", 1) - jsonObject.addProperty("gamepadrstickx", 2) - jsonObject.addProperty("gamepadrsticky", 3) // 0-1-2-3 but sometimes 3-2-1-0 ?! what the actual fuck? jsonObject.addProperty("gamepadlabelstyle", "msxb360") // "nwii", "logitech", "sonyps", "msxb360", "generic" diff --git a/src/net/torvald/terrarum/gamecontroller/IngameController.kt b/src/net/torvald/terrarum/gamecontroller/IngameController.kt index 93012be52..5c41486ab 100644 --- a/src/net/torvald/terrarum/gamecontroller/IngameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/IngameController.kt @@ -3,7 +3,13 @@ package net.torvald.terrarum.gamecontroller import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.InputAdapter +import com.badlogic.gdx.controllers.Controller +import com.badlogic.gdx.controllers.ControllerListener +import com.badlogic.gdx.controllers.Controllers +import com.badlogic.gdx.controllers.PovDirection +import com.badlogic.gdx.math.Vector3 import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.Terrarum import net.torvald.terrarum.floorInt import net.torvald.terrarum.gameactors.AVKey @@ -16,9 +22,11 @@ import net.torvald.terrarum.worlddrawer.WorldCamera /** * Created by minjaesong on 2015-12-31. */ -class IngameController(val ingame: Ingame) : InputAdapter() { +class IngameController(val ingame: Ingame) : InputAdapter(), ControllerListener { + var hasController = true + // these four values can also be accessed with GameContainer. // e.g. gc.mouseTileX @@ -35,6 +43,13 @@ class IngameController(val ingame: Ingame) : InputAdapter() { val mouseTileY: Int get() = (mouseY / FeaturesDrawer.TILE_SIZE).floorInt() + init { + if (Controllers.getControllers().size == 0) { + hasController = false + printdbg(this, "Controller not found") + } + } + fun update(delta: Float) { /////////////////// @@ -196,4 +211,39 @@ class IngameController(val ingame: Ingame) : InputAdapter() { return true } + override fun connected(p0: Controller?) { + hasController = true + } + + override fun buttonUp(p0: Controller?, p1: Int): Boolean { + return false + } + + override fun ySliderMoved(p0: Controller?, p1: Int, p2: Boolean): Boolean { + return false + } + + override fun accelerometerMoved(p0: Controller?, p1: Int, p2: Vector3?): Boolean { + return false + } + + override fun axisMoved(p0: Controller?, p1: Int, p2: Float): Boolean { + return false + } + + override fun disconnected(p0: Controller?) { + hasController = false + } + + override fun xSliderMoved(p0: Controller?, p1: Int, p2: Boolean): Boolean { + return false + } + + override fun povMoved(p0: Controller?, p1: Int, p2: PovDirection?): Boolean { + return false + } + + override fun buttonDown(p0: Controller?, p1: Int): Boolean { + return false + } } diff --git a/src/net/torvald/terrarum/modulebasegame/Ingame.kt b/src/net/torvald/terrarum/modulebasegame/Ingame.kt index 343990052..94f3d17a6 100644 --- a/src/net/torvald/terrarum/modulebasegame/Ingame.kt +++ b/src/net/torvald/terrarum/modulebasegame/Ingame.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.modulebasegame import com.badlogic.gdx.Gdx +import com.badlogic.gdx.controllers.Controllers import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.dataclass.CircularArray @@ -253,7 +254,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { } } - private val ingameController = IngameController(this) + val ingameController = IngameController(this) /** Load rest of the game with GL context */ fun postInit() { @@ -266,7 +267,9 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { + // make controls work Gdx.input.inputProcessor = ingameController + Controllers.addListener(ingameController) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index a6dea7ab8..51d9934ea 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -1,10 +1,12 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.Gdx +import com.badlogic.gdx.controllers.Controllers import com.badlogic.gdx.graphics.Color import com.jme3.math.FastMath import net.torvald.spriteanimation.HasAssembledSprite import net.torvald.terrarum.* +import net.torvald.terrarum.AppLoader.gamepadDeadzone import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.faction.Faction import net.torvald.terrarum.gameworld.GameWorld @@ -143,7 +145,6 @@ open class ActorHumanoid( @Transient private var prevVMoveKey = KEY_NULL @Transient private val AXIS_KEYBOARD = -13372f // leetz - @Transient private val GAMEPAD_JUMP = 7 var isUpDown = false; protected set var isDownDown = false; protected set @@ -225,11 +226,13 @@ open class ActorHumanoid( isRightDown = Gdx.input.isKeyPressed(AppLoader.getConfigInt("keyright")) isJumpDown = Gdx.input.isKeyPressed(AppLoader.getConfigInt("keyjump")) - if (AppLoader.gamepad != null) { - axisX = AppLoader.gamepad!!.getAxisValue(AppLoader.getConfigInt("gamepadlstickx")) - axisY = AppLoader.gamepad!!.getAxisValue(AppLoader.getConfigInt("gamepadlsticky")) - axisRX = AppLoader.gamepad!!.getAxisValue(AppLoader.getConfigInt("gamepadrstickx")) - axisRY = AppLoader.gamepad!!.getAxisValue(AppLoader.getConfigInt("gamepadrsticky")) + if ((Terrarum.ingame as Ingame).ingameController.hasController) { + val gamepad = Controllers.getControllers()[0] + + axisX = gamepad.getAxis(AppLoader.getConfigInt("gamepadlstickx")) + axisY = gamepad.getAxis(AppLoader.getConfigInt("gamepadlsticky")) + axisRX = gamepad.getAxis(AppLoader.getConfigInt("gamepadrstickx")) + axisRY = gamepad.getAxis(AppLoader.getConfigInt("gamepadrsticky")) // deadzonning if (Math.abs(axisX) < AppLoader.gamepadDeadzone) axisX = 0f @@ -238,7 +241,7 @@ open class ActorHumanoid( if (Math.abs(axisRY) < AppLoader.gamepadDeadzone) axisRY = 0f isJumpDown = Gdx.input.isKeyPressed(AppLoader.getConfigInt("keyjump")) || - AppLoader.gamepad!!.isButtonPressed(GAMEPAD_JUMP) + gamepad.getAxis(AppLoader.getConfigInt("gamepadtriggeraxis")) < -AppLoader.gamepadDeadzone } } else { @@ -250,7 +253,7 @@ open class ActorHumanoid( } private inline val hasController: Boolean - get() = if (isGamer) AppLoader.gamepad != null + get() = if (isGamer) (Terrarum.ingame as Ingame).ingameController.hasController else true private fun processInput(delta: Float) { @@ -264,7 +267,7 @@ open class ActorHumanoid( } } // ↑F, ↑S - if (isWalkingH && !isLeftDown && !isRightDown) { + if (isWalkingH && !isLeftDown && !isRightDown && axisX.abs() < gamepadDeadzone) { walkHStop() prevHMoveKey = KEY_NULL } @@ -278,7 +281,7 @@ open class ActorHumanoid( } // ↑E // ↑D - if (isNoClip && !isUpDown && !isDownDown) { + if (isNoClip && !isUpDown && !isDownDown && axisY.abs() < gamepadDeadzone) { walkVStop() prevVMoveKey = KEY_NULL } diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index 1330e84bb..7ebe5eb53 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.ui import com.badlogic.gdx.Gdx +import com.badlogic.gdx.controllers.Controllers import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch @@ -10,6 +11,7 @@ import net.torvald.terrarum.Terrarum.mouseTileY import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.modulebasegame.Ingame import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension +import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory import net.torvald.terrarum.worlddrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera @@ -190,10 +192,12 @@ class BasicDebugInfoWindow : UICanvas() { batch.color = Color.WHITE - if (AppLoader.gamepad != null) { + if ((Terrarum.ingame as? Ingame)?.ingameController?.hasController == true) { + val gamepad = Controllers.getControllers()[0] + drawGamepadAxis(batch, - AppLoader.gamepad!!.getAxisValue(3), - AppLoader.gamepad!!.getAxisValue(2), + gamepad.getAxis(AppLoader.getConfigInt("gamepadlstickx")), + gamepad.getAxis(AppLoader.getConfigInt("gamepadlsticky")), Terrarum.WIDTH - 135, 40 ) @@ -308,7 +312,7 @@ class BasicDebugInfoWindow : UICanvas() { } private fun drawGamepadAxis(batch: SpriteBatch, axisX: Float, axisY: Float, uiX: Int, uiY: Int) { - val uiColour = Color(0xAA000000.toInt()) + val uiColour = ItemSlotImageFactory.CELLCOLOUR_BLACK val w = 128f val h = 128f val halfW = w / 2f @@ -317,22 +321,24 @@ class BasicDebugInfoWindow : UICanvas() { val pointDX = axisX * halfW val pointDY = axisY * halfH - val padName = if (AppLoader.gamepad!!.name.isEmpty()) "Gamepad" - else AppLoader.gamepad!!.name + val gamepad = Controllers.getControllers()[0] + val padName = if (gamepad.name.isEmpty()) "Gamepad" + else gamepad.name blendNormal(batch) batch.end() + gdxSetBlendNormal() Terrarum.inShapeRenderer { it.color = uiColour - it.rect(uiX.toFloat(), uiY.toFloat(), w, h) + it.rect(uiX.toFloat(), Terrarum.HEIGHT - uiY.toFloat(), w, -h) it.color = Color.WHITE - it.line(uiX + halfW, uiY + halfH, uiX + halfW + pointDX, uiY + halfH + pointDY) + it.line(uiX + halfW, Terrarum.HEIGHT - (uiY + halfH), uiX + halfW + pointDX, Terrarum.HEIGHT - (uiY + halfH + pointDY)) it.color = Color.GRAY } batch.begin() - Terrarum.fontSmallNumbers.draw(batch, padName, uiX + w / 2 - (padName.length) * 4, uiY.toFloat() + h + 2) + Terrarum.fontSmallNumbers.draw(batch, padName, Terrarum.WIDTH - (padName.length) * 8f, uiY.toFloat() + h + 2) }