From ef6f39632d078670353538d59a381abc2fb8520c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 28 May 2023 18:41:21 +0900 Subject: [PATCH] world portal wip --- assets/mods/basegame/items/itemid.csv | 2 + .../sprites/fixtures/portal_device.tga | 3 ++ .../terrarum/modulebasegame/TerrarumIngame.kt | 28 ++++++------- .../gameactors/FixtureWorldPortal.kt | 40 +++++++++++++++++++ .../gameactors/PlayerBuilderSigrid.kt | 2 + .../gameitems/ItemWorldPortal.kt | 29 ++++++++++++++ .../modulebasegame/ui/UIWorldPortal.kt | 7 +++- .../modulebasegame/ui/UIWorldPortalListing.kt | 36 ++++++++--------- src/net/torvald/terrarum/ui/UICanvas.kt | 1 + ...rops_-_part_of_1x3_fixtures_collection.png | 3 ++ .../sprites/fixtures/portal_device.kra | 3 ++ 11 files changed, 121 insertions(+), 33 deletions(-) create mode 100644 assets/mods/basegame/sprites/fixtures/portal_device.tga create mode 100644 src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorldPortal.kt create mode 100644 work_files/graphics/sprites/fixtures/crops_-_part_of_1x3_fixtures_collection.png create mode 100644 work_files/graphics/sprites/fixtures/portal_device.kra diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 6da09e97f..f002e82e5 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -14,4 +14,6 @@ id;classname 258;net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorBirch 259;net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorRosewood +320;net.torvald.terrarum.modulebasegame.gameitems.ItemWorldPortal + 999999;net.torvald.terrarum.modulebasegame.gameitems.ItemTapestry diff --git a/assets/mods/basegame/sprites/fixtures/portal_device.tga b/assets/mods/basegame/sprites/fixtures/portal_device.tga new file mode 100644 index 000000000..cd753d857 --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/portal_device.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12e1ac92a3483189b25d34273252bb9144b6a6dcfc54a29258f03a8c706b335a +size 10258 diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index b193fbc3c..820a0b031 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -654,21 +654,21 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { // what if there's multiple of such fixtures? whatever, you are supposed to DISALLOW such situation. for (kk in actorsUnderMouse.indices) { if (mouseInInteractableRange(actor) { - actorsUnderMouse[kk].mainUI?.let { - uiOpened = true + actorsUnderMouse[kk].mainUI?.let { + uiOpened = true - // property 'uiFixture' is a dedicated property that the TerrarumIngame recognises. - // when it's not null, the UI will be updated and rendered - // when the UI is closed, it'll be replaced with a null value - uiFixture = it - it.setPosition( - (Toolkit.drawWidth - it.width) / 4, - (App.scr.height - it.height) / 4 // what the fuck? - ) - it.setAsOpen() - } - 0L - } == 0L) break + // property 'uiFixture' is a dedicated property that the TerrarumIngame recognises. + // when it's not null, the UI will be updated and rendered + // when the UI is closed, it'll be replaced with a null value + uiFixture = it + it.setPosition( + (Toolkit.drawWidth - it.width) / 4, + (App.scr.height - it.height) / 4 // what the fuck? + ) + it.setAsOpen() + } + 0L + } == 0L) break } if (!uiOpened) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt new file mode 100644 index 000000000..37fe3e1df --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt @@ -0,0 +1,40 @@ +package net.torvald.terrarum.modulebasegame.gameactors + +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.UIWorldPortal +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack + +/** + * Created by minjaesong on 2023-05-28. + */ +class FixtureWorldPortal : FixtureBase { + + constructor() : super( + BlockBox(BlockBox.NO_COLLISION, 5, 2), + nameFun = { Lang["ITEM_WORLD_PORTAL"] }, + mainUI = UIWorldPortal() + ) { + // TODO do something with (mainUI as UIWorldPortal).*** + } + + + init { + val itemImage = FixtureItemBase.getItemImageFromSheet("basegame", "sprites/fixtures/portal_device.tga", 80, 32) + + density = 2900.0 + setHitboxDimension(80, 32, 0, 0) + makeNewSprite(TextureRegionPack(itemImage.texture, 80, 32)).let { + it.setRowsAndFrames(1,1) + } + + actorValue[AVKey.BASEMASS] = FixtureLogicSignalEmitter.MASS + } + + override fun reload() { + super.reload() + + // TODO do something with (mainUI as UIWorldPortal).*** + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt index c9c27df2e..7767dabca 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/PlayerBuilderSigrid.kt @@ -98,6 +98,8 @@ object PlayerBuilderSigrid { inventory.add("item@basegame:258", 995) // doors inventory.add("item@basegame:259", 995) // doors + inventory.add("item@basegame:320", 1) // portal + WireCodex.getAll().forEach { try { inventory.add(it.id, 9995) diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorldPortal.kt new file mode 100644 index 000000000..dc6d9d224 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWorldPortal.kt @@ -0,0 +1,29 @@ +package net.torvald.terrarum.modulebasegame.gameitems + +import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.gameitems.ItemID +import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch + +/** + * Created by minjaesong on 2023-05-28. + */ +class ItemWorldPortal(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureWorldPortal") { + + override var dynamicID: ItemID = originalID + override val originalName = "ITEM_WORLD_PORTAL" + override var baseMass = 6000.0 + override var stackable = true + override var inventoryCategory = Category.MISC + override val isUnique = false + override val isDynamic = false + override val materialId = "" + override val itemImage: TextureRegion + get() = getItemImageFromSheet("basegame", "sprites/fixtures/portal_device.tga", 80, 32) + + override var baseToolSize: Double? = baseMass + + init { + equipPosition = EquipPosition.HAND_GRIP + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt index dabd95988..e94651730 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt @@ -18,7 +18,10 @@ import net.torvald.terrarum.ui.UIItemHorizontalFadeSlide * * Created by minjaesong on 2023-05-19. */ -class UIWorldPortal : UICanvas() { +class UIWorldPortal : UICanvas( + toggleKeyLiteral = App.getConfigInt("control_key_inventory"), + toggleButtonLiteral = App.getConfigInt("control_gamepad_start"), +) { override var width = App.scr.width override var height = App.scr.height @@ -97,11 +100,13 @@ class UIWorldPortal : UICanvas() { override fun doOpening(delta: Float) { super.doOpening(delta) resetUI() + INGAME.pause() INGAME.setTooltipMessage(null) } override fun doClosing(delta: Float) { super.doClosing(delta) + INGAME.resume() INGAME.setTooltipMessage(null) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt index c59441df0..96ef8634e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt @@ -30,7 +30,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { private val buttonHeight = 24 private val gridGap = listGap - private var worldList: List> + private val worldList = ArrayList>() private var selectedWorld: DiskSkimmer? = null @@ -70,13 +70,15 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { addUIitem(buttonReset) - - worldList = (INGAME.actorGamer.actorValue.getAsString(AVKey.WORLD_PORTAL_DICT) ?: "").split(",").map { - it.ascii85toUUID().let { it to App.savegameWorlds[it] } - }.filter { it.second != null } as List> } + override fun show() { + worldList.clear() + worldList.addAll((INGAME.actorGamer.actorValue.getAsString(AVKey.WORLD_PORTAL_DICT) ?: "").split(",").filter { it.isNotBlank() }.map { + it.ascii85toUUID().let { it to App.savegameWorlds[it] } + }.filter { it.second != null } as List>) + } override fun updateUI(delta: Float) { @@ -84,24 +86,22 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { override fun renderUI(batch: SpriteBatch, camera: Camera) { - batch.inUse { - // draw background // - // screencap panel - batch.color = cellCol - Toolkit.fillArea(batch, hx - thumbw - gridGap/2, y, thumbw, thumbh) + // draw background // + // screencap panel + batch.color = cellCol + Toolkit.fillArea(batch, hx - thumbw - gridGap/2, y, thumbw, thumbh) - // draw border // - // screencap panel - batch.color = highlightCol - Toolkit.drawBoxBorder(batch, hx - thumbw - gridGap/2 - 1, y - 1, thumbw + 2, thumbh + 2) - // memory gauge - Toolkit.drawBoxBorder(batch, hx - 330 - gridGap/2 - 1, y + listHeight - 1, 240 + 2, buttonHeight + 2) + // draw border // + // screencap panel + batch.color = highlightCol + Toolkit.drawBoxBorder(batch, hx - thumbw - gridGap/2 - 1, y - 1, thumbw + 2, thumbh + 2) + // memory gauge + Toolkit.drawBoxBorder(batch, hx - 330 - gridGap/2 - 1, y + listHeight - 1, 240 + 2, buttonHeight + 2) - uiItems.forEach { it.render(batch, camera) } - } + uiItems.forEach { it.render(batch, camera) } } diff --git a/src/net/torvald/terrarum/ui/UICanvas.kt b/src/net/torvald/terrarum/ui/UICanvas.kt index 7594b3556..75064a0b2 100644 --- a/src/net/torvald/terrarum/ui/UICanvas.kt +++ b/src/net/torvald/terrarum/ui/UICanvas.kt @@ -154,6 +154,7 @@ abstract class UICanvas( */ open fun doOpening(delta: Float) { handler.opacity = handler.openCloseCounter / openCloseTime + } /** diff --git a/work_files/graphics/sprites/fixtures/crops_-_part_of_1x3_fixtures_collection.png b/work_files/graphics/sprites/fixtures/crops_-_part_of_1x3_fixtures_collection.png new file mode 100644 index 000000000..dcbd14f8a --- /dev/null +++ b/work_files/graphics/sprites/fixtures/crops_-_part_of_1x3_fixtures_collection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f0c54047ce9048f3d7eeaa38eed9ccd567e163de7080f83a9200d22814d66d +size 30962 diff --git a/work_files/graphics/sprites/fixtures/portal_device.kra b/work_files/graphics/sprites/fixtures/portal_device.kra new file mode 100644 index 000000000..026bd2a59 --- /dev/null +++ b/work_files/graphics/sprites/fixtures/portal_device.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b3069a8ce6a2f3958f949519fb9e18e5c30fd28e4594ec1296636e9d0bdc5e +size 77379