make the json a little less verbose by having separate position types instead of a discriminator
This commit is contained in:
parent
f41def72e2
commit
b9190b1948
6 changed files with 87 additions and 21 deletions
|
|
@ -14,7 +14,7 @@ interface PlayerData extends FactorioObjectData {
|
|||
lastOnline: uint;
|
||||
name: string;
|
||||
objectName: ObjectName;
|
||||
position: PositionData;
|
||||
position: MapEntityPosition;
|
||||
}
|
||||
|
||||
interface EntityData extends FactorioObjectData {
|
||||
|
|
@ -24,7 +24,7 @@ interface EntityData extends FactorioObjectData {
|
|||
name: string;
|
||||
objectName: ObjectName;
|
||||
playerIndex: uint | null;
|
||||
position: PositionData;
|
||||
position: MapEntityPosition;
|
||||
surfaceIndex: int;
|
||||
type: string;
|
||||
unitNumber: uint | null;
|
||||
|
|
@ -39,13 +39,14 @@ interface SurfaceData extends FactorioObjectData {
|
|||
|
||||
interface MapTile extends FactorioObjectData {
|
||||
objectName: ObjectName;
|
||||
position: PositionData;
|
||||
position: MapTilePosition;
|
||||
prototypeName: string;
|
||||
surfaceIndex: int;
|
||||
}
|
||||
|
||||
interface MapChunk extends FactorioObjectData {
|
||||
objectName: ObjectName;
|
||||
position: MapChunkPosition;
|
||||
tiles: MapTile[];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,10 +22,17 @@ interface Colour {
|
|||
red: float;
|
||||
}
|
||||
|
||||
type PositionType = "MAP" | "CHUNK" | "TILE";
|
||||
|
||||
interface PositionData {
|
||||
type: PositionType | null;
|
||||
interface MapEntityPosition {
|
||||
x: double;
|
||||
y: double;
|
||||
}
|
||||
|
||||
interface MapChunkPosition {
|
||||
x: int;
|
||||
y: int;
|
||||
}
|
||||
|
||||
interface MapTilePosition {
|
||||
x: int;
|
||||
y: int;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ export namespace Converters {
|
|||
name: player.name,
|
||||
characterUnitNumber: player.character?.unit_number ?? null,
|
||||
associatedCharactersUnitNumbers: charIds,
|
||||
position: convertMapPosition(player.position),
|
||||
position: mapEntityPosition(player.position),
|
||||
colour: mapColour(player.color),
|
||||
chatColour: mapColour(player.chat_color),
|
||||
lastOnline: player.last_online
|
||||
|
|
@ -30,7 +30,7 @@ export namespace Converters {
|
|||
healthRatio: entity.get_health_ratio(),
|
||||
surfaceIndex: entity.surface.index,
|
||||
unitNumber: entity.unit_number ?? null,
|
||||
position: convertMapPosition(entity.position),
|
||||
position: mapEntityPosition(entity.position),
|
||||
|
||||
// player data
|
||||
playerIndex: player?.index ?? null
|
||||
|
|
@ -57,9 +57,23 @@ export namespace Converters {
|
|||
}
|
||||
}
|
||||
|
||||
export function convertMapPosition(mapPos: MapPositionTable): PositionData {
|
||||
export function mapEntityPosition(mapPos: MapPositionTable): MapEntityPosition {
|
||||
return {
|
||||
x: mapPos.x,
|
||||
y: mapPos.y,
|
||||
}
|
||||
}
|
||||
|
||||
export function mapTilePosition(mapPos: MapPositionTable): MapTilePosition {
|
||||
return {
|
||||
x: mapPos.x,
|
||||
y: mapPos.y,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function mapChunkPosition(mapPos: ChunkPositionTable): MapChunkPosition {
|
||||
return {
|
||||
type: "MAP",
|
||||
x: mapPos.x,
|
||||
y: mapPos.y,
|
||||
}
|
||||
|
|
@ -87,7 +101,7 @@ export namespace Converters {
|
|||
return {
|
||||
objectName: tile.object_name,
|
||||
|
||||
position: convertMapPosition(tile.position),
|
||||
position: mapTilePosition(tile.position),
|
||||
prototypeName: tile.prototype.name,
|
||||
surfaceIndex: tile.surface.index
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import {Converters} from "./converters"
|
||||
import {emitEvent} from "./emitEvent";
|
||||
import mapChunkPosition = Converters.mapChunkPosition;
|
||||
|
||||
export function handlePlayerUpdate(tick: uint, eventType: string, playerIndex: uint) {
|
||||
let player: LuaPlayer = game.players[playerIndex]
|
||||
|
|
@ -55,7 +56,7 @@ export function handleChunkUpdate(
|
|||
tick: uint,
|
||||
eventType: string,
|
||||
surfaceIndex: uint,
|
||||
position: ChunkPosition
|
||||
position: ChunkPositionTable
|
||||
) {
|
||||
|
||||
let surface = game.get_surface(surfaceIndex)
|
||||
|
|
@ -77,6 +78,7 @@ export function handleChunkUpdate(
|
|||
let mapChunk: MapChunk = {
|
||||
objectName: "MapChunk",
|
||||
tiles: convertedTiles,
|
||||
position: mapChunkPosition(position)
|
||||
}
|
||||
|
||||
emitEvent(mapChunk, tick, eventType)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue