diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index af82824f9..abfc6b84d 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -909,6 +909,7 @@ public class App implements ApplicationListener { currentScreen.show(); currentScreen.resize(scr.getWidth(), scr.getHeight()); + TerrarumGlobalState.INSTANCE.getHAS_KEYBOARD_INPUT_FOCUS().unset(); System.gc(); diff --git a/src/net/torvald/terrarum/Point2d.kt b/src/net/torvald/terrarum/Point2d.kt index f3274283e..fbbb992e4 100644 --- a/src/net/torvald/terrarum/Point2d.kt +++ b/src/net/torvald/terrarum/Point2d.kt @@ -122,4 +122,6 @@ class Point2i() { operator fun component1() = x operator fun component2() = y + + fun toVector() = Vector2(this.x.toDouble(), this.y.toDouble()) } diff --git a/src/net/torvald/terrarum/TerrarumGlobalState.kt b/src/net/torvald/terrarum/TerrarumGlobalState.kt index bee6a60c4..c651482a8 100644 --- a/src/net/torvald/terrarum/TerrarumGlobalState.kt +++ b/src/net/torvald/terrarum/TerrarumGlobalState.kt @@ -5,7 +5,7 @@ package net.torvald.terrarum */ object TerrarumGlobalState { - var HAS_KEYBOARD_INPUT_FOCUS = CountedBool() + val HAS_KEYBOARD_INPUT_FOCUS = CountedBool() } diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 2ddc66a19..d2537c269 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -87,6 +87,14 @@ open class GameWorld( /** Tilewise spawn point */ var spawnY: Int = 0 + var spawnPoint: Point2i + get() = Point2i(spawnX, spawnY) + set(value) { + spawnX = value.x + spawnY = value.y + } + var portalPoint: Point2i? = null + val wallDamages = HashArray() val terrainDamages = HashArray() val fluidTypes = HashedFluidType() diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 07c7a64d5..a73b6d88c 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -390,7 +390,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { printdbg(this, "No mapping found") printdbg(this, "Changing XY Position ${codices.player.hitbox.canonVec} -> (${world.spawnX * TILE_SIZED}, ${world.spawnY * TILE_SIZED})") - codices.player.setPosition(world.spawnX * TILE_SIZED, world.spawnY * TILE_SIZED) + codices.player.setPosition((world.portalPoint ?: world.spawnPoint).toVector() * TILE_SIZED) } } @@ -424,10 +424,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { // go to spawn position printdbg(this, "World Spawn position: (${world.spawnX}, ${world.spawnY})") - actorGamer.setPosition( - world.spawnX * TILE_SIZED, - world.spawnY * TILE_SIZED - ) + actorGamer.setPosition(world.spawnPoint.toVector() * TILE_SIZED) actorGamer.backupPlayerProps(isMultiplayer) // make initial savefile diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 9c6724d8f..cfebabf48 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -150,6 +150,13 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { protected constructor() : super(RenderOrder.BEHIND, PhysProperties.IMMOBILE, null) protected constructor(renderOrder: RenderOrder, physProp: PhysProperties, id: ActorID?) : super(renderOrder, physProp, id) + /** + * Callend whenever the fixture was spawned successfully. + * + * @param tx bottom-centre tilewise point of the spawned fixture + * @param ty bottom-centre tilewise point of the spawned fixture + */ + open fun onSpawn(tx: Int, ty: Int) {} /** * Making the sprite: do not address the CommonResourcePool directly; just do it like this snippet: @@ -278,6 +285,8 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { actorThatInstalledThisFixture = installersUUID + onSpawn(posX0, posY0) + return true } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt index c7a2c0e84..047d5d4ae 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt @@ -1,11 +1,8 @@ package net.torvald.terrarum.modulebasegame.gameactors import net.torvald.random.XXHash64 -import net.torvald.terrarum.App +import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg -import net.torvald.terrarum.INGAME -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.WireCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TerrarumIngame @@ -111,6 +108,10 @@ class FixtureWorldPortal : Electric { } } + override fun onSpawn(tx: Int, ty: Int) { + INGAME.world.portalPoint = Point2i(tx, ty) + } + override fun reload() { super.reload()