update event-type checker, plus some refactoring/updating
This commit is contained in:
parent
16510488da
commit
e0b9ef9788
1 changed files with 19 additions and 23 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue