From d95eaf5be088f39ca115cbb4bd1c5ced58f1805d Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 17 Sep 2018 01:46:50 +0900 Subject: [PATCH] player is now nullable; wtf is calling Ingame 5 times? --- lib/TerrarumSansBitmap.jar | Bin 63773 -> 67058 bytes src/net/torvald/terrarum/AppLoader.java | 6 + src/net/torvald/terrarum/Terrarum.kt | 16 ++- .../torvald/terrarum/UIItemInventoryElem.kt | 10 +- .../terrarum/UIItemInventoryElemSimple.kt | 7 +- .../torvald/terrarum/blockstats/BlockStats.kt | 3 +- src/net/torvald/terrarum/gameactors/Actor.kt | 6 +- .../terrarum/gameactors/ActorWBMovable.kt | 2 +- .../gamecontroller/IngameController.kt | 13 ++- .../terrarum/itemproperties/ItemCodex.kt | 6 +- .../terrarum/modulebasegame/BuildingMaker.kt | 11 +- .../torvald/terrarum/modulebasegame/Ingame.kt | 69 ++++++------ .../modulebasegame/console/AVTracker.kt | 2 +- .../modulebasegame/console/ExportAV.kt | 5 +- .../terrarum/modulebasegame/console/GetAV.kt | 18 +-- .../modulebasegame/console/GsonTest.kt | 2 +- .../modulebasegame/console/ImportLayerData.kt | 2 +- .../modulebasegame/console/Inventory.kt | 3 +- .../terrarum/modulebasegame/console/SetAV.kt | 13 ++- .../modulebasegame/console/SetScale.kt | 6 +- .../modulebasegame/console/Teleport.kt | 13 ++- .../modulebasegame/console/ToggleNoClip.kt | 8 +- .../debuggerapp/ActorValueTracker.kt | 2 +- .../gameactors/ActorHumanoid.kt | 2 +- .../gameactors/ActorInventory.kt | 2 +- .../gameactors/PlayableActorDelegate.kt | 5 +- .../gameactors/ai/SmarterSlimes.kt | 5 +- .../modulebasegame/items/PickaxeGeneric.kt | 12 +- .../terrarum/modulebasegame/ui/UIPieMenu.kt | 10 +- .../terrarum/modulebasegame/ui/UIQuickBar.kt | 10 +- .../terrarum/modulebasegame/ui/UIRemoCon.kt | 20 ++++ .../modulebasegame/weather/WeatherMixer.kt | 4 +- .../terrarum/ui/BasicDebugInfoWindow.kt | 103 ++++++++++-------- .../terrarum/worlddrawer/WorldCamera.kt | 3 +- tmp_wenquanyi.tga | 3 - 35 files changed, 252 insertions(+), 150 deletions(-) delete mode 100644 tmp_wenquanyi.tga diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index 38021e14ee57c32e7ef155e9c27011dc1de65c2e..a67b15c1e2b5eb842aef2dfd1e87176af2c8f2b6 100644 GIT binary patch delta 47332 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

