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
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue