From eb2c716691941605c74509fec26189af966275e6 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 6 Jun 2023 14:37:54 +0900 Subject: [PATCH] code for new itemsheet format --- assets/mods/basegame/wires/wires.csv | 14 +++--- .../torvald/terrarum/CommonResourcePool.kt | 1 + src/net/torvald/terrarum/ItemSheet.kt | 49 +++++++++++++++++++ src/net/torvald/terrarum/Terrarum.kt | 2 +- .../terrarum/modulebasegame/EntryPoint.kt | 10 +--- .../gameitems/PickaxeGeneric.kt | 6 +-- .../modulebasegame/gameitems/WireCutterAll.kt | 2 +- .../gameitems/WirePieceSignalWire.kt | 2 +- 8 files changed, 65 insertions(+), 21 deletions(-) create mode 100644 src/net/torvald/terrarum/ItemSheet.kt diff --git a/assets/mods/basegame/wires/wires.csv b/assets/mods/basegame/wires/wires.csv index adc280f56..9b4a0327d 100644 --- a/assets/mods/basegame/wires/wires.csv +++ b/assets/mods/basegame/wires/wires.csv @@ -1,11 +1,11 @@ id;drop;name;renderclass;accept;inputcount;inputtype;outputtype;javaclass;inventoryimg;branching -8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,1,9;1 -8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,1,10;1 -8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,1,11;1 -#8195;8195;WIRE_BUNDLE;signal;digital_3bits;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,1,2;1 -8196;8196;WIRE_POWER_LOW;power;power_low;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,2,9;1 -8197;8197;WIRE_POWER_HIGH;power;power_high;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,3,9;1 -8198;8198;WIRE_ETHERNET;network;10base2;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items16,4,9;1 +8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,4;1 +8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,1,4;1 +8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,2,4;1 +#8195;8195;WIRE_BUNDLE;signal;digital_3bits;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,0;1 +8196;8196;WIRE_POWER_LOW;power;power_low;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,3,4;1 +8197;8197;WIRE_POWER_HIGH;power;power_high;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,4,4;1 +8198;8198;WIRE_ETHERNET;network;10base2;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,5,4;1 # accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires) diff --git a/src/net/torvald/terrarum/CommonResourcePool.kt b/src/net/torvald/terrarum/CommonResourcePool.kt index a6891a9d6..082f51801 100644 --- a/src/net/torvald/terrarum/CommonResourcePool.kt +++ b/src/net/torvald/terrarum/CommonResourcePool.kt @@ -118,6 +118,7 @@ object CommonResourcePool { fun getAsTextureRegionPack(identifier: String) = getAs(identifier) fun getAsTextureRegion(identifier: String) = getAs(identifier) fun getAsTexture(identifier: String) = getAs(identifier) + fun getAsItemSheet(identifier: String) = getAs(identifier) fun dispose() { pool.forEach { (name, u) -> diff --git a/src/net/torvald/terrarum/ItemSheet.kt b/src/net/torvald/terrarum/ItemSheet.kt new file mode 100644 index 000000000..0f700a949 --- /dev/null +++ b/src/net/torvald/terrarum/ItemSheet.kt @@ -0,0 +1,49 @@ +package net.torvald.terrarum + +import com.badlogic.gdx.files.FileHandle +import com.badlogic.gdx.graphics.Pixmap +import com.badlogic.gdx.graphics.g2d.TextureRegion +import com.badlogic.gdx.utils.Disposable +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack + +/** + * Created by minjaesong on 2023-06-06. + */ +class ItemSheet(ref: FileHandle, tileW: Int = 48, tileH: Int = 48) : Disposable { + + private val textureRegionPack = TextureRegionPack(ref, tileW, tileH + 1) + + init { + val pixmap = Pixmap(ref) + for (y in 0 until textureRegionPack.verticalCount) { + for (x in 0 until textureRegionPack.horizontalCount) { + var w = 0 + var h = 0 + for (i in 0..7) { + // width + w = w or (pixmap.getPixel(x * tileW + i, y * (tileH + 1)).and(255) > 127).toInt(7 - i) + // height + h = h or (pixmap.getPixel(x * tileW + i + 8, y * (tileH + 1)).and(255) > 127).toInt(7 - i) + } + + textureRegionPack.get(x, y).apply { + this.setRegion(x * tileW, y * (tileH + 1) + 1, w, h) + } + +// println("[ItemSheet] ${ref.path()} ($x,$y) dim ($w,$h)") + } + } + pixmap.dispose() + } + + val horizontalCount = textureRegionPack.horizontalCount + val verticalCount = textureRegionPack.verticalCount + + fun get(x: Int, y: Int) = textureRegionPack.get(x, y) + + fun forEach(action: (TextureRegion) -> Unit) = textureRegionPack.regions.forEach(action) + + override fun dispose() { + textureRegionPack.dispose() + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index ee678ddd4..8a9346051 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -627,7 +627,7 @@ fun Double.sqrt() = Math.sqrt(this) fun Float.sqrt() = FastMath.sqrt(this) fun Int.abs() = this.absoluteValue fun Double.bipolarClamp(limit: Double) = this.coerceIn(-limit, limit) -fun Boolean.toInt() = if (this) 1 else 0 +fun Boolean.toInt(shift: Int = 0) = if (this) 1.shl(shift) else 0 fun Int.bitCount() = java.lang.Integer.bitCount(this) fun Long.bitCount() = java.lang.Long.bitCount(this) diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index 371db15db..11b53519c 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -28,14 +28,8 @@ class EntryPoint : ModuleEntryPoint() { printdbg(this, "Hello, world!") // load common resources to the AssetsManager - CommonResourcePool.addToLoadingList("$moduleName.items16") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items.tga"), 16, 16) - } - CommonResourcePool.addToLoadingList("$moduleName.items24") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items24.tga"), 24, 24) - } - CommonResourcePool.addToLoadingList("$moduleName.items48") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items48.tga"), 48, 48) + CommonResourcePool.addToLoadingList("$moduleName.items") { + ItemSheet(ModMgr.getGdxFile(moduleName, "items/items.tga")) } CommonResourcePool.loadAll() diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt index a95e732ba..dd76da6ce 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt @@ -121,7 +121,7 @@ class PickaxeCopper(originalID: ItemID) : GameItem(originalID) { override val materialId = "CUPR" override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(0,0) + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP @@ -151,7 +151,7 @@ class PickaxeIron(originalID: ItemID) : GameItem(originalID) { override val materialId = "IRON" override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(1,0) + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP @@ -181,7 +181,7 @@ class PickaxeSteel(originalID: ItemID) : GameItem(originalID) { override val materialId = "STAL" override var baseMass = material.density.toDouble() / MaterialCodex["IRON"].density * BASE_MASS_AND_SIZE override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegionPack("basegame.items24").get(2,0) + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,0) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt index f7f7fc025..015652938 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WireCutterAll.kt @@ -94,7 +94,7 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) { override val isDynamic = false override val materialId = "" override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegionPack("basegame.items16").get(0, 9) + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1, 3) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt index 31d8e131e..547273cc5 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/WirePieceSignalWire.kt @@ -24,7 +24,7 @@ class WirePieceSignalWire(originalID: ItemID, private val atlasID: String, priva override val isDynamic = false override val materialId = "" override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegionPack(atlasID).get(sheetX, sheetY) + get() = CommonResourcePool.getAsItemSheet(atlasID).get(sheetX, sheetY) init { super.equipPosition = GameItem.EquipPosition.HAND_GRIP