-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.ts
More file actions
134 lines (114 loc) · 3.12 KB
/
event.ts
File metadata and controls
134 lines (114 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import { Thunkify } from './types'
import { UnitOptions } from './unit'
import { GetTime } from './utils'
export function Event (opcode: OpcodeID, payload: any, delay: number = 0) {
switch (opcode) {
case OPCODES.UNIT_CREATE:
return new UnitCreateEvent(payload, delay)
case OPCODES.UNIT_SET_TARGET:
return new UnitSetTargetEvent(payload, delay)
case OPCODES.UNIT_CLEAR_TARGET:
return new UnitClearTargetEvent(payload, delay)
case OPCODES.UNIT_START_ATTACKING:
return new UnitStartAttackingEvent(payload, delay)
case OPCODES.UNIT_STOP_ATTACKING:
return new UnitStopAttackingEvent(payload, delay)
case OPCODES.DEBUG_LOG:
return new DebugLogEvent(payload, delay)
case OPCODES.DEBUG_SCRIPT:
return new DebugScriptEvent(payload, delay)
default:
return new BaseEvent(payload, delay)
}
}
export type Opcode = keyof typeof OPCODES
export type OpcodeID = (typeof OPCODES)[Opcode]
export const OPCODES = {
NOOP: 0,
// unit
UNIT_SET_TARGET: 1,
UNIT_CLEAR_TARGET: 2,
UNIT_CREATE: 3,
UNIT_START_ATTACKING: 4,
UNIT_STOP_ATTACKING: 5,
// debug
DEBUG_LOG: 6,
DEBUG_SCRIPT: 7,
} as const
export class BaseEvent {
public opcode: OpcodeID = OPCODES.NOOP
public delay: number = GetTime()
constructor (public payload: any, delay: number = 0) {
if (delay > 0)
this.delay += delay
}
}
export class UnitCreateEvent extends BaseEvent {
opcode = OPCODES.UNIT_CREATE
payload: Thunkify<UnitOptions>
constructor (payload: any, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class UnitSetTargetEvent extends BaseEvent {
opcode = OPCODES.UNIT_SET_TARGET
payload: Thunkify<{
unit: number
target: number
}>
constructor (payload: any, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class UnitClearTargetEvent extends BaseEvent {
opcode = OPCODES.UNIT_CLEAR_TARGET
constructor (payload = undefined, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class UnitStartAttackingEvent extends BaseEvent {
opcode = OPCODES.UNIT_START_ATTACKING
payload: Thunkify<{
unit: number
target: number
}>
constructor (payload: any, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class UnitStopAttackingEvent extends BaseEvent {
opcode = OPCODES.UNIT_STOP_ATTACKING
constructor (payload = undefined, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class DebugLogEvent extends BaseEvent {
opcode = OPCODES.DEBUG_LOG
payload: Thunkify<any>
constructor (payload: any, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export class DebugScriptEvent extends BaseEvent {
opcode = OPCODES.DEBUG_SCRIPT
payload: () => void
constructor (payload: any, delay: number = 0) {
super(payload, delay)
this.payload = payload
}
}
export type Event =
| BaseEvent
| UnitCreateEvent
| UnitSetTargetEvent
| UnitClearTargetEvent
| UnitStartAttackingEvent
| UnitStopAttackingEvent
| DebugLogEvent
| DebugScriptEvent