update event-type checker, plus some refactoring/updating

This commit is contained in:
Adam 2022-02-20 12:40:55 +01:00
parent 16510488da
commit e0b9ef9788

View file

@ -7,20 +7,19 @@ import {
handleTilesUpdate
} from "./handlers";
import {Queue} from "../queue/queue";
import on_player_built_tile = defines.events.on_player_built_tile;
import on_robot_built_tile = defines.events.on_robot_built_tile;
import {EventName} from "../global";
const mapEventIdToName = new LuaTable<defines.Events, keyof typeof defines.events>()
const mapEventIdToName = new LuaTable<defines.Events, EventName>()
for (const [eventName, eventId] of pairs(defines.events)) {
mapEventIdToName.set(eventId, eventName)
}
const mapEventIdToDefinedType = new LuaTable<EventId<EventData>, EventId<EventData>>()
for (const [eventName, eventId] of pairs(defines.events)) {
let definedType = defines.events[eventName]
mapEventIdToDefinedType.set(eventId, definedType)
}
// const mapEventIdToDefinedType = new LuaTable<EventId<EventData>, EventId<EventData>>()
// for (const [eventName, eventId] of pairs(defines.events)) {
// let definedType = defines.events[eventName]
// mapEventIdToDefinedType.set(eventId, definedType)
// }
// script.on_event(
// [defines.events.on_pre_build, defines.events.on_player_dropped_item],
@ -41,9 +40,6 @@ script.on_event(
script.on_event(
defines.events.on_player_joined_game,
(e: OnPlayerJoinedGameEvent) => {
Queue.init() // TODO make Queue initialisation more stable, not dependent on events
handlePlayerUpdate(e.tick, mapEventIdToName.get(e.name), e.player_index)
}
)
@ -59,7 +55,7 @@ script.on_event(
defines.events.on_tick,
(e: OnTickEvent) => {
if (e.tick % 1000 == 0) {
for (const [, surface] of pairs(game.surfaces)) {
for (const [, surface] of game.surfaces) {
handleSurfaceUpdate(e.tick, mapEventIdToName.get(e.name), surface)
}
@ -76,8 +72,7 @@ script.on_event(
log(`[${e.tick}] dequed ${events.length} events, current size: ${Queue.size()}`)
for (const event of events) {
if (isEventType<OnChunkGeneratedEvent>(event)) {
if (isEventType(event, defines.events.on_chunk_generated)) {
let eName = mapEventIdToName.get(event.name)
log(`[${e.tick}] dequed event ${eName}`)
@ -104,7 +99,10 @@ script.on_event(
)
script.on_event(
[on_player_built_tile, on_robot_built_tile],
[
defines.events.on_player_built_tile,
defines.events.on_robot_built_tile,
],
(builtTilesEvent) => {
handleTilesUpdate(
builtTilesEvent.tick,
@ -117,12 +115,10 @@ script.on_event(
)
function isEventType<E extends EventData>(e: EventData): e is E {
let id: EventId<EventData> | string = e.name
if (typeof id === "string") {
return false
} else {
let name = mapEventIdToDefinedType.get(id)
return e.name == name
}
function isEventType<ED extends EventData | CustomInputEvent>(
eventData: EventData,
type: ED extends CustomInputEvent ? string : EventId<ED>
): eventData is ED {
let id: EventId<EventData> | string = eventData.name
return id == type
}