Improve code style
This commit is contained in:
@@ -9,7 +9,7 @@ import org.bukkit.util.Vector
|
||||
|
||||
data class SimpleLocation2D(
|
||||
val x: Double,
|
||||
val y: Double
|
||||
val y: Double,
|
||||
) {
|
||||
constructor(x: Number, y: Number)
|
||||
: this(x.toDouble(), y.toDouble())
|
||||
@@ -19,30 +19,23 @@ data class SimpleLocation3D(
|
||||
val x: Double,
|
||||
val y: Double,
|
||||
val z: Double,
|
||||
val direction: Vector = vec(0, 0, 0)
|
||||
val direction: Vector = vec(0, 0, 0),
|
||||
) {
|
||||
|
||||
constructor(x: Number, y: Number, z: Number)
|
||||
: this(x.toDouble(), y.toDouble(), z.toDouble())
|
||||
|
||||
val chunk: SimpleChunkLocation
|
||||
get() = SimpleChunkLocation(x.toInt() shr 4, z.toInt() shr 4)
|
||||
|
||||
}
|
||||
|
||||
data class SimpleChunkLocation(
|
||||
val x: Int,
|
||||
val z: Int
|
||||
val z: Int,
|
||||
)
|
||||
|
||||
// CONVERTER
|
||||
|
||||
fun Location.toSimple() = SimpleLocation3D(x, y, z)
|
||||
fun Chunk.toSimple() = SimpleChunkLocation(x, z)
|
||||
|
||||
fun SimpleLocation3D.withWorld(world: World) = Location(world, x, y, z).apply { direction = this@withWorld.direction }
|
||||
fun SimpleChunkLocation.withWorld(world: World) = world.getChunkAt(x, z)
|
||||
|
||||
fun Vector.toSimpleLoc() = SimpleLocation3D(x, y, z)
|
||||
|
||||
fun SimpleLocation3D.toVector() = Vector(x, y, z)
|
@@ -10,21 +10,17 @@ 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 minSimpleLoc = SimpleLocation3D(min(loc1.x, loc2.x), min(loc1.y, loc2.y), min(loc1.z, loc2.z))
|
||||
val maxSimpleLoc = 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
|
||||
tolerance: Int = 0,
|
||||
): Boolean {
|
||||
|
||||
// checking world
|
||||
if (loc.world != world) return false
|
||||
|
||||
@@ -37,11 +33,9 @@ class SimpleLocationPair(loc1: Location, loc2: Location) {
|
||||
// checking y
|
||||
if (check3d) loc.y >= minSimpleLoc.y - tolerance && loc.y <= maxSimpleLoc.y + tolerance else true
|
||||
} else false
|
||||
|
||||
}
|
||||
|
||||
val touchedSimpleChunks: Set<SimpleChunkLocation> by lazy {
|
||||
|
||||
val foundChunks = HashSet<SimpleChunkLocation>()
|
||||
|
||||
(minSimpleLoc.chunk.x until maxSimpleLoc.chunk.x + 1).forEach { curX ->
|
||||
@@ -51,13 +45,10 @@ class SimpleLocationPair(loc1: Location, loc2: Location) {
|
||||
}
|
||||
|
||||
return@lazy foundChunks
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class LocationArea(loc1: Location, loc2: Location) {
|
||||
|
||||
var loc1: Location = loc1
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -68,19 +59,14 @@ class LocationArea(loc1: Location, loc2: Location) {
|
||||
field = value
|
||||
simpleLocationPair = SimpleLocationPair(loc1, value)
|
||||
}
|
||||
|
||||
var simpleLocationPair = SimpleLocationPair(loc1, loc2); private set
|
||||
|
||||
val world: World get() = simpleLocationPair.world
|
||||
val minLoc: Location get() = simpleLocationPair.minSimpleLoc.withWorld(simpleLocationPair.world)
|
||||
val maxLoc: Location get() = simpleLocationPair.maxSimpleLoc.withWorld(simpleLocationPair.world)
|
||||
|
||||
val touchedChunks: Set<Chunk> get() = simpleLocationPair.touchedSimpleChunks.mapTo(HashSet()) { it.withWorld(world) }
|
||||
|
||||
fun isInArea(
|
||||
loc: Location,
|
||||
check3d: Boolean = true,
|
||||
tolerance: Int = 0
|
||||
tolerance: Int = 0,
|
||||
) = simpleLocationPair.isInArea(loc, check3d, tolerance)
|
||||
|
||||
}
|
@@ -36,15 +36,10 @@ infix fun Location.reduceZ(distance: Number) = subtract(0.0, 0.0, distance)
|
||||
infix fun Location.reduceXY(distance: Number) = subtract(distance, distance, 0.0)
|
||||
infix fun Location.reduceYZ(distance: Number) = subtract(0.0, distance, distance)
|
||||
infix fun Location.reduceXZ(distance: Number) = subtract(distance, 0.0, distance)
|
||||
|
||||
// extensions
|
||||
|
||||
fun Location.add(x: Number, y: Number, z: Number) = add(x.toDouble(), y.toDouble(), z.toDouble())
|
||||
|
||||
fun Location.subtract(x: Number, y: Number, z: Number) = subtract(x.toDouble(), y.toDouble(), z.toDouble())
|
||||
|
||||
val Location.blockLoc: Location get() = Location(world, blockX.toDouble(), blockY.toDouble(), blockZ.toDouble())
|
||||
|
||||
infix fun Location.relationTo(loc: Location) = this.subtract(loc).toSimple()
|
||||
|
||||
// operator functions
|
||||
@@ -88,11 +83,9 @@ infix fun Location.increase(loc: Location) = add(loc)
|
||||
infix fun Location.reduce(loc: Location) = subtract(loc)
|
||||
infix fun Location.increase(loc: SimpleLocation3D) = add(loc.x, loc.y, loc.z)
|
||||
infix fun Location.reduce(loc: SimpleLocation3D) = subtract(loc.x, loc.y, loc.z)
|
||||
|
||||
/*
|
||||
* VECTOR
|
||||
*/
|
||||
|
||||
val Vector.isFinite: Boolean get() = x.isFinite() && y.isFinite() && z.isFinite()
|
||||
|
||||
// fast construct
|
||||
|
Reference in New Issue
Block a user