From 7690d3d672633b0bb0e007b57f00f7a5f9f64108 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 22 Mar 2024 18:34:34 +0900 Subject: [PATCH] sign engraver wip --- assets/mods/basegame/blocks/blocks.csv | 6 +- assets/mods/basegame/crafting/masonry.json | 5 +- assets/mods/basegame/items/itemid.csv | 1 + assets/mods/basegame/locales/en/game.json | 1 + assets/mods/basegame/locales/en/items.json | 2 + assets/mods/basegame/locales/koKR/game.json | 1 + assets/mods/basegame/locales/koKR/items.json | 2 + .../gameactors/FixtureWorkbench.kt | 27 +++ .../modulebasegame/gameitems/ItemWorkbench.kt | 17 ++ .../modulebasegame/ui/UIAlloyingFurnace.kt | 2 + .../modulebasegame/ui/UIEngravingTextSign.kt | 200 ++++++++++++++++++ .../modulebasegame/ui/UISmelterBasic.kt | 2 + src/net/torvald/terrarum/ui/UIItemCatBar.kt | 2 +- 13 files changed, 262 insertions(+), 6 deletions(-) create mode 100644 src/net/torvald/terrarum/modulebasegame/ui/UIEngravingTextSign.kt diff --git a/assets/mods/basegame/blocks/blocks.csv b/assets/mods/basegame/blocks/blocks.csv index 56525d040..2c1ed4b57 100644 --- a/assets/mods/basegame/blocks/blocks.csv +++ b/assets/mods/basegame/blocks/blocks.csv @@ -3,11 +3,11 @@ "1";"N/A";"N/A";"BLOCK_UPDATE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INTERNAL,NORANDTILE" # rocks -"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK" -"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK" +"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK" +"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK" "18";"18";"18";"BLOCK_STONE_TILE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.18";"STONE,NORANDTILE" "19";"19";"19";"BLOCK_STONE_BRICKS";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"STONE,NORANDTILE" -"20";"20";"20";"BLOCK_STONE_DEEP";"0.1252";"0.1252";"0.1252";"0.1252";"80";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURA,OREBEARING,DEEPROCK" +"20";"20";"20";"BLOCK_STONE_DEEP";"0.1252";"0.1252";"0.1252";"0.1252";"80";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURA,OREBEARING,DEEPROCK,BRICKROCK" "21";"21";"21";"BLOCK_STONE_MARBLE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.1";"ROCK,NATURAL,DEEPROCK" # dirts diff --git a/assets/mods/basegame/crafting/masonry.json b/assets/mods/basegame/crafting/masonry.json index 57b2efca1..b16a845e2 100644 --- a/assets/mods/basegame/crafting/masonry.json +++ b/assets/mods/basegame/crafting/masonry.json @@ -3,14 +3,15 @@ "basegame:19": { "workbench": "masonry", "ingredients": [ - [1, 1, "$ROCK"] + [1, 1, "$BRICKROCK"] ] }, /* white stone tile */ "basegame:18": { "workbench": "masonry", "ingredients": [ - [1, 1, "basegame:21"] + [1, 1, "basegame:21"], + [1, 3, "$BRICKROCK"] ] } } \ No newline at end of file diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index dd0604641..adb51f928 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -51,6 +51,7 @@ id;classname;tags 50;net.torvald.terrarum.modulebasegame.gameitems.ItemSolderingWire; 51;net.torvald.terrarum.modulebasegame.gameitems.ItemElectricWorkbench;FIXTURE,CRAFTING 52;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSevenSeg;FIXTURE,SIGNAL +53;net.torvald.terrarum.modulebasegame.gameitems.ItemEngravingWorkbench;FIXTURE,CRAFTING # ingots 112;net.torvald.terrarum.modulebasegame.gameitems.IngotCopper;INGOT diff --git a/assets/mods/basegame/locales/en/game.json b/assets/mods/basegame/locales/en/game.json index fb99daa55..c854588ed 100644 --- a/assets/mods/basegame/locales/en/game.json +++ b/assets/mods/basegame/locales/en/game.json @@ -1,4 +1,5 @@ { + "CONTEXT_ENGRAVER_TEXT": "Text", "CONTEXT_GENERATOR_SEED": "Seed", "CONTEXT_ITEM_FIXTURES": "Fixtures", "CONTEXT_ITEM_MAP": "Map", diff --git a/assets/mods/basegame/locales/en/items.json b/assets/mods/basegame/locales/en/items.json index 78bf21d23..c9e9d7429 100644 --- a/assets/mods/basegame/locales/en/items.json +++ b/assets/mods/basegame/locales/en/items.json @@ -5,11 +5,13 @@ "ITEM_CHERRY_BOMB": "Bomb", "ITEM_COAL_COKE": "Coal Coke", "ITEM_COPPER_BULB": "Copper Bulb", + "ITEM_COPPER_SIGN": "Copper Sign", "ITEM_DOOR_OAK": "Oak Door", "ITEM_DOOR_EBONY": "Ebony Door", "ITEM_DOOR_BIRCH": "Birch Door", "ITEM_DOOR_ROSEWOOD": "Rosewood Door", "ITEM_ELECTRIC_WORKBENCH": "Electric Workbench", + "ITEM_ENGRAVING_WORKBENCH": "Engraving Workbench", "ITEM_FURNACE_AND_ANVIL": "Furnace and Anvil", "ITEM_GEM_RUBY": "Raw Ruby", "ITEM_GEM_EMERALD": "Raw Emerald", diff --git a/assets/mods/basegame/locales/koKR/game.json b/assets/mods/basegame/locales/koKR/game.json index 6b7979fec..ab858e368 100644 --- a/assets/mods/basegame/locales/koKR/game.json +++ b/assets/mods/basegame/locales/koKR/game.json @@ -1,4 +1,5 @@ { + "CONTEXT_ENGRAVER_TEXT": "문구", "CONTEXT_GENERATOR_SEED": "시드", "CONTEXT_ITEM_FIXTURES": "기구", "CONTEXT_ITEM_MAP": "지도", diff --git a/assets/mods/basegame/locales/koKR/items.json b/assets/mods/basegame/locales/koKR/items.json index aab0cd9bc..9f6b9ec37 100644 --- a/assets/mods/basegame/locales/koKR/items.json +++ b/assets/mods/basegame/locales/koKR/items.json @@ -5,11 +5,13 @@ "ITEM_CHERRY_BOMB": "폭탄", "ITEM_COAL_COKE": "코크스", "ITEM_COPPER_BULB": "구리 전구", + "ITEM_COPPER_SIGN": "구리 간판", "ITEM_DOOR_OAK": "나무 문", "ITEM_DOOR_EBONY": "흑단 문", "ITEM_DOOR_BIRCH": "백단 문", "ITEM_DOOR_ROSEWOOD": "자단 문", "ITEM_ELECTRIC_WORKBENCH": "전기 작업대", + "ITEM_ENGRAVING_WORKBENCH": "조각 작업대", "ITEM_FURNACE_AND_ANVIL": "화로와 모루", "ITEM_GEM_RUBY": "홍옥석", "ITEM_GEM_EMERALD": "취옥석", diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt index 6ce70e049..62eef3b7d 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt @@ -6,6 +6,7 @@ import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarum.modulebasegame.ui.UICrafting +import net.torvald.terrarum.modulebasegame.ui.UIEngravingTextSign import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -58,4 +59,30 @@ class FixtureElectricWorkbench : FixtureBase, CraftingStation { actorValue[AVKey.BASEMASS] = 40.0 } +} + +/** + * Created by minjaesong on 2024-03-22. + */ +class FixtureEngravingWorkbench : FixtureBase, CraftingStation { + + @Transient override val tags = listOf("engraving") + + constructor() : super( + BlockBox(BlockBox.NO_COLLISION, 2, 2), + nameFun = { Lang["ITEM_ENGRAVING_WORKBENCH"] }, + mainUI = UIEngravingTextSign() + ) { + val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/engraving_workbench.tga") + + density = BlockCodex[Block.PLANK_NORMAL].density.toDouble() + setHitboxDimension(itemImage.texture.width, itemImage.texture.height, 0, 0) + + makeNewSprite(TextureRegionPack(itemImage.texture, 32, 32)).let { + it.setRowsAndFrames(1,1) + } + + actorValue[AVKey.BASEMASS] = 40.0 + } + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorkbench.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorkbench.kt index 2967a26bc..0677e0a74 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorkbench.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorkbench.kt @@ -36,3 +36,20 @@ class ItemElectricWorkbench(originalID: ItemID) : FixtureItemBase(originalID, "n override var originalName = "ITEM_ELECTRIC_WORKBENCH" } + +/** + * Created by minjaesong on 2024-03-22. + */ +class ItemEngravingWorkbench(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureEngravingWorkbench") { + + + override var baseMass = 40.0 + override val canBeDynamic = false + override val materialId = "" + override val itemImage: TextureRegion + get() = getItemImageFromSheet("basegame", "sprites/fixtures/engraving_workbench.tga", 32, 32, 0, 0) + + override var baseToolSize: Double? = baseMass + override var originalName = "ITEM_ENGRAVING_WORKBENCH" + +} diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIAlloyingFurnace.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIAlloyingFurnace.kt index ab1ff9ec6..7f92cd464 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIAlloyingFurnace.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIAlloyingFurnace.kt @@ -325,6 +325,8 @@ class UIAlloyingFurnace(val smelter: FixtureAlloyingFurnace) : UICanvas( override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) { + UIInventoryFull.drawBackground(batch, opacity) + val clickedOn = clickedOnState.get() / SmelterGuiEventBuilder.SLOT_INDEX_STRIDE diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIEngravingTextSign.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIEngravingTextSign.kt new file mode 100644 index 000000000..f4de1c123 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIEngravingTextSign.kt @@ -0,0 +1,200 @@ +package net.torvald.terrarum.modulebasegame.ui + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.OrthographicCamera +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.* +import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE +import net.torvald.terrarum.blockproperties.Block +import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory +import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory +import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing +import net.torvald.terrarum.ui.* +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack +import net.torvald.unicode.getKeycapPC +import kotlin.math.roundToInt + +/** + * Created by minjaesong on 2024-03-22. + */ +class UIEngravingTextSign : UICanvas( + toggleKeyLiteral = "control_key_inventory", + toggleButtonLiteral = "control_gamepad_start" +) { + + init { + CommonResourcePool.addToLoadingList("spritesheet:copper_sign") { + TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/text_sign_glass_copper.tga"), TILE_SIZE, TILE_SIZE) + } + CommonResourcePool.loadAll() + } + + private val signSheet = CommonResourcePool.getAsTextureRegionPack("spritesheet:copper_sign") + + override var width = Toolkit.drawWidth + override var height = App.scr.height + + fun getPlayerInventory(): ActorInventory = INGAME.actorNowPlaying!!.inventory + + private val row0 = App.scr.halfh + 48 + private val row1 = row0 + 60 + private val row2 = row1 + 40 + + private val row3 = maxOf(UIInventoryFull.yEnd.toInt() - 20 - 36, row2 + 64) + + private val goButtonWidth = 180 + + private val internalWidth = 480 + private val drawX = (Toolkit.drawWidth - internalWidth) / 2 + private val inputWidth = 350 + private val spinnerWidth = ControlPanelCommon.CONFIG_SPINNER_WIDTH + private val ingredientsWidth = UIItemInventoryElemSimple.height * 3 + 16 + private val inputX = drawX + internalWidth - inputWidth + 5 + + private val textInput = UIItemTextLineInput(this, inputX, row0, inputWidth) + + private val COPPER_BULB = "item@basegame:35" + private val ROCK_TILE = Block.STONE_TILE_WHITE + private val GLASS = Block.GLASS_CRUDE + + private fun setIngredient(num: Int) { + ingredients.clear() + ingredients.add(GLASS, num * 2L) + ingredients.add(ROCK_TILE, num * 1L) + ingredients.add(COPPER_BULB, num * 1L) + ingredientsPanel.rebuild(UIItemCatBar.FILTER_CAT_ALL) + } + + private fun refreshCraftButtonStatus() { + val player = getPlayerInventory() + val canCraft = ingredients.all { + (player.searchByID(it.itm)?.qty ?: 0L) >= it.qty + } + goButton.isEnabled = canCraft + } + + private val ingredients = FixtureInventory() // this one is definitely not to be changed + private val ingredientsPanel = UIItemInventoryItemGrid( + this, + { ingredients }, + drawX, + row2, + 3, 1, + drawScrollOnRightside = false, + drawWallet = false, + hideSidebar = true, + colourTheme = UIItemInventoryCellCommonRes.defaultInventoryCellTheme.copy( + cellHighlightSubCol = Toolkit.Theme.COL_INACTIVE + ), + keyDownFun = { _, _, _, _, _ -> }, + wheelFun = { _, _, _, _, _, _ -> }, + touchDownFun = { _, _, _, _, _ -> }, + ).also { + it.isCompactMode = true + } + + private val panelCountSpinner = UIItemSpinner(this, inputX + inputWidth - ingredientsWidth, row2 - 1, 2, 2, 32, 1, spinnerWidth, numberToTextFunction = { "${it.toDouble().roundToInt()}" }).also { + it.selectionChangeListener = { num0 -> + val num = num0.toInt() + setIngredient(num) + refreshCraftButtonStatus() + } + } + + + private val goButton = UIItemTextButton(this, + { Lang["GAME_ACTION_CRAFT"] }, (width - goButtonWidth) / 2, row3, goButtonWidth, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true).also { + + it.clickOnceListener = { _, _ -> + + + + } + } + + private fun resetUI() { + panelCountSpinner.resetToSmallest() + textInput.clearText() + setIngredient(panelCountSpinner.value.toInt()) + refreshCraftButtonStatus() + } + + override fun show() { + super.show() + tooltipShowing.clear() + INGAME.setTooltipMessage(null) + resetUI() + } + + init { + addUIitem(textInput) + addUIitem(panelCountSpinner) + addUIitem(ingredientsPanel) + addUIitem(goButton) + } + + override fun updateImpl(delta: Float) { + uiItems.forEach { it.update(delta) } + } + + private val halfSlotOffset = (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap) / 2 + private val thisOffsetX = UIInventoryFull.INVENTORY_CELLS_OFFSET_X() + UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap - halfSlotOffset + + private val controlHelp: String + get() = if (App.environment == RunningEnvironment.PC) + "${getKeycapPC(ControlPresets.getKey("control_key_inventory"))} ${Lang["GAME_ACTION_CLOSE"]}" + else + "${App.gamepadLabelStart} ${Lang["GAME_ACTION_CLOSE"]}" + + override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) { + UIInventoryFull.drawBackground(batch, opacity) + + // paint UI elements + uiItems.forEach { it.render(frameDelta, batch, camera) } + + // paint labels + batch.color = Color.WHITE + + val controlHintXPos = thisOffsetX + 2f + blendNormalStraightAlpha(batch) + App.fontGame.draw(batch, controlHelp, controlHintXPos, UIInventoryFull.yEnd - 20) + + App.fontGame.draw(batch, Lang["CONTEXT_ENGRAVER_TEXT"], drawX, row0) + Toolkit.drawTextCentered(batch, App.fontGame, Lang["MENU_OPTIONS_SIZE"], spinnerWidth, panelCountSpinner.posX, row1) + Toolkit.drawTextCentered(batch, App.fontGame, Lang["GAME_INVENTORY_INGREDIENTS"], ingredientsWidth, ingredientsPanel.posX, row1) + + } + + override fun dispose() { + + } + + + override fun doOpening(delta: Float) { + super.doOpening(delta) + INGAME.setTooltipMessage(null) + INGAME.pause() + } + + override fun doClosing(delta: Float) { + super.doClosing(delta) + INGAME.setTooltipMessage(null) + INGAME.resume() + } + + override fun endOpening(delta: Float) { + super.endOpening(delta) + tooltipShowing.clear() + INGAME.setTooltipMessage(null) // required! + } + + override fun endClosing(delta: Float) { + super.endClosing(delta) + resetUI() + tooltipShowing.clear() + INGAME.setTooltipMessage(null) // required! + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UISmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/ui/UISmelterBasic.kt index 5c4acd0f6..7fbc8f27c 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UISmelterBasic.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UISmelterBasic.kt @@ -312,6 +312,8 @@ class UISmelterBasic(val smelter: FixtureSmelterBasic) : UICanvas( override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) { + UIInventoryFull.drawBackground(batch, opacity) + val clickedOn = clickedOnState.get() / SLOT_INDEX_STRIDE diff --git a/src/net/torvald/terrarum/ui/UIItemCatBar.kt b/src/net/torvald/terrarum/ui/UIItemCatBar.kt index 439581c26..c53cbb972 100644 --- a/src/net/torvald/terrarum/ui/UIItemCatBar.kt +++ b/src/net/torvald/terrarum/ui/UIItemCatBar.kt @@ -314,7 +314,7 @@ class UIItemCatBar( } - private val labelCol = Color(0xe0e0e0ff.toInt()) + private val labelCol = Color(0xe8e8e8ff.toInt())