From 1cc839fb68974e63baa5c1f831024cbcce23bb1d Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 4 Dec 2023 02:53:26 +0900 Subject: [PATCH] working test smelter --- assets/mods/basegame/crafting/fixtures.json | 8 +- .../basegame/crafting/metal_processing.json | 34 ++++++++ assets/mods/basegame/crafting/tools.json | 6 +- assets/mods/basegame/items/itemid.csv | 13 +++- .../sprites/fixtures/smelter_basic_glow.tga | 3 + .../gameactors/FixtureSmelterBasic.kt | 78 +++++++++++++++++++ .../gameitems/ItemSmelterBasic.kt | 21 +++++ .../modulebasegame/gameitems/OreItemBase.kt | 40 ++++++++++ 8 files changed, 198 insertions(+), 5 deletions(-) create mode 100644 assets/mods/basegame/crafting/metal_processing.json create mode 100644 assets/mods/basegame/sprites/fixtures/smelter_basic_glow.tga create mode 100644 src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/gameitems/ItemSmelterBasic.kt diff --git a/assets/mods/basegame/crafting/fixtures.json b/assets/mods/basegame/crafting/fixtures.json index 9b28be193..16c286033 100644 --- a/assets/mods/basegame/crafting/fixtures.json +++ b/assets/mods/basegame/crafting/fixtures.json @@ -2,7 +2,7 @@ "basegame:176": { /* torch */ "workbench": "", "ingredients": [ - [4, 1, "item@basegame:18", 1, "item@basegame:130"] /* 4 torches = 1 stick, 1 coal */ + [5, 1, "item@basegame:18", 1, "item@basegame:130"] /* 5 torches = 1 stick, 1 coal */ ] }, "item@basegame:5": { /* tiki torch */ @@ -19,6 +19,12 @@ [1, 8, "$WOOD"] ] }, + "item@basegame:17": { /* basic smelter */ + "workbench": "", + "ingredients": [ + [1, 20, "$ROCK", 10, "item@basegame:25"] /* 1 smelter = 20 rocks, 10 clay balls */ + ] + }, "item@basegame:256": { /* oak door */ "workbench": "basiccrafting", diff --git a/assets/mods/basegame/crafting/metal_processing.json b/assets/mods/basegame/crafting/metal_processing.json new file mode 100644 index 000000000..54f2e9ae1 --- /dev/null +++ b/assets/mods/basegame/crafting/metal_processing.json @@ -0,0 +1,34 @@ +{ + "item@basegame:112": { /* copper */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:128"]] + }, + "item@basegame:113": { /* iron */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:129"]] + }, + "item@basegame:114": { /* coal coke */ + "workbench": "basicsmelter", + "ingredients": [[1, 1, "item@basegame:130"]] + }, + "item@basegame:115": { /* zinc */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:131"]] + }, + "item@basegame:116": { /* tin */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:132"]] + }, + "item@basegame:117": { /* gold */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:133"]] + }, + "item@basegame:118": { /* silver */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:134"]] + }, + "item@basegame:119": { /* lead */ + "workbench": "basicsmelter", + "ingredients": [[1, 2, "item@basegame:135"]] + } +} \ No newline at end of file diff --git a/assets/mods/basegame/crafting/tools.json b/assets/mods/basegame/crafting/tools.json index 9b6393e76..774e9d778 100644 --- a/assets/mods/basegame/crafting/tools.json +++ b/assets/mods/basegame/crafting/tools.json @@ -16,7 +16,7 @@ "ingredients": [[1, 6, "$ROCK", 2, "item@basegame:18"]] }, "item@basegame:24": { /* stone axe */ - "workbench": "basiccrafting", - "ingredients": [[1, 6, "$ROCK", 2, "item@basegame:18"]] -} + "workbench": "basiccrafting", + "ingredients": [[1, 6, "$ROCK", 2, "item@basegame:18"]] + } } \ No newline at end of file diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 6895cb9ce..9197d8511 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -15,7 +15,7 @@ id;classname 14;net.torvald.terrarum.modulebasegame.gameitems.PickaxeWood 15;net.torvald.terrarum.modulebasegame.gameitems.SledgehammerWood 16;net.torvald.terrarum.modulebasegame.gameitems.ItemWorkbench -17;net.torvald.terrarum.modulebasegame.gameitems.ItemCoalCoke +17;net.torvald.terrarum.modulebasegame.gameitems.ItemSmelterBasic 18;net.torvald.terrarum.modulebasegame.gameitems.OreStick 19;net.torvald.terrarum.modulebasegame.gameitems.AxeCopper 20;net.torvald.terrarum.modulebasegame.gameitems.AxeIron @@ -25,6 +25,16 @@ id;classname 24;net.torvald.terrarum.modulebasegame.gameitems.AxeStone 25;net.torvald.terrarum.modulebasegame.gameitems.ItemClayBall +# ingots +112;net.torvald.terrarum.modulebasegame.gameitems.IngotCopper +113;net.torvald.terrarum.modulebasegame.gameitems.IngotIron +114;net.torvald.terrarum.modulebasegame.gameitems.ItemCoalCoke +115;net.torvald.terrarum.modulebasegame.gameitems.IngotZinc +116;net.torvald.terrarum.modulebasegame.gameitems.IngotTin +117;net.torvald.terrarum.modulebasegame.gameitems.IngotGold +118;net.torvald.terrarum.modulebasegame.gameitems.IngotSilver +119;net.torvald.terrarum.modulebasegame.gameitems.IngotLead + # ores 128;net.torvald.terrarum.modulebasegame.gameitems.OreCopper 129;net.torvald.terrarum.modulebasegame.gameitems.OreIron @@ -35,6 +45,7 @@ id;classname 134;net.torvald.terrarum.modulebasegame.gameitems.OreSilver 135;net.torvald.terrarum.modulebasegame.gameitems.OreLead + # gemstones #144; gems diff --git a/assets/mods/basegame/sprites/fixtures/smelter_basic_glow.tga b/assets/mods/basegame/sprites/fixtures/smelter_basic_glow.tga new file mode 100644 index 000000000..2360c6004 --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/smelter_basic_glow.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e51232acb5fbe5f13aa73e1bace1e528653df28fba00b320bd1c40134e95e103 +size 4114 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt new file mode 100644 index 000000000..732c96a54 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt @@ -0,0 +1,78 @@ +package net.torvald.terrarum.modulebasegame.gameactors + +import net.torvald.gdx.graphics.Cvec +import net.torvald.terrarum.BlockCodex +import net.torvald.terrarum.INGAME +import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED +import net.torvald.terrarum.blockproperties.Block +import net.torvald.terrarum.gameactors.AVKey +import net.torvald.terrarum.gameactors.Hitbox +import net.torvald.terrarum.gameactors.Lightbox +import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.TerrarumIngame +import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase +import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack + +/** + * No GUI yet! + * + * Created by minjaesong on 2023-12-04. + */ +class FixtureSmelterBasic : FixtureBase, CraftingStation { + + @Transient override val tags = listOf("basicsmelter") + + constructor() : super( + BlockBox(BlockBox.ALLOW_MOVE_DOWN, 2, 2), // temporary value, will be overwritten by spawn() + nameFun = { Lang["ITEM_SMELTER_BASIC"] } + ) { + val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/smelter_basic.tga") +// val itemImage2 = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/smelter_basic_glow.tga") // put this sprite to the hypothetical "SpriteIllum" + + density = BlockCodex[Block.STONE].density.toDouble() + setHitboxDimension(itemImage.texture.width, itemImage.texture.height, 0, 0) + + makeNewSprite(TextureRegionPack(itemImage.texture, itemImage.texture.width, itemImage.texture.height)).let { + it.setRowsAndFrames(1,1) + } + /*makeNewSpriteGlow(TextureRegionPack(itemImage2.texture, itemImage.texture.width, itemImage.texture.height)).let { + it.setRowsAndFrames(1,1) + }*/ + + actorValue[AVKey.BASEMASS] = 50.0 + + mainUIopenFun = { ui -> + (mainUI as? UIInventoryFull)?.openCrafting(mainUI!!.handler) + } + } + + @Transient override var lightBoxList = arrayListOf(Lightbox(Hitbox(0.0, 0.0, TILE_SIZED * 2, TILE_SIZED * 2), Cvec(0.5f, 0.18f, 0f, 0f))) + + @Transient private val actorBlocks = arrayOf( + arrayOf(Block.ACTORBLOCK_ALLOW_MOVE_DOWN, null), + arrayOf(Block.ACTORBLOCK_NO_COLLISION, Block.ACTORBLOCK_ALLOW_MOVE_DOWN) + ) + override fun placeActorBlocks() { + forEachBlockbox { x, y, ox, oy -> + val tile = actorBlocks[oy][ox] + if (tile != null) { + world!!.setTileTerrain(x, y, tile, true) + } + } + } + + @Transient private var mainUIhookHackInstalled = false + override fun update(delta: Float) { + // adding UI to the fixture as players may right-click on the workbenches instead of pressing a keyboard key + (INGAME as? TerrarumIngame)?.let { ingame -> + if (!mainUIhookHackInstalled && ingame.uiInventoryPlayerReady) { + mainUIhookHackInstalled = true + this.mainUI = ingame.uiInventoryPlayer // this field is initialised only after a full load so this hack is necessary + } + } + + super.update(delta) + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSmelterBasic.kt new file mode 100644 index 000000000..60b4426fd --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemSmelterBasic.kt @@ -0,0 +1,21 @@ +package net.torvald.terrarum.modulebasegame.gameitems + +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.gameitems.ItemID + +/** + * Created by minjaesong on 2023-12-04. + */ +class ItemSmelterBasic(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureSmelterBasic") { + + + override var baseMass = 50.0 + override val isDynamic = false + override val materialId = "" + override val itemImage: TextureRegion + get() = getItemImageFromSingleImage("basegame", "sprites/fixtures/smelter_basic.tga") + + override var baseToolSize: Double? = baseMass + override var originalName = "ITEM_SMELTER_BASIC" + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/OreItemBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/OreItemBase.kt index 4adc7af22..8e59a3670 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/OreItemBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/OreItemBase.kt @@ -152,11 +152,51 @@ class OreLead(originalID: ItemID) : OreItemBase(originalID) { override val itemImage: TextureRegion get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,6) } + +class IngotCopper(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_COPPER" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,5) +} +class IngotIron(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_IRON" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,5) +} class ItemCoalCoke(originalID: ItemID) : OreItemBase(originalID) { override var originalName = "ITEM_COAL_COKE" override val itemImage: TextureRegion get() = CommonResourcePool.getAsItemSheet("basegame.items").get(9,6) } +class IngotZinc(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_ZINC" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(4,5) +} +class IngotTin(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_TIN" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(5,5) +} +class IngotGold(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_GOLD" + override val materialId: String = "AURM" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(6, 5) +} +class IngotSilver(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_SILVER" + override val materialId: String = "ARGN" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(7,5) +} +class IngotLead(originalID: ItemID) : OreItemBase(originalID) { + override var originalName = "ITEM_INGOT_LEAD" + override val itemImage: TextureRegion + get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,5) +} + + class ItemClayBall(originalID: ItemID) : OreItemBase(originalID) { override var originalName = "BLOCK_CLAY" override val itemImage: TextureRegion