mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
tiles won't place to the position where occupied by actors
Former-commit-id: 745558470933aea8d1f03da30ca5042a82c69eac Former-commit-id: 09e741f5eaec3eb18b8a76c82fcc2aa62378e82e
This commit is contained in:
@@ -44,6 +44,14 @@ open class ActorWithBody : Actor() {
|
||||
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...
|
||||
|
||||
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.
|
||||
* Acceleration: used in code like:
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package net.torvald.terrarum.itemproperties
|
||||
|
||||
import net.torvald.point.Point2d
|
||||
import net.torvald.random.HQRNG
|
||||
import net.torvald.terrarum.KVHashMap
|
||||
import net.torvald.terrarum.gameactors.CanBeAnItem
|
||||
import net.torvald.terrarum.gameitem.InventoryItem
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.gameactors.AVKey
|
||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||
import net.torvald.terrarum.gamecontroller.mouseTileX
|
||||
import net.torvald.terrarum.gamecontroller.mouseTileY
|
||||
import net.torvald.terrarum.gameitem.EquipPosition
|
||||
@@ -49,8 +51,13 @@ object ItemPropCodex {
|
||||
}
|
||||
|
||||
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(
|
||||
gc.mouseTileX,
|
||||
gc.mouseTileY,
|
||||
|
||||
Reference in New Issue
Block a user