mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
sign engraver wip
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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"]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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,4 +1,5 @@
|
||||
{
|
||||
"CONTEXT_ENGRAVER_TEXT": "Text",
|
||||
"CONTEXT_GENERATOR_SEED": "Seed",
|
||||
"CONTEXT_ITEM_FIXTURES": "Fixtures",
|
||||
"CONTEXT_ITEM_MAP": "Map",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"CONTEXT_ENGRAVER_TEXT": "문구",
|
||||
"CONTEXT_GENERATOR_SEED": "시드",
|
||||
"CONTEXT_ITEM_FIXTURES": "기구",
|
||||
"CONTEXT_ITEM_MAP": "지도",
|
||||
|
||||
@@ -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": "취옥석",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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!
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -314,7 +314,7 @@ class UIItemCatBar(
|
||||
|
||||
}
|
||||
|
||||
private val labelCol = Color(0xe0e0e0ff.toInt())
|
||||
private val labelCol = Color(0xe8e8e8ff.toInt())
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user