diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index a62c66a6f..db22927c2 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -270,6 +270,8 @@ object Terrarum : Disposable { get() = Gdx.input.isButtonPressed(App.getConfigInt("config_mouseprimary")) val mouseJustDown: Boolean get() = Gdx.input.isButtonJustPressed(App.getConfigInt("config_mouseprimary")) + val mouseOnPlayer: Boolean + get() = ingame?.actorNowPlaying?.mouseUp ?: false /** diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt index e3d694798..907491a8c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/FixtureItemBase.kt @@ -34,7 +34,8 @@ open class FixtureItemBase(originalID: ItemID, val fixtureClassName: String) : G // println("FixtureItemBase init: $hash") } - @Transient private var ghostItem = AtomicReference() + @Transient + protected var ghostItem = AtomicReference() @Transient private var ghostInit = AtomicBoolean(false) override var dynamicID: ItemID = originalID diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWallCalendar.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWallCalendar.kt index b66686497..6b180eaa7 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWallCalendar.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemWallCalendar.kt @@ -1,8 +1,13 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.Terrarum.mouseOnPlayer import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE +import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gameitems.ItemID +import net.torvald.terrarum.gameitems.getModuleName +import net.torvald.terrarum.gameitems.mouseInInteractableRange +import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer /** * Created by minjaesong on 2023-08-08. @@ -20,4 +25,50 @@ class ItemWallCalendar(originalID: ItemID) : FixtureItemBase(originalID, "net.to override var baseToolSize: Double? = baseMass override var originalName = "ITEM_CALENDAR" +} + + +/** + * Created by minjaesong on 2025-04-06. + */ +class ItemClipboard(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureWallCalendar") { + + override var dynamicID: ItemID = originalID + override var baseMass = 1.0 + override val canBeDynamic = false + override val materialId = "" + init { + itemImage = getItemImageFromSingleImage("basegame", "sprites/fixtures/clipboard.tga") + } + + override var baseToolSize: Double? = baseMass + override var originalName = "ITEM_CLIPBOARD" + + override fun startPrimaryUse(actor: ActorWithBody, delta: Float): Long { + // click on reachable wall: place it + // click on player or unreachable: opens UI + + + val reachable = mouseInInteractableRange(actor) { _, _, mx, my -> + val item = ghostItem.getAndSet(makeFixture(originalID.getModuleName())) // renew the "ghost" otherwise you'll be spawning exactly the same fixture again; old ghost will be returned + + val spawnSuccessful = item.spawn(mx, my, if (actor is IngamePlayer) actor.uuid else null) // return true when placed, false when cannot be placed + + if (spawnSuccessful) 1L + else if (mouseOnPlayer) -1L + else 0L + } + + if (reachable == -1L) { + openEditorUI() + return -1L + } + + return if (reachable == 1L) 1L else -1L + } + + + fun openEditorUI() { + TODO() + } } \ No newline at end of file