wire debugger tooltip fix/electronic components now need floor OR wall to spawn

This commit is contained in:
minjaesong
2024-03-15 22:44:46 +09:00
parent cb756cbf3a
commit d22f421bc4
12 changed files with 46 additions and 27 deletions

View File

@@ -28,6 +28,8 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange {
@Transient open val spawnNeedsWall: Boolean = false @Transient open val spawnNeedsWall: Boolean = false
@Transient open val spawnNeedsFloor: Boolean = true @Transient open val spawnNeedsFloor: Boolean = true
// if both spawnNeedsWall and spawnNeedsFloor are true, the condition will be interpreted as OR-condition
/** Real time, in nanoseconds */ /** Real time, in nanoseconds */
@Transient var spawnRequestedTime: Long = 0L @Transient var spawnRequestedTime: Long = 0L
protected set protected set
@@ -166,22 +168,33 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange {
cannotSpawn = everyBlockboxPos.any { (x, y) -> !BlockCodex[world!!.getTileFromTerrain(x, y)].hasTag("INCONSEQUENTIAL") } cannotSpawn = everyBlockboxPos.any { (x, y) -> !BlockCodex[world!!.getTileFromTerrain(x, y)].hasTag("INCONSEQUENTIAL") }
var cannotSpawnNoWall = false
var cannotSpawnNoFloor = false
// check for walls, if spawnNeedsWall = true // check for walls, if spawnNeedsWall = true
if (spawnNeedsWall) { if (spawnNeedsWall) {
cannotSpawn = cannotSpawn or everyBlockboxPos.any { (x, y) -> !BlockCodex[world!!.getTileFromWall(x, y)].isSolid } cannotSpawnNoWall = everyBlockboxPos.any { (x, y) -> !BlockCodex[world!!.getTileFromWall(x, y)].isSolid }
} }
// check for floors, if spawnNeedsFloor == true // check for floors, if spawnNeedsFloor == true
if (spawnNeedsFloor) { if (spawnNeedsFloor) {
val y = posY + blockBox.height val y = posY + blockBox.height
val xs = posX until posX + blockBox.width val xs = posX until posX + blockBox.width
cannotSpawn = cannotSpawn or xs.any { x -> cannotSpawnNoFloor = xs.any { x ->
world!!.getTileFromTerrain(x, y).let { world!!.getTileFromTerrain(x, y).let {
!canSpawnOnThisFloor(it) !canSpawnOnThisFloor(it)
} }
} }
} }
if (spawnNeedsWall && spawnNeedsFloor)
cannotSpawn = cannotSpawn or (cannotSpawnNoWall && cannotSpawnNoFloor)
else if (spawnNeedsFloor)
cannotSpawn = cannotSpawn or cannotSpawnNoFloor
else if (spawnNeedsWall)
cannotSpawn = cannotSpawn or cannotSpawnNoWall
return !cannotSpawn return !cannotSpawn
} }

View File

