diff --git a/src/net/torvald/terrarum/gameactors/WireActor.kt b/src/net/torvald/terrarum/gameactors/WireActor.kt index 8a14f8bdf..187539129 100644 --- a/src/net/torvald/terrarum/gameactors/WireActor.kt +++ b/src/net/torvald/terrarum/gameactors/WireActor.kt @@ -38,7 +38,7 @@ class WireActor : ActorWithBody { /** * @param itemID must start with "wire@" */ - fun setWire(itemID: ItemID, worldX: Int, worldY: Int) { + fun setWire(itemID: ItemID, worldX: Int, worldY: Int, cnx: Int) { setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0) if (wireID != itemID) { @@ -57,15 +57,7 @@ class WireActor : ActorWithBody { setPosition((worldX + 0.5) * TILE_SIZE, (worldY + 1.0) * TILE_SIZE - 1.0) // what the fuck? (sprite as SheetSpriteAnimation).currentRow = 0 - - val nearbyTiles = getNearbyTilesPos(worldX, worldY).map { world!!.getAllWiresFrom(it.x, it.y) } - var ret = 0 - for (i in 0..3) { - if (nearbyTiles[i]?.contains(itemID) == true) { - ret = ret or (1 shl i) // add 1, 2, 4, 8 for i = 0, 1, 2, 3 - } - } - (sprite as SheetSpriteAnimation).currentFrame = ret + (sprite as SheetSpriteAnimation).currentFrame = cnx } private fun getNearbyTilesPos(x: Int, y: Int): Array { diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 695da11d8..1506f6b96 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -8,7 +8,6 @@ import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.Fluid import net.torvald.terrarum.gameactors.ActorID -import net.torvald.terrarum.gameactors.WireActor import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.itemproperties.ItemRemapTable import net.torvald.terrarum.itemproperties.ItemTable @@ -355,7 +354,7 @@ open class GameWorld() : Disposable { Terrarum.ingame?.queueWireChangedEvent(tile, true, x, y) Terrarum.ingame?.modified(LandUtil.LAYER_WIRE, x, y) } - + /* // figure out wiring graphs val matchingNeighbours = WireActor.WIRE_NEARBY.mapIndexed { index, (tx, ty) -> (getAllWiresFrom(x + tx, y + ty)?.contains(tile) == true).toInt() shl index @@ -369,7 +368,7 @@ open class GameWorld() : Disposable { } wiringGraph[blockAddr]!!.remove(tile) - wirings[blockAddr]!!.ws.remove(tile) + wirings[blockAddr]!!.ws.remove(tile)*/ } } @@ -470,14 +469,14 @@ open class GameWorld() : Disposable { } } - fun getAllWiresFrom(x: Int, y: Int): SortedArrayList? { + fun getAllWiresFrom(x: Int, y: Int): Pair?, WiringGraphMap?> { val (x, y) = coerceXY(x, y) val blockAddr = LandUtil.getBlockAddr(this, x, y) return getAllWiresFrom(blockAddr) } - fun getAllWiresFrom(blockAddr: BlockAddress): SortedArrayList? { - return wirings[blockAddr]?.ws + fun getAllWiresFrom(blockAddr: BlockAddress): Pair?, WiringGraphMap?> { + return wirings[blockAddr]?.ws to wiringGraph[blockAddr] } fun getTileFrom(mode: Int, x: Int, y: Int): ItemID { diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 4969c2c02..1ff651b57 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -903,10 +903,13 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { for (y in for_y_start..for_y_end) { for (x in for_x_start..for_x_end) { if (wiringCounter >= maxRenderableWires) break - world.getAllWiresFrom(x, y)?.forEach { + + val (wires, nodes) = world.getAllWiresFrom(x, y) + + wires?.forEach { val wireActor = wireActorsContainer[wiringCounter] - wireActor.setWire(it, x, y) + wireActor.setWire(it, x, y, nodes!![it]!!.cnx) if (WireCodex[it].renderClass == selectedWireRenderClass || selectedWireRenderClass == "wire_render_all") { wireActor.renderOrder = Actor.RenderOrder.OVERLAY diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt index abc61b7dc..c5c3e0965 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt @@ -134,8 +134,8 @@ object BlockBase { val thisTileWireCnx = ingame.world.getWireGraphOf(mouseTileX, mouseTileY, itemID) val oldTileWireCnx = ingame.world.getWireGraphOf(oldTileX, oldTileY, itemID) - val thisTileOccupied = thisTileWires?.searchFor(itemID) != null - val oldTileOccupied = oldTileWires?.searchFor(itemID) != null + val thisTileOccupied = thisTileWires.first?.searchFor(itemID) != null + val oldTileOccupied = oldTileWires.first?.searchFor(itemID) != null val connectedEachOther = connectedEachOther(thisTileWireCnx, oldTileWireCnx) val thisTileWasDraggedOn = initialMouseDownTileX != mouseTileX || initialMouseDownTileY != mouseTileY diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt index d6761c78e..b509c1f95 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt @@ -39,9 +39,11 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) { override fun startPrimaryUse(actor: ActorWithBody, delta: Float) = mouseInInteractableRange(actor) { val ingame = Terrarum.ingame!! as TerrarumIngame val mouseTile = Point2i(Terrarum.mouseTileX, Terrarum.mouseTileY) - val wires = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y)?.cloneToList() - wires?.forEach { + val wireNet = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y) + val wireItems = wireNet.first?.cloneToList() + + wireItems?.forEach { ingame.world.removeTileWire(mouseTile.x, mouseTile.y, it, false) ingame.queueActorAddition(DroppedItem(it, mouseTile.x * TILE_SIZED, mouseTile.y * TILE_SIZED)) } ?: return@mouseInInteractableRange -1L diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index b173aa6fa..d62829f43 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -205,7 +205,7 @@ class BasicDebugInfoWindow : UICanvas() { val tileNum = it.getTileFromTerrain(mouseTileX, mouseTileY) val wires = it.getAllWiresFrom(mouseTileX, mouseTileY) val fluid = it.getFluid(mouseTileX, mouseTileY) - val wireCount = wires?.size?.toString() ?: "no" + val wireCount = wires.first?.size?.toString() ?: "no" App.fontSmallNumbers.draw(batch, "$ccO$TERRAIN$ccG$tileNum", gap + 7f*(tileCursX + 3), line(tileCursY)) App.fontSmallNumbers.draw(batch, "$ccO$WALL$ccG$wallNum", gap + 7f*(tileCursX + 3), line(tileCursY + 1))