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