radar penetration sim

This commit is contained in:
minjaesong
2023-11-02 22:08:44 +09:00
parent 3acefebfcb
commit 1128fb7f0e

View File

@@ -69,13 +69,16 @@ internal object ExportMap2 : ConsoleCommand {
1f / 16f 1f / 16f
) )
private val DECAY = 1.8f
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {
val world = (INGAME.world) val world = (INGAME.world)
if (args.size == 2) { val RAY = args[2].toFloat()
if (args.size == 3) {
// TODO rewrite to use Pixmap and PixmapIO // TODO rewrite to use Pixmap and PixmapIO
val mapData = ByteArray(world.width * world.height) val mapData = ByteArray(world.width * world.height) { 0x80.toByte() }
for (x in 0 until world.width) { for (x in 0 until world.width) {
var akku = 0f var akku = 0f
@@ -83,15 +86,21 @@ internal object ExportMap2 : ConsoleCommand {
var akku3 = 0f var akku3 = 0f
var akku4 = 0f var akku4 = 0f
var akku5 = 0f var akku5 = 0f
var energy = RAY
for (y in 0 until world.height) { for (y in 0 until world.height) {
val terrs = kernPos.map { world.getTileFromTerrain(x + it.first, y + it.second) } val reflection = if (energy > 0f) {
val ores = kernPos.map { world.getTileFromOre(x + it.first, y + it.second).item } val terrs = kernPos.map { world.getTileFromTerrain(x + it.first, y + it.second) }
val ores = kernPos.map { world.getTileFromOre(x + it.first, y + it.second).item }
val reflection = kernPow.mapIndexed { index, mult -> kernPow.mapIndexed { index, mult ->
val reflection0 = maxOf(getRCS(terrs[index]), getRCS(ores[index])) val reflection0 = maxOf(getRCS(terrs[index]), getRCS(ores[index]))
mult * (reflection0 + triangularRand(strToRandAmp(reflection0.toFloat()))) mult * (reflection0 + triangularRand(strToRandAmp(reflection0.toFloat())))
}.sum() }.sum()
}
else {
akku3 / DECAY
}
val delta = (reflection - akku).coerceAtLeast(0f) val delta = (reflection - akku).coerceAtLeast(0f)
@@ -103,6 +112,7 @@ internal object ExportMap2 : ConsoleCommand {
val deltaVal = delta5.bfpow(1f) val deltaVal = delta5.bfpow(1f)
mapData[y * world.width + x] = deltaVal.plus(0.5f).toDitherredByte() mapData[y * world.width + x] = deltaVal.plus(0.5f).toDitherredByte()
energy -= reflection
akku5 = delta4 akku5 = delta4
@@ -110,7 +120,6 @@ internal object ExportMap2 : ConsoleCommand {
akku3 = delta2 akku3 = delta2
akku2 = delta akku2 = delta
akku = reflection akku = reflection
} }
} }