@@ -14,8 +14,8 @@ import org.dyn4j.geometry.Vector2
*/ */
class FixtureLogicSignalAdder : Electric, Reorientable { class FixtureLogicSignalAdder : Electric, Reorientable {
@Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 2, 2), BlockBox(BlockBox.NO_COLLISION, 2, 2),

View File

@@ -34,8 +34,8 @@ interface Reorientable {
*/ */
class FixtureLogicSignalBlocker : Electric, Reorientable { class FixtureLogicSignalBlocker : Electric, Reorientable {
@Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 2, 2), BlockBox(BlockBox.NO_COLLISION, 2, 2),

View File

@@ -13,7 +13,8 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
*/ */
class FixtureLogicSignalBulb : Electric { class FixtureLogicSignalBulb : Electric {
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 1, 1), BlockBox(BlockBox.NO_COLLISION, 1, 1),

View File

@@ -14,7 +14,8 @@ import org.dyn4j.geometry.Vector2
*/ */
class FixtureLogicSignalEmitter : Electric { class FixtureLogicSignalEmitter : Electric {
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 1, 1), BlockBox(BlockBox.NO_COLLISION, 1, 1),

View File

@@ -16,8 +16,8 @@ import org.dyn4j.geometry.Vector2
*/ */
class FixtureLogicSignalLatch : Electric, Reorientable { class FixtureLogicSignalLatch : Electric, Reorientable {
@Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 2, 3), BlockBox(BlockBox.NO_COLLISION, 2, 3),

View File

@@ -16,8 +16,8 @@ import org.dyn4j.geometry.Vector2
class FixtureLogicSignalRepeaterHorz : Electric, Reorientable { class FixtureLogicSignalRepeaterHorz : Electric, Reorientable {
@Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 2, 1), BlockBox(BlockBox.NO_COLLISION, 2, 1),

View File

@@ -14,7 +14,8 @@ import org.dyn4j.geometry.Vector2
*/ */
class FixtureLogicSignalSwitchManual : Electric { class FixtureLogicSignalSwitchManual : Electric {
@Transient override val spawnNeedsFloor = false @Transient override val spawnNeedsFloor = true
@Transient override val spawnNeedsWall = true
constructor() : super( constructor() : super(
BlockBox(BlockBox.NO_COLLISION, 1, 1), BlockBox(BlockBox.NO_COLLISION, 1, 1),

View File

@@ -9,9 +9,12 @@ import net.torvald.terrarum.gameactors.BlockMarkerActor
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes
class WireGraphDebugger(originalID: ItemID) : GameItem(originalID) { class WireGraphDebugger(originalID: ItemID) : GameItem(originalID) {
@Transient private val tooltipHash = System.nanoTime()
override var baseToolSize: Double? = PickaxeCore.BASE_MASS_AND_SIZE override var baseToolSize: Double? = PickaxeCore.BASE_MASS_AND_SIZE
override var inventoryCategory = Category.TOOL override var inventoryCategory = Category.TOOL
override val canBeDynamic = false override val canBeDynamic = false
@@ -62,9 +65,11 @@ class WireGraphDebugger(originalID: ItemID) : GameItem(originalID) {
} }
if (sb.isNotEmpty()) { if (sb.isNotEmpty()) {
UIItemInventoryCellCommonRes.tooltipShowing[tooltipHash] = true
(Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(sb.toString()) (Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(sb.toString())
} }
else { else {
UIItemInventoryCellCommonRes.tooltipShowing[tooltipHash] = false
(Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(null) (Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(null)
} }
} }
@@ -73,5 +78,6 @@ class WireGraphDebugger(originalID: ItemID) : GameItem(originalID) {
(Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "" (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = ""
(Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(null) (Terrarum.ingame!! as TerrarumIngame).setTooltipMessage(null)
blockMarker.isVisible = false blockMarker.isVisible = false
UIItemInventoryCellCommonRes.tooltipShowing.remove(tooltipHash)
} }
} }

View File

@@ -1,7 +1,6 @@
package net.torvald.terrarum.modulebasegame.ui package net.torvald.terrarum.modulebasegame.ui
import com.badlogic.gdx.Gdx import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
@@ -39,7 +38,7 @@ abstract class UIItemInventoryCellBase(
abstract override fun update(delta: Float) abstract override fun update(delta: Float)
abstract override fun render(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) abstract override fun render(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera)
protected val hash = System.nanoTime() protected val tooltipHash = System.nanoTime()
/** Custom highlight rule to highlight tihs button to primary accent colour (blue by default). /** Custom highlight rule to highlight tihs button to primary accent colour (blue by default).
* Set to `null` to use default rule: * Set to `null` to use default rule:

View File

@@ -132,7 +132,7 @@ class UIItemInventoryElemSimple(
// set tooltip accordingly // set tooltip accordingly
if (tooltipShowing[hash] != true && mouseUp) { if (tooltipShowing[tooltipHash] != true && mouseUp) {
// printdbg(this, "calling INGAME.setTooltipMessage by $hash") // printdbg(this, "calling INGAME.setTooltipMessage by $hash")
val grey = App.fontGame.toColorCode(11, 11, 11) val grey = App.fontGame.toColorCode(11, 11, 11)
@@ -145,7 +145,7 @@ class UIItemInventoryElemSimple(
INGAME.setTooltipMessage(finalStr) INGAME.setTooltipMessage(finalStr)
tooltipShowing[hash] = true tooltipShowing[tooltipHash] = true
// printdbg(this, tooltipShowing.entries) // printdbg(this, tooltipShowing.entries)
} }
} }
@@ -160,7 +160,7 @@ class UIItemInventoryElemSimple(
} }
if (item == null || !mouseUp) { if (item == null || !mouseUp) {
tooltipShowing[hash] = false tooltipShowing[tooltipHash] = false
} }
// see IFs above? // see IFs above?
@@ -169,10 +169,10 @@ class UIItemInventoryElemSimple(
} }
override fun dispose() { override fun dispose() {
tooltipShowing.remove(hash) tooltipShowing.remove(tooltipHash)
} }
override fun hide() { override fun hide() {
tooltipShowing.remove(hash) tooltipShowing.remove(tooltipHash)
} }
} }

View File

@@ -7,8 +7,6 @@ import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme
@@ -164,7 +162,7 @@ class UIItemInventoryElemWide(
// set tooltip accordingly // set tooltip accordingly
if (tooltipShowing[hash] != true && item != null && mouseUp) { if (tooltipShowing[tooltipHash] != true && item != null && mouseUp) {
// printdbg(this, "calling INGAME.setTooltipMessage by $hash") // printdbg(this, "calling INGAME.setTooltipMessage by $hash")
val grey = App.fontGame.toColorCode(11, 11, 11) val grey = App.fontGame.toColorCode(11, 11, 11)
@@ -177,13 +175,13 @@ class UIItemInventoryElemWide(
INGAME.setTooltipMessage(finalStr) INGAME.setTooltipMessage(finalStr)
tooltipShowing[hash] = true tooltipShowing[tooltipHash] = true
// printdbg(this, tooltipShowing.entries) // printdbg(this, tooltipShowing.entries)
} }
} }
if (item == null || !mouseUp) { if (item == null || !mouseUp) {
tooltipShowing[hash] = false tooltipShowing[tooltipHash] = false
} }
// see IFs above? // see IFs above?
@@ -191,10 +189,10 @@ class UIItemInventoryElemWide(
} }
override fun dispose() { override fun dispose() {
tooltipShowing.remove(hash) tooltipShowing.remove(tooltipHash)
} }
override fun hide() { override fun hide() {
tooltipShowing.remove(hash) tooltipShowing.remove(tooltipHash)
} }
} }