mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 19:14:05 +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;
|
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:
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user