Create LocationArea.kt
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
@file:Suppress("MemberVisibilityCanBePrivate")
|
||||||
|
|
||||||
|
package net.axay.kspigot.extensions.geometry
|
||||||
|
|
||||||
|
import org.bukkit.Location
|
||||||
|
import org.bukkit.World
|
||||||
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
|
class SimpleLocationPair(loc1: Location, loc2: Location) {
|
||||||
|
|
||||||
|
val world = loc1.worldOrException.let {
|
||||||
|
if (it == loc2.worldOrException) it
|
||||||
|
else throw IllegalArgumentException("The given locations worlds are not the same!")
|
||||||
|
}
|
||||||
|
|
||||||
|
val minLoc = SimpleLocation3D(min(loc1.x, loc2.x), min(loc1.y, loc2.y), min(loc1.z, loc2.z))
|
||||||
|
val maxLoc = SimpleLocation3D(max(loc1.x, loc2.x), max(loc1.y, loc2.y), max(loc1.z, loc2.z))
|
||||||
|
|
||||||
|
fun isInArea(
|
||||||
|
loc: Location,
|
||||||
|
check3d: Boolean = true,
|
||||||
|
tolerance: Int = 0
|
||||||
|
): Boolean {
|
||||||
|
|
||||||
|
// checking world
|
||||||
|
if (loc.world != world) return false
|
||||||
|
|
||||||
|
return if (
|
||||||
|
// checking x
|
||||||
|
loc.x >= minLoc.x - tolerance && loc.x <= maxLoc.x + tolerance &&
|
||||||
|
// checking z
|
||||||
|
loc.z >= minLoc.z - tolerance && loc.z <= maxLoc.z + tolerance
|
||||||
|
) {
|
||||||
|
// checking y
|
||||||
|
if (check3d) loc.y >= minLoc.x - tolerance && loc.y <= maxLoc.y + tolerance else true
|
||||||
|
} else false
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class LocationArea(loc1: Location, loc2: Location) {
|
||||||
|
|
||||||
|
var loc1: Location = loc1
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
locationPair = SimpleLocationPair(value, loc2)
|
||||||
|
}
|
||||||
|
var loc2: Location = loc2
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
locationPair = SimpleLocationPair(loc1, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
var locationPair = SimpleLocationPair(loc1, loc2); private set
|
||||||
|
|
||||||
|
val world: World get() = locationPair.world
|
||||||
|
val minLoc: Location get() = locationPair.minLoc.withWorld(locationPair.world)
|
||||||
|
val maxLoc: Location get() = locationPair.maxLoc.withWorld(locationPair.world)
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user