diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index b8e60e627..3f7fe0f5c 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -36,6 +36,8 @@ import java.util.function.Consumer */ open class IngameInstance(val batch: SpriteBatch, val isMultiplayer: Boolean = false) : TerrarumGamescreen { + var WORLD_UPDATE_TIMER = Random().nextInt(1020) + 1; protected set + open protected val actorMBRConverter = object : MBRConverter { override fun getDimensions(): Int = 2 override fun getMin(axis: Int, t: ActorWithBody): Double = diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index d80dd219b..af1cd09ba 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -1726,7 +1726,7 @@ open class ActorWithBody : Actor { throw Error("Hitbox dimension was not set. (don't modify hitbox directly -- use 'setHitboxDimension()')") // warnings - if (sprite == null && isVisible) + if (sprite == null && isVisible && this.javaClass.simpleName != "DroppedItem") printdbg(this, "Caution: actor ${this.javaClass.simpleName} is visible but the sprite was not set.\n" + "Actor localhash: ${this.localHashStr}") else if (sprite != null && !isVisible) diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 1b9475d95..c71fb1ee2 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -64,8 +64,6 @@ import java.util.concurrent.locks.ReentrantLock open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { - var WORLD_UPDATE_TIMER = Random().nextInt(1020) + 1; private set - var historicalFigureIDBucket: ArrayList = ArrayList() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt index fd83a8c07..3d8310f4c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/DroppedItem.kt @@ -4,14 +4,15 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import com.jme3.math.FastMath import net.torvald.terrarum.BlockCodex +import net.torvald.terrarum.INGAME import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE +import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.ActorWithBody import net.torvald.terrarum.gameactors.PhysProperties import net.torvald.terrarum.gameactors.drawBodyInGoodPosition import net.torvald.terrarum.gameitems.ItemID -import net.torvald.terrarum.modulebasegame.worldgenerator.TWO_PI /** * Created by minjaesong on 2016-03-15. @@ -20,6 +21,7 @@ open class DroppedItem : ActorWithBody { companion object { const val NO_PICKUP_TIME = 1f + const val MERGER_RANGE = 8.0 * TILE_SIZED } var itemID: ItemID = ""; private set @@ -32,7 +34,7 @@ open class DroppedItem : ActorWithBody { private var timeSinceSpawned = 0f - fun canBePickedUp() = timeSinceSpawned > NO_PICKUP_TIME + fun canBePickedUp() = timeSinceSpawned > NO_PICKUP_TIME && !flagDespawn constructor(itemID: ItemID, topLeftX: Int, topLeftY: Int) : super(RenderOrder.MIDTOP, PhysProperties.PHYSICS_OBJECT) { this.itemID = itemID @@ -96,7 +98,15 @@ open class DroppedItem : ActorWithBody { super.update(delta) timeSinceSpawned += delta - // TODO merge into the already existing droppeditem with isStationary==true if one is detected + // merge into the already existing droppeditem with isStationary==true if one is detected + if (!this.isStationary) { + INGAME.findNearestActor(this) { it is DroppedItem && it.itemID == this.itemID && it.isStationary }?.let { + if (it.distance <= MERGER_RANGE) { + (it.get() as DroppedItem).itemCount += this.itemCount + this.flagDespawn() + } + } + } } } \ No newline at end of file