rename data model, and experiment with K-mmp classes
This commit is contained in:
parent
3a33062cd4
commit
8e94a20a79
6 changed files with 167 additions and 8 deletions
|
|
@ -0,0 +1,63 @@
|
|||
package dev.adamko.factorioevents.model
|
||||
|
||||
import kotlin.js.JsExport
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
//expect sealed interface JsonPrimitive {
|
||||
// value class JsonString(val string: String) : JsonPrimitive
|
||||
// value class JsonNumber(val number: Number) : JsonPrimitive
|
||||
// value class JsonBoolean(val boolean: Boolean) : JsonPrimitive
|
||||
//}
|
||||
|
||||
sealed interface JsonPrimitive {
|
||||
@JvmInline
|
||||
value class JsonString(val string: String) : JsonPrimitive
|
||||
@JvmInline
|
||||
value class JsonNumber(val number: Number) : JsonPrimitive
|
||||
@JvmInline
|
||||
value class JsonBoolean(val boolean: Boolean) : JsonPrimitive
|
||||
}
|
||||
|
||||
class JsonArray<T : JsonPrimitive?>(
|
||||
private val list: MutableList<T> = mutableListOf()
|
||||
) : MutableList<T> by list
|
||||
|
||||
|
||||
sealed interface JsonTableValue {
|
||||
@JvmInline
|
||||
value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue
|
||||
@JvmInline
|
||||
value class JsonArrayTV<T : JsonPrimitive?>(val array: JsonArray<T>) : JsonTableValue
|
||||
@JvmInline
|
||||
value class JsonTableTV<T : JsonTable?>(val array: JsonTable) : JsonTableValue
|
||||
}
|
||||
|
||||
//expect class JsonNumber() : JsonPrimitiveType
|
||||
|
||||
//expect class JsonArray<T : JsonPrimitive?>
|
||||
|
||||
//expect open class JsonTable<K : JsonPrimitive.JsonString, V : JsonTableValue?>
|
||||
|
||||
open class JsonTable(
|
||||
protected val map: MutableMap<JsonPrimitive.JsonString, JsonTableValue?> = mutableMapOf()
|
||||
) : MutableMap<JsonPrimitive.JsonString, JsonTableValue?> by map {
|
||||
|
||||
inline fun <reified T> get2(key: String): T? {
|
||||
|
||||
val jKey = JsonPrimitive.JsonString(key)
|
||||
|
||||
return when {
|
||||
T::class is Number -> ((get(jKey) as? JsonTableValue.JsonPrimitiveTV)?.primitive as? JsonPrimitive.JsonNumber)?.number as? T
|
||||
else -> return get(jKey) as? T
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//@JsExport
|
||||
class FactorioEvent : JsonTable() {
|
||||
val tick: UInt?
|
||||
get() = get2("tick")
|
||||
// set(value) = map.put("tick", value)
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package dev.adamko.factorioevents.model
|
||||
|
||||
|
||||
//actual sealed interface JsonPrimitive {
|
||||
// actual value class JsonString(val string: String) : JsonPrimitive
|
||||
// actual value class JsonNumber(val number: Number) : JsonPrimitive
|
||||
// actual value class JsonBoolean(val boolean: Boolean) : JsonPrimitive
|
||||
//}
|
||||
|
||||
//actual class JsonArray<T : JsonPrimitive?>(
|
||||
// private val list: MutableList<T> = mutableListOf()
|
||||
//) : MutableList<T> by list
|
||||
|
||||
//actual sealed interface JsonTableValue {
|
||||
// actual value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue
|
||||
// actual value class JsonArrayTV<T : JsonPrimitive?>(val array: JsonArray<T>) : JsonTableValue
|
||||
//}
|
||||
|
||||
|
||||
//actual open class JsonTable<K : JsonPrimitive.JsonString, V: JsonTableValue?>(
|
||||
// private val map: MutableMap<K, V> = mutableMapOf()
|
||||
//) : MutableMap<K, V> by map
|
||||
|
||||
|
||||
fun printMap() {
|
||||
val f = JsonPrimitive.JsonString("test")
|
||||
|
||||
println(f.string)
|
||||
println(f)
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package dev.adamko.factorioevents.model
|
||||
|
||||
|
||||
//actual sealed interface JsonPrimitive {
|
||||
// @JvmInline
|
||||
// actual value class JsonString(val string: String) : JsonPrimitive
|
||||
// @JvmInline
|
||||
// actual value class JsonNumber(val number: Number) : JsonPrimitive
|
||||
// @JvmInline
|
||||
// actual value class JsonBoolean(val boolean: Boolean) : JsonPrimitive
|
||||
//}
|
||||
|
||||
//actual class JsonArray<T : JsonPrimitive?>(
|
||||
// private val list: MutableList<T> = mutableListOf()
|
||||
//) : MutableList<T> by list
|
||||
|
||||
//actual sealed interface JsonTableValue {
|
||||
// @JvmInline
|
||||
// actual value class JsonPrimitiveTV(val primitive: JsonPrimitive) : JsonTableValue
|
||||
// @JvmInline
|
||||
// actual value class JsonArrayTV<T : JsonPrimitive?>(val array: JsonArray<T>) : JsonTableValue
|
||||
//}
|
||||
|
||||
//actual open class JsonTable<K : JsonPrimitive.JsonString, V: JsonTableValue?>(
|
||||
// private val map: MutableMap<K, V> = mutableMapOf()
|
||||
//) : MutableMap<K, V> by map
|
||||
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
interface Identifiable<T> {
|
||||
val id: T
|
||||
}
|
||||
|
||||
|
||||
interface IndexedModel {
|
||||
val index: UInt
|
||||
}
|
||||
|
||||
interface NamedModel {
|
||||
val name: String
|
||||
}
|
||||
|
||||
|
||||
data class SurfaceModel(
|
||||
override val name: String,
|
||||
override val index: UInt,
|
||||
val daytime: Float,
|
||||
val darkness: Float,
|
||||
val wind_speed: Double,
|
||||
) : IndexedModel, NamedModel
|
||||
|
||||
|
||||
/** Player/Entity shared props */
|
||||
interface ControlModel {
|
||||
val driving: Boolean
|
||||
val forces: List<ForceModel>
|
||||
}
|
||||
|
||||
|
||||
//data class PlayerModel(
|
||||
// val index: UInt,
|
||||
// val characters: List<EntityModel>
|
||||
//) : Identifiable<UInt> {
|
||||
// override val id: UInt = index
|
||||
//}
|
||||
|
||||
//data class EntityModel(
|
||||
// val unit_number: Int,
|
||||
// override val name: String,
|
||||
// val type: String,
|
||||
// val active: Boolean,
|
||||
// val minable: Boolean,
|
||||
// val health: Boolean,
|
||||
// val speed: Float, override val driving: Boolean,
|
||||
//) : ControlModel, NamedModel
|
||||
|
||||
|
||||
data class ForceModel(
|
||||
val index: UInt,
|
||||
override val name: String,
|
||||
val research_progress: Double,
|
||||
) : Identifiable<UInt>, NamedModel {
|
||||
override val id: UInt = index
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue