diff --git a/assets/mods/basegame/blocks/4091.tga b/assets/mods/basegame/blocks/4091.tga index beac83a10..47c340b8c 100644 --- a/assets/mods/basegame/blocks/4091.tga +++ b/assets/mods/basegame/blocks/4091.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66236ef85ac5e1a190df935348379be2c9f0e5a975ad7be6dc7f42313eb195b8 +oid sha256:6d2896a842f312d7897d1f45ef495869344029fd02b53e6b28e8db335b33b32b size 1042 diff --git a/assets/mods/basegame/blocks/4092.tga b/assets/mods/basegame/blocks/4092.tga index f64cb62f1..9e98012ba 100644 --- a/assets/mods/basegame/blocks/4092.tga +++ b/assets/mods/basegame/blocks/4092.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ba8564b6cf1176b94d86f5403612d74c46ad4d62dd230afca661b1bcdb5d868 +oid sha256:f9e9fd8c84980470900d75f6b3f3be957d42d26069edf42114e6fab4a5922204 size 1042 diff --git a/assets/mods/basegame/blocks/4093.tga b/assets/mods/basegame/blocks/4093.tga index 1081094a3..58700a6cb 100644 --- a/assets/mods/basegame/blocks/4093.tga +++ b/assets/mods/basegame/blocks/4093.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c8423284b9aad5290803c0b464649d9951bbe80fb40ddf0f08f0d5449a9c1a2 +oid sha256:32ae2fcd21aa70e21cffd90da42d16bf736e353e6c3b748654acf7142801208b size 1042 diff --git a/assets/mods/basegame/blocks/4094.tga b/assets/mods/basegame/blocks/4094.tga index b2a6cf619..70651c09f 100644 --- a/assets/mods/basegame/blocks/4094.tga +++ b/assets/mods/basegame/blocks/4094.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fe2eef5c302f2314c26e663ba111d3dbe187f60150259c1d58fd473c5d8929f +oid sha256:290d957e326bb2d3419a2429918b8d652cca3ab42a84101b616c81c96e6a1cd6 size 1042 diff --git a/assets/mods/basegame/blocks/4095.tga b/assets/mods/basegame/blocks/4095.tga index 150d3f7ea..8a2ae4bd4 100644 --- a/assets/mods/basegame/blocks/4095.tga +++ b/assets/mods/basegame/blocks/4095.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54ebfa1b859e3c1a813089fc96fb52f8594c28b6c66b3b308a8a9259453e4400 +oid sha256:d4daf65e1ada4792f23ee8da85356a1e628d434213a7eef1aeacd6b6e4444950 size 1042 diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 612593f9e..127a79d0e 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -32,8 +32,8 @@ id;classname;tags 31;net.torvald.terrarum.modulebasegame.gameitems.ItemGunpowder;POWDER,EXPLOSIVE 32;net.torvald.terrarum.modulebasegame.gameitems.ItemCherryBomb;EXPLOSIVE,THROWABLE 33;net.torvald.terrarum.modulebasegame.gameitems.ItemTorch;FIXTURE,LIGHT -34;net.torvald.terrarum.modulebasegame.gameitems.ItemSignalSwitchManual;FIXTURE,SIGNAL -35;net.torvald.terrarum.modulebasegame.gameitems.ItemSignalBulb;FIXTURE,SIGNAL +34;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSwitchManual;FIXTURE,SIGNAL +35;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBulb;FIXTURE,SIGNAL 36;net.torvald.terrarum.modulebasegame.gameitems.ItemWireRollingMill;FIXTURE,CRAFTING 37;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestEbony;FIXTURE,STORAGE 38;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestBirch;FIXTURE,STORAGE @@ -42,8 +42,8 @@ id;classname;tags 41;net.torvald.terrarum.modulebasegame.gameitems.ItemTableEbony;FIXTURE,SURFACE 42;net.torvald.terrarum.modulebasegame.gameitems.ItemTableBirch;FIXTURE,SURFACE 43;net.torvald.terrarum.modulebasegame.gameitems.ItemTableRosewood;FIXTURE,SURFACE -44;net.torvald.terrarum.modulebasegame.gameitems.ItemSignalBlocker;FIXTURE,SIGNAL -45;net.torvald.terrarum.modulebasegame.gameitems.ItemSignalLatch;FIXTURE,SIGNAL +44;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBlocker;FIXTURE,SIGNAL +45;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalLatch;FIXTURE,SIGNAL # ingots 26;net.torvald.terrarum.modulebasegame.gameitems.IngotSteel;INGOT diff --git a/assets/mods/basegame/wires/8192.tga b/assets/mods/basegame/wires/8192.tga index d152e8da4..61bc8b1d8 100644 --- a/assets/mods/basegame/wires/8192.tga +++ b/assets/mods/basegame/wires/8192.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76a05e935b8c83ed7e8ca59d9d039c6c8efd8613ce480230e68953f3107ae7a3 +oid sha256:ae3d03d8cb7f23169965a7703b6fd1d632dee96289fe3dd6daa4734546d7e4de size 32786 diff --git a/assets/mods/basegame/wires/8193.tga b/assets/mods/basegame/wires/8193.tga index d1fc9be86..1ade45809 100644 --- a/assets/mods/basegame/wires/8193.tga +++ b/assets/mods/basegame/wires/8193.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ca87f679cefa6dabadd6a6744fe930b2051423ff75c2d1405f400aea5449939 +oid sha256:fb93a18e9926ce70c46d21321614cb954f2165c080a0af9cc9f09112f6f5484e size 32786 diff --git a/assets/mods/basegame/wires/8194.tga b/assets/mods/basegame/wires/8194.tga index bd6754bcd..fe0c59244 100644 --- a/assets/mods/basegame/wires/8194.tga +++ b/assets/mods/basegame/wires/8194.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:183b3f1ce23b7fc57bb0820c2981978ce94d144f0343a05a044a81761b8ab276 +oid sha256:f7aaed6bb9ca0d13574126ef009563f60864c6b0a8e2276dce39a757cce765a2 size 32786 diff --git a/assets/mods/basegame/wires/ports.tga b/assets/mods/basegame/wires/ports.tga index fc561a72c..d851eb86d 100644 --- a/assets/mods/basegame/wires/ports.tga +++ b/assets/mods/basegame/wires/ports.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36d5ac85849d7f6daafb976dcc6172ba072f21e57146cd28bafaceb20c549e22 -size 16402 +oid sha256:de40e6eb9a9f47a96a20134d798c3c44f03c85b6c332e47448c99265f432dbc8 +size 4114 diff --git a/assets/mods/basegame/wires/wireports.csv b/assets/mods/basegame/wires/wireports.csv new file mode 100644 index 000000000..e1d8103f4 --- /dev/null +++ b/assets/mods/basegame/wires/wireports.csv @@ -0,0 +1,5 @@ +"accepts";"fileModule";"file";"xpos";"ypos" +"digital_bit";"basegame";"wires/ports.tga";0;0 +"power_low";"basegame";"wires/ports.tga";1;0 +"power_high";"basegame";"wires/ports.tga";2;0 +"10base2";"basegame";"wires/ports.tga";2;0 \ No newline at end of file diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 3c07d78ba..5b106b463 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -565,6 +565,7 @@ object ModMgr { Terrarum.wireCodex.fromModule(module, "wires/") { wire -> } + Terrarum.wireCodex.portsFromModule(module, "wires/") } private fun makeNewItemObj(tile: BlockProp, isWall: Boolean) = object : GameItem( diff --git a/src/net/torvald/terrarum/ReferencingRanges.kt b/src/net/torvald/terrarum/ReferencingRanges.kt index 475daa4e0..dbf67d9d0 100644 --- a/src/net/torvald/terrarum/ReferencingRanges.kt +++ b/src/net/torvald/terrarum/ReferencingRanges.kt @@ -12,13 +12,13 @@ object ReferencingRanges { val ITEMS_DYNAMIC = 0x10_0000..0x0FFF_FFFF // 267 386 880 pseudo-items val ACTORS = 0x1000_0000..0x7FFE_FFFF - // there is a gap between 0x7FFF_0000..0x7FFF_BFFF + // there is a gap between 0x7FFF_0000..0x7FFF_7FFF // IDs doesn't effect the render order at all, but we're kinda enforcing these ID ranging. // However, these two wire-related actor will break the rule. But as we want them to render on top of others // in the same render orders, we're giveng them relatively high IDs for them. - val ACTORS_WIRES = 0x7FFF_C000..0x7FFF_EFFF // Rendered front--wires - val ACTORS_WIRES_HELPER = 0x7FFF_F000..0x7FFF_FEFF // Rendered overlay--wiring port icons and logic gates + val ACTORS_WIRE_PORTS = 0x7FFF_8000..0x7FFF_BEFF // Rendered front--wires + val ACTORS_WIRES = 0x7FFF_BF00..0x7FFF_FEFF // Rendered overlay--wiring port icons val ACTORS_INTERNAL_USE = 0x7FFF_FF00..0x7FFF_FFFF // Actor ID 0x7FFF_FFFF is pre-assigned to the block cursor! diff --git a/src/net/torvald/terrarum/blockproperties/WireCodex.kt b/src/net/torvald/terrarum/blockproperties/WireCodex.kt index 076bd660d..2458c53e0 100644 --- a/src/net/torvald/terrarum/blockproperties/WireCodex.kt +++ b/src/net/torvald/terrarum/blockproperties/WireCodex.kt @@ -1,10 +1,12 @@ package net.torvald.terrarum.blockproperties +import com.badlogic.gdx.files.FileHandle import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.ItemID +import net.torvald.terrarum.modulebasegame.gameactors.WireEmissionType import net.torvald.terrarum.utils.CSVFetcher import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.apache.commons.csv.CSVRecord @@ -17,9 +19,10 @@ import java.io.IOException class WireCodex { @Transient val wireProps = HashMap() - @Transient private val nullProp = WireProp() + @Transient val wirePorts = HashMap>() + fun clear() { wireProps.clear() } @@ -81,6 +84,45 @@ class WireCodex { } + fun portsFromModule(module: String, path: String) { + printdbg(this, "Building wire ports table for module $module") + try { + registerPorts(module, path, CSVFetcher.readFromModule(module, path + "wireports.csv")) + } + catch (e: IOException) { e.printStackTrace() } + } + + private fun registerPorts(module: String, path: String, records: List) { + val spriteSheetFiles = ArrayList>() + val tempRecords = HashMap>() + + records.forEach { + val type = it.get("accepts") + val fileModule = it.get("fileModule") + val filePath = it.get("file") + val x = it.get("xpos").toInt() + val y = it.get("ypos").toInt() + + val file = ModMgr.getGdxFile(fileModule, filePath) + val fileID = "wireport:$fileModule.${filePath.replace('\\','/')}" + + spriteSheetFiles.add(file to fileID) + + tempRecords[type] = Triple(fileID, x, y) + } + + spriteSheetFiles.forEach { (file, id) -> + CommonResourcePool.addToLoadingList(id) { + TextureRegionPack(file, TILE_SIZE, TILE_SIZE) + } + } + CommonResourcePool.loadAll() + + tempRecords.forEach { type, (fileID, x, y) -> + wirePorts[type] = Triple(CommonResourcePool.getAsTextureRegionPack(fileID), x, y) + } + } + fun getAll() = wireProps.values /*fun get(index: Int): WireProp { @@ -159,4 +201,8 @@ class WireCodex { fun getAllWiresThatAccepts(accept: String): List> { return wireProps.filter { it.value.accepts == accept }.toList() } + + fun getWirePortSpritesheet(emissionType: WireEmissionType): Triple? { + return wirePorts[emissionType] + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/WireActor.kt b/src/net/torvald/terrarum/gameactors/WireActor.kt index 8d875db8f..8ba0efbbe 100644 --- a/src/net/torvald/terrarum/gameactors/WireActor.kt +++ b/src/net/torvald/terrarum/gameactors/WireActor.kt @@ -1,10 +1,15 @@ package net.torvald.terrarum.gameactors +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.spriteanimation.SheetSpriteAnimation import net.torvald.terrarum.* +import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.gameitems.ItemID +import net.torvald.terrarum.modulebasegame.TerrarumIngame +import net.torvald.terrarum.modulebasegame.gameactors.WireEmissionType +import net.torvald.terrarum.ui.Toolkit /** * Created by minjaesong on 2024-03-05. @@ -18,15 +23,6 @@ interface InternalActor { */ class WireActor : ActorWithBody, NoSerialise, InternalActor { - companion object { - val WIRE_NEARBY = arrayOf( - (+1 to 0), // tileR - (0 to +1), // tileB - (-1 to 0), // tileL - (0 to -1) // tileT - ) - } - private constructor() constructor(id: ActorID) : super(RenderOrder.OVERLAY, PhysProperties.IMMOBILE(), id) @@ -39,7 +35,6 @@ class WireActor : ActorWithBody, NoSerialise, InternalActor { private var worldX = 0 private var worldY = 0 - /** * @param itemID must start with "wire@" */ @@ -65,34 +60,77 @@ class WireActor : ActorWithBody, NoSerialise, InternalActor { (sprite as SheetSpriteAnimation).currentFrame = cnx } - private fun getNearbyTilesPos(x: Int, y: Int): Array { - return arrayOf( - Point2i(x + 1, y), - Point2i(x, y + 1), - Point2i(x - 1, y), - Point2i(x, y - 1) - ) + override fun updateImpl(delta: Float) { + } + + override fun drawBody(frameDelta: Float, batch: SpriteBatch) { + if (isVisible && sprite != null) { + (sprite as SheetSpriteAnimation).currentRow = (world?.getWireEmitStateOf(worldX, worldY, wireID)?.isNotZero == true).toInt() + BlendMode.resolve(drawMode, batch) + drawSpriteInGoodPosition(frameDelta, sprite!!, batch) + } + } +} + +/** + * Created by minjaesong on 2024-03-07. + */ +class WirePortActor : ActorWithBody, NoSerialise, InternalActor { + + + private constructor() + + constructor(id: ActorID) : super(RenderOrder.OVERLAY, PhysProperties.IMMOBILE(), id) + + init { + setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0) + renderOrder = RenderOrder.OVERLAY + } + + private var portID: WireEmissionType = "" + private var worldX = 0 + private var worldY = 0 + + /** + */ + fun setPort(emissionType: WireEmissionType, worldX: Int, worldY: Int) { + setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0) + + if (portID != emissionType) { + WireCodex.getWirePortSpritesheet(emissionType)?.let { (sheet, x, y) -> + if (sprite == null) { + makeNewSprite(sheet).let { + it.delays = floatArrayOf(Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY) + it.setRowsAndFrames(1, 16) + } + } + else { + (sprite as SheetSpriteAnimation).let { + it.setSpriteImage(sheet) + } + } + + (sprite as SheetSpriteAnimation).let { + it.currentFrame = x + it.currentRow = y + } + + portID = emissionType + } + } + + + this.worldX = worldX + this.worldY = worldY + + setPosition((worldX + 0.5) * TILE_SIZE, (worldY + 1.0) * TILE_SIZE - 1.0) // what the fuck? } override fun updateImpl(delta: Float) { } override fun drawBody(frameDelta: Float, batch: SpriteBatch) { - if (isVisible && sprite != null) { - if (WireCodex[wireID].accepts == "digital_3bits") { - // "digital_3bits" must come right after three wires it bundles - val rootID = wireID.substringBefore(':') + ":" - var row = 0 - (WireCodex[wireID].numericID - 3 .. WireCodex[wireID].numericID - 1).forEachIndexed { index, it -> - val itemID = rootID + it - row = row or ((world?.getWireEmitStateOf(worldX, worldY, itemID)?.isNotZero == true).toInt() shl index) - } - (sprite as SheetSpriteAnimation).currentRow = row - } - else { - (sprite as SheetSpriteAnimation).currentRow = (world?.getWireEmitStateOf(worldX, worldY, wireID)?.isNotZero == true).toInt() - } - + if (isVisible && sprite != null && (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass.isNotBlank()) { BlendMode.resolve(drawMode, batch) drawSpriteInGoodPosition(frameDelta, sprite!!, batch) } diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 0c79f148c..e00e9e08b 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -57,7 +57,6 @@ import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.weather.WeatherMixer import net.torvald.terrarum.worlddrawer.BlocksDrawer import net.torvald.terrarum.worlddrawer.FeaturesDrawer -import net.torvald.terrarum.worlddrawer.LightmapRenderer.LIGHTMAP_OVERRENDER import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.unicode.EMDASH import net.torvald.util.CircularArray @@ -710,7 +709,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { var uiOpened = false val fixtureUnderMouse0: List = getActorsUnderMouse(Terrarum.mouseX, Terrarum.mouseY).filterIsInstance() if (fixtureUnderMouse0.size > 1) { - App.printdbgerr(this, "Multiple fixtures at world coord ${Terrarum.mouseX}, ${Terrarum.mouseY}") + App.printdbgerr(this, "Multiple fixtures at tile coord ${Terrarum.mouseX / TILE_SIZED}, ${Terrarum.mouseY / TILE_SIZED}: [${fixtureUnderMouse0.map { it.javaClass.simpleName }.joinToString()}]") } val fixtureUnderMouse = fixtureUnderMouse0.firstOrNull() @@ -956,6 +955,12 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { fillUpWiresBuffer() } } + measureDebugTime("Ingame.FillUpWirePortsView*") { + if (WORLD_UPDATE_TIMER % 2 == 0) { + val fixtures = INGAME.actorContainerActive.filterIsInstance() + fillUpWirePortsView(fixtures) + } + } oldCamX = WorldCamera.x oldPlayerX = actorNowPlaying?.hitbox?.canonicalX ?: 0.0 @@ -1227,17 +1232,22 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { } private val maxRenderableWires = ReferencingRanges.ACTORS_WIRES.last - ReferencingRanges.ACTORS_WIRES.first + 1 + private val maxRenderablePorts = ReferencingRanges.ACTORS_WIRE_PORTS.last - ReferencingRanges.ACTORS_WIRE_PORTS.first + 1 private val wireActorsContainer = Array(maxRenderableWires) { WireActor(ReferencingRanges.ACTORS_WIRES.first + it).let { forceAddActor(it) /*^let*/ it } } + private val wirePortActorsContainer = Array(maxRenderablePorts) { WirePortActor(ReferencingRanges.ACTORS_WIRE_PORTS.first + it).let { + forceAddActor(it) + /*^let*/ it + } } private fun fillUpWiresBuffer() { - val for_y_start = (WorldCamera.y.toFloat() / TILE_SIZE).floorToInt() - LIGHTMAP_OVERRENDER - val for_y_end = for_y_start + BlocksDrawer.tilesInVertical + 2*LIGHTMAP_OVERRENDER + val for_y_start = (WorldCamera.y.toFloat() / TILE_SIZE).floorToInt() - 1 + val for_y_end = for_y_start + BlocksDrawer.tilesInVertical + 2*1 - val for_x_start = (WorldCamera.x.toFloat() / TILE_SIZE).floorToInt() - LIGHTMAP_OVERRENDER - val for_x_end = for_x_start + BlocksDrawer.tilesInHorizontal + 2*LIGHTMAP_OVERRENDER + val for_x_start = (WorldCamera.x.toFloat() / TILE_SIZE).floorToInt() - 1 + val for_x_end = for_x_start + BlocksDrawer.tilesInHorizontal + 2*1 var wiringCounter = 0 for (y in for_y_start..for_y_end) { @@ -1269,9 +1279,39 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { } for (i in wiringCounter until maxRenderableWires) { - wireActorsContainer[i].isUpdate = false - wireActorsContainer[i].isVisible = false - wireActorsContainer[i].forceDormant = true + val wireActor = wireActorsContainer[i] + wireActor.isUpdate = false + wireActor.isVisible = false + wireActor.forceDormant = true + } + } + + private fun fillUpWirePortsView(fixtures: List) { + var portsCounter = 0 + + fixtures.forEach { + (it.wireSinkTypes.toList() + it.wireEmitterTypes.toList()).forEach { (boxIndex, type) -> + if (portsCounter < wirePortActorsContainer.size) { + val wireActor = wirePortActorsContainer[portsCounter] + val (wx, wy) = it.worldBlockPos!! + it.blockBoxIndexToPoint2i(boxIndex) + + wireActor.setPort(type, wx, wy) + wireActor.isUpdate = true + wireActor.isVisible = true + wireActor.forceDormant = false + + portsCounter += 1 + } + } + } + + + + for (i in portsCounter until maxRenderablePorts) { + val wireActor = wirePortActorsContainer[i] + wireActor.isUpdate = false + wireActor.isVisible = false + wireActor.forceDormant = true } } @@ -1641,8 +1681,6 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { } fun pickupFixture(actor: ActorWithBody, delta: Float, mwx: Double, mwy: Double, mtx: Int, mty: Int, assignToQuickslot: Boolean = true) { - printdbg(this, "Pickup fixture fired") - val actorsUnderMouse = getActorsUnderMouse(mwx, mwy) val fixture = actorsUnderMouse.firstOrNull { diff --git a/src/net/torvald/terrarum/modulebasegame/WorldSimulator.kt b/src/net/torvald/terrarum/modulebasegame/WorldSimulator.kt index b853d18f3..8be03c765 100644 --- a/src/net/torvald/terrarum/modulebasegame/WorldSimulator.kt +++ b/src/net/torvald/terrarum/modulebasegame/WorldSimulator.kt @@ -501,7 +501,7 @@ object WorldSimulator { wiresimGetSourceBlocks().let { sources -> // signal-emitting fixtures must set emitState of its own tiles via update() sources.forEach { - it.wireEmitterTypes.forEach { bbi, wireType -> + it.wireEmitterTypes.forEach { (bbi, wireType) -> val startingPoint = it.worldBlockPos!! + it.blockBoxIndexToPoint2i(bbi) val signal = it.wireEmission[bbi] ?: Vector2(0.0, 0.0) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 27b46a2ed..9a2786374 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -73,6 +73,13 @@ open class Electric : FixtureBase { fun setWireEmissionAt(x: Int, y: Int, emission: Vector2) { wireEmission[pointToBlockBoxIndex(x, y)] = emission } fun setWireConsumptionAt(x: Int, y: Int, consumption: Vector2) { wireConsumption[pointToBlockBoxIndex(x, y)] = consumption } + fun clearStatus() { + wireSinkTypes.clear() + wireEmitterTypes.clear() + wireEmission.clear() + wireConsumption.clear() + } + // these are characteristic properties of the fixture (they have constant value) so must not be serialised @Transient val wireEmitterTypes: HashMap = HashMap() @Transient val wireSinkTypes: HashMap = HashMap() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBlocker.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBlocker.kt similarity index 98% rename from src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBlocker.kt rename to src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBlocker.kt index fd7a23a49..831aba41a 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBlocker.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBlocker.kt @@ -31,7 +31,7 @@ interface Reorientable { /** * Created by minjaesong on 2024-03-04. */ -class FixtureSignalBlocker : Electric, Reorientable { +class FixtureLogicSignalBlocker : Electric, Reorientable { @Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = false @@ -44,6 +44,7 @@ class FixtureSignalBlocker : Electric, Reorientable { override var orientation = 0 // 0 1 2 3 private fun setEmitterAndSink() { + clearStatus() when (orientation) { 0 -> { setWireSinkAt(0, 0, "digital_bit") diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBulb.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt similarity index 98% rename from src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBulb.kt rename to src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt index 898196c4c..5b242e178 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalBulb.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt @@ -11,7 +11,7 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * Created by minjaesong on 2024-03-01. */ -class FixtureSignalBulb : Electric { +class FixtureLogicSignalBulb : Electric { @Transient override val spawnNeedsFloor = false diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalLatch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalLatch.kt similarity index 98% rename from src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalLatch.kt rename to src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalLatch.kt index 9593d3d1a..c23d63d76 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalLatch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalLatch.kt @@ -13,7 +13,7 @@ import org.dyn4j.geometry.Vector2 * * Created by minjaesong on 2024-03-05. */ -class FixtureSignalLatch : Electric, Reorientable { +class FixtureLogicSignalLatch : Electric, Reorientable { @Transient override val spawnNeedsWall = false @Transient override val spawnNeedsFloor = false @@ -26,6 +26,7 @@ class FixtureSignalLatch : Electric, Reorientable { override var orientation = 0 // 0 2, where 2 is a mirror-image rather than rotation private fun setEmitterAndSink() { + clearStatus() when (orientation) { 0 -> { setWireSinkAt(0, 0, "digital_bit") // D diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalSwitchManual.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt similarity index 95% rename from src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalSwitchManual.kt rename to src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt index e6785ee4f..449ca6c4e 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSignalSwitchManual.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt @@ -1,20 +1,18 @@ package net.torvald.terrarum.modulebasegame.gameactors import net.torvald.spriteanimation.SheetSpriteAnimation -import net.torvald.terrarum.App import net.torvald.terrarum.TerrarumAppConfiguration import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarum.toInt -import net.torvald.terrarum.ui.MouseLatch import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.dyn4j.geometry.Vector2 /** * Created by minjaesong on 2024-03-01. */ -class FixtureSignalSwitchManual : Electric { +class FixtureLogicSignalSwitchManual : Electric { @Transient override val spawnNeedsFloor = false diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBlocker.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBlocker.kt similarity index 87% rename from src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBlocker.kt rename to src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBlocker.kt index eea1b01f2..656bf9bee 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBlocker.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBlocker.kt @@ -11,7 +11,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalEmitter /** * Created by minjaesong on 2024-03-04. */ -class ItemSignalBlocker(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureSignalBlocker") { +class ItemLogicSignalBlocker(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalBlocker") { override var dynamicID: ItemID = originalID override var baseMass = FixtureLogicSignalEmitter.MASS @@ -38,7 +38,7 @@ class ItemSignalBlocker(originalID: ItemID) : FixtureItemBase(originalID, "net.t /** * Created by minjaesong on 2024-03-05. */ -class ItemSignalLatch(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureSignalLatch") { +class ItemLogicSignalLatch(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalLatch") { override var dynamicID: ItemID = originalID override var baseMass = FixtureLogicSignalEmitter.MASS diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBulb.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBulb.kt similarity index 89% rename from src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBulb.kt rename to src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBulb.kt index fe8f7757a..605dda43f 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalBulb.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalBulb.kt @@ -11,7 +11,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalEmitter /** * Created by minjaesong on 2024-03-01. */ -class ItemSignalBulb(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureSignalBulb") { +class ItemLogicSignalBulb(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalBulb") { override var dynamicID: ItemID = originalID override var baseMass = FixtureLogicSignalEmitter.MASS diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalSwitchManual.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt similarity index 88% rename from src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalSwitchManual.kt rename to src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt index 80b416c43..432374406 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSignalSwitchManual.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt @@ -11,7 +11,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalEmitter /** * Created by minjaesong on 2024-03-01. */ -class ItemSignalSwitchManual(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureSignalSwitchManual") { +class ItemLogicSignalSwitchManual(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalSwitchManual") { override var dynamicID: ItemID = originalID override var baseMass = FixtureLogicSignalEmitter.MASS diff --git a/work_files/graphics/wires/ports.kra b/work_files/graphics/wires/ports.kra new file mode 100644 index 000000000..36ad58dea --- /dev/null +++ b/work_files/graphics/wires/ports.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4ca9b6979ecaba0d3c9a2cf1c302ca64298a18605e8d5e149a080d9bbf99e6e +size 82186