From 51da0612d2c177847806dae376ca5c07eb0df056 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 30 Mar 2025 18:07:02 +0900 Subject: [PATCH] sprites --- .../terrarum/modulecomputers/EntryPoint.kt | 1 + .../gameactors/FixtureComputerConsole.kt | 50 +++++++++---------- .../gameitems/ItemComputerConsole.kt | 24 +++++++-- assets/mods/dwarventech/items/itemid.csv | 3 +- .../fixtures/computer_audio_interface.tga | 3 ++ .../sprites/fixtures/computer_cpu.tga | 3 ++ .../fixtures/computer_memory_stack_1.tga | 3 ++ .../fixtures/computer_memory_stack_2.tga | 3 ++ .../fixtures/computer_network_bridge.tga | 3 ++ .../fixtures/computer_network_interface.tga | 3 ++ .../fixtures/computer_operator_terminal.tga | 3 ++ .../dwarventech/sprites/fixtures/holocube.tga | 3 ++ .../sprites/fixtures/holodrive.tga | 3 ++ .../sprites/fixtures/holovault.tga | 3 ++ .../modulebasegame/gameactors/FixtureBase.kt | 24 ++++++--- 15 files changed, 96 insertions(+), 36 deletions(-) create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_audio_interface.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_cpu.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_1.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_2.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_network_bridge.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_network_interface.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/computer_operator_terminal.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/holocube.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/holodrive.tga create mode 100644 assets/mods/dwarventech/sprites/fixtures/holovault.tga diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/EntryPoint.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/EntryPoint.kt index ea918e443..aa7ca1042 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/EntryPoint.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/EntryPoint.kt @@ -12,6 +12,7 @@ class EntryPoint : ModuleEntryPoint() { override fun invoke() { ModMgr.GameItemLoader.invoke(moduleName) + ModMgr.GameBlockLoader.invoke(moduleName) ModMgr.GameWatchdogLoader.register(moduleName, NetFrameWatchdog()) println("[${moduleName[0].toUpperCase()}${moduleName.substring(1)}] Dirtboard(tm) go drrrrr") } diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureComputerConsole.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureComputerConsole.kt index 39cd9e222..69eb09b12 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureComputerConsole.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureComputerConsole.kt @@ -1,14 +1,10 @@ package net.torvald.terrarum.modulecomputers.gameactors -import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE -import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF -import net.torvald.terrarum.gameactors.drawBodyInGoodPosition import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.BlockBox import net.torvald.terrarum.modulebasegame.gameactors.Electric +import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -16,7 +12,7 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class FixtureComputerConsole : Electric { - @Transient override val spawnNeedsFloor = true + @Transient override val spawnNeedsStableFloor = true @Transient override val spawnNeedsWall = false constructor() : super( @@ -24,27 +20,31 @@ class FixtureComputerConsole : Electric { nameFun = { Lang["ITEM_COMPUTER_CONSOLE"] } ) - @Transient lateinit var itemImageSheet: TextureRegionPack + init { + val itemImage = FixtureItemBase.getItemImageFromSingleImage("dwarventech", "sprites/fixtures/computer_operator_terminal.tga") + makeNewSprite(TextureRegionPack(itemImage.texture, 2*TILE_SIZE, 2*TILE_SIZE)).let { + it.setRowsAndFrames(1,1) + } + } +} + +/** + * Created by minjaesong on 2025-03-30. + */ +class FixtureComputerProcessor : Electric { + + @Transient override val spawnNeedsStableFloor = true + @Transient override val spawnNeedsWall = false + + constructor() : super( + BlockBox(BlockBox.ALLOW_MOVE_DOWN, 2, 3), + nameFun = { Lang["ITEM_COMPUTER_PROCESSOR"] } + ) init { - itemImageSheet = CommonResourcePool.getOrPut("spritesheet:dwarventech/sprites/fixtures/computers.tga") { - TextureRegionPack(ModMgr.getGdxFile("dwarventech", "sprites/fixtures/computers.tga"), TILE_SIZE, TILE_SIZE) - } as TextureRegionPack - - - } - - override fun drawBody(frameDelta: Float, batch: SpriteBatch) { - super.drawBody(frameDelta, batch) - - val sx = hitbox.startX.toFloat() - val sy = hitbox.startY.toFloat() - - drawBodyInGoodPosition(sx, sy) { x, y -> - batch.draw(itemImageSheet.get(0, 1), x, y) - batch.draw(itemImageSheet.get(1, 1), x + TILE_SIZEF, y) - batch.draw(itemImageSheet.get(0, 2), x, y + TILE_SIZEF) - batch.draw(itemImageSheet.get(1, 2), x + TILE_SIZEF, y + TILE_SIZEF) + val itemImage = FixtureItemBase.getItemImageFromSingleImage("dwarventech", "sprites/fixtures/computer_cpu.tga") + makeNewSprite(TextureRegionPack(itemImage.texture, 2*TILE_SIZE, 3*TILE_SIZE)).let { + it.setRowsAndFrames(1,1) } } } \ No newline at end of file diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemComputerConsole.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemComputerConsole.kt index ca9c11319..6866caa44 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemComputerConsole.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemComputerConsole.kt @@ -1,7 +1,5 @@ package net.torvald.terrarum.modulecomputers.gameitems -import net.torvald.terrarum.TerrarumAppConfiguration -import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase @@ -13,11 +11,29 @@ class ItemComputerConsole(originalID: ItemID) : FixtureItemBase(originalID, "net override var dynamicID: ItemID = originalID override var baseMass = 80.0 override val canBeDynamic = false - override val materialId = "" + override val materialId = "STAL" init { -// itemImage = FixtureItemBase.getItemImageFromSheet("dwarventech", "sprites/fixtures/desktop_computer.tga", TILE_SIZE, TILE_SIZE) + itemImage = FixtureItemBase.getItemImageFromSingleImage("dwarventech", "sprites/fixtures/computer_operator_terminal.tga") } override var baseToolSize: Double? = baseMass override var originalName = "ITEM_COMPUTER_CONSOLE" +} + + +/** + * Created by minjaesong on 2025-03-30. + */ +class ItemComputerProcessor(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulecomputers.gameactors.FixtureComputerProcessor") { + + override var dynamicID: ItemID = originalID + override var baseMass = 200.0 + override val canBeDynamic = false + override val materialId = "STAL" + init { + itemImage = FixtureItemBase.getItemImageFromSingleImage("dwarventech", "sprites/fixtures/computer_cpu.tga") + } + override var baseToolSize: Double? = baseMass + override var originalName = "ITEM_COMPUTER_PROCESSOR" + } \ No newline at end of file diff --git a/assets/mods/dwarventech/items/itemid.csv b/assets/mods/dwarventech/items/itemid.csv index c1e1e0673..6833325f4 100644 --- a/assets/mods/dwarventech/items/itemid.csv +++ b/assets/mods/dwarventech/items/itemid.csv @@ -1,4 +1,5 @@ id;classname;tags #1;net.torvald.terrarum.modulecomputers.gameitems.ItemWearableWorldRadar; #2;net.torvald.terrarum.modulecomputers.gameitems.ItemHomeComputer; -16;net.torvald.terrarum.modulecomputers.gameitems.ItemComputerConsole;TAGS +256;net.torvald.terrarum.modulecomputers.gameitems.ItemComputerConsole; +257;net.torvald.terrarum.modulecomputers.gameitems.ItemComputerProcessor; diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_audio_interface.tga b/assets/mods/dwarventech/sprites/fixtures/computer_audio_interface.tga new file mode 100644 index 000000000..62d22962c --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_audio_interface.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda380cae926dd1a8c600a014f8d3e819ca9dbd5ebbd689685512643439709 +size 12306 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_cpu.tga b/assets/mods/dwarventech/sprites/fixtures/computer_cpu.tga new file mode 100644 index 000000000..19238227f --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_cpu.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87d6fd0adf299586eb38d2b8d61698c7e6eaf6fbf640e08302e405c6eaa11779 +size 6162 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_1.tga b/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_1.tga new file mode 100644 index 000000000..848c04e2f --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_1.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc87134d4ea315ce8df5c034f0247f6f61ddf4af6da7195ab51b4db38b26f90b +size 3090 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_2.tga b/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_2.tga new file mode 100644 index 000000000..d9bb2ba92 --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_memory_stack_2.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c6f6e9fb9abf149223d433395c7fb1142436733673f583b0cf169aba866ed7f +size 3090 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_network_bridge.tga b/assets/mods/dwarventech/sprites/fixtures/computer_network_bridge.tga new file mode 100644 index 000000000..7fa2f9d08 --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_network_bridge.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10d3f4c220b9d911d30c6e298a200eca7b694144c07b76c9d6151b88ca20fc6c +size 6162 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_network_interface.tga b/assets/mods/dwarventech/sprites/fixtures/computer_network_interface.tga new file mode 100644 index 000000000..e75dda631 --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_network_interface.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a5f6a3f4b15f77f4f53d66fcf93441d9110abf426ee7847ed2642b881360652 +size 6162 diff --git a/assets/mods/dwarventech/sprites/fixtures/computer_operator_terminal.tga b/assets/mods/dwarventech/sprites/fixtures/computer_operator_terminal.tga new file mode 100644 index 000000000..28451eedf --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/computer_operator_terminal.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e59721aab10aab84b42dbf4efe0e9035175db361283441bbe8aeeb74df58d7d +size 4114 diff --git a/assets/mods/dwarventech/sprites/fixtures/holocube.tga b/assets/mods/dwarventech/sprites/fixtures/holocube.tga new file mode 100644 index 000000000..06258238d --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/holocube.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3167bc7efaa59f5bab12dc6c776ab6c6c2447d6afb2527b5bd6eacbc216add8b +size 1042 diff --git a/assets/mods/dwarventech/sprites/fixtures/holodrive.tga b/assets/mods/dwarventech/sprites/fixtures/holodrive.tga new file mode 100644 index 000000000..93e7b228a --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/holodrive.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b33013a52672b9d29ffd83f2bdb0d7892004ba08376073e5360f301b1b9ddf +size 2066 diff --git a/assets/mods/dwarventech/sprites/fixtures/holovault.tga b/assets/mods/dwarventech/sprites/fixtures/holovault.tga new file mode 100644 index 000000000..c502fd2ee --- /dev/null +++ b/assets/mods/dwarventech/sprites/fixtures/holovault.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c84cbaa140e50257da180b2a8d3bff1c18e4f09a3f50f8e720e4e0e878806c70 +size 8210 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 16e20ede6..b7c9af122 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -27,7 +27,8 @@ typealias BlockBoxIndex = Int open class FixtureBase : ActorWithBody, CuedByTerrainChange { @Transient open val spawnNeedsWall: Boolean = false - @Transient open val spawnNeedsFloor: Boolean = true + @Transient open val spawnNeedsFloor: Boolean = true // any floor, including platforms + @Transient open val spawnNeedsStableFloor: Boolean = false // solid tiles only (no platforms) @Transient open val spawnNeedsCeiling: Boolean = false // if both spawnNeedsWall and spawnNeedsFloor are true, the condition will be interpreted as OR-condition @@ -166,6 +167,14 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { return blockprop.isSolid || blockprop.isPlatform } + /** + * Condition for (if the tile is solid) is always implied regardless of this function. See [canSpawnHere0] + */ + open fun canSpawnOnThisFloorStable(itemID: ItemID): Boolean { + val blockprop = BlockCodex[itemID] + return blockprop.isSolid + } + fun canSpawnHere(posX0: Int, posY0: Int): Boolean { val posX = (posX0 - blockBox.width.minus(1).div(2)) fmod world!!.width // width.minus(1) so that spawning position would be same as the ghost's position val posY = posY0 - blockBox.height + 1 @@ -215,21 +224,24 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { } // check for floors, if spawnNeedsFloor == true - if (spawnNeedsFloor || spawnNeedsCeiling) { - val yOff = if (spawnNeedsFloor) 1 else -1 + if (spawnNeedsStableFloor || spawnNeedsFloor || spawnNeedsCeiling) { + val yOff = if (spawnNeedsStableFloor || spawnNeedsFloor) 1 else -1 cannotSpawnNoFloor = everyBlockboxPos.filter { - if (spawnNeedsFloor) + if (spawnNeedsStableFloor || spawnNeedsFloor) it.second == posY - oy + blockBox.height - 1 else it.second == posY - oy }.any { (x, y) -> world!!.getTileFromTerrain(x, y + yOff).let { - !canSpawnOnThisFloor(it) + if (spawnNeedsStableFloor || spawnNeedsCeiling) + !canSpawnOnThisFloorStable(it) + else + !canSpawnOnThisFloor(it) } } } - if (spawnNeedsWall && (spawnNeedsFloor || spawnNeedsCeiling)) + if (spawnNeedsWall && (spawnNeedsStableFloor || spawnNeedsFloor || spawnNeedsCeiling)) cannotSpawn = cannotSpawn or (cannotSpawnNoWall && cannotSpawnNoFloor) else if (spawnNeedsFloor || spawnNeedsCeiling) cannotSpawn = cannotSpawn or cannotSpawnNoFloor