mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 04:15:14 -04:00
forbid movement across world border (in outside direction)
This commit is contained in:
parent
9807128c5b
commit
c1b4559667
@ -396,6 +396,8 @@ abstract class Entity(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun move(delta: Vec3d = velocity) {
|
fun move(delta: Vec3d = velocity) {
|
||||||
|
val positionBefore = position
|
||||||
|
val wasInBorder = !connection.world.border.isOutside(positionBefore)
|
||||||
if (!hasCollisions) {
|
if (!hasCollisions) {
|
||||||
forceMove(delta)
|
forceMove(delta)
|
||||||
return
|
return
|
||||||
@ -415,9 +417,21 @@ abstract class Entity(
|
|||||||
movement = connection.collisionDetector.sneak(this, movement)
|
movement = connection.collisionDetector.sneak(this, movement)
|
||||||
}
|
}
|
||||||
|
|
||||||
val collisionMovement = connection.collisionDetector.collide(null, movement, aabb, true)
|
var collisionMovement = connection.collisionDetector.collide(null, movement, aabb, true)
|
||||||
|
|
||||||
|
|
||||||
|
val targetPosition = positionBefore + collisionMovement
|
||||||
|
val inBorder = !connection.world.border.isOutside(targetPosition)
|
||||||
|
if (wasInBorder && !inBorder) {
|
||||||
|
val border = connection.world.border
|
||||||
|
val xDirection = if (collisionMovement.x < 0) -1 else 1
|
||||||
|
val zDirection = if (collisionMovement.z < 0) -1 else 1
|
||||||
|
collisionMovement = Vec3d(
|
||||||
|
xDirection * minOf(abs(collisionMovement.x), border.diameter / 2 - abs(targetPosition.x) - abs(border.center.x), 0.0),
|
||||||
|
collisionMovement.y,
|
||||||
|
zDirection * minOf(abs(collisionMovement.z), border.diameter / 2 - abs(targetPosition.z) - abs(border.center.y), 0.0)
|
||||||
|
)
|
||||||
|
}
|
||||||
forceMove(collisionMovement)
|
forceMove(collisionMovement)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user