44
44
debugCheckTileWindowSize = flag .Bool ("debug_check_tile_window_size" , false , "if set, we verify that the tile window size is set high enough" )
45
45
debugCheckEntityOverlaps = flag .Bool ("debug_check_entity_overlaps" , false , "if set, we verify no two static entities overlap at same Z index" )
46
46
debugCheckEntitySpawn = flag .Bool ("debug_check_entity_spawn" , false , "if set, crash if an entity fails to spawn" )
47
+ cheatLevel = flag .String ("cheat_level" , "level" , "name of the level file to load" )
47
48
)
48
49
49
50
// World represents the current game state including its entities.
@@ -212,9 +213,23 @@ func loadLevel() (*level.Level, error) {
212
213
return loadLevelCache .Clone (), nil
213
214
}
214
215
215
- var levelLoader * level.Loader = level .NewLoader ("level" )
216
+ // LevelName returns the name of the level used.
217
+ // If this ever changes, ReloadLevel and locale.SetLanguage need to be called.
218
+ func LevelName () string {
219
+ return * cheatLevel
220
+ }
221
+
222
+ var (
223
+ levelLoader * level.Loader
224
+ levelLoaderCreated bool
225
+ )
216
226
217
227
func Precache (s * splash.State ) (splash.Status , error ) {
228
+ if levelLoader == nil && ! levelLoaderCreated {
229
+ levelLoader = level .NewLoader (LevelName ())
230
+ levelLoaderCreated = true
231
+ }
232
+
218
233
status , err := s .Enter ("loading level" , locale .G .Get ("loading level" ), "failed to load level" , levelLoader .LoadStepwise )
219
234
if status != splash .Continue {
220
235
return status , err
@@ -234,7 +249,7 @@ func Precache(s *splash.State) (splash.Status, error) {
234
249
235
250
func ReloadLevel () error {
236
251
// Must do this when the language changed.
237
- lvl , err := level .NewLoader ("level" ).Load ()
252
+ lvl , err := level .NewLoader (LevelName () ).Load ()
238
253
if err != nil {
239
254
return err
240
255
}
@@ -247,7 +262,7 @@ func ReloadLevel() error {
247
262
}
248
263
249
264
func PaletteChanged () error {
250
- loaded , err := level .NewLoader ("level" ).Load ()
265
+ loaded , err := level .NewLoader (LevelName () ).Load ()
251
266
if err != nil {
252
267
return err
253
268
}
@@ -304,6 +319,7 @@ func (w *World) Init(saveState int) error {
304
319
// Load loads the current savegame.
305
320
// If this fails, the world may be in an undefined state; call w.Init() or w.Load() to resume.
306
321
func (w * World ) Load () error {
322
+ // TODO: #424 - handle multiple levels.
307
323
saveName := fmt .Sprintf ("save-%d.json" , w .saveState )
308
324
err := w .loadUnchecked (saveName )
309
325
if errors .Is (err , os .ErrNotExist ) {
@@ -374,6 +390,7 @@ func (w *World) Save() error {
374
390
if is , cheats := flag .Cheating (); is {
375
391
return fmt .Errorf ("not saving, as cheats are enabled: %s" , cheats )
376
392
}
393
+ // TODO: #424 - handle multiple levels.
377
394
return vfs .WriteState (vfs .SavedGames , fmt .Sprintf ("save-%d.json" , w .saveState ), state )
378
395
}
379
396
0 commit comments