mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 18:44:05 +09:00
tossing held items
This commit is contained in:
@@ -352,7 +352,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
|
|||||||
* If the actor is null, this function will do nothing.
|
* If the actor is null, this function will do nothing.
|
||||||
*/
|
*/
|
||||||
open fun queueActorAddition(actor: Actor?) {
|
open fun queueActorAddition(actor: Actor?) {
|
||||||
printdbg(this, "New actor $actor")
|
// printdbg(this, "New actor $actor")
|
||||||
if (actor == null) return
|
if (actor == null) return
|
||||||
actorAdditionQueue.add(actor to StackTraceRecorder())
|
actorAdditionQueue.add(actor to StackTraceRecorder())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,10 @@ import net.torvald.terrarum.gameactors.AVKey
|
|||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
import net.torvald.terrarum.gameworld.fmod
|
import net.torvald.terrarum.gameworld.fmod
|
||||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||||
|
import net.torvald.terrarum.modulebasegame.gameactors.DroppedItem
|
||||||
import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar
|
import net.torvald.terrarum.modulebasegame.ui.UIQuickslotBar
|
||||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||||
|
import org.dyn4j.geometry.Vector2
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -180,6 +182,24 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
|
|||||||
terrarumIngame.uiPieMenu.setAsOpen()
|
terrarumIngame.uiPieMenu.setAsOpen()
|
||||||
terrarumIngame.uiQuickBar.setAsClose()
|
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
|
terrarumIngame.uiContainer.forEach { it?.keyDown(keycode) } // for KeyboardControlled UIcanvases
|
||||||
|
|||||||
@@ -428,5 +428,5 @@ fun ItemID.isWire() = this.startsWith("wire@")
|
|||||||
fun ItemID.isDynamic() = this.startsWith("$PREFIX_DYNAMICITEM:")
|
fun ItemID.isDynamic() = this.startsWith("$PREFIX_DYNAMICITEM:")
|
||||||
fun ItemID.isActor() = this.startsWith("$PREFIX_ACTORITEM@")
|
fun ItemID.isActor() = this.startsWith("$PREFIX_ACTORITEM@")
|
||||||
fun ItemID.isVirtual() = this.startsWith("$PREFIX_VIRTUALTILE@")
|
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@")
|
fun ItemID.isWall() = this.startsWith("wall@")
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package net.torvald.terrarum.modulebasegame
|
package net.torvald.terrarum.modulebasegame
|
||||||
|
|
||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
|
import net.torvald.terrarum.BlockCodex
|
||||||
import net.torvald.terrarum.ItemCodex
|
import net.torvald.terrarum.ItemCodex
|
||||||
import net.torvald.terrarum.gameactors.Actor
|
import net.torvald.terrarum.gameactors.Actor
|
||||||
|
import net.torvald.terrarum.gameitems.isBlock
|
||||||
import net.torvald.terrarum.gameitems.isDynamic
|
import net.torvald.terrarum.gameitems.isDynamic
|
||||||
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
|
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory
|
||||||
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
|
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
|
||||||
@@ -127,8 +129,11 @@ internal object SavegameMigrator {
|
|||||||
val oldQuickSlot = actor.inventory.quickSlot.copyOf()
|
val oldQuickSlot = actor.inventory.quickSlot.copyOf()
|
||||||
val oldItems = actor.inventory.clear()
|
val oldItems = actor.inventory.clear()
|
||||||
|
|
||||||
|
|
||||||
oldItems.forEach { (itm, qty) ->
|
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 ->
|
oldItemEquipped.forEachIndexed { index, id0 ->
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ open class DroppedItem : ActorWithBody {
|
|||||||
else {
|
else {
|
||||||
externalV.set(spawnVelo)
|
externalV.set(spawnVelo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printdbg(this, "DroppedItem with itemID '${itemID}'")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun drawBody(batch: SpriteBatch) {
|
override fun drawBody(batch: SpriteBatch) {
|
||||||
|
|||||||
Reference in New Issue
Block a user