diff --git a/src/net/torvald/terrarum/audio/audiobank/MusicContainer.kt b/src/net/torvald/terrarum/audio/audiobank/MusicContainer.kt index c17a95f08..3ff4301b4 100644 --- a/src/net/torvald/terrarum/audio/audiobank/MusicContainer.kt +++ b/src/net/torvald/terrarum/audio/audiobank/MusicContainer.kt @@ -140,7 +140,7 @@ class MusicContainer( gdxMusic.forceInvoke("read", arrayOf(readBuf))!!.toLong() // its return value will be useless for looping=true val read = minOf(readSize.toLong(), (totalSizeInBytes - readCount)) - UnsafeHelper.memcpyRaw(readBuf, UnsafeHelper.getArrayOffset(readBuf), null, soundBuf!!.ptr + readCount, read) + UnsafeHelper.memcpyFromArrToPtr(readBuf, 0, soundBuf!!.ptr + readCount, read) readCount += read diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index e956a7319..61ea48d1a 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -401,6 +401,22 @@ open class ActorWithBody : Actor { private var stairPenaltyCounter = 0 // unit: update count. 1 second is roughly 64 updates. private var stairPenaltyVector = 1.0 + + /** + * 0: None + * 1: 1x1 + * 2: 3x3 + * 3: 5x5 + * ... + * n: (2n-1)x(2n-1) + */ + @Transient val chunkAnchorRange: Int = 0 + + /** + * Should nearby chunks be kept in the chunk pool even if the player is far away. + */ + @Transient var chunkAnchoring = false + init { // some initialiser goes here... } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureAlloyingFurnace.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureAlloyingFurnace.kt index 9fb1cb1fd..c3f3f5562 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureAlloyingFurnace.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureAlloyingFurnace.kt @@ -378,6 +378,8 @@ class FixtureAlloyingFurnace : FixtureBase { } } + inOperation = (temperature > 0.001f) + chunkAnchoring = inOperation // update immediately instead of waiting for the next update } @Transient private val filterIndex = 0 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 7977eccd2..3cd3db7de 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -47,6 +47,8 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { @Transient var mainUI: UICanvas? = null var inventory: FixtureInventory? = null + @Transient var inOperation = false + // @Transient var mainUIopenFun: ((UICanvas) -> Unit)? = null internal var actorThatInstalledThisFixture: UUID? = null @@ -424,6 +426,7 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { */ override fun updateImpl(delta: Float) { super.updateImpl(delta) + chunkAnchoring = inOperation } /** diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt index a5ae350f1..7888bd76b 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt @@ -101,6 +101,7 @@ class FixtureJukebox : Electric, PlaysMusic { get() = discInventory.isEmpty() override fun updateImpl(delta: Float) { + inOperation = musicIsPlaying super.updateImpl(delta) } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureMusicalTurntable.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureMusicalTurntable.kt index 47f2c8416..ef886ed76 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureMusicalTurntable.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureMusicalTurntable.kt @@ -90,6 +90,7 @@ class FixtureMusicalTurntable : Electric, PlaysMusic { } override fun updateImpl(delta: Float) { + inOperation = musicIsPlaying super.updateImpl(delta) } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt index d58689922..489780218 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt @@ -365,6 +365,8 @@ class FixtureSmelterBasic : FixtureBase { } } + inOperation = (temperature > 0.001f) + chunkAnchoring = inOperation // update immediately instead of waiting for the next update } @Transient private val filterIndex = 0