merging dropped items when they tightly overlap

This commit is contained in:
minjaesong
2022-01-13 11:14:21 +09:00
parent 1060d96364
commit f1d8850196
4 changed files with 16 additions and 6 deletions

View File

@@ -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<ActorWithBody> {
override fun getDimensions(): Int = 2
override fun getMin(axis: Int, t: ActorWithBody): Double =

View File

@@ -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)

View File

@@ -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<Int> = ArrayList<Int>()

View File

@@ -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()
}
}
}
}
}