$1177PsQ-+u)BUwJ^gDF6Tf delta 44070 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 @@ -810,7 +812,9 @@ open class IngameInstance(val batch: SpriteBatch) : Screen { * Any values behind the index will be automatically pushed to front. * This is how remove function of [java.util.ArrayList] is defined. */ - open fun removeActor(actor: Actor) { + open fun removeActor(actor: Actor?) { + if (actor == null) return + val indexToDelete = actorContainer.binarySearch(actor.referenceID!!) if (indexToDelete >= 0) { actorContainer.removeAt(indexToDelete) @@ -820,7 +824,9 @@ open class IngameInstance(val batch: SpriteBatch) : Screen { /** * Check for duplicates, append actor and sort the list */ - open fun addNewActor(actor: Actor) { + open fun addNewActor(actor: Actor?) { + if (actor == null) return + if (theGameHasActor(actor.referenceID!!)) { throw Error("The actor $actor already exists in the game") } diff --git a/src/net/torvald/terrarum/UIItemInventoryElem.kt b/src/net/torvald/terrarum/UIItemInventoryElem.kt index 98c014d8a..42efed3df 100644 --- a/src/net/torvald/terrarum/UIItemInventoryElem.kt +++ b/src/net/torvald/terrarum/UIItemInventoryElem.kt @@ -137,7 +137,11 @@ class UIItemInventoryElem( override fun keyDown(keycode: Int): Boolean { if (item != null && Terrarum.ingame != null && keycode in Input.Keys.NUM_1..Input.Keys.NUM_0) { - val inventory = (Terrarum.ingame!! as Ingame).playableActor.inventory + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + + if (player == null) return false + + val inventory = player.inventory val slot = if (keycode == Input.Keys.NUM_0) 9 else keycode - Input.Keys.NUM_1 val currentSlotItem = inventory?.getQuickBar(slot) @@ -167,7 +171,9 @@ class UIItemInventoryElem( // equip da shit val itemEquipSlot = item!!.equipPosition - val player = (Terrarum.ingame!! as Ingame).playableActor + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + + if (player == null) return false if (item != player.inventory.itemEquipped.get(itemEquipSlot)) { // if this item is unequipped, equip it player.equipItem(item!!) diff --git a/src/net/torvald/terrarum/UIItemInventoryElemSimple.kt b/src/net/torvald/terrarum/UIItemInventoryElemSimple.kt index 0a43a4d73..97a5b46bb 100644 --- a/src/net/torvald/terrarum/UIItemInventoryElemSimple.kt +++ b/src/net/torvald/terrarum/UIItemInventoryElemSimple.kt @@ -124,8 +124,10 @@ class UIItemInventoryElemSimple( if (item != null && Terrarum.ingame != null && keycode in Input.Keys.NUM_1..Input.Keys.NUM_0) { println("keydown elemgrid") + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return false - val inventory = (Terrarum.ingame!! as Ingame).playableActor.inventory + val inventory = player.inventory val slot = if (keycode == Input.Keys.NUM_0) 9 else keycode - Input.Keys.NUM_1 val currentSlotItem = inventory.getQuickBar(slot) @@ -157,7 +159,8 @@ class UIItemInventoryElemSimple( // equip da shit val itemEquipSlot = item!!.equipPosition - val player = (Terrarum.ingame!! as Ingame).playableActor + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return false if (item != player.inventory.itemEquipped.get(itemEquipSlot)) { // if this item is unequipped, equip it player.equipItem(item!!) diff --git a/src/net/torvald/terrarum/blockstats/BlockStats.kt b/src/net/torvald/terrarum/blockstats/BlockStats.kt index 06801ae9d..4389724fa 100644 --- a/src/net/torvald/terrarum/blockstats/BlockStats.kt +++ b/src/net/torvald/terrarum/blockstats/BlockStats.kt @@ -28,7 +28,8 @@ object BlockStats { // Get stats on no-zoomed screen area. In other words, will behave as if screen zoom were 1.0 // no matter how the screen is zoomed. val map = (Terrarum.ingame!!.world) - val player = (Terrarum.ingame!! as Ingame).playableActor + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return val renderWidth = FastMath.ceil(Terrarum.WIDTH.toFloat()) val renderHeight = FastMath.ceil(Terrarum.HEIGHT.toFloat()) diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index 9a57c96df..b6aa772b8 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -39,7 +39,11 @@ abstract class Actor(val renderOrder: RenderOrder) : Comparable, Runnable var actorValue = ActorValue(this) @Volatile var flagDespawn = false - override fun equals(other: Any?) = referenceID == (other as Actor).referenceID + override fun equals(other: Any?): Boolean { + if (other == null) return false + + return referenceID == (other as Actor).referenceID + } override fun hashCode() = referenceID!! override fun toString() = if (actorValue.getAsString("name").isNullOrEmpty()) diff --git a/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt b/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt index 6eba1dbab..04ba55941 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWBMovable.kt @@ -337,7 +337,7 @@ open class ActorWBMovable(val world: GameWorld, renderOrder: RenderOrder, val im if (spriteGlow != null) spriteGlow!!.update(delta) // make NoClip work for player - if (true) {//this == Terrarum.ingame!!.playableActor) { + if (true) {//this == Terrarum.ingame!!.actorNowPlaying) { isNoSubjectToGrav = isNoClip || COLLISION_TEST_MODE isNoCollideWorld = isNoClip isNoSubjectToFluidResistance = isNoClip diff --git a/src/net/torvald/terrarum/gamecontroller/IngameController.kt b/src/net/torvald/terrarum/gamecontroller/IngameController.kt index 1929611d0..7f1f63085 100644 --- a/src/net/torvald/terrarum/gamecontroller/IngameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/IngameController.kt @@ -41,14 +41,17 @@ class IngameController(val ingame: Ingame) : InputAdapter() { // Use item: assuming the player has only one effective grip (EquipPosition.HAND_GRIP) if (ingame.canPlayerControl) { if (Gdx.input.isButtonPressed(Terrarum.getConfigInt("mouseprimary")) || Gdx.input.isButtonPressed(Terrarum.getConfigInt("mousesecondary"))) { - val itemOnGrip = ingame.playableActor.inventory.itemEquipped[GameItem.EquipPosition.HAND_GRIP] + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return + + val itemOnGrip = player.inventory.itemEquipped[GameItem.EquipPosition.HAND_GRIP] itemOnGrip?.let { if (Gdx.input.isButtonPressed(Terrarum.getConfigInt("mouseprimary"))) { - ingame.playableActor.consumePrimary(it) + player.consumePrimary(it) } if (Gdx.input.isButtonPressed(Terrarum.getConfigInt("mousesecondary"))) { - ingame.playableActor.consumeSecondary(it) + player.consumeSecondary(it) } } } @@ -63,7 +66,7 @@ class IngameController(val ingame: Ingame) : InputAdapter() { override fun keyDown(keycode: Int): Boolean { if (ingame.canPlayerControl) { - ingame.playableActor.keyDown(keycode) + ingame.actorNowPlaying?.keyDown(keycode) } if (Terrarum.getConfigIntArray("keyquickselalt").contains(keycode) @@ -112,7 +115,7 @@ class IngameController(val ingame: Ingame) : InputAdapter() { override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { // don't separate Player from this! Physics will break, esp. airborne manoeuvre if (ingame.canPlayerControl) { - val itemOnGrip = ingame.playableActor.inventory.itemEquipped[GameItem.EquipPosition.HAND_GRIP] + val itemOnGrip = ingame.actorNowPlaying?.inventory?.itemEquipped?.get(GameItem.EquipPosition.HAND_GRIP) ?: null if (itemOnGrip != null) { if (button == Terrarum.getConfigInt("mouseprimary")) { diff --git a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt index 8555baba1..37c1e381f 100644 --- a/src/net/torvald/terrarum/itemproperties/ItemCodex.kt +++ b/src/net/torvald/terrarum/itemproperties/ItemCodex.kt @@ -132,7 +132,7 @@ object ItemCodex { override fun primaryUse(delta: Float): Boolean { val mousePoint = Point2d(Terrarum.mouseTileX.toDouble(), Terrarum.mouseTileY.toDouble()) - val actorvalue = ingame.playableActor.actorValue + val actorvalue = ingame.actorNowPlaying.actorValue using = true @@ -155,7 +155,7 @@ object ItemCodex { ingame.world.inflictTerrainDamage( Terrarum.mouseTileX, Terrarum.mouseTileY, - Calculate.pickaxePower(ingame.playableActor, material) * swingDmgToFrameDmg + Calculate.pickaxePower(ingame.actorNowPlaying, material) * swingDmgToFrameDmg ) return true } @@ -163,7 +163,7 @@ object ItemCodex { override fun endPrimaryUse(delta: Float): Boolean { using = false // reset action timer to zero - ingame.playableActor.actorValue[AVKey.__ACTION_TIMER] = 0.0 + ingame.actorNowPlaying.actorValue[AVKey.__ACTION_TIMER] = 0.0 return true } }*/ diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index 0f5a1c0e4..e1ac9839a 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -2,12 +2,9 @@ package net.torvald.terrarum.modulebasegame import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch -import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.AppLoader import net.torvald.terrarum.IngameInstance -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.Terrarum import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.gameactors.* @@ -49,7 +46,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { } - override var playableActor: ActorHumanoid = MovableWorldCamera(world) + override var actorNowPlaying: ActorHumanoid? = MovableWorldCamera(world) val uiToolbox = UIBuildingMakerToolbox() val notifier = Notification() @@ -104,7 +101,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { (Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height) - playableActor.setPosition(512 * 16.0, 149 * 16.0) + actorNowPlaying?.setPosition(512 * 16.0, 149 * 16.0) @@ -153,10 +150,10 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { private fun updateGame(delta: Float) { blockPointingCursor.update(delta) - playableActor.update(delta) + actorNowPlaying?.update(delta) uiContainer.forEach { it.update(delta) } - WorldCamera.update(world, playableActor) + WorldCamera.update(world, actorNowPlaying) } private fun renderGame() { diff --git a/src/net/torvald/terrarum/modulebasegame/Ingame.kt b/src/net/torvald/terrarum/modulebasegame/Ingame.kt index bee09e7bc..5fcadecfa 100644 --- a/src/net/torvald/terrarum/modulebasegame/Ingame.kt +++ b/src/net/torvald/terrarum/modulebasegame/Ingame.kt @@ -16,7 +16,6 @@ import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.modulebasegame.gameworld.WorldSimulator import net.torvald.terrarum.modulebasegame.weather.WeatherMixer -import net.torvald.terrarum.worlddrawer.BlocksDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera @@ -24,14 +23,12 @@ import net.torvald.terrarum.worlddrawer.WorldCamera import java.util.ArrayList import java.util.concurrent.locks.ReentrantLock -import net.torvald.random.HQRNG import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.modulebasegame.console.AVTracker import net.torvald.terrarum.modulebasegame.console.ActorsList import net.torvald.terrarum.console.Authenticator import net.torvald.terrarum.console.SetGlobalLightOverride -import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.modulebasegame.gameactors.* import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension import net.torvald.terrarum.modulebasegame.imagefont.Watch7SegMain @@ -53,9 +50,6 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { lateinit var historicalFigureIDBucket: ArrayList - lateinit var gameworld: GameWorldExtension - - lateinit var theRealGamer: IngamePlayer /** * list of Actors that is sorted by Actors' referenceID @@ -150,6 +144,8 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { lateinit var gameLoadMode: GameLoadMode lateinit var gameLoadInfoPayload: Any + lateinit var gameworld: GameWorldExtension + lateinit var theRealGamer: IngamePlayer enum class GameLoadMode { CREATE_NEW, LOAD_FROM @@ -189,6 +185,12 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { // other worldgen options ) + private fun setTheRealGamerFirstTime(actor: IngamePlayer) { + actorNowPlaying = actor + theRealGamer = actor + addNewActor(actorNowPlaying) + } + /** * Init instance by loading saved world */ @@ -203,17 +205,12 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { gameworld = gameSaveData.world world = gameworld historicalFigureIDBucket = gameSaveData.historicalFigureIDBucket - theRealGamer = gameSaveData.realGamePlayer - playableActor = gameSaveData.realGamePlayer - addNewActor(playableActor) + setTheRealGamerFirstTime(gameSaveData.realGamePlayer) // set the randomisers right RoguelikeRandomiser.loadFromSave(gameSaveData.rogueS0, gameSaveData.rogueS1) WeatherMixer.loadFromSave(gameSaveData.weatherS0, gameSaveData.weatherS1) - - - //initGame() } } @@ -221,6 +218,11 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { * Init instance by creating new world */ private fun enter(worldParams: NewWorldParameters) { + printdbg(this, "Ingame called") + Thread.currentThread().getStackTrace().forEach { + printdbg(this, "-> $it") + } + if (gameInitialised) { printdbg(this, "loaded successfully.") } @@ -252,8 +254,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { // test actor //addNewActor(PlayerBuilderCynthia()) - - //initGame() + setTheRealGamerFirstTime(PlayerBuilderSigrid()) } } @@ -303,7 +304,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { -uiInventoryPlayer.width, 70 )*/ - uiInventoryPlayer = UIInventoryFull(playableActor, + uiInventoryPlayer = UIInventoryFull(actorNowPlaying, toggleKeyLiteral = Terrarum.getConfigInt("keyinventory") ) uiInventoryPlayer.setPosition(0, 0) @@ -329,11 +330,11 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { //uiVitalItem.setAsAlwaysVisible() // basic watch-style notification bar (temperature, new mail) - uiWatchBasic = UIBasicNotifier(playableActor) + uiWatchBasic = UIBasicNotifier(actorNowPlaying) uiWatchBasic.setAsAlwaysVisible() uiWatchBasic.setPosition(Terrarum.WIDTH - uiWatchBasic.width, 0) - uiWatchTierOne = UITierOneWatch(playableActor) + uiWatchTierOne = UITierOneWatch(actorNowPlaying) uiWatchTierOne.setAsAlwaysVisible() uiWatchTierOne.setPosition(Terrarum.WIDTH - uiWatchTierOne.width, uiWatchBasic.height - 2) @@ -421,15 +422,15 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { if (!gameFullyLoaded) { if (gameLoadMode == GameLoadMode.CREATE_NEW) { - playableActor = PlayerBuilderSigrid() + actorNowPlaying = PlayerBuilderSigrid() // go to spawn position - playableActor.setPosition( + actorNowPlaying?.setPosition( world.spawnX * FeaturesDrawer.TILE_SIZE.toDouble(), world.spawnY * FeaturesDrawer.TILE_SIZE.toDouble() ) - addNewActor(playableActor) + addNewActor(actorNowPlaying) } postInit() @@ -505,7 +506,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { BlockPropUtil.dynamicLumFuncTickClock() world.updateWorldTime(delta) //WorldSimulator(player, delta) - WeatherMixer.update(delta, playableActor) + WeatherMixer.update(delta, actorNowPlaying) BlockStats.update() if (!(CommandDict["setgl"] as SetGlobalLightOverride).lightOverride) gameworld.globalLight = WeatherMixer.globalLightNow @@ -515,7 +516,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { // camera-related updates // //////////////////////////// FeaturesDrawer.update(delta) - WorldCamera.update(gameworld, playableActor) + WorldCamera.update(gameworld, actorNowPlaying) @@ -558,7 +559,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { actorsRenderMidTop, actorsRenderFront, particlesContainer, - playableActor, + actorNowPlaying, uiContainer ) } @@ -566,7 +567,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { private fun repossessActor() { // check if currently pocessed actor is removed from game - if (!theGameHasActor(playableActor)) { + if (!theGameHasActor(actorNowPlaying)) { // re-possess canonical player if (theGameHasActor(Terrarum.PLAYER_REF_ID)) changePossession(Terrarum.PLAYER_REF_ID) @@ -576,12 +577,12 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { } private fun changePossession(newActor: ActorHumanoid) { - if (!theGameHasActor(playableActor)) { + if (!theGameHasActor(actorNowPlaying)) { throw IllegalArgumentException("No such actor in the game: $newActor") } - playableActor = newActor - WorldSimulator(playableActor, Terrarum.deltaTime) + actorNowPlaying = newActor + WorldSimulator(actorNowPlaying, Terrarum.deltaTime) } private fun changePossession(refid: Int) { @@ -665,11 +666,11 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { ThreadParallel.startAll() - playableActor.update(delta) + actorNowPlaying?.update(delta) } else { actorContainer.forEach { - if (it != playableActor) { + if (it != actorNowPlaying) { it.update(delta) if (it is Pocketed) { @@ -682,7 +683,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { } } } - playableActor.update(delta) + actorNowPlaying?.update(delta) //AmmoMeterProxy(player, uiVitalItem.UI as UIVitalMetre) } } @@ -734,7 +735,9 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { * Any values behind the index will be automatically pushed to front. * This is how remove function of [java.util.ArrayList] is defined. */ - override fun removeActor(actor: Actor) { + override fun removeActor(actor: Actor?) { + if (actor == null) return + if (actor.referenceID == theRealGamer.referenceID || actor.referenceID == 0x51621D) // do not delete this magic throw RuntimeException("Attempted to remove player.") val indexToDelete = actorContainer.binarySearch(actor.referenceID!!) @@ -769,7 +772,9 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { /** * Check for duplicates, append actor and sort the list */ - override fun addNewActor(actor: Actor) { + override fun addNewActor(actor: Actor?) { + if (actor == null) return + if (theGameHasActor(actor.referenceID!!)) { throw Error("The actor $actor already exists in the game") } diff --git a/src/net/torvald/terrarum/modulebasegame/console/AVTracker.kt b/src/net/torvald/terrarum/modulebasegame/console/AVTracker.kt index 339f0c481..41ebe9182 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/AVTracker.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/AVTracker.kt @@ -16,7 +16,7 @@ internal object AVTracker : ConsoleCommand { override fun execute(args: Array) { if (args.size < 2) { - jPanelInstances.add(ActorValueTracker((Terrarum.ingame!! as Ingame).playableActor)) + jPanelInstances.add(ActorValueTracker((Terrarum.ingame!! as Ingame).actorNowPlaying)) } else { try { diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportAV.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportAV.kt index 3395fef18..1bda6ca9b 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ExportAV.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportAV.kt @@ -15,8 +15,11 @@ internal object ExportAV : ConsoleCommand { override fun execute(args: Array) { if (args.size == 2) { try { + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return + JsonWriter.writeToFile( - (Terrarum.ingame!! as Ingame).playableActor.actorValue, + player.actorValue, Terrarum.defaultDir + "/Exports/" + args[1] + ".json") Echo("ExportAV: exported to " + args[1] + ".json") diff --git a/src/net/torvald/terrarum/modulebasegame/console/GetAV.kt b/src/net/torvald/terrarum/modulebasegame/console/GetAV.kt index 8ba567962..70aae284c 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/GetAV.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/GetAV.kt @@ -15,11 +15,13 @@ internal object GetAV : ConsoleCommand { override fun execute(args: Array) { try { val ingame = Terrarum.ingame!! as Ingame + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return - if (args.size == 1 && ingame.playableActor != null) { + if (args.size == 1 && player != null) { // print all actorvalue of player - val av = ingame.playableActor.actorValue + val av = player.actorValue val keyset = av.keySet Echo("$ccW== ActorValue list for ${ccY}player $ccW==") @@ -36,15 +38,15 @@ internal object GetAV : ConsoleCommand { // check if args[1] is number or not if (!args[1].isNum()) { // args[1] is ActorValue name Echo("${ccW}player.$ccM${args[1]} $ccW= " + - ccG + - ingame.playableActor.actorValue[args[1]] + - " $ccO" + - ingame.playableActor.actorValue[args[1]]!!.javaClass.simpleName + ccG + + player.actorValue[args[1]] + + " $ccO" + + player.actorValue[args[1]]!!.javaClass.simpleName ) println("[GetAV] player.${args[1]} = " + - ingame.playableActor.actorValue[args[1]] + + player.actorValue[args[1]] + " " + - ingame.playableActor.actorValue[args[1]]!!.javaClass.simpleName + player.actorValue[args[1]]!!.javaClass.simpleName ) } else { diff --git a/src/net/torvald/terrarum/modulebasegame/console/GsonTest.kt b/src/net/torvald/terrarum/modulebasegame/console/GsonTest.kt index 47cca16f7..d27088bab 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/GsonTest.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/GsonTest.kt @@ -16,7 +16,7 @@ import java.io.IOException internal object GsonTest : ConsoleCommand { override fun execute(args: Array) { if (args.size == 2) { - val avelem = Gson().toJsonTree((Terrarum.ingame!! as Ingame).playableActor) + val avelem = Gson().toJsonTree((Terrarum.ingame!! as Ingame).actorNowPlaying) val jsonString = avelem.toString() diff --git a/src/net/torvald/terrarum/modulebasegame/console/ImportLayerData.kt b/src/net/torvald/terrarum/modulebasegame/console/ImportLayerData.kt index 1dd7cb2b2..03fdaf1e4 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ImportLayerData.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ImportLayerData.kt @@ -21,7 +21,7 @@ object ImportLayerData : ConsoleCommand { //val fis = GZIPInputStream(FileInputStream(args[1])) // this gzip is kaput val fis = FileInputStream(args[1]) (Terrarum.ingame!!.world) = ReadLayerData(fis) - (Terrarum.ingame!! as Ingame).playableActor.setPosition( + (Terrarum.ingame!! as Ingame).actorNowPlaying?.setPosition( (Terrarum.ingame!!.world).spawnY * FeaturesDrawer.TILE_SIZE.toDouble(), (Terrarum.ingame!!.world).spawnX * FeaturesDrawer.TILE_SIZE.toDouble() ) diff --git a/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt b/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt index eb1aa58ee..ea1ee086b 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Inventory.kt @@ -4,7 +4,6 @@ import net.torvald.terrarum.Terrarum import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.Echo import net.torvald.terrarum.console.EchoError -import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulebasegame.gameactors.Pocketed import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.modulebasegame.Ingame @@ -14,7 +13,7 @@ import net.torvald.terrarum.modulebasegame.Ingame */ internal object Inventory : ConsoleCommand { - private var target: Pocketed? = (Terrarum.ingame!! as Ingame).playableActor + private var target: Pocketed? = (Terrarum.ingame!! as Ingame).actorNowPlaying override fun execute(args: Array) { if (args.size == 1) { diff --git a/src/net/torvald/terrarum/modulebasegame/console/SetAV.kt b/src/net/torvald/terrarum/modulebasegame/console/SetAV.kt index ac893e762..8543c271d 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/SetAV.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/SetAV.kt @@ -63,9 +63,16 @@ internal object SetAV : ConsoleCommand { return } - (Terrarum.ingame!! as Ingame).playableActor.actorValue[args[1]] = newValue - Echo("${ccW}Set $ccM${args[1]} ${ccW}for ${ccY}player ${ccW}to $ccG$newValue") - println("[SetAV] set ActorValue '${args[1]}' for player to '$newValue'.") + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) { + EchoError("Player does not exist") + println("[SetAV] Player does not exist") + } + else { + player.actorValue[args[1]] = newValue + Echo("${ccW}Set $ccM${args[1]} ${ccW}for ${ccY}player ${ccW}to $ccG$newValue") + println("[SetAV] set ActorValue '${args[1]}' for player to '$newValue'.") + } } else if (args.size == 4) { try { diff --git a/src/net/torvald/terrarum/modulebasegame/console/SetScale.kt b/src/net/torvald/terrarum/modulebasegame/console/SetScale.kt index ccbead517..a39ca92ec 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/SetScale.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/SetScale.kt @@ -14,7 +14,11 @@ internal object SetScale : ConsoleCommand { override fun execute(args: Array) { if (args.size == 2 || args.size == 3) { try { - val targetID = if (args.size == 3) args[1].toInt() else (Terrarum.ingame!! as Ingame).playableActor.referenceID + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return + + + val targetID = if (args.size == 3) args[1].toInt() else player.referenceID val scale = args[if (args.size == 3) 2 else 1].toDouble() val target = Terrarum.ingame!!.getActorByID(targetID!!) diff --git a/src/net/torvald/terrarum/modulebasegame/console/Teleport.kt b/src/net/torvald/terrarum/modulebasegame/console/Teleport.kt index 20d0548d6..032c8b957 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/Teleport.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/Teleport.kt @@ -27,7 +27,7 @@ internal object Teleport : ConsoleCommand { return } - (Terrarum.ingame!! as Ingame).playableActor.setPosition(x.toDouble(), y.toDouble()) + (Terrarum.ingame!! as Ingame).actorNowPlaying?.setPosition(x.toDouble(), y.toDouble()) } else if (args.size == 4) { if (args[2].toLowerCase() != "to") { @@ -38,8 +38,15 @@ internal object Teleport : ConsoleCommand { val targetActor: ActorWBMovable try { val fromActorID = args[1].toInt() - val targetActorID = if (args[3].toLowerCase() == "player") - (Terrarum.ingame!! as Ingame).playableActor.referenceID!! + val targetActorID = if (args[3].toLowerCase() == "player") { + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) { + EchoError("Player does not exist") + return + } + else + player.referenceID!! + } else args[3].toInt() diff --git a/src/net/torvald/terrarum/modulebasegame/console/ToggleNoClip.kt b/src/net/torvald/terrarum/modulebasegame/console/ToggleNoClip.kt index f0edebb6d..13cb0782b 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ToggleNoClip.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ToggleNoClip.kt @@ -10,9 +10,13 @@ import net.torvald.terrarum.modulebasegame.Ingame */ internal object ToggleNoClip : ConsoleCommand { override fun execute(args: Array) { - val status = (Terrarum.ingame!! as Ingame).playableActor.isNoClip + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return - (Terrarum.ingame!! as Ingame).playableActor.isNoClip = !status + + val status = player.isNoClip + + player.isNoClip = !status Echo("Set no-clip status to " + (!status).toString()) } diff --git a/src/net/torvald/terrarum/modulebasegame/debuggerapp/ActorValueTracker.kt b/src/net/torvald/terrarum/modulebasegame/debuggerapp/ActorValueTracker.kt index a66404e43..04acbf714 100644 --- a/src/net/torvald/terrarum/modulebasegame/debuggerapp/ActorValueTracker.kt +++ b/src/net/torvald/terrarum/modulebasegame/debuggerapp/ActorValueTracker.kt @@ -84,7 +84,7 @@ class ActorValueTracker constructor() : JFrame() { buttonChangeActor.addMouseListener(object : MouseAdapter() { override fun mousePressed(e: MouseEvent?) { if (actorIDField.text.toLowerCase() == "player") { - actor = (Terrarum.ingame!! as Ingame).playableActor + actor = (Terrarum.ingame!! as Ingame).actorNowPlaying actorValue = actor!!.actorValue } else if (actorIDField.text.isNotBlank()) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index 11c67ed1f..7ed6df4ac 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -145,7 +145,7 @@ open class ActorHumanoid( protected var isRightDown = false protected var isJumpDown = false protected inline val isGamer: Boolean - get() = if (Terrarum.ingame == null) false else this == Terrarum.ingame!!.playableActor + get() = if (Terrarum.ingame == null) false else this == Terrarum.ingame!!.actorNowPlaying private val nullItem = object : GameItem() { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt index c87028fcc..10f3ed1a4 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorInventory.kt @@ -64,7 +64,7 @@ class ActorInventory(val actor: Pocketed, var maxCapacity: Int, var capacityMode if (item.originalID == Terrarum.PLAYER_REF_ID || item.originalID == 0x51621D) // do not delete this magic throw IllegalArgumentException("Attempted to put human player into the inventory.") if (((Terrarum.ingame as? Ingame)?.gameFullyLoaded ?: false) && - (item.originalID == (Terrarum.ingame as? Ingame)?.playableActor?.referenceID)) + (item.originalID == (Terrarum.ingame as? Ingame)?.actorNowPlaying?.referenceID)) throw IllegalArgumentException("Attempted to put active player into the inventory.") if ((!item.stackable || item.dynamicID in ITEM_DYNAMIC) && count > 1) throw IllegalArgumentException("Attempting to adding stack of item but the item is not stackable; item: $item, count: $count") diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayableActorDelegate.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayableActorDelegate.kt index 38f138bce..2580d6f79 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayableActorDelegate.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayableActorDelegate.kt @@ -8,9 +8,10 @@ import net.torvald.terrarum.gameactors.Controllable * @param actor : here you 'attach' the actor you wish to control * Created by minjaesong on 2016-10-23. */ +@Deprecated("The ingame should discriminate 'theRealGamer' and 'actorNowPlaying'") class PlayableActorDelegate(val actor: ActorHumanoid) { - init { + /*init { if (actor !is Controllable) throw IllegalArgumentException("Player must be 'Controllable'!") } @@ -27,5 +28,5 @@ class PlayableActorDelegate(val actor: ActorHumanoid) { // LightmapRenderer.fireRecalculateEvent() //} // not going to work: think about stationery tiki torches, global lights, etc - } + }*/ } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ai/SmarterSlimes.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ai/SmarterSlimes.kt index 9211e0a1a..6b6598032 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ai/SmarterSlimes.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ai/SmarterSlimes.kt @@ -35,7 +35,10 @@ class SmarterSlimes : ActorAI { // TEST: just target player - val playerXPos = (Terrarum.ingame!! as Ingame).playableActor.centrePosPoint.x + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return + + val playerXPos = player.centrePosPoint.x val thisXPos = actor.centrePosPoint.x val xDiff = thisXPos - playerXPos diff --git a/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt index 9380b8440..83717eada 100644 --- a/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/items/PickaxeGeneric.kt @@ -34,11 +34,14 @@ class PickaxeGeneric(override val originalID: ItemID) : GameItem() { } override fun primaryUse(delta: Float): Boolean { + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return false + val mouseTileX = Terrarum.mouseTileX val mouseTileY = Terrarum.mouseTileY val mousePoint = Point2d(mouseTileX.toDouble(), mouseTileY.toDouble()) - val actorvalue = (Terrarum.ingame!! as Ingame).playableActor.actorValue + val actorvalue = player.actorValue using = true @@ -58,16 +61,19 @@ class PickaxeGeneric(override val originalID: ItemID) : GameItem() { (Terrarum.ingame!!.world).inflictTerrainDamage( mouseTileX, mouseTileY, - Calculate.pickaxePower((Terrarum.ingame!! as Ingame).playableActor, material) * swingDmgToFrameDmg + Calculate.pickaxePower(player, material) * swingDmgToFrameDmg ) return true } override fun endPrimaryUse(delta: Float): Boolean { + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return false + using = false // reset action timer to zero - (Terrarum.ingame!! as Ingame).playableActor.actorValue.set(AVKey.__ACTION_TIMER, 0.0) + player.actorValue.set(AVKey.__ACTION_TIMER, 0.0) return true } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIPieMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIPieMenu.kt index 0bb4fb76f..95411aebf 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIPieMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIPieMenu.kt @@ -38,8 +38,8 @@ class UIPieMenu : UICanvas() { var selection: Int = -1 override fun updateUI(delta: Float) { - if (selection >= 0) - (Terrarum.ingame!! as Ingame).playableActor.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = + if (selection >= 0 && (Terrarum.ingame!! as Ingame).actorNowPlaying != null) + (Terrarum.ingame!! as Ingame).actorNowPlaying!!.actorValue[AVKey.__PLAYER_QUICKSLOTSEL] = selection % slotCount @@ -83,7 +83,11 @@ class UIPieMenu : UICanvas() { // draw item - val itemPair = (Terrarum.ingame!! as Ingame).playableActor.inventory.getQuickBar(i) + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return // don't draw actual items + + + val itemPair = player.inventory.getQuickBar(i) if (itemPair != null) { val itemImage = ItemCodex.getItemImage(itemPair.item) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickBar.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickBar.kt index 1e92a03b0..a29974b98 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickBar.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickBar.kt @@ -28,8 +28,8 @@ class UIQuickBar : UICanvas() { private val startPointY = ItemSlotImageBuilder.slotImage.tileH / 2 private var selection: Int - get() = (Terrarum.ingame!! as Ingame).playableActor.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0 - set(value) { (Terrarum.ingame!! as Ingame).playableActor.actorValue.set(AVKey.__PLAYER_QUICKSLOTSEL, value.fmod(SLOT_COUNT)) } + get() = (Terrarum.ingame!! as Ingame).actorNowPlaying?.actorValue?.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0 + set(value) { (Terrarum.ingame!! as Ingame).actorNowPlaying?.actorValue?.set(AVKey.__PLAYER_QUICKSLOTSEL, value.fmod(SLOT_COUNT)) } override fun updateUI(delta: Float) { } @@ -54,7 +54,11 @@ class UIQuickBar : UICanvas() { ) // draw item - val itemPair = (Terrarum.ingame!! as Ingame).playableActor.inventory.getQuickBar(i) + val player = (Terrarum.ingame!! as Ingame).actorNowPlaying + if (player == null) return // if player is null, don't draw actual items + + + val itemPair = player.inventory.getQuickBar(i) if (itemPair != null) { val itemImage = ItemCodex.getItemImage(itemPair.item) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index 46221891f..55447d27a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -5,10 +5,14 @@ import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.random.HQRNG import net.torvald.terrarum.AppLoader.printdbg import net.torvald.terrarum.AppLoader.printdbgerr +import net.torvald.terrarum.LoadScreen import net.torvald.terrarum.Second import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.modulebasegame.Ingame +import net.torvald.terrarum.modulebasegame.gameactors.PlayerBuilderSigrid import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItemTextButton import net.torvald.terrarum.ui.UIItemTextButtonList @@ -100,6 +104,22 @@ open class UIRemoCon(treeRepresentation: QNDTreeNode) : UICanvas() { throw NullPointerException("No parent node to return") } } + else if (it.labelText.contains("Start New Random Game")) { + + printdbg(this, 1) + + val ingame = Ingame(Terrarum.batch) + ingame.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong()) + ingame.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW + + printdbg(this, 2) + + Terrarum.ingame = ingame + LoadScreen.screenToLoad = ingame + Terrarum.setScreen(LoadScreen) + + printdbg(this, 3) + } else { // check if target exists //println("current node: ${currentRemoConContents.data}") diff --git a/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt b/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt index 801ce5a41..2adf0f7be 100644 --- a/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/modulebasegame/weather/WeatherMixer.kt @@ -84,7 +84,9 @@ internal object WeatherMixer : RNGConsumer { /** * Part of Ingame update */ - fun update(delta: Float, player: ActorWithBody) { + fun update(delta: Float, player: ActorWithBody?) { + if (player == null) return + currentWeather = weatherList[WEATHER_GENERIC]!![0] diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index 7249ee039..93c3a7f54 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -32,14 +32,16 @@ class BasicDebugInfoWindow : UICanvas() { private val world = ingame.world as GameWorldExtension override fun updateUI(delta: Float) { - val player = ingame.playableActor - val hitbox = player.hitbox + val player = ingame.actorNowPlaying + val hitbox = player?.hitbox - xdelta = hitbox.canonicalX - prevPlayerX - ydelta = hitbox.canonicalY - prevPlayerY + if (hitbox != null) { + xdelta = hitbox.canonicalX - prevPlayerX + ydelta = hitbox.canonicalY - prevPlayerY - prevPlayerX = hitbox.canonicalX - prevPlayerY = hitbox.canonicalY + prevPlayerX = hitbox.canonicalX + prevPlayerY = hitbox.canonicalY + } } override fun renderUI(batch: SpriteBatch, camera: Camera) { @@ -47,58 +49,61 @@ class BasicDebugInfoWindow : UICanvas() { fun Int.rawG() = this % LightmapRenderer.MUL_2 / LightmapRenderer.MUL fun Int.rawB() = this % LightmapRenderer.MUL - val player = ingame.playableActor + val player = ingame.actorNowPlaying batch.color = Color(0xFFEE88FF.toInt()) - val hitbox = player.hitbox + val hitbox = player?.hitbox /** * First column */ - printLineColumn(batch, 1, 1, "startX " - + ccG - + "${hitbox?.startX}" - + " (" - + "${(hitbox?.startX?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" - + ")") - printLineColumn(batch, 2, 1, "endX " - + ccG - + "${hitbox?.endX}" - + " (" - + "${(hitbox?.endX?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" - + ")") - printLineColumn(batch, 1, 2, "startY " - + ccG - + "${hitbox?.startY}" - + " (" - + "${(hitbox?.startY?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" - + ")") - printLineColumn(batch, 2, 2, "endY " - + ccG - + "${hitbox?.endY}" - + " (" - + "${(hitbox?.endY?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" - + ")") + if (player != null) { - printLine(batch, 3, "veloX reported $ccG${player.externalForce?.x}") - printLine(batch, 4, "veloY reported $ccG${player.externalForce?.y}") + printLineColumn(batch, 1, 1, "startX " + + ccG + + "${hitbox?.startX}" + + " (" + + "${(hitbox?.startX?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" + + ")") + printLineColumn(batch, 2, 1, "endX " + + ccG + + "${hitbox?.endX}" + + " (" + + "${(hitbox?.endX?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" + + ")") + printLineColumn(batch, 1, 2, "startY " + + ccG + + "${hitbox?.startY}" + + " (" + + "${(hitbox?.startY?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" + + ")") + printLineColumn(batch, 2, 2, "endY " + + ccG + + "${hitbox?.endY}" + + " (" + + "${(hitbox?.endY?.div(FeaturesDrawer.TILE_SIZE))?.toInt()}" + + ")") - printLine(batch, 5, "p_WalkX $ccG${player.controllerMoveDelta?.x}") - printLine(batch, 6, "p_WalkY $ccG${player.controllerMoveDelta?.y}") + printLine(batch, 3, "veloX reported $ccG${player.externalForce?.x}") + printLine(batch, 4, "veloY reported $ccG${player.externalForce?.y}") - printLineColumn(batch, 2, 3, "veloX measured $ccG${xdelta}") - printLineColumn(batch, 2, 4, "veloY measured $ccG${ydelta}") + printLine(batch, 5, "p_WalkX $ccG${player.controllerMoveDelta?.x}") + printLine(batch, 6, "p_WalkY $ccG${player.controllerMoveDelta?.y}") - printLineColumn(batch, 1, 7, - "walled " + - "${if (player.walledLeft) "$ccR" else "$ccG"}L" + - "${if (player.walledBottom) "$ccR" else "$ccG"}${0x1F.toChar()}" + - "${if (player.walledTop) "$ccR" else "$ccG"}${0x1E.toChar()}" + - "${if (player.walledRight) "$ccR" else "$ccG"}R" + - "${if (player.colliding) "$ccR" else "$ccG"}${0x08.toChar()}" - ) + printLineColumn(batch, 2, 3, "veloX measured $ccG${xdelta}") + printLineColumn(batch, 2, 4, "veloY measured $ccG${ydelta}") + + printLineColumn(batch, 1, 7, + "walled " + + "${if (player.walledLeft) "$ccR" else "$ccG"}L" + + "${if (player.walledBottom) "$ccR" else "$ccG"}${0x1F.toChar()}" + + "${if (player.walledTop) "$ccR" else "$ccG"}${0x1E.toChar()}" + + "${if (player.walledRight) "$ccR" else "$ccG"}R" + + "${if (player.colliding) "$ccR" else "$ccG"}${0x08.toChar()}" + ) + } @@ -138,10 +143,12 @@ class BasicDebugInfoWindow : UICanvas() { printLineColumn(batch, 2, 5, "Time $ccG${world.time.todaySeconds.toString().padStart(5, '0')}" + " (${world.time.getFormattedTime()})") - printLineColumn(batch, 2, 6, "Mass $ccG${player.mass}") - printLineColumn(batch, 2, 7, "noClip $ccG${player.isNoClip}") + if (player != null) { + printLineColumn(batch, 2, 6, "Mass $ccG${player.mass}") + printLineColumn(batch, 2, 7, "noClip $ccG${player.isNoClip}") + } drawHistogram(batch, LightmapRenderer.histogram, Terrarum.WIDTH - histogramW - 30, diff --git a/src/net/torvald/terrarum/worlddrawer/WorldCamera.kt b/src/net/torvald/terrarum/worlddrawer/WorldCamera.kt index 1d0be6a4a..e7677d539 100644 --- a/src/net/torvald/terrarum/worlddrawer/WorldCamera.kt +++ b/src/net/torvald/terrarum/worlddrawer/WorldCamera.kt @@ -29,7 +29,8 @@ object WorldCamera { inline val yCentre: Int get() = y + height.ushr(1) - fun update(world: GameWorld, player: ActorWBMovable) { + fun update(world: GameWorld, player: ActorWBMovable?) { + if (player == null) return width = FastMath.ceil(Terrarum.WIDTH / (Terrarum.ingame?.screenZoom ?: 1f)) // div, not mul height = FastMath.ceil(Terrarum.HEIGHT / (Terrarum.ingame?.screenZoom ?: 1f)) diff --git a/tmp_wenquanyi.tga b/tmp_wenquanyi.tga deleted file mode 100644 index eece48ad7..000000000 --- a/tmp_wenquanyi.tga +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cf27e854dd3c311e5eaded800a4e157eada963ebafb75dc95a53c14c57359c8e -size 28311596