try making map tiles better, listen to events for changed tiles

This commit is contained in:
Adam 2022-01-09 17:40:28 +01:00
parent 4e8a0c4f69
commit 4d2926ebe2
6 changed files with 97 additions and 22 deletions

View file

@ -38,6 +38,7 @@ sealed class FactorioObjectData {
LuaSurface,
MapChunk,
LuaTile,
LuaTiles,
ConsoleChatMessage,
}
}
@ -63,6 +64,7 @@ object FactorioObjectDataSerializer : JsonContentPolymorphicSerializer<FactorioO
FactorioObjectData.ObjectName.LuaSurface -> SurfaceData.serializer()
FactorioObjectData.ObjectName.MapChunk -> MapChunk.serializer()
FactorioObjectData.ObjectName.LuaTile -> MapTile.serializer()
FactorioObjectData.ObjectName.LuaTiles -> MapTiles.serializer()
FactorioObjectData.ObjectName.ConsoleChatMessage -> ConsoleChatMessage.serializer()
null ->
throw Exception("Unknown FactorioObjectData $key: '$type' ")
@ -112,21 +114,30 @@ data class SurfaceData(
override val objectName = ObjectName.LuaSurface
}
/** Quasi-object. This isn't a Factorio Lua type, but a helpful collection of [MapTile]s */
/** This isn't a Factorio Lua type, but a helpful collection of Chunk info */
@Serializable
data class MapChunk(
val tiles: List<MapTile>,
val tiles: MapTiles,
val position: MapChunkPosition,
) : FactorioObjectData() {
@EncodeDefault
override val objectName = ObjectName.MapChunk
}
/** This isn't a Factorio Lua type, but a helpful collection of [MapTile]s */
@Serializable
data class MapTiles(
val surfaceIndex: Int,
val tiles: List<MapTile>,
) : FactorioObjectData() {
@EncodeDefault
override val objectName = ObjectName.LuaTiles
}
@Serializable
data class MapTile(
val prototypeName: String,
val position: MapTilePosition,
val surfaceIndex: Int,
) : FactorioObjectData() {
@EncodeDefault
override val objectName = ObjectName.LuaTile

View file

@ -19,7 +19,6 @@ class FactorioEventTest : FunSpec({
"characterUnitNumber": 1,
"associatedCharactersUnitNumbers": {},
"position": {
"type": "MAP",
"x": 30.6,
"y": 84.1
},
@ -53,8 +52,7 @@ class FactorioEventTest : FunSpec({
name = "fredthedeadhead",
characterUnitNumber = 1u,
associatedCharactersUnitNumbers = emptyList(),
position = PositionData(
type = PositionType.MAP,
position = MapEntityPosition(
x = 30.6,
y = 84.1,
),
@ -148,7 +146,6 @@ class FactorioEventTest : FunSpec({
"surfaceIndex": 1,
"unitNumber": 1,
"position": {
"type": "MAP",
"x": 37.5,
"y": 81.1
}
@ -174,10 +171,9 @@ class FactorioEventTest : FunSpec({
surfaceIndex = 1,
unitNumber = 1u,
playerIndex = null,
position = PositionData(
position = MapEntityPosition(
x = 37.5,
y = 81.1,
type = PositionType.MAP,
)
),
eventType = "on_player_changed_position",