Update Circle.kt

This commit is contained in:
bluefireoly
2020-09-15 18:30:36 +02:00
parent 16a27d0aa0
commit dde601a790

View File

@@ -8,63 +8,74 @@ import net.axay.kspigot.particles.KSpigotParticle
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.entity.EntityType import org.bukkit.entity.EntityType
abstract class Circle(val radius: Number) { private fun circleEdgeLocations(radius: Number) = HashSet<SimpleLocation2D>().apply {
abstract val data: StructureData val currentRadius = radius.toDouble()
val fillLocations: Set<SimpleLocation2D> by lazy { var d = -currentRadius
var x = currentRadius
var y = 0
val locationList: MutableSet<SimpleLocation2D> = HashSet() while (y <= x) {
var currentRadius = radius.toDouble() addSimpleLoc2D(x, y)
while (currentRadius >= 0) { addSimpleLoc2D(x, -y)
addSimpleLoc2D(-x, y)
addSimpleLoc2D(-x, -y)
addSimpleLoc2D(y, x)
addSimpleLoc2D(y, -x)
addSimpleLoc2D(-y, x)
addSimpleLoc2D(-y, -x)
var d = -currentRadius d += 2 * y + 1
var x = currentRadius y++
var y = 0
while (y <= x) {
locationList.addCircleLoc(x, y)
locationList.addCircleLoc(x, -y)
locationList.addCircleLoc(-x, y)
locationList.addCircleLoc(-x, -y)
locationList.addCircleLoc(y, x)
locationList.addCircleLoc(y, -x)
locationList.addCircleLoc(-y, x)
locationList.addCircleLoc(-y, -x)
d += 2 * y + 1
y++
if (d > 0) {
d += -2 * x + 2
x--
}
}
currentRadius--
if (d > 0) {
d += -2 * x + 2
x--
} }
return@lazy locationList
} }
private fun MutableSet<SimpleLocation2D>.addCircleLoc(first: Number, second: Number) { }
this += SimpleLocation2D(first, second)
}
val structure by lazy { private fun MutableSet<SimpleLocation2D>.addSimpleLoc2D(first: Number, second: Number) {
Structure( this += SimpleLocation2D(first, second)
HashSet<SingleStructureData>().apply { }
for (it in fillLocations)
this += SingleStructureData(SimpleLocation3D(it.x, 0, it.y), data) abstract class Circle(val radius: Number) {
protected abstract val data: StructureData
val fillLocations by lazy {
var currentRadius = radius.toDouble()
HashSet<SimpleLocation2D>().apply {
while (currentRadius >= 0) {
this += circleEdgeLocations(currentRadius)
currentRadius -= 0.5
} }
) }
} }
val edgeLocations by lazy {
circleEdgeLocations(radius)
}
val filledStructure by lazy { structure(true) }
val edgeStructure by lazy { structure(false) }
fun structure(filled: Boolean) = Structure(
HashSet<SingleStructureData>().apply {
val locations = if (filled) fillLocations else edgeLocations
for (it in locations)
this += SingleStructureData(SimpleLocation3D(it.x, 0, it.y), data)
}
)
} }
class MaterialCircle(radius: Number, material: Material) : Circle(radius) { class MaterialCircle(radius: Number, material: Material) : Circle(radius) {