From 62f0fd7c68d9da3233f0d3aa3ac23fd4ba790a49 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 11 Aug 2023 21:05:47 +0900 Subject: [PATCH] hiding the phys artefact by forcefully holding down-key for long enough --- .../terrarum/gameactors/ActorWithBody.kt | 7 +++--- .../gameactors/ActorHumanoid.kt | 23 +++++++++---------- .../terrarum/ui/BasicDebugInfoWindow.kt | 2 +- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 57b4621f0..57ba6dc49 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -4,7 +4,6 @@ import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion -import com.jme3.math.FastMath import net.torvald.spriteanimation.SheetSpriteAnimation import net.torvald.spriteanimation.SpriteAnimation import net.torvald.terrarum.* @@ -795,7 +794,7 @@ open class ActorWithBody : Actor { // ignore MOST of the codes below (it might be possible to recycle the structure??) // and the idea above has not yet implemented, and may never will. --Torvald, 2018-12-30 - val downDown = if (this is ActorHumanoid) this.isDownDown else false + val downDown = if (this is ActorHumanoid) this.downButtonHeld > 0 else false val sixteenStep = (0..ccdSteps).map { hitbox.clone().translate(vectorSum * (it / ccdSteps.toDouble())) } var collidingStep: Int? = null @@ -1092,7 +1091,7 @@ open class ActorWithBody : Actor { // grounded = true // another platform-related hacks - if (this is ActorHumanoid) downDownVirtually = false +// if (this is ActorHumanoid) downButtonHeld = false } }// end of collision not detected @@ -1402,7 +1401,7 @@ open class ActorWithBody : Actor { // platforms, moving downward AND not "going down" (this is ActorHumanoid && BlockCodex[tile].isPlatform && externalV.y + (controllerV?.y ?: 0.0) >= 0.0 && - !this.isDownDown && this.axisY <= 0f) || + this.downButtonHeld == 0 && this.axisY <= 0f) || // platforms, moving downward, for the case of NOT ActorHumanoid (this !is ActorHumanoid && BlockCodex[tile].isPlatform && externalV.y + (controllerV?.y ?: 0.0) >= 0.0) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index e347e2a24..885b30773 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -12,7 +12,6 @@ import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.faction.Faction import net.torvald.terrarum.gameitems.GameItem -import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.realestate.LandUtil import org.dyn4j.geometry.Vector2 @@ -116,6 +115,8 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L @Transient const val SPRITE_ROW_IDLE = 0 @Transient const val SPRITE_ROW_WALK = 1 + + @Transient const val downDownMinLengthBase = 12 } //////////////////////////////// @@ -173,7 +174,7 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L var isUpDown = false; protected set var isDownDown = false; protected set - var downDownVirtually = false; internal set + var downButtonHeld = 0; internal set var isLeftDown = false; protected set var isRightDown = false; protected set var isJumpDown = false; protected set @@ -221,7 +222,7 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L if (isNoClip) { //grounded = true // platformToIgnore = null - downDownVirtually = false + downButtonHeld = 0 } // reset control box of AI @@ -248,6 +249,9 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L } } + private val downDownMinLength: Int + get() = (downDownMinLengthBase * gravitation.y.abs() / 9.8).ceilToInt() + private fun updateGamerControlBox() { if (isGamer) { isUpDown = Gdx.input.isKeyPressed(App.getConfigInt("control_key_up")) @@ -288,16 +292,11 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L } // platform-related hacks - // allow latching down downDownVirtually only when standing on a platform AND not jumping upwards - val occupyingTileHasPlatform = bodyTiles.filterNotNull().any { it.isPlatform } - val feetTileHasPlatform = feetTiles.filterNotNull().any { it.isPlatform } - val feetTileIsAllPlatform = feetTiles.filterNotNull().all { it.isPlatform } - if (isDownDown && feetTileIsAllPlatform && (controllerV?.y ?: 0.0) >= 0.0) {// || -// occupyingTileHasPlatform && !feetTileHasPlatform) { // FIXME commenting this out enables platform-ladder but falldown gets slowed down if the body passes thru the platform but I think this behav might be beneficial for player? -// downDownVirtually = true + if (isDownDown || downButtonHeld in 1 until downDownMinLength) { + downButtonHeld += 1 } - if (downDownVirtually && !occupyingTileHasPlatform && !feetTileIsAllPlatform) { -// downDownVirtually = false + else { + downButtonHeld = 0 } // TODO just disable "snap to ground" on collision solver if {player's body overlaps with the platform/downDownVirtually}? // the point is: disable snap (or don't consider offending tiles as solid) for certain Y-pos only, tiles on Y+1 are still solid diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index 2b0c3aff3..ba8e1a8d3 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -165,7 +165,7 @@ class BasicDebugInfoWindow : UICanvas() { App.fontSmallNumbers.draw(batch, "${if (player.jumping) "$ccG" else "$ccK"}JM", gap + 7f*(jX + 8), line(jY)) App.fontSmallNumbers.draw(batch, "${if (player.isJumpDown) "$ccG" else "$ccK"}KY", gap + 7f*(jX + 8), line(jY+1)) - App.fontSmallNumbers.draw(batch, "${if (player.downDownVirtually) "$ccG" else "$ccK"}$ARROW_DOWN", gap + 7f*(jX + 11), line(jY+1)) + App.fontSmallNumbers.draw(batch, "${if (player.downButtonHeld > 0) "$ccG" else "$ccK"}$ARROW_DOWN", gap + 7f*(jX + 11), line(jY+1)) App.fontSmallNumbers.draw(batch, "$WIDTH$ccG${player.hitbox.width.toString().padEnd(5).substring(0,5).trim()}$ccY$HEIGHT$ccG${player.hitbox.height.toString().padEnd(5).substring(0,5)}", gap + 7f*(jX + 13), line(jY)) App.fontSmallNumbers.draw(batch, "$MASS$ccG${player.mass.toString().padEnd(8).substring(0,8)}", gap + 7f*(jX + 13), line(jY+1))