it is literally working
This commit is contained in:
parent
841f07c847
commit
a0c330384a
17 changed files with 499 additions and 63 deletions
|
|
@ -11,13 +11,18 @@ import kotlinx.serialization.json.JsonClassDiscriminator
|
|||
@Serializable
|
||||
data class FactorioEvent<out T : FactorioObjectData>(
|
||||
/** the initial Factorio event ({defines.events}) trigger */
|
||||
@SerialName("event_type") val eventType: String,
|
||||
@SerialName("event_type")
|
||||
val eventType: String,
|
||||
/** Schema versioning */
|
||||
@SerialName("mod_version") val modVersion: String,
|
||||
@SerialName("factorio_version") val factorioVersion: String,
|
||||
@SerialName("mod_version")
|
||||
val modVersion: String,
|
||||
@SerialName("factorio_version")
|
||||
val factorioVersion: String,
|
||||
/** game time */
|
||||
@SerialName("tick") val tick: UInt,
|
||||
@SerialName("data") val data: T
|
||||
@SerialName("tick")
|
||||
val tick: UInt,
|
||||
@SerialName("data")
|
||||
val data: T
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -53,10 +58,20 @@ sealed class FactorioObjectData {
|
|||
@SerialName("LuaPlayer")
|
||||
data class PlayerData(
|
||||
@Serializable(with = ListAsObjectSerializer::class)
|
||||
@SerialName("associated_characters_unit_numbers") val associatedCharactersUnitNumbers: List<UInt>,
|
||||
@SerialName("character_unit_number") val characterUnitNumber: UInt?,
|
||||
@SerialName("name") val name: String,
|
||||
@SerialName("position") val position: PositionData,
|
||||
@SerialName("associated_characters_unit_numbers")
|
||||
val associatedCharactersUnitNumbers: List<UInt>,
|
||||
@SerialName("character_unit_number")
|
||||
val characterUnitNumber: UInt?,
|
||||
@SerialName("name")
|
||||
val name: String,
|
||||
@SerialName("position")
|
||||
val position: PositionData,
|
||||
@SerialName("colour")
|
||||
val colour: Colour,
|
||||
@SerialName("chat_colour")
|
||||
val chatColour: Colour,
|
||||
@SerialName("last_online")
|
||||
val lastOnline: UInt,
|
||||
) : FactorioObjectData() {
|
||||
@Transient
|
||||
override val objectName: String = "LuaPlayer"
|
||||
|
|
@ -65,16 +80,25 @@ data class PlayerData(
|
|||
@Serializable
|
||||
@SerialName("LuaEntity")
|
||||
data class EntityData(
|
||||
@SerialName("active") val active: Boolean,
|
||||
@SerialName("health") val health: Double?,
|
||||
@SerialName("health_ratio") val healthRatio: Double,
|
||||
@SerialName("name") val name: String,
|
||||
@SerialName("position") val position: PositionData,
|
||||
@SerialName("surface_index") val surfaceIndex: Int,
|
||||
@SerialName("type") val type: String,
|
||||
@SerialName("unit_number") val unitNumber: UInt? = null,
|
||||
@SerialName("active")
|
||||
val active: Boolean,
|
||||
@SerialName("health")
|
||||
val health: Double?,
|
||||
@SerialName("health_ratio")
|
||||
val healthRatio: Double,
|
||||
@SerialName("name")
|
||||
val name: String,
|
||||
@SerialName("position")
|
||||
val position: PositionData,
|
||||
@SerialName("surface_index")
|
||||
val surfaceIndex: Int,
|
||||
@SerialName("type")
|
||||
val type: String,
|
||||
@SerialName("unit_number")
|
||||
val unitNumber: UInt? = null,
|
||||
|
||||
@SerialName("player_index") val playerIndex: UInt? = null,
|
||||
@SerialName("player_index")
|
||||
val playerIndex: UInt? = null,
|
||||
) : FactorioObjectData() {
|
||||
@Transient
|
||||
override val objectName: String = "LuaEntity"
|
||||
|
|
@ -83,9 +107,12 @@ data class EntityData(
|
|||
@Serializable
|
||||
@SerialName("LuaSurface")
|
||||
data class SurfaceData(
|
||||
@SerialName("daytime") val daytime: Double,
|
||||
@SerialName("index") val index: UInt,
|
||||
@SerialName("name") val name: String,
|
||||
@SerialName("daytime")
|
||||
val daytime: Double,
|
||||
@SerialName("index")
|
||||
val index: UInt,
|
||||
@SerialName("name")
|
||||
val name: String,
|
||||
) : FactorioObjectData() {
|
||||
@Transient
|
||||
override val objectName: String = "LuaSurface"
|
||||
|
|
@ -93,6 +120,32 @@ data class SurfaceData(
|
|||
|
||||
@Serializable
|
||||
data class PositionData(
|
||||
@SerialName("x") val x: Double,
|
||||
@SerialName("y") val y: Double,
|
||||
val x: Double,
|
||||
val y: Double,
|
||||
)
|
||||
|
||||
/**
|
||||
* Red, green, blue and alpha values, all in range `[0, 1]` or all in range `[0, 255]` if any
|
||||
* value is > 1.
|
||||
*
|
||||
* All values here are optional. Color channels default to 0, the alpha channel defaults to 1.
|
||||
*/
|
||||
@Serializable
|
||||
data class Colour(
|
||||
val red: Float = 0f,
|
||||
val green: Float = 0f,
|
||||
val blue: Float = 0f,
|
||||
val alpha: Float = 1f,
|
||||
) {
|
||||
/** True if any value is greater than 1, so the values are hexadecimal. */
|
||||
fun isDecimal(): Boolean {
|
||||
return red > 1f
|
||||
|| green > 1f
|
||||
|| blue > 1f
|
||||
|| alpha > 1f
|
||||
}
|
||||
|
||||
/** True if all values are between `[0..1]`. */
|
||||
fun isPercentage(): Boolean = !isDecimal()
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ class FactorioEventTest : BehaviorSpec({
|
|||
"position": {
|
||||
"x": -3.5703125,
|
||||
"y": 29.75
|
||||
}
|
||||
},
|
||||
"last_online": 123
|
||||
},
|
||||
"event_type": "on_player_joined_game",
|
||||
"mod_version": "0.0.4",
|
||||
|
|
@ -41,7 +42,10 @@ class FactorioEventTest : BehaviorSpec({
|
|||
position = PositionData(
|
||||
x = -3.5703125,
|
||||
y = 29.75
|
||||
)
|
||||
),
|
||||
colour = Colour(),
|
||||
chatColour = Colour(),
|
||||
lastOnline = 123u
|
||||
),
|
||||
eventType = "on_player_joined_game",
|
||||
modVersion = "0.0.4",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue