diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt index 1f2a44fe9..0162a3716 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt @@ -11,13 +11,13 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import net.torvald.terrarum.* +import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.modulebasegame.gameactors.BlockBox import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas -import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.tsvm.* import net.torvald.tsvm.peripheral.GraphicsAdapter import net.torvald.tsvm.peripheral.ReferenceGraphicsAdapter @@ -43,7 +43,7 @@ class FixtureHomeComputer : FixtureBase { density = 1400.0 setHitboxDimension(TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE, 0, -1) - makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("dwarventech-sprites-fixtures-desktop_computer.tga").texture, TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE)) + makeNewSprite(FixtureBase.getSpritesheet("dwarventech", "sprites/fixtures/desktop_computer.tga", TILE_SIZE, TILE_SIZE)) sprite!!.setRowsAndFrames(1, 1) actorValue[AVKey.BASEMASS] = 20.0 diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt index 742342839..04eec156e 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt @@ -1,15 +1,14 @@ package net.torvald.terrarum.modulecomputers.gameitems -import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.TerrarumAppConfiguration import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameitems.mouseInInteractableRange import net.torvald.terrarum.itemproperties.Material +import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarum.modulecomputers.gameactors.FixtureHomeComputer /** @@ -26,19 +25,11 @@ class ItemHomeComputer(originalID: ItemID) : GameItem(originalID) { override val isDynamic = false override val material = Material() override val itemImage: TextureRegion - get() = CommonResourcePool.getAsTextureRegion("dwarventech-sprites-fixtures-desktop_computer.tga") + get() = FixtureItemBase.getItemImageFromSheet("dwarventech", "sprites/fixtures/desktop_computer.tga", TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE) override var baseToolSize: Double? = baseMass init { - CommonResourcePool.addToLoadingList("dwarventech-sprites-fixtures-desktop_computer.tga") { -// val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "nonexisting_file!!!"))) - val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "sprites/fixtures/desktop_computer.tga"))) - t.flip(false, false) - /*return*/t - } - CommonResourcePool.loadAll() - equipPosition = EquipPosition.HAND_GRIP } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 9fadbd600..cf4be76a7 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -10,6 +10,7 @@ import net.torvald.terrarum.gameactors.PhysProperties import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.ui.UICanvas +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.dyn4j.geometry.Vector2 typealias BlockBoxIndex = Int @@ -222,6 +223,18 @@ open class FixtureBase : ActorWithBody, CuedByTerrainChange { override fun flagDespawn() { if (canBeDespawned) flagDespawn = true } + + /** + * Also see: [net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase.Companion] + */ + companion object { + fun getSpritesheet(module: String, path: String, tileW: Int, tileH: Int): TextureRegionPack { + val id = "$module/${path.replace('\\','/')}" + return (CommonResourcePool.getOrPut(id) { + TextureRegionPack(ModMgr.getGdxFile(module, path), tileW, tileH, flipY = false) + } as TextureRegionPack) + } + } } interface CuedByTerrainChange { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt index 51fad7f18..0b3e8fdcd 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt @@ -7,6 +7,7 @@ import net.torvald.terrarum.ModMgr import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.dyn4j.geometry.Vector2 @@ -23,6 +24,8 @@ class FixtureLogicSignalEmitter : FixtureBase, Electric { ) init { + val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/signal_source.tga") + CommonResourcePool.addToLoadingList("basegame-sprites-fixtures-signal_source.tga") { val t = TextureRegion(Texture(ModMgr.getGdxFile("basegame", "sprites/fixtures/signal_source.tga"))) t.flip(false, false) @@ -33,7 +36,7 @@ class FixtureLogicSignalEmitter : FixtureBase, Electric { density = 1400.0 setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, -1) - makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("basegame-sprites-fixtures-signal_source.tga").texture, TILE_SIZE, TILE_SIZE)) + makeNewSprite(TextureRegionPack(itemImage.texture, TILE_SIZE, TILE_SIZE)) sprite!!.setRowsAndFrames(1, 1) actorValue[AVKey.BASEMASS] = MASS diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt index b836120db..da78edd29 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt @@ -57,7 +57,7 @@ internal class FixtureTapestry : FixtureBase { val frame = CommonResourcePool.getOrPut("tapestries-common-frame_$tileFilename.tga") { Pixmap(ModMgr.getGdxFilesFromEveryMod("tapestries/common/frame_$tileFilename.tga").last().second) } as Pixmap - val canvas = CommonResourcePool.getOrPut("tapestries-common-canvas") { + val canvas = CommonResourcePool.getOrPut("tapestries-common-canvas.tga") { Pixmap(ModMgr.getGdxFilesFromEveryMod("tapestries/common/canvas.tga").last().second) } as Pixmap diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index f91681570..e9ec63f4c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -41,9 +41,6 @@ internal class FixtureTikiTorch : FixtureBase, Luminous { ) { // loading textures - CommonResourcePool.addToLoadingList("sprites-fixtures-tiki_torch.tga") { - TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32, flipY = false) - } CommonResourcePool.addToLoadingList("particles-tiki_smoke.tga") { TextureRegionPack(ModMgr.getGdxFile("basegame", "particles/bigger_smoke.tga"), 16, 16) } @@ -55,7 +52,7 @@ internal class FixtureTikiTorch : FixtureBase, Luminous { lightBoxList.add(Lightbox(Hitbox(6.0, 5.0, 4.0, 3.0), color)) - makeNewSprite(CommonResourcePool.getAsTextureRegionPack("sprites-fixtures-tiki_torch.tga")) + makeNewSprite(FixtureBase.getSpritesheet("basegame", "sprites/fixtures/tiki_torch.tga", 16, 32)) sprite!!.setRowsAndFrames(1, 2) actorValue[AVKey.BASEMASS] = MASS diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt index ff785eea2..590a3d28c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt @@ -1,10 +1,8 @@ package net.torvald.terrarum.modulebasegame.gameitems +import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.INGAME -import net.torvald.terrarum.ItemCodex -import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.* import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.ItemID @@ -12,6 +10,7 @@ import net.torvald.terrarum.gameitems.mouseInInteractableRange import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * Created by minjaesong on 2021-12-13. @@ -70,4 +69,24 @@ open class FixtureItemBase(originalID: ItemID, val fixtureClassName: String) : G // return true when placed, false when cannot be placed } + /** + * Also see: [net.torvald.terrarum.modulebasegame.gameactors.FixtureBase.Companion] + */ + companion object { + /** Always use with Getter! */ + fun getItemImageFromSheet(module: String, path: String, tileW: Int, tileH: Int): TextureRegion { + val id = "$module/${path.replace('\\','/')}" + return (CommonResourcePool.getOrPut(id) { + TextureRegionPack(ModMgr.getGdxFile(module, path), tileW, tileH, flipY = false) + } as TextureRegionPack).get(0,0) + } + + /** Always use with Getter! */ + fun getItemImageFromSingleImage(module: String, path: String): TextureRegion { + val id = "$module/${path.replace('\\','/')}" + return CommonResourcePool.getOrPut(id) { + TextureRegion(Texture(ModMgr.getGdxFile(module, path))) + } as TextureRegion + } + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt index e8c9a25f5..52b61c0a4 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalEmitter.kt @@ -1,9 +1,6 @@ package net.torvald.terrarum.modulebasegame.gameitems -import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gameitems.ItemID @@ -22,11 +19,8 @@ class ItemLogicSignalEmitter(originalID: ItemID) : FixtureItemBase(originalID, " override val isDynamic = false override val material = Material() override val itemImage: TextureRegion - get() = CommonResourcePool.getOrPut("basegame-sprites-fixtures-signal_source.tga") { - val t = TextureRegion(Texture(ModMgr.getGdxFile("basegame", "sprites/fixtures/signal_source.tga"))) - t.flip(false, false) - /*return*/t - } as TextureRegion + get() = getItemImageFromSingleImage("basegame", "sprites/fixtures/signal_source.tga") + override var baseToolSize: Double? = baseMass init { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt index 98b53b43a..8423d7636 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTikiTorch.kt @@ -1,12 +1,9 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.ModMgr import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch -import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** * Created by minjaesong on 2019-05-16. @@ -22,9 +19,8 @@ class ItemTikiTorch(originalID: ItemID) : FixtureItemBase(originalID, "net.torva override val isDynamic = false override val material = Material() override val itemImage: TextureRegion - get() = (CommonResourcePool.getOrPut("sprites-fixtures-tiki_torch.tga") { - TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32, flipY = false) - } as TextureRegionPack).get(0,0) + get() = getItemImageFromSheet("basegame", "sprites/fixtures/tiki_torch.tga", 16, 32) + override var baseToolSize: Double? = baseMass init { diff --git a/work_files/graphics/terrain/ores_sample.kra b/work_files/graphics/terrain/ores_sample.kra new file mode 100644 index 000000000..5a4f934e7 --- /dev/null +++ b/work_files/graphics/terrain/ores_sample.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57db94c78dbc34226a28ed5a9d2da8fbfa44b6cf25a4d7f634c49e9ce84708aa +size 114908 diff --git a/work_files/tech_tree_by_game_items.gv b/work_files/tech_tree_by_game_items.gv index 83eda5a4c..c22a12a4c 100644 --- a/work_files/tech_tree_by_game_items.gv +++ b/work_files/tech_tree_by_game_items.gv @@ -7,7 +7,7 @@ digraph g { subgraph cluster_legend { label=Legend "raw materials" [style=filled,fillcolor=mistyrose] - "manufactured materials" [shape=box,style=filled,fillcolor=lightsteelblue] + "manufactured materials" [shape=trapezium,style=filled,fillcolor=lightsteelblue] concepts [shape=component] "useable items" [shape=box,style=filled,fillcolor=khaki] "ingredient only" [shape=box,style=filled] @@ -59,27 +59,32 @@ digraph g { } /* raw materials */ - wood [style=filled,fillcolor=mistyrose] - stone [style=filled,fillcolor=mistyrose] - malachite [style=filled,fillcolor=mistyrose] - hematite [style=filled,fillcolor=mistyrose] - coal [style=filled,fillcolor=mistyrose] + wood [style=filled,fillcolor="#d5bc89"] + stone [style=filled,fillcolor="#babfc5"] + coal [style=filled,fillcolor="#606060",fontcolor=white] quartz [style=filled,fillcolor=mistyrose] - ilmenite [style=filled,fillcolor=mistyrose] - gold [style=filled,fillcolor=mistyrose] - sand [style=filled,fillcolor=mistyrose] + sand [style=filled,fillcolor="#f0ecca"] + + malachite [style=filled,fillcolor="#54b295",fontcolor=white] + hematite [style=filled,fillcolor="#cb8c6d",fontcolor=white] + ilmenite [style=filled,fillcolor="#df6e88",fontcolor=white] // kinda fake colour for playability + gold [style=filled,fillcolor="#dbba5e"] + sphalerite [style=filled,fillcolor="#5c9abb",fontcolor=white] // fluoresces lead-oxide yellow + /* manufactured materials */ - steel [shape=trapezium,style=filled,fillcolor=lightsteelblue] - iron [shape=trapezium,style=filled,fillcolor=lightsteelblue] - copper [shape=trapezium,style=filled,fillcolor=lightsteelblue] - titanium [shape=trapezium,style=filled,fillcolor=lightsteelblue] - glass [shape=trapezium,style=filled,fillcolor=lightsteelblue] + steel [shape=trapezium,style=filled,fillcolor="#4e5152",fontcolor=white] + iron [shape=trapezium,style=filled,fillcolor="#a08778",fontcolor=white] + copper [shape=trapezium,style=filled,fillcolor="#d69544",fontcolor=white] + titanium [shape=trapezium,style=filled,fillcolor="#daddd9"] + glass [shape=trapezium,style=filled,fillcolor="#79b883",fontcolor=white] + zinc [shape=trapezium,style=filled,fillcolor="#8a8d8e",fontcolor=white] + brass [shape=trapezium,style=filled,fillcolor="#d6af44"] /* concepts */ thermal [shape=component] electricity [shape=component] kinetic [shape=component] information [shape=component] - "sequential logic" [shape=component] /* implies electronic memory */ + "sequential logic" [shape=component] // implies electronic memory radio [shape=component] telecommunication [shape=component] teleportation [shape=component] @@ -88,15 +93,16 @@ digraph g { networking [shape=component] "haute couture" [shape=component] "world portal" [shape=component] - "hand tools" [shape=component] /* pickaxe, axe, etc. */ + "hand tools" [shape=component] // pickaxe, axe, etc. "weapons&armours" [shape=component] - "motorised tools" [shape=component] /* drill, chainsaw, etc. */ - machines [shape=component] /* electric machines */ - "nonelectric machines" [shape=component] + "motorised tools" [shape=component] // drill, chainsaw, etc. + machines [shape=component] // electric machines + "rotating machines" [shape=component] // machines whose main method of operaton is spinning (e.g. macerator, powder mixer, grindstone, gristmill) + "electromechanical components" [shape=component] // e.g. signal-controlled clutch /* useable items */ furnace [shape=box,style=filled,fillcolor=khaki] torch [shape=box,style=filled,fillcolor=khaki] - "light fixture" [shape=box,style=filled,fillcolor=khaki] /* Both lamps and blinkenlight(s) */ + "light fixture" [shape=box,style=filled,fillcolor=khaki] // Both lamps and blinkenlight(s) furnitures [shape=box,style=filled,fillcolor=khaki] office [shape=box,style=filled,fillcolor=khaki] "logic gate" [shape=box,style=filled,fillcolor=khaki] @@ -107,13 +113,19 @@ digraph g { rtty [shape=box,style=filled,fillcolor=khaki] "digital billboard" [shape=box,style=filled,fillcolor=khaki] "CRT display" [shape=box,style=filled,fillcolor=khaki] - "personal computer" [shape=box,style=filled,fillcolor=khaki] /* small computer with single integrated */ - mainframe [shape=box,style=filled,fillcolor=khaki] /* big computer that can have multiple terminals */ - + "personal computer" [shape=box,style=filled,fillcolor=khaki] // small computer with single integrated + mainframe [shape=box,style=filled,fillcolor=khaki] // big computer that can have multiple terminals + windmill [shape=box,style=filled,fillcolor=khaki] + engine [shape=box,style=filled,fillcolor=khaki] + motor [shape=box,style=filled,fillcolor=khaki] + clutch [shape=box,style=filled,fillcolor=khaki] + gear [shape=box,style=filled,fillcolor=khaki] + shaft [shape=box,style=filled,fillcolor=khaki] + belt [shape=box,style=filled,fillcolor=khaki] + /* ingredient items */ - engine [shape=box,style=filled] LED [shape=box,style=filled] - "computing unit" [shape=box,style=filled] /* motherboard+cpu+ram+powersupply combined */ + "computing unit" [shape=box,style=filled] // motherboard+cpu+ram+powersupply combined "quartz oscillator" [shape=box,style=filled] "quartz lens" [shape=box,style=filled] @@ -143,6 +155,7 @@ digraph g { electricity -> machines steel -> machines + brass -> furnitures wood -> furnitures wood -> "hand tools" iron -> "hand tools" @@ -221,6 +234,20 @@ digraph g { "weapons&armours" -> "arming sword" [lhead=cluster_weaponarmour] "motorised tools" -> breaker [lhead=cluster_electrictools] - kinetic -> "nonelectric machines" - steel -> "nonelectric machines" + kinetic -> "rotating machines" + steel -> "rotating machines" + + wood -> windmill -> kinetic + electricity -> motor -> kinetic + + kinetic -> shaft + kinetic -> gear + kinetic -> belt + kinetic -> clutch + + electricity -> "electromechanical components" + kinetic -> "electromechanical components" + + copper -> brass + sphalerite -> zinc -> brass }