tidying up, making the data model a bit more structured,
This commit is contained in:
parent
da9cc6398f
commit
02cda9c72a
3 changed files with 81 additions and 43 deletions
|
|
@ -4,9 +4,6 @@
|
||||||
// declare const factorioData: Data
|
// declare const factorioData: Data
|
||||||
// declare const factorioMods: Mods
|
// declare const factorioMods: Mods
|
||||||
|
|
||||||
// const eventEnum = {
|
|
||||||
// thingType: Object.values(defines.events)
|
|
||||||
// }
|
|
||||||
|
|
||||||
import {Serdes} from "./serdes/serdes"
|
import {Serdes} from "./serdes/serdes"
|
||||||
import {FactorioEvent, JsonTable} from "./model/model";
|
import {FactorioEvent, JsonTable} from "./model/model";
|
||||||
|
|
@ -16,13 +13,10 @@ for (const [k, v] of pairs(defines.events)) {
|
||||||
mapEventIdToName.set(v, k)
|
mapEventIdToName.set(v, k)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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) {
|
function handlePlayerUpdate(tick: uint, playerIndex: uint, eventType: string) {
|
||||||
let player: LuaPlayer = game.players[playerIndex]
|
let player: LuaPlayer = game.players[playerIndex]
|
||||||
let table = Serdes.Player.playerToTable(player)
|
let table = Serdes.Player.playerToTable(player)
|
||||||
let event = FactorioEvent(tick, player.object_name, eventType, table)
|
let event = FactorioEvent(tick, eventType, table)
|
||||||
emitEvent(event)
|
emitEvent(event)
|
||||||
|
|
||||||
handleCharactersEvent(tick, playerIndex, eventType)
|
handleCharactersEvent(tick, playerIndex, eventType)
|
||||||
|
|
@ -44,13 +38,13 @@ function handleCharactersEvent(tick: uint, playerIndex: uint, eventType: string)
|
||||||
|
|
||||||
function handleEntityUpdate(tick: uint, entity: LuaEntity, eventType: string) {
|
function handleEntityUpdate(tick: uint, entity: LuaEntity, eventType: string) {
|
||||||
let table = Serdes.Entity.entityToTable(entity)
|
let table = Serdes.Entity.entityToTable(entity)
|
||||||
let event = FactorioEvent(tick, entity.object_name, eventType, table)
|
let event = FactorioEvent(tick, eventType, table)
|
||||||
emitEvent(event)
|
emitEvent(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
function surfaceEvent(tick: uint, surface: LuaSurface, eventType: string) {
|
function surfaceEvent(tick: uint, surface: LuaSurface, eventType: string) {
|
||||||
let table = Serdes.Surface.surfaceToTable(surface)
|
let table = Serdes.Surface.surfaceToTable(surface)
|
||||||
let event = FactorioEvent(tick, surface.object_name, eventType, table)
|
let event = FactorioEvent(tick, eventType, table)
|
||||||
emitEvent(event)
|
emitEvent(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
import {Serdes} from "../serdes/serdes";
|
||||||
|
import FactorioObjectData = Serdes.FactorioObjectData;
|
||||||
|
|
||||||
export type JsonPrimitiveType = number | string | boolean | undefined | null | void
|
export type JsonPrimitiveType = number | string | boolean | undefined | null | void
|
||||||
|
|
||||||
export type JsonArray<T extends JsonPrimitiveType = void> = T[]
|
export type JsonArray<T extends JsonPrimitiveType = void> = T[]
|
||||||
|
|
@ -22,18 +25,37 @@ export interface FactorioEvent extends JsonTable {
|
||||||
tick: uint,
|
tick: uint,
|
||||||
/** the initial Factorio event ({defines.events}) trigger */
|
/** the initial Factorio event ({defines.events}) trigger */
|
||||||
event_type: string,
|
event_type: string,
|
||||||
/** Defines the structure of {FactorioEvent.data} */
|
data: FactorioObjectData,
|
||||||
object_name: string,
|
|
||||||
data: JsonTable,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FactorioEvent = ((tick: uint, objectName: string, eventType: string, data: JsonTable) => {
|
export const FactorioEvent =
|
||||||
return {
|
(<DataType extends FactorioObjectData>(
|
||||||
mod_version: MOD_VERSION,
|
tick: uint,
|
||||||
tick: tick,
|
eventType: string,
|
||||||
object_name: objectName,
|
data: DataType
|
||||||
event_type: eventType,
|
) => {
|
||||||
data: data,
|
return {
|
||||||
} as FactorioEvent
|
mod_version: MOD_VERSION,
|
||||||
}
|
tick: tick,
|
||||||
)
|
event_type: eventType,
|
||||||
|
data: data,
|
||||||
|
} as FactorioEvent
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// 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>
|
||||||
|
// const JsonTable = () => new LuaTable<string, JsonTableValueType>()
|
||||||
|
// export type JsonTableConstructor = (new () => JsonTable)
|
||||||
|
// declare const JsonTable: JsonTableConstructor
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,26 @@
|
||||||
// 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>
|
|
||||||
// const JsonTable = () => new LuaTable<string, JsonTableValueType>()
|
|
||||||
// export type JsonTableConstructor = (new () => JsonTable)
|
|
||||||
// declare const JsonTable: JsonTableConstructor
|
|
||||||
|
|
||||||
|
|
||||||
import {JsonTable, JsonArray} from "../model/model";
|
import {JsonTable, JsonArray} from "../model/model";
|
||||||
|
|
||||||
|
import PositionData = Serdes.DataClasses.PositionData;
|
||||||
|
|
||||||
export namespace Serdes {
|
export namespace Serdes {
|
||||||
|
|
||||||
|
export interface FactorioObjectData extends JsonTable {
|
||||||
|
object_name: string
|
||||||
|
}
|
||||||
|
|
||||||
export namespace Player {
|
export namespace Player {
|
||||||
|
|
||||||
export function playerToTable(player: LuaPlayer): JsonTable {
|
export interface PlayerData extends FactorioObjectData {
|
||||||
|
name: string
|
||||||
|
character_unit_number?: uint
|
||||||
|
associated_characters_unit_numbers: JsonArray<number>
|
||||||
|
position: PositionData
|
||||||
|
}
|
||||||
|
|
||||||
|
export function playerToTable(player: LuaPlayer): PlayerData {
|
||||||
let charIds = Entity.entitiesToUnitNumbers(player.get_associated_characters())
|
let charIds = Entity.entitiesToUnitNumbers(player.get_associated_characters())
|
||||||
return {
|
return {
|
||||||
|
object_name: player.object_name,
|
||||||
name: player.name,
|
name: player.name,
|
||||||
character_unit_number: player.character?.unit_number,
|
character_unit_number: player.character?.unit_number,
|
||||||
associated_characters_unit_numbers: charIds,
|
associated_characters_unit_numbers: charIds,
|
||||||
|
|
@ -34,9 +32,21 @@ export namespace Serdes {
|
||||||
|
|
||||||
export namespace Entity {
|
export namespace Entity {
|
||||||
|
|
||||||
export function entityToTable(entity: LuaEntity): JsonTable {
|
interface EntityData extends FactorioObjectData {
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
active: boolean
|
||||||
|
health?: number
|
||||||
|
surface_index: int
|
||||||
|
unit_number?: number
|
||||||
|
position: PositionData
|
||||||
|
player_index?: number
|
||||||
|
}
|
||||||
|
|
||||||
let data: JsonTable = {
|
export function entityToTable(entity: LuaEntity): EntityData {
|
||||||
|
|
||||||
|
let data: EntityData = {
|
||||||
|
object_name: entity.object_name,
|
||||||
name: entity.name,
|
name: entity.name,
|
||||||
type: entity.type,
|
type: entity.type,
|
||||||
active: entity.active,
|
active: entity.active,
|
||||||
|
|
@ -68,8 +78,15 @@ export namespace Serdes {
|
||||||
|
|
||||||
export namespace Surface {
|
export namespace Surface {
|
||||||
|
|
||||||
export function surfaceToTable(surface: LuaSurface): JsonTable {
|
interface SurfaceData extends FactorioObjectData {
|
||||||
|
name: string
|
||||||
|
index: uint
|
||||||
|
daytime: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export function surfaceToTable(surface: LuaSurface): SurfaceData {
|
||||||
return {
|
return {
|
||||||
|
object_name: surface.object_name,
|
||||||
name: surface.name,
|
name: surface.name,
|
||||||
index: surface.index,
|
index: surface.index,
|
||||||
daytime: surface.daytime,
|
daytime: surface.daytime,
|
||||||
|
|
@ -80,7 +97,12 @@ export namespace Serdes {
|
||||||
|
|
||||||
export namespace DataClasses {
|
export namespace DataClasses {
|
||||||
|
|
||||||
export function positionTableToTable(positionTable: PositionTable): JsonTable {
|
export interface PositionData extends JsonTable {
|
||||||
|
x: int
|
||||||
|
y: int
|
||||||
|
}
|
||||||
|
|
||||||
|
export function positionTableToTable(positionTable: PositionTable): PositionData {
|
||||||
return {
|
return {
|
||||||
x: positionTable.x,
|
x: positionTable.x,
|
||||||
y: positionTable.y,
|
y: positionTable.y,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue