aboutsummaryrefslogtreecommitdiffstats
path: root/support/magicleap/Servo2D/code/inc.gen/PrismSceneManager.h
blob: 82d43212325c64eb85521528478d152efe81f399 (plain) (blame)
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
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --

// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%

// %SRC_VERSION%: 1

#pragma once

#include <lumin/Prism.h>
#include <lumin/node/Node.h>

#include <SceneDescriptor.h>
#include <SpawnedSceneBase.h>
#include <SpawnedSceneUserData.h>
#include <scenes.h>

class PrismSceneManager {
  public:

  typedef std::function<SpawnedSceneUserData*(SpawnedSceneBase&)> (*CreateSpawnedSceneUserData);
  static void setUserDataCreator(const SceneDescriptor & sceneDescriptor, CreateSpawnedSceneUserData createSpawnedSceneUserData);

  public:

    PrismSceneManager(lumin::Prism* prism);

    enum class SceneState {
      Unloaded,
      ResourceModelLoaded,
      ResourceAndObjectModelLoaded,
    };

    void setSceneState(const SceneDescriptor & sceneDescriptor, SceneState sceneState);
    SceneState getSceneState(const SceneDescriptor & sceneDescriptor, SceneState sceneState) const;

    SpawnedSceneBase* spawnScene(const SceneDescriptor & sceneDescriptor);
    lumin::Node* spawn(const SceneDescriptor & sceneDescriptor);

  private:

    typedef SpawnedSceneBase* (*CreateSpawnedScene)(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
    static const CreateSpawnedScene createSpawnedScene[scenes::numberOfExternalScenes];

    typedef SpawnedSceneHandlers* (*CreateSpawnedSceneHandlers)(SpawnedSceneBase& spawnedScene);
    static const CreateSpawnedSceneHandlers createSpawnedSceneHandlers[scenes::numberOfExternalScenes];

    static CreateSpawnedSceneUserData createSpawnedSceneUserData[scenes::numberOfExternalScenes];

  private:

    lumin::Node* createNodeTree(const SceneDescriptor & sceneDescriptor);

  private:

    lumin::Prism* prism_;
    SceneState sceneStates_[scenes::numberOfExternalScenes];
    std::string objectModelNames_[scenes::numberOfExternalScenes];
};