diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index 729d9f6a8..11c28a86f 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -352,7 +352,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo * If the actor is null, this function will do nothing. */ open fun queueActorAddition(actor: Actor?) { - printdbg(this, "New actor $actor") +// printdbg(this, "New actor $actor") if (actor == null) return actorAdditionQueue.add(actor to StackTraceRecorder()) } diff --git a/src/net/torvald/terrarum/gamecontroller/IngameController.kt b/src/net/torvald/terrarum/gamecontroller/IngameController.kt index 5eee7a261..6ac9ea043 100644 --- a/src/net/torvald/terrarum/gamecontroller/IngameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/IngameController.kt @@ -14,8 +14,10 @@ import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.modulebasegame.TerrarumIngame +import net.torvald.terrarum.modulebasegame.gameactors.DroppedItem import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar import net.torvald.terrarum.worlddrawer.WorldCamera +import org.dyn4j.geometry.Vector2 import java.util.* /** @@ -180,6 +182,24 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() { terrarumIngame.uiPieMenu.setAsOpen() terrarumIngame.uiQuickBar.setAsClose() } + + // toss items + if (Gdx.input.isKeyJustPressed(ControlPresets.getKey("control_key_discard"))) { + val player = terrarumIngame.actorNowPlaying + val item = if (player != null) player.inventory.quickSlot[player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL)!!] else null + if (player != null && item != null) { + // remove an item from the inventory + player.inventory.remove(item, 1) + // create and spawn the droppeditem + DroppedItem(item, + player.hitbox.centeredX, + player.hitbox.centeredY, + Vector2(-4.0 * player.scale.sqrt() * player.sprite!!.flipHorizontal.toInt(1).minus(1), -0.1) + ).let { drop -> + INGAME.queueActorAddition(drop) + } + } + } } terrarumIngame.uiContainer.forEach { it?.keyDown(keycode) } // for KeyboardControlled UIcanvases diff --git a/src/net/torvald/terrarum/gameitems/GameItem.kt b/src/net/torvald/terrarum/gameitems/GameItem.kt index d25ae821e..17a30d310 100644 --- a/src/net/torvald/terrarum/gameitems/GameItem.kt +++ b/src/net/torvald/terrarum/gameitems/GameItem.kt @@ -428,5 +428,5 @@ fun ItemID.isWire() = this.startsWith("wire@") fun ItemID.isDynamic() = this.startsWith("$PREFIX_DYNAMICITEM:") fun ItemID.isActor() = this.startsWith("$PREFIX_ACTORITEM@") fun ItemID.isVirtual() = this.startsWith("$PREFIX_VIRTUALTILE@") -fun ItemID.isBlock() = !this.contains('@') +fun ItemID.isBlock() = !this.contains('@') && !this.isDynamic() fun ItemID.isWall() = this.startsWith("wall@") diff --git a/src/net/torvald/terrarum/modulebasegame/SavegameMigrator.kt b/src/net/torvald/terrarum/modulebasegame/SavegameMigrator.kt index bb114ce59..70f87c1ba 100644 --- a/src/net/torvald/terrarum/modulebasegame/SavegameMigrator.kt +++ b/src/net/torvald/terrarum/modulebasegame/SavegameMigrator.kt @@ -1,8 +1,10 @@ package net.torvald.terrarum.modulebasegame import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.BlockCodex import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.gameactors.Actor +import net.torvald.terrarum.gameitems.isBlock import net.torvald.terrarum.gameitems.isDynamic import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer @@ -127,8 +129,11 @@ internal object SavegameMigrator { val oldQuickSlot = actor.inventory.quickSlot.copyOf() val oldItems = actor.inventory.clear() + oldItems.forEach { (itm, qty) -> - actor.inventory.add(itm, qty) + if (itm.isBlock() && !BlockCodex[itm].hasTag("AIR") && !BlockCodex[itm].isActorBlock) { + actor.inventory.add(itm, qty) + } } oldItemEquipped.forEachIndexed { index, id0 -> diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt index 763de38aa..6caf21e57 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt @@ -83,6 +83,8 @@ open class DroppedItem : ActorWithBody { else { externalV.set(spawnVelo) } + + printdbg(this, "DroppedItem with itemID '${itemID}'") } override fun drawBody(batch: SpriteBatch) {