about to add SDL and probably break everything
This commit is contained in:
@ -37,7 +37,15 @@ SceneItem * Scene::createSceneItem() {
|
||||
}
|
||||
|
||||
Scene::~Scene() {
|
||||
// Early cleanup without disposing.
|
||||
auto it = this->items.begin();
|
||||
while(it != this->items.end()) {
|
||||
it->second->destroy();
|
||||
++it;
|
||||
}
|
||||
|
||||
// Now dispose everything.
|
||||
it = this->items.begin();
|
||||
while(it != this->items.end()) {
|
||||
delete it->second;
|
||||
++it;
|
||||
|
@ -59,8 +59,17 @@ void SceneItem::init() {
|
||||
} while(waitingOn != 0);
|
||||
}
|
||||
|
||||
void SceneItem::destroy() {
|
||||
auto it = this->components.begin();
|
||||
while(it != this->components.end()) {
|
||||
(*it)->onDispose();
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
SceneItem::~SceneItem() {
|
||||
auto it = this->components.begin();
|
||||
it = this->components.begin();
|
||||
while(it != this->components.end()) {
|
||||
delete *it;
|
||||
++it;
|
||||
|
@ -37,6 +37,12 @@ namespace Dawn {
|
||||
*/
|
||||
void init();
|
||||
|
||||
/**
|
||||
* Called by the Scene when cleanup needs to occur but before anything in
|
||||
* the scene has been disposed.
|
||||
*/
|
||||
void destroy();
|
||||
|
||||
/**
|
||||
* Adds a component to this scene item. Components will only have their
|
||||
* init methods invoked on the first frame we enter the scene. If you add
|
||||
|
@ -37,6 +37,10 @@ void SceneItemComponent::onStart() {
|
||||
|
||||
}
|
||||
|
||||
void SceneItemComponent::onDispose() {
|
||||
|
||||
}
|
||||
|
||||
SceneItemComponent::~SceneItemComponent() {
|
||||
|
||||
}
|
@ -58,9 +58,15 @@ namespace Dawn {
|
||||
*/
|
||||
virtual void onStart();
|
||||
|
||||
/**
|
||||
* Intended for subclasses to detect when they need to clean themselves up
|
||||
* but before anything has been completely free'd from memory.
|
||||
*/
|
||||
virtual void onDispose();
|
||||
|
||||
/**
|
||||
* Cleanup the SceneItemComponent.
|
||||
*/
|
||||
virtual ~SceneItemComponent();
|
||||
~SceneItemComponent();
|
||||
};
|
||||
}
|
@ -25,6 +25,6 @@ void AnimationController::onStart() {
|
||||
getScene()->eventSceneUnpausedUpdate.addListener(this, &AnimationController::onSceneUpdate);
|
||||
}
|
||||
|
||||
AnimationController::~AnimationController() {
|
||||
void AnimationController::onDispose() {
|
||||
getScene()->eventSceneUnpausedUpdate.removeListener(this, &AnimationController::onSceneUpdate);
|
||||
}
|
@ -18,7 +18,6 @@ namespace Dawn {
|
||||
AnimationController(SceneItem *item);
|
||||
|
||||
void onStart() override;
|
||||
|
||||
~AnimationController();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -58,10 +58,13 @@ void Camera::setRenderTarget(RenderTarget *renderTarget) {
|
||||
this, &Camera::onRenderTargetResize
|
||||
);
|
||||
this->updateProjection();
|
||||
this->eventRenderTargetResized.invoke(
|
||||
renderTarget->getWidth(), renderTarget->getHeight()
|
||||
);
|
||||
}
|
||||
|
||||
float_t Camera::getAspect() {
|
||||
RenderTarget *target = this->getRenderTarget();
|
||||
auto target = this->getRenderTarget();
|
||||
return target->getWidth() / target->getHeight();
|
||||
}
|
||||
|
||||
@ -71,9 +74,10 @@ void Camera::onStart() {
|
||||
|
||||
void Camera::onRenderTargetResize(RenderTarget *target, float_t w, float_t h) {
|
||||
this->updateProjection();
|
||||
this->eventRenderTargetResized.invoke(w, h);
|
||||
}
|
||||
|
||||
Camera::~Camera() {
|
||||
void Camera::onDispose() {
|
||||
this->getRenderTarget()->eventRenderTargetResized.removeListener(
|
||||
this, &Camera::onRenderTargetResize
|
||||
);
|
||||
|
@ -6,7 +6,7 @@
|
||||
#pragma once
|
||||
#include "scene/SceneItemComponent.hpp"
|
||||
#include "display/RenderTarget.hpp"
|
||||
#include "scene/Scene.hpp"
|
||||
#include "scene/Scene.hpp "
|
||||
|
||||
namespace Dawn {
|
||||
enum CameraType {
|
||||
@ -21,6 +21,8 @@ namespace Dawn {
|
||||
void onRenderTargetResize(RenderTarget *target, float_t w, float_t h);
|
||||
|
||||
public:
|
||||
Event<float_t, float_t> eventRenderTargetResized;
|
||||
|
||||
static Camera * create(Scene *scene) {
|
||||
auto item = scene->createSceneItem();
|
||||
auto cam = item->addComponent<Camera>();
|
||||
@ -81,10 +83,6 @@ namespace Dawn {
|
||||
* Event triggered by the scene item when the item is added to the scene.
|
||||
*/
|
||||
void onStart() override;
|
||||
|
||||
/**
|
||||
* Disposes a previously initialized camera.
|
||||
*/
|
||||
~Camera();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -18,9 +18,7 @@ std::vector<SceneItemComponent*> PixelPerfectCamera::getDependencies() {
|
||||
};
|
||||
}
|
||||
|
||||
void PixelPerfectCamera::onRenderTargetResized(
|
||||
RenderTarget *t, float_t w, float_t h
|
||||
) {
|
||||
void PixelPerfectCamera::onRenderTargetResized(float_t w, float_t h) {
|
||||
this->updateDimensions();
|
||||
}
|
||||
|
||||
@ -58,13 +56,13 @@ void PixelPerfectCamera::updateDimensions() {
|
||||
void PixelPerfectCamera::onStart() {
|
||||
assertNotNull(this->camera);
|
||||
this->updateDimensions();
|
||||
camera->getRenderTarget()->eventRenderTargetResized
|
||||
.addListener(this, &PixelPerfectCamera::onRenderTargetResized)
|
||||
;
|
||||
camera->eventRenderTargetResized.addListener(
|
||||
this, &PixelPerfectCamera::onRenderTargetResized
|
||||
);
|
||||
}
|
||||
|
||||
PixelPerfectCamera::~PixelPerfectCamera() {
|
||||
camera->getRenderTarget()->eventRenderTargetResized
|
||||
.removeListener(this, &PixelPerfectCamera::onRenderTargetResized)
|
||||
;
|
||||
void PixelPerfectCamera::onDispose() {
|
||||
camera->eventRenderTargetResized.removeListener(
|
||||
this, &PixelPerfectCamera::onRenderTargetResized
|
||||
);
|
||||
}
|
@ -11,7 +11,7 @@ namespace Dawn {
|
||||
protected:
|
||||
Camera *camera = nullptr;
|
||||
/** Event for when the render target is resized. */
|
||||
void onRenderTargetResized(RenderTarget *target, float_t w, float_t h);
|
||||
void onRenderTargetResized(float_t w, float_t h);
|
||||
|
||||
/**
|
||||
* Updates the underlying camera's projection information.
|
||||
@ -30,7 +30,6 @@ namespace Dawn {
|
||||
|
||||
std::vector<SceneItemComponent*> getDependencies() override;
|
||||
void onStart() override;
|
||||
|
||||
~PixelPerfectCamera();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -72,7 +72,7 @@ void SimpleRenderTargetQuad::onStart() {
|
||||
}
|
||||
}
|
||||
|
||||
SimpleRenderTargetQuad::~SimpleRenderTargetQuad() {
|
||||
void SimpleRenderTargetQuad::onDispose() {
|
||||
if(this->renderTarget != nullptr) {
|
||||
this->renderTarget->eventRenderTargetResized.removeListener(
|
||||
this, &SimpleRenderTargetQuad::onRenderTargetResized
|
||||
|
@ -36,7 +36,6 @@ namespace Dawn {
|
||||
|
||||
std::vector<SceneItemComponent*> getDependencies() override;
|
||||
void onStart() override;
|
||||
|
||||
~SimpleRenderTargetQuad();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -39,6 +39,6 @@ void ExampleSpin::onUnpausedUpdate() {
|
||||
this->transform->setLocalRotation(quat);
|
||||
}
|
||||
|
||||
ExampleSpin::~ExampleSpin() {
|
||||
void ExampleSpin::onDispose() {
|
||||
getScene()->eventSceneUnpausedUpdate.removeListener(this, &ExampleSpin::onUnpausedUpdate);
|
||||
}
|
@ -14,6 +14,6 @@ namespace Dawn {
|
||||
|
||||
ExampleSpin(SceneItem *item);
|
||||
void onUnpausedUpdate();
|
||||
~ExampleSpin();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -17,6 +17,10 @@ void SubSceneCameraAlign::onRenderTargetResize(
|
||||
this->realign();
|
||||
}
|
||||
|
||||
void SubSceneCameraAlign::onCameraResize(float_t w, float_t h) {
|
||||
this->realign();
|
||||
}
|
||||
|
||||
void SubSceneCameraAlign::realign() {
|
||||
float_t diff;
|
||||
if(this->camera == nullptr) return;
|
||||
@ -68,8 +72,8 @@ void SubSceneCameraAlign::setCamera(Camera *camera) {
|
||||
assertTrue(this->camera != camera);
|
||||
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
|
||||
this, &SubSceneCameraAlign::onRenderTargetResize
|
||||
this->camera->eventRenderTargetResized.removeListener(
|
||||
this, &SubSceneCameraAlign::onCameraResize
|
||||
);
|
||||
}
|
||||
|
||||
@ -77,8 +81,8 @@ void SubSceneCameraAlign::setCamera(Camera *camera) {
|
||||
this->realign();
|
||||
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.addListener(
|
||||
this, &SubSceneCameraAlign::onRenderTargetResize
|
||||
this->camera->eventRenderTargetResized.addListener(
|
||||
this, &SubSceneCameraAlign::onCameraResize
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -87,15 +91,15 @@ void SubSceneCameraAlign::onStart() {
|
||||
this->realign();
|
||||
}
|
||||
|
||||
SubSceneCameraAlign::~SubSceneCameraAlign() {
|
||||
void SubSceneCameraAlign::onDispose() {
|
||||
if(this->renderTarget != nullptr) {
|
||||
this->renderTarget->eventRenderTargetResized.removeListener(
|
||||
this, &SubSceneCameraAlign::onRenderTargetResize
|
||||
);
|
||||
}
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
|
||||
this, &SubSceneCameraAlign::onRenderTargetResize
|
||||
this->camera->eventRenderTargetResized.removeListener(
|
||||
this, &SubSceneCameraAlign::onCameraResize
|
||||
);
|
||||
}
|
||||
}
|
@ -15,18 +15,37 @@ namespace Dawn {
|
||||
Camera *camera = nullptr;
|
||||
|
||||
void onRenderTargetResize(RenderTarget *target, float_t w, float_t h);
|
||||
void onCameraResize(float_t w, float_t h);
|
||||
|
||||
/**
|
||||
* Realigns the camera to match the render target quad.
|
||||
*/
|
||||
void realign();
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Create the sub scene camera align component. This will align a camera
|
||||
* to match a render target quad (Refer SimpleRenderTargetQuad)
|
||||
*
|
||||
* @param item Scene Item that this component belongs to.
|
||||
*/
|
||||
SubSceneCameraAlign(SceneItem *item);
|
||||
|
||||
/**
|
||||
* Set the render target for this alignment to use.
|
||||
*
|
||||
* @param renderTarget Render target to align to.
|
||||
*/
|
||||
void setRenderTarget(TextureRenderTarget *renderTarget);
|
||||
|
||||
/**
|
||||
* Sets the camera that will be aligned.
|
||||
*
|
||||
* @param camera Camera to align.
|
||||
*/
|
||||
void setCamera(Camera *camera);
|
||||
|
||||
void onStart() override;
|
||||
|
||||
~SubSceneCameraAlign();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -38,7 +38,7 @@ void SubSceneController::onStart() {
|
||||
myScene->eventSceneUpdate.addListener(this, &SubSceneController::onSceneUpdate);
|
||||
}
|
||||
|
||||
SubSceneController::~SubSceneController() {
|
||||
void SubSceneController::onDispose() {
|
||||
auto myScene = this->getScene();
|
||||
myScene->eventSceneUnpausedUpdate.removeListener(this, &SubSceneController::onSceneUnpausedUpdate);
|
||||
myScene->eventSceneUpdate.removeListener(this, &SubSceneController::onSceneUpdate);
|
||||
|
@ -23,7 +23,6 @@ namespace Dawn {
|
||||
void setSubScene(Scene *scene);
|
||||
|
||||
void onStart() override;
|
||||
|
||||
~SubSceneController();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
@ -18,7 +18,7 @@ UICanvas * UICanvas::create(Scene *scene) {
|
||||
UICanvas::UICanvas(SceneItem *item) : SceneItemComponent(item) {
|
||||
}
|
||||
|
||||
void UICanvas::onRenderTargetResize(RenderTarget *target, float_t w, float_t h){
|
||||
void UICanvas::onRenderTargetResize(float_t w, float_t h){
|
||||
auto it = this->children.begin();
|
||||
while(it != this->children.end()) {
|
||||
(*it)->updatePositions();
|
||||
@ -30,7 +30,7 @@ void UICanvas::setCamera(Camera *camera) {
|
||||
assertTrue(camera != this->camera);
|
||||
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
|
||||
this->camera->eventRenderTargetResized.removeListener(
|
||||
this, &UICanvas::onRenderTargetResize
|
||||
);
|
||||
}
|
||||
@ -38,7 +38,7 @@ void UICanvas::setCamera(Camera *camera) {
|
||||
this->camera = camera;
|
||||
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.addListener(
|
||||
this->camera->eventRenderTargetResized.addListener(
|
||||
this, &UICanvas::onRenderTargetResize
|
||||
);
|
||||
}
|
||||
@ -65,16 +65,16 @@ void UICanvas::onStart() {
|
||||
}
|
||||
}
|
||||
|
||||
UICanvas::~UICanvas() {
|
||||
void UICanvas::onDispose() {
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->eventRenderTargetResized.removeListener(
|
||||
this, &UICanvas::onRenderTargetResize
|
||||
);
|
||||
}
|
||||
|
||||
auto it = this->children.begin();
|
||||
while(it != this->children.end()) {
|
||||
delete *it;
|
||||
++it;
|
||||
}
|
||||
|
||||
if(this->camera != nullptr) {
|
||||
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
|
||||
this, &UICanvas::onRenderTargetResize
|
||||
);
|
||||
}
|
||||
}
|
@ -21,7 +21,7 @@ namespace Dawn {
|
||||
protected:
|
||||
Camera *camera = nullptr;
|
||||
|
||||
void onRenderTargetResize(RenderTarget *target, float_t w, float_t h);
|
||||
void onRenderTargetResize(float_t w, float_t h);
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -91,7 +91,6 @@ namespace Dawn {
|
||||
float_t getHeight();
|
||||
|
||||
void onStart() override;
|
||||
|
||||
~UICanvas();
|
||||
void onDispose() override;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user