Subscenes

This commit is contained in:
2023-01-14 22:06:35 -08:00
parent 15e7efb7f3
commit 0558b3bb25
35 changed files with 733 additions and 116 deletions

View File

@ -18,25 +18,7 @@ UICanvas * UICanvas::create(Scene *scene) {
UICanvas::UICanvas(SceneItem *item) : SceneItemComponent(item) {
}
float_t UICanvas::getWidth() {
return this->getGame()->renderManager.getBackBuffer()->getWidth();
}
float_t UICanvas::getHeight() {
return this->getGame()->renderManager.getBackBuffer()->getHeight();
}
void UICanvas::onStart() {
this->getGame()->renderManager.getBackBuffer()->eventRenderTargetResized
.addListener(this, &UICanvas::onBackBufferResize)
;
}
void UICanvas::onBackBufferResize(
RenderTarget *target,
float_t width,
float_t height
) {
void UICanvas::onRenderTargetResize(RenderTarget *target, float_t w, float_t h){
auto it = this->children.begin();
while(it != this->children.end()) {
(*it)->updatePositions();
@ -44,14 +26,55 @@ void UICanvas::onBackBufferResize(
}
}
void UICanvas::setCamera(Camera *camera) {
assertTrue(camera != this->camera);
if(this->camera != nullptr) {
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
this, &UICanvas::onRenderTargetResize
);
}
this->camera = camera;
if(this->camera != nullptr) {
this->camera->getRenderTarget()->eventRenderTargetResized.addListener(
this, &UICanvas::onRenderTargetResize
);
}
}
float_t UICanvas::getWidth() {
if(this->camera == nullptr) {
return this->getGame()->renderManager.getBackBuffer()->getWidth();
}
return this->camera->getRenderTarget()->getWidth();
}
float_t UICanvas::getHeight() {
if(this->camera == nullptr) {
return this->getGame()->renderManager.getBackBuffer()->getHeight();
}
return this->camera->getRenderTarget()->getHeight();
}
void UICanvas::onStart() {
if(this->camera == nullptr) {
auto camera = this->getScene()->findComponent<Camera>();
this->setCamera(camera);
}
}
UICanvas::~UICanvas() {
auto it = this->children.begin();
while(it != this->children.end()) {
delete *it;
++it;
}
this->getGame()->renderManager.getBackBuffer()->eventRenderTargetResized
.removeListener(this, &UICanvas::onBackBufferResize)
;
if(this->camera != nullptr) {
this->camera->getRenderTarget()->eventRenderTargetResized.removeListener(
this, &UICanvas::onRenderTargetResize
);
}
}

View File

@ -6,6 +6,7 @@
#pragma once
#include "scene/SceneItemComponent.hpp"
#include "display/RenderTarget.hpp"
#include "scene/components/display/Camera.hpp"
namespace Dawn {
enum UIDrawType {
@ -18,11 +19,9 @@ namespace Dawn {
class UICanvas : public SceneItemComponent {
protected:
void onBackBufferResize(
RenderTarget *target,
float_t width,
float_t height
);
Camera *camera = nullptr;
void onRenderTargetResize(RenderTarget *target, float_t w, float_t h);
public:
/**
@ -45,6 +44,13 @@ namespace Dawn {
*/
UICanvas(SceneItem *item);
/**
* Sets the camera used by the UI canvas.
*
* @param camera Camera to set for the UI canvas.
*/
void setCamera(Camera *camera);
/**
* Construct and append a UI item to this UI Canvas.
*