tiles won't place to the position where occupied by actors

Former-commit-id: 745558470933aea8d1f03da30ca5042a82c69eac
Former-commit-id: 09e741f5eaec3eb18b8a76c82fcc2aa62378e82e
This commit is contained in:
Song Minjae
2016-12-16 23:57:46 +09:00
parent 174a0f9101
commit d179d090c5
2 changed files with 17 additions and 2 deletions

View File

@@ -44,6 +44,14 @@ open class ActorWithBody : Actor() {
val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // Hitbox is implemented using Double; val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // Hitbox is implemented using Double;
@Transient val nextHitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // 52 mantissas ought to be enough for anybody... @Transient val nextHitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // 52 mantissas ought to be enough for anybody...
val tilewiseHitbox: Hitbox
get() = Hitbox.fromTwoPoints(
hitbox.posX.div(TILE_SIZE).floor(),
hitbox.posY.div(TILE_SIZE).floor(),
hitbox.endPointX.div(TILE_SIZE).floor(),
hitbox.endPointY.div(TILE_SIZE).floor()
)
/** /**
* Velocity vector for newtonian sim. * Velocity vector for newtonian sim.
* Acceleration: used in code like: * Acceleration: used in code like:

View File

@@ -1,11 +1,13 @@
package net.torvald.terrarum.itemproperties package net.torvald.terrarum.itemproperties
import net.torvald.point.Point2d
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.KVHashMap import net.torvald.terrarum.KVHashMap
import net.torvald.terrarum.gameactors.CanBeAnItem import net.torvald.terrarum.gameactors.CanBeAnItem
import net.torvald.terrarum.gameitem.InventoryItem import net.torvald.terrarum.gameitem.InventoryItem
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gamecontroller.mouseTileX import net.torvald.terrarum.gamecontroller.mouseTileX
import net.torvald.terrarum.gamecontroller.mouseTileY import net.torvald.terrarum.gamecontroller.mouseTileY
import net.torvald.terrarum.gameitem.EquipPosition import net.torvald.terrarum.gameitem.EquipPosition
@@ -49,8 +51,13 @@ object ItemPropCodex {
} }
override fun secondaryUse(gc: GameContainer, delta: Int) { override fun secondaryUse(gc: GameContainer, delta: Int) {
// TODO check if occupied by ANY ActorWithBodies val mousePoint = Point2d(gc.mouseTileX.toDouble(), gc.mouseTileY.toDouble())
// linear search filter (check for intersection with tilewise mouse point and tilewise hitbox)
Terrarum.ingame.actorContainer.forEach {
if (it is ActorWithBody && it.tilewiseHitbox.intersects(mousePoint))
return
}
// filter passed, do the job
Terrarum.ingame.world.setTileTerrain( Terrarum.ingame.world.setTileTerrain(
gc.mouseTileX, gc.mouseTileX,
gc.mouseTileY, gc.mouseTileY,