constructor ({ groundLayer, layerAdapter, backgroundObjectAdapter, backgroundAdapter, camera, loader }) {
    this.groundLayer = groundLayer
    this.lankCache = {}
    this.layerAdapters = {
      [DEFAULT_LAYER]: layerAdapter,
      [BACKGROUND_LAYER]: backgroundAdapter,
      [BACKGROUND_OBJECT_LAYER]: backgroundObjectAdapter
    }

    // Layers are preloaded if nothing has been added to them.
    this.preLoadedLayers = {
      [DEFAULT_LAYER]: true,
      [BACKGROUND_LAYER]: true,
      [BACKGROUND_OBJECT_LAYER]: true
    }

    this.camera = camera
    this.loader = loader
    this.lanks = {}

    // Data that should only be mutated by commands at runtime.
    this.runTimeState = {
      idleAnimation: {
        [LEFT_LANK_KEY]: 'idle',
        [RIGHT_LANK_KEY]: 'idle',
        [BACKGROUND_OBJECT]: 'idle'
      }
    }

    // Used to set up undo commands
    this.commandParsingState = {
      idleAnimation: _.cloneDeep(this.runTimeState.idleAnimation),
      lanks: {}
    }
  }
Registers the thangs and ThangTypes onto Lanks.
Then animates these Lanks to create a cinematic.
Instead of immediately executing methods, instead returns a Command that
can be run by the cinematic runner.

@implements {System}