More standard pointers.
This commit is contained in:
		| @@ -47,7 +47,7 @@ void RenderPipeline::renderScene(std::shared_ptr<Scene> scene) { | |||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if((*itSubScene)->onlyUpdateUnpaused && scene->game->timeManager.isPaused) { |     if((*itSubScene)->onlyUpdateUnpaused && scene->game.lock()->timeManager.isPaused) { | ||||||
|       ++itSubScene; |       ++itSubScene; | ||||||
|       continue; |       continue; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -18,9 +18,7 @@ DawnGame::DawnGame(const std::weak_ptr<DawnHost> host) : | |||||||
| int32_t DawnGame::init() { | int32_t DawnGame::init() { | ||||||
|   this->assetManager.init(); |   this->assetManager.init(); | ||||||
|   this->renderManager->init(weak_from_this()); |   this->renderManager->init(weak_from_this()); | ||||||
|  |   this->scene = dawnGameGetInitialScene(weak_from_this()); | ||||||
|   this->scene = dawnGameGetInitialScene(this); |  | ||||||
|    |  | ||||||
|   return DAWN_GAME_INIT_RESULT_SUCCESS; |   return DAWN_GAME_INIT_RESULT_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -90,5 +90,5 @@ namespace Dawn { | |||||||
|    * @param game Game that is requesting this scene. |    * @param game Game that is requesting this scene. | ||||||
|    * @return Pointer to a scene that you wish to have as the default scene. |    * @return Pointer to a scene that you wish to have as the default scene. | ||||||
|    */ |    */ | ||||||
|   std::shared_ptr<Scene> dawnGameGetInitialScene(DawnGame *game); |   std::shared_ptr<Scene> dawnGameGetInitialScene(std::weak_ptr<DawnGame> game); | ||||||
| } | } | ||||||
| @@ -22,7 +22,9 @@ namespace Dawn { | |||||||
|        */ |        */ | ||||||
|       static O * prefabCreate(Scene *scene) { |       static O * prefabCreate(Scene *scene) { | ||||||
|         O *item = scene->createSceneItemOfType<O>(); |         O *item = scene->createSceneItemOfType<O>(); | ||||||
|         item->prefabInit(&scene->game->assetManager); |         auto game = scene->game.lock(); | ||||||
|  |         assertNotNull(game, "Game cannot be null!"); | ||||||
|  |         item->prefabInit(&game->assetManager); | ||||||
|         return item; |         return item; | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -32,7 +34,7 @@ namespace Dawn { | |||||||
|        * @param scene Scene that this prefab belongs to. |        * @param scene Scene that this prefab belongs to. | ||||||
|        * @param id ID of this scene item. |        * @param id ID of this scene item. | ||||||
|        */ |        */ | ||||||
|       SceneItemPrefab(Scene *scene, sceneitemid_t id) : |       SceneItemPrefab(std::weak_ptr<Scene> scene, sceneitemid_t id) : | ||||||
|         SceneItem(scene, id) |         SceneItem(scene, id) | ||||||
|       { |       { | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ namespace Dawn { | |||||||
|           return std::vector<std::shared_ptr<Asset>>(); |           return std::vector<std::shared_ptr<Asset>>(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         SimpleSpinningCubePrefab(Scene *s, sceneitemid_t i) : |         SimpleSpinningCubePrefab(std::weak_ptr<Scene> s, sceneitemid_t i) : | ||||||
|           SceneItemPrefab(s, i) |           SceneItemPrefab(s, i) | ||||||
|         { |         { | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -10,8 +10,7 @@ | |||||||
|  |  | ||||||
| using namespace Dawn; | using namespace Dawn; | ||||||
|  |  | ||||||
| Scene::Scene(DawnGame *game) { | Scene::Scene(std::weak_ptr<DawnGame> game) { | ||||||
|   assertNotNull(game, "Scene::Scene: Game cannot be null"); |  | ||||||
|   this->game = game; |   this->game = game; | ||||||
|   this->nextId = 0; |   this->nextId = 0; | ||||||
|   this->physics = new ScenePhysicsManager(this); |   this->physics = new ScenePhysicsManager(this); | ||||||
| @@ -27,17 +26,12 @@ void Scene::update() { | |||||||
|   } |   } | ||||||
|   this->itemsNotInitialized.clear(); |   this->itemsNotInitialized.clear(); | ||||||
|    |    | ||||||
|   #if DAWN_DEBUG_BUILD |  | ||||||
|     this->debugGrid(); |  | ||||||
|     this->debugOrigin(); |  | ||||||
|     this->debugHitboxes(); |  | ||||||
|   #endif |  | ||||||
|    |  | ||||||
|   // TODO: Cleanup old scene items |   // TODO: Cleanup old scene items | ||||||
|  |  | ||||||
|   // TODO: Tick scene items(?) |   // TODO: Tick scene items(?) | ||||||
|  |   auto game = this->game.lock(); | ||||||
|   this->eventSceneUpdate.invoke(game->timeManager.delta); |   this->eventSceneUpdate.invoke(game->timeManager.delta); | ||||||
|   if(!this->game->timeManager.isPaused) this->eventSceneUnpausedUpdate.invoke(game->timeManager.delta); |   if(!game->timeManager.isPaused) this->eventSceneUnpausedUpdate.invoke(game->timeManager.delta); | ||||||
| } | } | ||||||
|  |  | ||||||
| SceneItem * Scene::createSceneItem() { | SceneItem * Scene::createSceneItem() { | ||||||
|   | |||||||
| @@ -25,14 +25,14 @@ namespace Dawn { | |||||||
|   template<class T> |   template<class T> | ||||||
|   std::vector<std::shared_ptr<T>> _sceneForwardGetComponents(SceneItem *item); |   std::vector<std::shared_ptr<T>> _sceneForwardGetComponents(SceneItem *item); | ||||||
|  |  | ||||||
|   class Scene : public StateOwner { |   class Scene : public StateOwner, public std::enable_shared_from_this<Scene> { | ||||||
|     private: |     private: | ||||||
|       sceneitemid_t nextId; |       sceneitemid_t nextId; | ||||||
|       std::map<sceneitemid_t, SceneItem*> items; |       std::map<sceneitemid_t, SceneItem*> items; | ||||||
|       std::map<sceneitemid_t, SceneItem*> itemsNotInitialized; |       std::map<sceneitemid_t, SceneItem*> itemsNotInitialized; | ||||||
|      |      | ||||||
|     public: |     public: | ||||||
|       DawnGame *game; |       std::weak_ptr<DawnGame> game; | ||||||
|       ScenePhysicsManager *physics; |       ScenePhysicsManager *physics; | ||||||
|       StateEvent<float_t> eventSceneUpdate; |       StateEvent<float_t> eventSceneUpdate; | ||||||
|       StateEvent<float_t> eventSceneUnpausedUpdate; |       StateEvent<float_t> eventSceneUnpausedUpdate; | ||||||
| @@ -42,7 +42,7 @@ namespace Dawn { | |||||||
|        *  |        *  | ||||||
|        * @param game Reference to the game that this scene belongs to. |        * @param game Reference to the game that this scene belongs to. | ||||||
|        */ |        */ | ||||||
|       Scene(DawnGame *game); |       Scene(std::weak_ptr<DawnGame> game); | ||||||
|  |  | ||||||
|       /** |       /** | ||||||
|        * Perform a one frame synchronous tick on the current scene. This may |        * Perform a one frame synchronous tick on the current scene. This may | ||||||
| @@ -58,7 +58,7 @@ namespace Dawn { | |||||||
|       template<class T> |       template<class T> | ||||||
|       T * createSceneItemOfType() { |       T * createSceneItemOfType() { | ||||||
|         sceneitemid_t id = this->nextId++; |         sceneitemid_t id = this->nextId++; | ||||||
|         auto item = new T(this, id); |         auto item = new T(weak_from_this(), id); | ||||||
|         assertNotNull(item, "Scene::createSceneItemOfType: Failed to create SceneItem (Memory Filled?)"); |         assertNotNull(item, "Scene::createSceneItemOfType: Failed to create SceneItem (Memory Filled?)"); | ||||||
|         this->itemsNotInitialized[id] = item; |         this->itemsNotInitialized[id] = item; | ||||||
|         return item; |         return item; | ||||||
| @@ -137,18 +137,6 @@ namespace Dawn { | |||||||
|         } |         } | ||||||
|         return components; |         return components; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       // Scene debugging functions |  | ||||||
|       #if DAWN_DEBUG_BUILD |  | ||||||
|         std::vector<struct SceneDebugLine> debugLines; |  | ||||||
|         void debugLine(struct SceneDebugLine line); |  | ||||||
|         void debugRay(struct SceneDebugRay ray); |  | ||||||
|         void debugCube(struct SceneDebugCube cube); |  | ||||||
|         void debugOrigin(); |  | ||||||
|         void debugGrid(); |  | ||||||
|         void debugHitboxes(); |  | ||||||
|       #endif |  | ||||||
|  |  | ||||||
|       /** |       /** | ||||||
|        * Destroys a previously initialized Scene. |        * Destroys a previously initialized Scene. | ||||||
|        */ |        */ | ||||||
|   | |||||||
| @@ -9,12 +9,10 @@ | |||||||
|  |  | ||||||
| using namespace Dawn; | using namespace Dawn; | ||||||
|  |  | ||||||
| SceneItem::SceneItem(Scene *scene, sceneitemid_t id)  : | SceneItem::SceneItem(std::weak_ptr<Scene> scene, sceneitemid_t id)  : | ||||||
|   transformLocal(1.0f), |   transformLocal(1.0f), | ||||||
|   transformWorld(1.0f) |   transformWorld(1.0f) | ||||||
| { | { | ||||||
|   assertNotNull(scene, "SceneItem::SceneItem: Scene cannot be null"); |  | ||||||
|    |  | ||||||
|   this->id = id; |   this->id = id; | ||||||
|   this->scene = scene; |   this->scene = scene; | ||||||
|   this->updateLocalValuesFromLocalTransform(); |   this->updateLocalValuesFromLocalTransform(); | ||||||
| @@ -89,7 +87,7 @@ void SceneItem::updateLocalTransformFromLocalValues() { | |||||||
| } | } | ||||||
|  |  | ||||||
| void SceneItem::updateWorldTransformFromLocalTransform() { | void SceneItem::updateWorldTransformFromLocalTransform() { | ||||||
|   auto parent = this->getParent().lock(); |   auto parent = this->getParent(); | ||||||
|   if(parent != nullptr) { |   if(parent != nullptr) { | ||||||
|     auto newWorld = parent->getWorldTransform(); |     auto newWorld = parent->getWorldTransform(); | ||||||
|     this->transformWorld = newWorld * transformLocal; |     this->transformWorld = newWorld * transformLocal; | ||||||
| @@ -101,7 +99,7 @@ void SceneItem::updateWorldTransformFromLocalTransform() { | |||||||
|  |  | ||||||
| void SceneItem::updateLocalTransformFromWorldTransform() { | void SceneItem::updateLocalTransformFromWorldTransform() { | ||||||
|   glm::mat4 parentMat(1.0f); |   glm::mat4 parentMat(1.0f); | ||||||
|   auto parent = this->getParent().lock(); |   auto parent = this->getParent(); | ||||||
|   if(parent != nullptr) parentMat = parent->getWorldTransform(); |   if(parent != nullptr) parentMat = parent->getWorldTransform(); | ||||||
|   this->transformLocal = parentMat / this->transformWorld; |   this->transformLocal = parentMat / this->transformWorld; | ||||||
|   this->updateLocalValuesFromLocalTransform(); |   this->updateLocalValuesFromLocalTransform(); | ||||||
| @@ -203,7 +201,7 @@ void SceneItem::setParent(std::shared_ptr<SceneItem> parent) { | |||||||
|     "SceneItem::setParent: Cannot set parent to self" |     "SceneItem::setParent: Cannot set parent to self" | ||||||
|   ); |   ); | ||||||
|    |    | ||||||
|   auto currentParent = this->getParent().lock(); |   auto currentParent = this->getParent(); | ||||||
|   if(currentParent == parent) return; |   if(currentParent == parent) return; | ||||||
|  |  | ||||||
|   if(currentParent != nullptr) { |   if(currentParent != nullptr) { | ||||||
| @@ -226,14 +224,14 @@ void SceneItem::setParent(std::shared_ptr<SceneItem> parent) { | |||||||
|   this->eventTransformUpdated.invoke(); |   this->eventTransformUpdated.invoke(); | ||||||
| } | } | ||||||
|  |  | ||||||
| std::weak_ptr<SceneItem> SceneItem::getParent() { | std::shared_ptr<SceneItem> SceneItem::getParent() { | ||||||
|   return this->parent; |   return this->parent.lock(); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool_t SceneItem::isChildOf(std::shared_ptr<SceneItem> parent) { | bool_t SceneItem::isChildOf(std::shared_ptr<SceneItem> parent) { | ||||||
|   auto current = this->getParent(); |   auto current = this->getParent(); | ||||||
|   std::shared_ptr<SceneItem> currentLocked; |   std::shared_ptr<SceneItem> currentLocked; | ||||||
|   while(currentLocked = current.lock()) { |   while(currentLocked = current) { | ||||||
|     if(currentLocked == parent) return true; |     if(currentLocked == parent) return true; | ||||||
|     current = currentLocked->getParent(); |     current = currentLocked->getParent(); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ namespace Dawn { | |||||||
|       void updateChildrenTransforms(); |       void updateChildrenTransforms(); | ||||||
|  |  | ||||||
|     public: |     public: | ||||||
|       Scene *scene; |       std::weak_ptr<Scene> scene; | ||||||
|       sceneitemid_t id; |       sceneitemid_t id; | ||||||
|       // I have no idea if I'm keeping this |       // I have no idea if I'm keeping this | ||||||
|       StateEvent<> eventTransformUpdated; |       StateEvent<> eventTransformUpdated; | ||||||
| @@ -53,7 +53,7 @@ namespace Dawn { | |||||||
|        * @param scene Weak pointer to the Scene that this SceneItem belongs to. |        * @param scene Weak pointer to the Scene that this SceneItem belongs to. | ||||||
|        * @param id Scene Item ID that the Scene assigned this SceneItem. |        * @param id Scene Item ID that the Scene assigned this SceneItem. | ||||||
|        */ |        */ | ||||||
|       SceneItem(Scene *scene, sceneitemid_t id); |       SceneItem(std::weak_ptr<Scene> scene, sceneitemid_t id); | ||||||
|        |        | ||||||
|       /** |       /** | ||||||
|        * Called by the Scene the frame after we were constructed so we can begin |        * Called by the Scene the frame after we were constructed so we can begin | ||||||
| @@ -310,7 +310,7 @@ namespace Dawn { | |||||||
|        * no parent for this transform. |        * no parent for this transform. | ||||||
|        * @return Pointer to the parent transform, or nullptr. |        * @return Pointer to the parent transform, or nullptr. | ||||||
|        */ |        */ | ||||||
|       std::weak_ptr<SceneItem> getParent(); |       std::shared_ptr<SceneItem> getParent(); | ||||||
|  |  | ||||||
|       /** |       /** | ||||||
|        * Returns true if this transform is a child of the given transform, this |        * Returns true if this transform is a child of the given transform, this | ||||||
|   | |||||||
| @@ -24,16 +24,20 @@ std::vector<std::shared_ptr<SceneItemComponent>> SceneItemComponent::getDependen | |||||||
|   return {}; |   return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
| Scene * SceneItemComponent::getScene() { | std::shared_ptr<Scene> SceneItemComponent::getScene() { | ||||||
|   return this->item->scene; |   auto scene = this->item->scene.lock(); | ||||||
|  |   assertNotNull(scene, "Scene cannot be null!"); | ||||||
|  |   return scene; | ||||||
| } | } | ||||||
|  |  | ||||||
| DawnGame * SceneItemComponent::getGame() { | std::shared_ptr<DawnGame> SceneItemComponent::getGame() { | ||||||
|   return this->item->scene->game; |   auto game = this->getScene()->game.lock(); | ||||||
|  |   assertNotNull(game, "Game cannot be null!"); | ||||||
|  |   return game; | ||||||
| } | } | ||||||
|  |  | ||||||
| ScenePhysicsManager * SceneItemComponent::getPhysics() { | ScenePhysicsManager * SceneItemComponent::getPhysics() { | ||||||
|   return this->item->scene->physics; |   return this->getScene()->physics; | ||||||
| } | } | ||||||
|  |  | ||||||
| void SceneItemComponent::onStart() { | void SceneItemComponent::onStart() { | ||||||
|   | |||||||
| @@ -43,13 +43,13 @@ namespace Dawn { | |||||||
|        * Shorthand to return the scene that this component's item belongs to. |        * Shorthand to return the scene that this component's item belongs to. | ||||||
|        * @return The current scene. |        * @return The current scene. | ||||||
|        */ |        */ | ||||||
|       Scene * getScene(); |       std::shared_ptr<Scene> getScene(); | ||||||
|  |  | ||||||
|       /** |       /** | ||||||
|        * Shorthand to return the game that this scene belongs to. |        * Shorthand to return the game that this scene belongs to. | ||||||
|        * @return The current game. |        * @return The current game. | ||||||
|        */ |        */ | ||||||
|       DawnGame * getGame(); |       std::shared_ptr<DawnGame> getGame(); | ||||||
|  |  | ||||||
|       /** |       /** | ||||||
|        * Shorthand to return the physics manager that the scene this item  |        * Shorthand to return the physics manager that the scene this item  | ||||||
|   | |||||||
| @@ -20,5 +20,5 @@ void FPSLabelComponent::onStart() { | |||||||
|     std::string strTick = std::to_string((int32_t)(delta * 1000.0f)); |     std::string strTick = std::to_string((int32_t)(delta * 1000.0f)); | ||||||
|     assertUnreachable("FPSLabelComponent::onStart: Not yet implemented");// Needs updating to new UI Label |     assertUnreachable("FPSLabelComponent::onStart: Not yet implemented");// Needs updating to new UI Label | ||||||
|     // label->text = strFps + "FPS (" + strTick + "ms)"; |     // label->text = strFps + "FPS (" + strTick + "ms)"; | ||||||
|   }, this->item->scene->eventSceneUnpausedUpdate); |   }, getScene()->eventSceneUnpausedUpdate); | ||||||
| } | } | ||||||
| @@ -10,7 +10,7 @@ using namespace Dawn; | |||||||
|  |  | ||||||
| Camera::Camera(SceneItem *item) : | Camera::Camera(SceneItem *item) : | ||||||
|   SceneItemComponent(item), |   SceneItemComponent(item), | ||||||
|   renderTarget(item->scene->game->renderManager->getBackBuffer()), |   renderTarget(item->scene.lock()->game.lock()->renderManager->getBackBuffer()), | ||||||
|   fov(0.785398f),// 45 degrees, |   fov(0.785398f),// 45 degrees, | ||||||
|   type(CAMERA_TYPE_PERSPECTIVE), |   type(CAMERA_TYPE_PERSPECTIVE), | ||||||
|   orthoLeft(-0.5f), |   orthoLeft(-0.5f), | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ namespace Dawn { | |||||||
|       std::function<void()> evtResized; |       std::function<void()> evtResized; | ||||||
|  |  | ||||||
|     public: |     public: | ||||||
|       static std::shared_ptr<Camera> create(Scene *scene) { |       static std::shared_ptr<Camera> create(std::shared_ptr<Scene> scene) { | ||||||
|         auto item = scene->createSceneItem(); |         auto item = scene->createSceneItem(); | ||||||
|         auto cam = item->addComponent<Camera>(); |         auto cam = item->addComponent<Camera>(); | ||||||
|         return cam; |         return cam; | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ UIComponent::UIComponent(SceneItem *item) : | |||||||
| } | } | ||||||
|  |  | ||||||
| std::shared_ptr<UIComponentDimensional> UIComponent::getParentDimensional() { | std::shared_ptr<UIComponentDimensional> UIComponent::getParentDimensional() { | ||||||
|   auto parent = item->getParent().lock(); |   auto parent = item->getParent(); | ||||||
|   if(parent == nullptr) return nullptr; |   if(parent == nullptr) return nullptr; | ||||||
|   auto dimensional = parent->getComponent<UIComponentDimensional>(); |   auto dimensional = parent->getComponent<UIComponentDimensional>(); | ||||||
|   assertNotNull(dimensional, "UIComponent::getParentDimensional: Parent must have a UIComponentDimensional"); |   assertNotNull(dimensional, "UIComponent::getParentDimensional: Parent must have a UIComponentDimensional"); | ||||||
| @@ -240,11 +240,11 @@ void UIComponent::calculateDimensions( | |||||||
|  |  | ||||||
| std::shared_ptr<UICanvas> UIComponent::getCanvas() { | std::shared_ptr<UICanvas> UIComponent::getCanvas() { | ||||||
|   // TODO: Cache this on first hit. |   // TODO: Cache this on first hit. | ||||||
|   auto parent = item->getParent().lock(); |   auto parent = item->getParent(); | ||||||
|   while(parent) { |   while(parent) { | ||||||
|     auto canvas = parent->getComponent<UICanvas>(); |     auto canvas = parent->getComponent<UICanvas>(); | ||||||
|     if(canvas != nullptr) return canvas; |     if(canvas != nullptr) return canvas; | ||||||
|     parent = parent->getParent().lock(); |     parent = parent->getParent(); | ||||||
|   } |   } | ||||||
|   assertUnreachable("UIComponent::getCanvas: No canvas found"); |   assertUnreachable("UIComponent::getCanvas: No canvas found"); | ||||||
|   return nullptr; |   return nullptr; | ||||||
|   | |||||||
| @@ -8,6 +8,6 @@ | |||||||
|  |  | ||||||
| using namespace Dawn; | using namespace Dawn; | ||||||
|  |  | ||||||
| std::shared_ptr<Scene> Dawn::dawnGameGetInitialScene(DawnGame *game) { | std::shared_ptr<Scene> Dawn::dawnGameGetInitialScene(std::weak_ptr<DawnGame> game) { | ||||||
|   return std::make_shared<HelloWorldScene>(game); |   return std::make_shared<HelloWorldScene>(game); | ||||||
| } | } | ||||||
| @@ -16,7 +16,7 @@ namespace Dawn { | |||||||
|       std::shared_ptr<UICanvas> canvas; |       std::shared_ptr<UICanvas> canvas; | ||||||
|  |  | ||||||
|       void stage() override { |       void stage() override { | ||||||
|         camera = Camera::create(this); |         camera = Camera::create(shared_from_this()); | ||||||
|         camera->item->lookAt(glm::vec3(3, 3, 3), glm::vec3(0, 0, 0)); |         camera->item->lookAt(glm::vec3(3, 3, 3), glm::vec3(0, 0, 0)); | ||||||
|  |  | ||||||
|         cube = SimpleSpinningCubePrefab::create(this); |         cube = SimpleSpinningCubePrefab::create(this); | ||||||
| @@ -25,13 +25,15 @@ namespace Dawn { | |||||||
|       } |       } | ||||||
|        |        | ||||||
|       std::vector<std::shared_ptr<Asset>> getRequiredAssets() override { |       std::vector<std::shared_ptr<Asset>> getRequiredAssets() override { | ||||||
|         auto assMan = &this->game->assetManager; |         auto game = this->game.lock(); | ||||||
|  |         assertNotNull(game, "Game is null!"); | ||||||
|  |         auto assMan = &game->assetManager; | ||||||
|         std::vector<std::shared_ptr<Asset>> assets; |         std::vector<std::shared_ptr<Asset>> assets; | ||||||
|         vectorAppend(assets, SimpleSpinningCubePrefab::getRequiredAssets(assMan)); |         vectorAppend(assets, SimpleSpinningCubePrefab::getRequiredAssets(assMan)); | ||||||
|         return assets; |         return assets; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|     public: |     public: | ||||||
|       HelloWorldScene(DawnGame *game) : Scene(game) {} |       HelloWorldScene(std::weak_ptr<DawnGame> game) : Scene(game) {} | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user