refactoring, standardised naming, shuffling the docker infra around,
This commit is contained in:
parent
f9b93c013d
commit
5e69799136
6 changed files with 91 additions and 64 deletions
|
|
@ -10,54 +10,64 @@
|
|||
|
||||
import {JsonTable, Serdes} from "./serdes/serdes"
|
||||
|
||||
// const SERVER_ID: uint = 0
|
||||
// const EVENT_FILE_DIR: string = "events"
|
||||
|
||||
function createFactorioEvent(tick: uint, object_name: string, eventType: string, data: JsonTable): JsonTable {
|
||||
return {
|
||||
tick,
|
||||
object_name,
|
||||
eventType,
|
||||
data,
|
||||
}
|
||||
interface FactorioEvent extends JsonTable {
|
||||
tick: uint
|
||||
object_name: string,
|
||||
event_type: string,
|
||||
data: JsonTable,
|
||||
}
|
||||
|
||||
function handlePlayerUpdate(tick: uint, player_index: uint, eventType: string) {
|
||||
let player: LuaPlayer = game.players[player_index]
|
||||
const FactorioEvent = ((tick: uint, objectName: string, eventType: string, data: JsonTable) => {
|
||||
return {
|
||||
tick: tick,
|
||||
object_name: objectName,
|
||||
event_type: eventType,
|
||||
data: data,
|
||||
} as FactorioEvent
|
||||
}
|
||||
)
|
||||
|
||||
// function createFactorioEvent(tick: uint, object_name: string, eventType: string, data:
|
||||
// JsonTable): FactorioEvent { return { tick, object_name, eventType, data, } }
|
||||
|
||||
function handlePlayerUpdate(tick: uint, playerIndex: uint, eventType: string) {
|
||||
let player: LuaPlayer = game.players[playerIndex]
|
||||
let table = Serdes.Player.playerToTable(player)
|
||||
let event = createFactorioEvent(tick, player.object_name, eventType, table)
|
||||
let event = FactorioEvent(tick, player.object_name, eventType, table)
|
||||
emitEvent(event)
|
||||
|
||||
handleCharactersEvent(tick, player_index, eventType)
|
||||
handleCharactersEvent(tick, playerIndex, eventType)
|
||||
}
|
||||
|
||||
function handleCharactersEvent(tick: uint, player_index: uint, eventType: string) {
|
||||
function handleCharactersEvent(tick: uint, playerIndex: uint, eventType: string) {
|
||||
|
||||
let player: LuaPlayer = game.players[player_index]
|
||||
let player: LuaPlayer = game.players[playerIndex]
|
||||
|
||||
if (player.character != undefined) {
|
||||
handleEntityUpdate(tick, player.character, eventType)
|
||||
|
||||
for (const char of player.get_associated_characters()) {
|
||||
if (char != undefined) {
|
||||
handleEntityUpdate(tick, char, eventType)
|
||||
}
|
||||
}
|
||||
for (const character of player.get_associated_characters()) {
|
||||
if (character != undefined) {
|
||||
handleEntityUpdate(tick, character, eventType)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleEntityUpdate(tick: uint, entity: LuaEntity, eventType: string) {
|
||||
let table = Serdes.Entity.entityToTable(entity)
|
||||
let event = createFactorioEvent(tick, entity.object_name, eventType, table)
|
||||
let event = FactorioEvent(tick, entity.object_name, eventType, table)
|
||||
emitEvent(event)
|
||||
}
|
||||
|
||||
function surfaceEvent(tick: uint, surface: LuaSurface, eventType: string) {
|
||||
let table = Serdes.Surface.surfaceToTable(surface)
|
||||
let event = createFactorioEvent(tick, surface.object_name, eventType, table)
|
||||
let event = FactorioEvent(tick, surface.object_name, eventType, table)
|
||||
emitEvent(event)
|
||||
}
|
||||
|
||||
// const SERVER_ID: uint = 0
|
||||
// const EVENT_FILE_DIR: string = "events"
|
||||
/** Emit a serialised event */
|
||||
function emitEvent(event: JsonTable) {
|
||||
let data = game.table_to_json(event)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,5 @@
|
|||
export type JsonPrimitiveType = number | string | boolean | undefined | null | void
|
||||
|
||||
// export type JsonArray<TValue extends JsonPrimitiveType> = TValue[]
|
||||
// export class JsonArray extends Array<JsonPrimitiveTypes> {
|
||||
// }
|
||||
|
||||
// export type JsonArray = Array<JsonPrimitiveTypes>
|
||||
// declare type JsonArrayConstructor = (new () => JsonArray)
|
||||
// declare const JsonArray: JsonArrayConstructor
|
||||
|
||||
export type JsonArray<T extends JsonPrimitiveType = void> = T[]
|
||||
|
||||
export type JsonTableValueType =
|
||||
|
|
@ -17,6 +9,18 @@ export type JsonTableValueType =
|
|||
| undefined
|
||||
| null
|
||||
|
||||
export interface JsonTable {
|
||||
[key: string]: JsonTableValueType
|
||||
}
|
||||
|
||||
// export type JsonArray<TValue extends JsonPrimitiveType> = TValue[]
|
||||
// export class JsonArray extends Array<JsonPrimitiveTypes> {
|
||||
// }
|
||||
|
||||
// export type JsonArray = Array<JsonPrimitiveTypes>
|
||||
// declare type JsonArrayConstructor = (new () => JsonArray)
|
||||
// declare const JsonArray: JsonArrayConstructor
|
||||
|
||||
// export class JsonTable extends LuaTable<string, JsonTableValueType> {
|
||||
// }
|
||||
// export type JsonTable = LuaTable<string, JsonTableValueType>
|
||||
|
|
@ -25,10 +29,6 @@ export type JsonTableValueType =
|
|||
// declare const JsonTable: JsonTableConstructor
|
||||
|
||||
|
||||
export interface JsonTable {
|
||||
[key: string]: JsonTableValueType
|
||||
}
|
||||
|
||||
export namespace Serdes {
|
||||
|
||||
export namespace Player {
|
||||
|
|
@ -36,10 +36,10 @@ export namespace Serdes {
|
|||
export function playerToTable(player: LuaPlayer): JsonTable {
|
||||
let charIds = Entity.entitiesToUnitNumbers(player.get_associated_characters())
|
||||
return {
|
||||
"name": player.name,
|
||||
"characterId": player.character?.unit_number,
|
||||
"associatedCharacterIds": charIds,
|
||||
"position": DataClasses.positionTableToTable(player.position),
|
||||
name: player.name,
|
||||
character_unit_number: player.character?.unit_number,
|
||||
associated_characters_unit_numbers: charIds,
|
||||
position: DataClasses.positionTableToTable(player.position),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,21 +49,22 @@ export namespace Serdes {
|
|||
|
||||
export function entityToTable(entity: LuaEntity): JsonTable {
|
||||
|
||||
let player: JsonTable =
|
||||
entity.is_player() ? {
|
||||
"playerId": entity.player?.index,
|
||||
} : {}
|
||||
|
||||
return {
|
||||
player,
|
||||
"name": entity.name,
|
||||
"type": entity.type,
|
||||
"active": entity.active,
|
||||
"health": entity.health,
|
||||
"surfaceId": entity.surface.index,
|
||||
"unit_number": entity.unit_number,
|
||||
"position": DataClasses.positionTableToTable(entity.position),
|
||||
let data: JsonTable = {
|
||||
name: entity.name,
|
||||
type: entity.type,
|
||||
active: entity.active,
|
||||
health: entity.health,
|
||||
surface_index: entity.surface.index,
|
||||
unit_number: entity.unit_number,
|
||||
position: DataClasses.positionTableToTable(entity.position),
|
||||
}
|
||||
|
||||
if (entity.is_player()) {
|
||||
let player = entity.player!!
|
||||
data.player_index = player.index
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
export function entitiesToUnitNumbers(entities: LuaEntity[]): JsonArray<number> {
|
||||
|
|
@ -82,9 +83,9 @@ export namespace Serdes {
|
|||
|
||||
export function surfaceToTable(surface: LuaSurface): JsonTable {
|
||||
return {
|
||||
"name": surface.name,
|
||||
"index": surface.index,
|
||||
"daytime": surface.daytime,
|
||||
name: surface.name,
|
||||
index: surface.index,
|
||||
daytime: surface.daytime,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,8 +95,8 @@ export namespace Serdes {
|
|||
|
||||
export function positionTableToTable(positionTable: PositionTable): JsonTable {
|
||||
return {
|
||||
"x": positionTable.x,
|
||||
"y": positionTable.y,
|
||||
x: positionTable.x,
|
||||
y: positionTable.y,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue