sign engraver wip

This commit is contained in:
minjaesong
2024-03-22 18:34:34 +09:00
parent 8e8c206e3a
commit 7690d3d672
13 changed files with 262 additions and 6 deletions

View File

@@ -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
1 id drop spawn name shdr shdg shdb shduv str dsty mate solid wall grav dlfn fv fr lumr lumg lumb lumuv colour vscs refl tags
3 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
4 # rocks
5 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 ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK
6 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 ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK
7 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
8 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
9 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 ROCK,NATURA,OREBEARING,DEEPROCK,BRICKROCK
10 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
11 # dirts
12 32 32 32 BLOCK_DIRT 0.1252 0.1252 0.1252 0.1252 12 1400 DIRT 1 1 N/A 0 4 16 0.0000 0.0000 0.0000 0.0000 N/A N/A 0.0 DIRT,NATURAL,CULTIVABLE
13 33 32 32 BLOCK_GRASS 0.1252 0.1252 0.1252 0.1252 12 1400 GRSS 1 0 N/A 0 0 16 0.0000 0.0000 0.0000 0.0000 N/A N/A 0.0 GRASS,NATURAL,CULTIVABLE

View File

@@ -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"]
]
}
}

View File

@@ -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
1 id classname tags
51 51 net.torvald.terrarum.modulebasegame.gameitems.ItemElectricWorkbench FIXTURE,CRAFTING
52 52 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSevenSeg FIXTURE,SIGNAL
53 # ingots 53 net.torvald.terrarum.modulebasegame.gameitems.ItemEngravingWorkbench FIXTURE,CRAFTING
54 # ingots
55 112 net.torvald.terrarum.modulebasegame.gameitems.IngotCopper INGOT
56 113 net.torvald.terrarum.modulebasegame.gameitems.IngotIron INGOT
57 114 net.torvald.terrarum.modulebasegame.gameitems.ItemCoalCoke COMBUSTIBLE

View File

@@ -1,4 +1,5 @@
{
"CONTEXT_ENGRAVER_TEXT": "Text",
"CONTEXT_GENERATOR_SEED": "Seed",
"CONTEXT_ITEM_FIXTURES": "Fixtures",
"CONTEXT_ITEM_MAP": "Map",

View File

@@ -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",

View File

@@ -1,4 +1,5 @@
{
"CONTEXT_ENGRAVER_TEXT": "문구",
"CONTEXT_GENERATOR_SEED": "시드",
"CONTEXT_ITEM_FIXTURES": "기구",
"CONTEXT_ITEM_MAP": "지도",

View File

@@ -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": "취옥석",

View File

@@ -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
}
}

View File

@@ -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"
}

View File

@@ -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

View File

@@ -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!
}
}

View File

@@ -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

View File

@@ -314,7 +314,7 @@ class UIItemCatBar(
}
private val labelCol = Color(0xe0e0e0ff.toInt())
private val labelCol = Color(0xe8e8e8ff.toInt())