1
+ import { Label } from "../classes/Label"
1
2
import { HistoryLabelEventEnum } from "../enums/LabelEventEnum"
2
- import { convertStelLabelToStepHistoryData , getLabelByClassName } from "../functions/StepLabelUtility"
3
+ import { convertStelLabelToStepHistoryData } from "../functions/StepLabelUtility"
3
4
import { ExportedStep } from "../interface/ExportedStep"
4
5
import { HistoryLabelEvent } from "../interface/HistoryLabelEvent"
5
6
import { HistoryStep } from "../interface/HistoryStep"
@@ -18,6 +19,7 @@ export class GameStepManager {
18
19
*/
19
20
public static stepsHistory : ( HistoryLabelEvent | HistoryStep ) [ ] = [ ]
20
21
private static openedLabels : LabelHistoryDataType [ ] = [ ]
22
+ public static registeredLabels : { [ key : LabelHistoryDataType ] : typeof Label } = { }
21
23
/**
22
24
* currentLabel is the current label that occurred during the progression of the steps.
23
25
*/
@@ -38,7 +40,7 @@ export class GameStepManager {
38
40
// TODO: implement
39
41
return
40
42
}
41
- let currentLabel = getLabelByClassName ( GameStepManager . currentLabel )
43
+ let currentLabel = GameStepManager . getLabelByClassName ( GameStepManager . currentLabel )
42
44
if ( ! currentLabel ) {
43
45
console . error ( "Label not found" )
44
46
return
@@ -107,7 +109,7 @@ export class GameStepManager {
107
109
public static async runNextStep ( ) {
108
110
let lasteStepsLength = GameStepManager . stepsAfterLastHistoryLabel . length
109
111
if ( GameStepManager . currentLabel ) {
110
- let currentLabel = getLabelByClassName ( GameStepManager . currentLabel )
112
+ let currentLabel = GameStepManager . getLabelByClassName ( GameStepManager . currentLabel )
111
113
if ( ! currentLabel ) {
112
114
console . error ( "Label not found" )
113
115
return
@@ -127,15 +129,24 @@ export class GameStepManager {
127
129
}
128
130
console . warn ( "No next step" )
129
131
}
130
- public static async runLabel ( label : LabelHistoryDataType ) {
131
- GameStepManager . openLabel ( label )
132
+ public static async runLabel ( label : typeof Label | Label ) {
133
+ try {
134
+ if ( label instanceof Label ) {
135
+ label = label . constructor as typeof Label
136
+ }
137
+ let labelName = label . name
138
+ GameStepManager . openLabel ( labelName )
139
+ }
140
+ catch ( e ) {
141
+ console . error ( e )
142
+ return
143
+ }
132
144
await GameStepManager . runNextStep ( )
133
145
}
134
- private static openLabel ( label : LabelHistoryDataType ) {
135
- let currentLabel = getLabelByClassName ( label )
146
+ private static openLabel ( label : string ) {
147
+ let currentLabel = GameStepManager . getLabelByClassName ( label )
136
148
if ( ! currentLabel ) {
137
- console . error ( "Label not found" )
138
- return
149
+ throw new Error ( "Label not found" )
139
150
}
140
151
let historyLabel : HistoryLabelEvent = {
141
152
label : label ,
@@ -150,7 +161,7 @@ export class GameStepManager {
150
161
console . warn ( "No label to close" )
151
162
return
152
163
}
153
- let currentLabel = getLabelByClassName ( GameStepManager . currentLabel )
164
+ let currentLabel = GameStepManager . getLabelByClassName ( GameStepManager . currentLabel )
154
165
if ( ! currentLabel ) {
155
166
console . error ( "Label not found" )
156
167
return
@@ -195,4 +206,23 @@ export class GameStepManager {
195
206
console . error ( "Error importing data" , e )
196
207
}
197
208
}
209
+ private static getLabelByClassName < T extends Label > ( labelName : LabelHistoryDataType ) : T | undefined {
210
+ try {
211
+ let labelType = GameStepManager . registeredLabels [ labelName ]
212
+ if ( ! labelType ) {
213
+ console . error ( "Label not found" )
214
+ return
215
+ }
216
+ let label = new labelType ( )
217
+ let step = label . steps
218
+ if ( step . length = 0 ) {
219
+ console . warn ( "Label has no steps" )
220
+ }
221
+ return label as T
222
+ }
223
+ catch ( e ) {
224
+ console . error ( e )
225
+ return
226
+ }
227
+ }
198
228
}
0 commit comments