diff --git a/lib/kotlin-reflect.jar b/lib/kotlin-reflect.jar index 359ee1574..83d39f19f 100755 Binary files a/lib/kotlin-reflect.jar and b/lib/kotlin-reflect.jar differ diff --git a/lib/kotlin-runtime-sources.jar b/lib/kotlin-runtime-sources.jar index 1921787ba..8126d893f 100755 Binary files a/lib/kotlin-runtime-sources.jar and b/lib/kotlin-runtime-sources.jar differ diff --git a/lib/kotlin-runtime.jar b/lib/kotlin-runtime.jar index 75d3be145..ab79679f5 100755 Binary files a/lib/kotlin-runtime.jar and b/lib/kotlin-runtime.jar differ diff --git a/src/net/torvald/terrarum/KVHashMap.kt b/src/net/torvald/terrarum/KVHashMap.kt index 47d3fa335..01a6f41b3 100644 --- a/src/net/torvald/terrarum/KVHashMap.kt +++ b/src/net/torvald/terrarum/KVHashMap.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum import com.google.gson.JsonPrimitive import java.util.* +import java.util.function.Consumer /** * Created by minjaesong on 15-12-30. @@ -102,4 +103,8 @@ open class KVHashMap { val keySet: Set get() = hashMap.keys + fun remove(key: String) { + hashMap.remove(key, hashMap[key]) + } + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index 5f6e99c19..bc4cec24c 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -4,11 +4,9 @@ import net.torvald.imagefont.GameFontBase import net.torvald.random.HQRNG import net.torvald.terrarum.audio.AudioResourceLibrary import net.torvald.terrarum.concurrent.ThreadPool +import net.torvald.terrarum.console.* import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameactors.* -import net.torvald.terrarum.console.Authenticator -import net.torvald.terrarum.console.CommandDict -import net.torvald.terrarum.console.SetGlobalLightOverride import net.torvald.terrarum.gameactors.physicssolver.CollisionSolver import net.torvald.terrarum.gamecontroller.GameController import net.torvald.terrarum.gamecontroller.Key @@ -227,6 +225,12 @@ constructor() : BasicGameState() { debugWindow.update(gc, delta) notifier.update(gc, delta) + // update debuggers using javax.swing // + if (Authenticator.b()) { + AVTracker.update() + ActorsList.update() + } + ///////////////////////// // app-related updates // diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 2b5b957bb..613899bfd 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -224,7 +224,6 @@ constructor(gamename: String) : StateBasedGame(gamename) { val STATE_ID_TOOL_NOISEGEN = 0x200 - //var hasController = false var controller: org.lwjgl.input.Controller? = null private set val CONTROLLER_DEADZONE = 0.1f diff --git a/src/net/torvald/terrarum/console/SetAV.kt b/src/net/torvald/terrarum/console/SetAV.kt index b30d1f1a0..fd2f6cf98 100644 --- a/src/net/torvald/terrarum/console/SetAV.kt +++ b/src/net/torvald/terrarum/console/SetAV.kt @@ -16,7 +16,6 @@ internal object SetAV : ConsoleCommand { val ccM = GameFontBase.colToCode["m"] override fun printUsage() { - Echo("${ccW}Set actor value of specific target to desired value.") Echo("${ccW}Usage: ${ccY}setav ${ccG}(id) ") Echo("${ccW}blank ID for player. Data type will be inferred automatically.") diff --git a/src/net/torvald/terrarum/gameactors/AVKey.kt b/src/net/torvald/terrarum/gameactors/AVKey.kt index ca755434c..c3582cba5 100644 --- a/src/net/torvald/terrarum/gameactors/AVKey.kt +++ b/src/net/torvald/terrarum/gameactors/AVKey.kt @@ -18,6 +18,8 @@ object AVKey { */ const val ACCEL = "accel" const val ACCELBUFF = "$ACCEL$BUFF" + /** internal value used by ActorHumanoid to implement friction in walkfunction */ + const val ACCELMULT_MOVEMENT = "__accelmultmvmt" const val SCALE = "scale" const val SCALEBUFF = "$SCALE$BUFF" // aka PHYSIQUE /** pixels */ diff --git a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt index a88748778..b837864fd 100644 --- a/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/gameactors/ActorHumanoid.kt @@ -220,14 +220,14 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null) private fun updateMovementControl() { if (!noClip) { if (grounded) { - actorValue[AVKey.ACCELBUFF] = 1.0 + actorValue[AVKey.ACCELMULT_MOVEMENT] = 1.0 } else { - actorValue[AVKey.ACCELBUFF] = ACCEL_MULT_IN_FLIGHT + actorValue[AVKey.ACCELMULT_MOVEMENT] = ACCEL_MULT_IN_FLIGHT } } else { - actorValue[AVKey.ACCELBUFF] = 1.0 + actorValue[AVKey.ACCELMULT_MOVEMENT] = 1.0 } } diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index cd2dc47f1..fc0827e27 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -1165,6 +1165,7 @@ open class ActorWithBody : Actor() { val avAcceleration: Double get() = actorValue.getAsDouble(AVKey.ACCEL)!! * actorValue.getAsDouble(AVKey.ACCELBUFF)!! * + (actorValue.getAsDouble(AVKey.ACCELMULT_MOVEMENT) ?: 1.0) * scale.sqrt() val avSpeedCap: Double get() = actorValue.getAsDouble(AVKey.SPEED)!! * diff --git a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt index 014a66fb6..b57c0f33c 100644 --- a/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt +++ b/src/net/torvald/terrarum/gameactors/HumanoidNPC.kt @@ -27,14 +27,18 @@ open class HumanoidNPC(luaScript: EncapsulatedString, born: GameDate) : ActorHum /** * Initialised in init block. - * Use function "function update(delta)" to step the AI. + * Use lua function "update(delta)" to step the AI. */ protected val luaInstance: LuaValue private val aiLuaAPI: AILuaAPI init { + luag["io"] = LuaValue.NIL + luag["os"] = LuaValue.NIL + luag["luajava"] = LuaValue.NIL aiLuaAPI = AILuaAPI(luag, this) + // load the script and execute it (initialises target script) luaInstance = luag.load(luaScript.getString(), luaScript.javaClass.simpleName) luaInstance.call() } @@ -77,8 +81,8 @@ open class HumanoidNPC(luaScript: EncapsulatedString, born: GameDate) : ActorHum override fun update(gc: GameContainer, delta: Int) { super.update(gc, delta) - aiLuaAPI.update(delta) + // run "update()" function in the script luag.get("update").call(delta.toLuaValue()) } diff --git a/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt b/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt index 058737afe..e3b78b253 100644 --- a/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt +++ b/src/net/torvald/terrarum/gameactors/ai/AILuaAPI.kt @@ -14,7 +14,7 @@ import org.luaj.vm2.lib.ZeroArgFunction /** * Created by minjaesong on 16-10-24. */ -internal class AILuaAPI(val g: Globals, actor: ActorWithBody) { +internal class AILuaAPI(g: Globals, actor: ActorWithBody) { init { if (actor !is AIControlled) @@ -36,10 +36,11 @@ internal class AILuaAPI(val g: Globals, actor: ActorWithBody) { g["ai"]["moveRight"] = MoveRight(actor) g["ai"]["moveTo"] = MoveTo(actor) g["ai"]["jump"] = Jump(actor) - } - fun update(delta: Int) { - // set up variables + + g["game"] = LuaValue.tableOf() + g["game"]["version"] = GameVersion() + g["game"]["versionRaw"] = GameVersionRaw() } companion object { @@ -47,35 +48,43 @@ internal class AILuaAPI(val g: Globals, actor: ActorWithBody) { * Reads arbitrary ActorWithBody and returns its information as Lua table */ fun composeActorObject(actor: ActorWithBody): LuaTable { - val t = LuaValue.tableOf() + val t: LuaTable = LuaValue.tableOf() - t["name"] = actor.actorValue.getAsString(AVKey.NAME) - t["posX"] = actor.hitbox.centeredX - t["posY"] = actor.hitbox.centeredY + t["name"] = actor.actorValue.getAsString(AVKey.NAME).toLua() + t["posX"] = actor.hitbox.centeredX.toLua() + t["posY"] = actor.hitbox.centeredY.toLua() - t["veloX"] = actor.veloX - t["veloY"] = actor.veloY + t["veloX"] = actor.veloX.toLua() + t["veloY"] = actor.veloY.toLua() - t["width"] = actor.hitbox.width - t["height"] = actor.hitbox.height + t["width"] = actor.hitbox.width.toLua() + t["height"] = actor.hitbox.height.toLua() - t["mass"] = actor.mass + t["mass"] = actor.mass.toLua() - t["collisionType"] = actor.collisionType + t["collisionType"] = actor.collisionType.toLua() - t["strength"] = actor.avStrength + t["strength"] = actor.avStrength.toLua() val lumrgb: Int = actor.actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0 val MUL_2 = LightmapRenderer.MUL_2 val MUL = LightmapRenderer.MUL val CHMAX = LightmapRenderer.CHANNEL_MAX - t["luminosityRGB"] = lumrgb + t["luminosityRGB"] = lumrgb.toLua() t["luminosity"] = (lumrgb.div(MUL_2).and(CHMAX).times(3) + lumrgb.div(MUL).and(CHMAX).times(4) + - lumrgb.and(1023)) / 8 // quick luminosity calculation + lumrgb.and(1023)).div(8.0).toLua() // quick luminosity calculation return t } + + fun Double.toLua() = LuaValue.valueOf(this) + fun Int.toLua() = LuaValue.valueOf(this) + fun String.toLua() = LuaValue.valueOf(this) + fun Double?.toLua() = if (this == null) LuaValue.NIL else this.toLua() + fun Int?.toLua() = if (this == null) LuaValue.NIL else this.toLua() + fun String?.toLua() = if (this == null) LuaValue.NIL else this.toLua() + } class GetSelfActorInfo(val actor: ActorWithBody) : ZeroArgFunction() { @@ -203,4 +212,18 @@ internal class AILuaAPI(val g: Globals, actor: ActorWithBody) { } } + + + + class GameVersion() : ZeroArgFunction() { + override fun call(): LuaValue { + return Terrarum.VERSION_STRING.toLua() + } + } + + class GameVersionRaw() : ZeroArgFunction() { + override fun call(): LuaValue { + return Terrarum.VERSION_RAW.toLua() + } + } } diff --git a/src/net/torvald/terrarum/gameactors/ai/scripts/EncapsulatedString.kt b/src/net/torvald/terrarum/gameactors/ai/scripts/EncapsulatedString.kt index 4cb1e0a46..709d729ef 100644 --- a/src/net/torvald/terrarum/gameactors/ai/scripts/EncapsulatedString.kt +++ b/src/net/torvald/terrarum/gameactors/ai/scripts/EncapsulatedString.kt @@ -1,6 +1,8 @@ package net.torvald.terrarum.gameactors.ai.scripts /** + * Encapsulated text file + * * Created by SKYHi14 on 2016-12-28. */ abstract class EncapsulatedString { diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index 97628f895..7dce7535f 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -3,19 +3,16 @@ package net.torvald.terrarum.ui import com.jme3.math.FastMath import net.torvald.imagefont.GameFontBase import net.torvald.terrarum.gameworld.PairedMapLayer -import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.mapdrawer.LightmapRenderer import net.torvald.terrarum.mapdrawer.MapCamera import net.torvald.terrarum.mapdrawer.MapDrawer import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blendNormal import net.torvald.terrarum.blendScreen -import net.torvald.terrarum.gameactors.ActorHumanoid import org.newdawn.slick.Color import org.newdawn.slick.GameContainer import org.newdawn.slick.Graphics import org.newdawn.slick.Input -import java.util.* /** * Created by minjaesong on 16-03-14. @@ -63,9 +60,6 @@ class BasicDebugInfoWindow : UICanvas { val player = Terrarum.ingame.player - val sb = StringBuilder() - val formatter = Formatter(sb) - val mouseTileX = ((MapCamera.cameraX + gc.input.mouseX / Terrarum.ingame.screenZoom) / MapDrawer.TILE_SIZE).toInt() val mouseTileY = ((MapCamera.cameraY + gc.input.mouseY / Terrarum.ingame.screenZoom) / MapDrawer.TILE_SIZE).toInt() @@ -112,7 +106,7 @@ class BasicDebugInfoWindow : UICanvas { val rawB = valRaw.rawB() lightVal = if (valRaw == -1) "—" - else valRaw.toInt().toString() + " (" + + else valRaw.toString() + " (" + rawR.toString() + " " + rawG.toString() + " " + rawB.toString() + ")" @@ -182,11 +176,11 @@ class BasicDebugInfoWindow : UICanvas { } private fun printLine(g: Graphics, l: Int, s: String) { - g.drawString(s, 10f, line(l).toFloat()) + g.drawString(s, 10f, line(l)) } private fun printLineColumn(g: Graphics, col: Int, row: Int, s: String) { - g.drawString(s, (10 + column(col)).toFloat(), line(row).toFloat()) + g.drawString(s, (10 + column(col)), line(row)) } val histogramW = 256 @@ -194,9 +188,9 @@ class BasicDebugInfoWindow : UICanvas { private fun drawHistogram(g: Graphics, histogram: LightmapRenderer.Histogram, x: Int, y: Int) { val uiColour = Color(0xAA000000.toInt()) - val barR = Color(0xDD0000.toInt()) - val barG = Color(0x00DD00.toInt()) - val barB = Color(0x0000DD.toInt()) + val barR = Color(0xDD0000) + val barG = Color(0x00DD00) + val barB = Color(0x0000DD) val barColour = arrayOf(barR, barG, barB) val w = histogramW.toFloat() val h = histogramH.toFloat()