Switching SceneItems to smarts

This commit is contained in:
2023-11-12 23:02:11 -06:00
parent 91a91a5404
commit 54da3733d7
124 changed files with 188 additions and 216 deletions

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UIBorder::UIBorder(SceneItem *item) :
UIBorder::UIBorder(std::weak_ptr<SceneItem> item) :
texture(nullptr),
borderSize(glm::vec2(8, 8)),
UIComponentRenderable(item)
@ -37,7 +37,7 @@ std::vector<struct ShaderPassItem> UIBorder::getUIRenderPasses() {
item.shader = shader;
item.colorValues[shader->paramColor] = COLOR_WHITE;
item.parameterBuffers[shader->bufferUiCanvas] = &this->getCanvas()->shaderBuffer;
item.matrixValues[shader->paramModel] = this->item->getWorldTransform();
item.matrixValues[shader->paramModel] = this->item.lock()->getWorldTransform();
if(this->texture == nullptr) {
item.boolValues[shader->paramHasTexture] = false;
} else {
@ -45,7 +45,7 @@ std::vector<struct ShaderPassItem> UIBorder::getUIRenderPasses() {
item.textureSlots[0] = this->texture;
item.textureValues[shader->paramTexture] = 0;
}
item.w = this->item->getWorldPosition().z;
item.w = this->item.lock()->getWorldPosition().z;
item.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND;
item.mesh = &mesh;

View File

@ -20,7 +20,7 @@ namespace Dawn {
// @optional
StateProperty<Texture*> texture;
UIBorder(SceneItem *item);
UIBorder(std::weak_ptr<SceneItem> item);
float_t getContentWidth() override;
float_t getContentHeight() override;

View File

@ -14,7 +14,7 @@ std::shared_ptr<UICanvas> UICanvas::create(Scene *scene) {
return item->addComponent<UICanvas>();
}
UICanvas::UICanvas(SceneItem *item) :
UICanvas::UICanvas(std::weak_ptr<SceneItem> item) :
SceneItemComponent(item),
camera(nullptr)
{
@ -26,7 +26,7 @@ void UICanvas::rebufferShaderParameters() {
switch(this->drawType) {
case UI_DRAW_TYPE_WORLD_ABSOLUTE:
data.projection = camera->getProjection();
data.view = camera->item->getWorldTransform();
data.view = camera->item.lock()->getWorldTransform();
break;
case UI_DRAW_TYPE_WORLD_CAMERA_RELATIVE:
@ -91,7 +91,7 @@ void UICanvas::onStart() {
this->h = h / this->getScale();
this->rebufferShaderParameters();
auto comps = this->item->findChildren<UIComponent>();
auto comps = this->item.lock()->findChildren<UIComponent>();
auto itComps = comps.begin();
while(itComps != comps.end()) {
(*itComps)->alignmentNeedsUpdating = true;

View File

@ -94,7 +94,7 @@ namespace Dawn {
*
* @param item Item that this canvas item belongs to.
*/
UICanvas(SceneItem *item);
UICanvas(std::weak_ptr<SceneItem> item);
/**
* Returns the scale of this canvas.

View File

@ -7,7 +7,7 @@
using namespace Dawn;
UIComponent::UIComponent(SceneItem *item) :
UIComponent::UIComponent(std::weak_ptr<SceneItem> item) :
SceneItemComponent(item),
alignment(glm::vec4(0, 0, 128, 128)),
alignUnitLeft(UI_COMPONENT_ALIGN_UNIT_SCALE),
@ -22,7 +22,7 @@ UIComponent::UIComponent(SceneItem *item) :
}
std::shared_ptr<UIComponentDimensional> UIComponent::getParentDimensional() {
auto parent = item->getParent();
auto parent = item.lock()->getParent();
if(parent == nullptr) return nullptr;
auto dimensional = parent->getComponent<UIComponentDimensional>();
assertNotNull(dimensional, "UIComponent::getParentDimensional: Parent must have a UIComponentDimensional");
@ -34,7 +34,7 @@ void UIComponent::updateAlignment() {
auto align = (glm::vec4)this->alignment;
auto dimensional = this->getParentDimensional();
auto translate = item->getLocalPosition();
auto translate = item.lock()->getLocalPosition();
assertNotNull(dimensional, "UIComponent::updateAlignment: Parent must have a UIComponentDimensional");
@ -99,7 +99,7 @@ void UIComponent::updateAlignment() {
translate.x += dimensional->getChildOffsetX();
translate.y += dimensional->getChildOffsetY();
item->setLocalPosition(translate);
item.lock()->setLocalPosition(translate);
this->alignmentNeedsUpdating = false;
this->eventAlignmentUpdated.invoke();
}
@ -240,7 +240,7 @@ void UIComponent::calculateDimensions(
std::shared_ptr<UICanvas> UIComponent::getCanvas() {
// TODO: Cache this on first hit.
auto parent = item->getParent();
auto parent = item.lock()->getParent();
while(parent) {
auto canvas = parent->getComponent<UICanvas>();
if(canvas != nullptr) return canvas;
@ -274,7 +274,7 @@ void UIComponent::onStart() {
useEffect([&]{
this->updateAlignment();
auto child = this->item->findChildren<UIComponent>();
auto child = this->item.lock()->findChildren<UIComponent>();
auto itChild = child.begin();
while(itChild != child.end()) {
(*itChild)->alignmentNeedsUpdating = true;

View File

@ -123,7 +123,7 @@ namespace Dawn {
// @optional
StateProperty<glm::vec4> alignment;
UIComponent(SceneItem *item);
UIComponent(std::weak_ptr<SceneItem> item);
/**
* Returns the canvas that this UI element is belonging to.

View File

@ -7,7 +7,7 @@
using namespace Dawn;
UIComponentRenderable::UIComponentRenderable(SceneItem *i) : UIComponent(i) {
UIComponentRenderable::UIComponentRenderable(std::weak_ptr<SceneItem> i) : UIComponent(i) {
}

View File

@ -9,7 +9,7 @@
namespace Dawn {
class UIComponentRenderable : public UIComponent, public IRenderable {
public:
UIComponentRenderable(SceneItem *item);
UIComponentRenderable(std::weak_ptr<SceneItem> item);
std::vector<struct ShaderPassItem> getRenderPasses(
struct IRenderableContext &context

View File

@ -7,7 +7,7 @@
using namespace Dawn;
UIEmpty::UIEmpty(SceneItem *item) : UIComponent(item) { }
UIEmpty::UIEmpty(std::weak_ptr<SceneItem> item) : UIComponent(item) { }
float_t UIEmpty::getContentWidth() {
return this->getWidthFromAlignment();

View File

@ -9,7 +9,7 @@
namespace Dawn {
class UIEmpty : public UIComponent {
public:
UIEmpty(SceneItem *item);
UIEmpty(std::weak_ptr<SceneItem> item);
float_t getContentWidth() override;
float_t getContentHeight() override;
float_t getChildOffsetX() override;

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UIImage::UIImage(SceneItem *item) :
UIImage::UIImage(std::weak_ptr<SceneItem> item) :
texture(nullptr),
UIComponentRenderable(item),
uvs(glm::vec4(0, 1, 1, 0))
@ -32,7 +32,7 @@ std::vector<struct ShaderPassItem> UIImage::getUIRenderPasses() {
item.shader = shader;
item.colorValues[shader->paramColor] = this->color;
item.parameterBuffers[shader->bufferUiCanvas] = &getCanvas()->shaderBuffer;
item.matrixValues[shader->paramModel] = this->item->getWorldTransform();
item.matrixValues[shader->paramModel] = this->item.lock()->getWorldTransform();
if(this->texture == nullptr) {
item.boolValues[shader->paramHasTexture] = false;
} else {
@ -40,7 +40,7 @@ std::vector<struct ShaderPassItem> UIImage::getUIRenderPasses() {
item.textureSlots[0] = this->texture;
item.textureValues[shader->paramTexture] = 0;
}
item.w = this->item->getWorldPosition().z;
item.w = this->item.lock()->getWorldPosition().z;
item.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND;
item.mesh = &mesh;
return { item };

View File

@ -20,7 +20,7 @@ namespace Dawn {
// @optional
StateProperty<glm::vec4> uvs;
UIImage(SceneItem *item);
UIImage(std::weak_ptr<SceneItem> item);
float_t getContentWidth() override;
float_t getContentHeight() override;

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UIMesh::UIMesh(SceneItem *i) :
UIMesh::UIMesh(std::weak_ptr<SceneItem> i) :
texture(nullptr),
UIComponentRenderable(i)
{
@ -31,7 +31,7 @@ std::vector<struct ShaderPassItem> UIMesh::getUIRenderPasses() {
shaderItem.shader = shader;
shaderItem.colorValues[shader->paramColor] = this->color;
shaderItem.parameterBuffers[shader->bufferUiCanvas] = &getCanvas()->shaderBuffer;
shaderItem.matrixValues[shader->paramModel] = item->getWorldTransform();
shaderItem.matrixValues[shader->paramModel] = item.lock()->getWorldTransform();
if(this->texture == nullptr) {
shaderItem.boolValues[shader->paramHasTexture] = false;
} else {
@ -39,7 +39,7 @@ std::vector<struct ShaderPassItem> UIMesh::getUIRenderPasses() {
shaderItem.textureSlots[0] = this->texture;
shaderItem.textureValues[shader->paramTexture] = 0;
}
shaderItem.w = item->getWorldPosition().z;
shaderItem.w = item.lock()->getWorldPosition().z;
shaderItem.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND;
shaderItem.mesh = &mesh;
return { shaderItem };

View File

@ -22,7 +22,7 @@ namespace Dawn {
// @optional
StateProperty<Texture*> texture;
UIMesh(SceneItem *item);
UIMesh(std::weak_ptr<SceneItem> item);
float_t getContentWidth() override;
float_t getContentHeight() override;
std::vector<struct ShaderPassItem> getUIRenderPasses() override;

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UIMenuController::UIMenuController(SceneItem *item) :
UIMenuController::UIMenuController(std::weak_ptr<SceneItem> item) :
SceneItemComponent(item),
active(true),
menuX(0),

View File

@ -22,7 +22,7 @@ namespace Dawn {
StateEvent<int32_t, int32_t> eventItemSelected;
StateEvent<> eventMenuCancel;
UIMenuController(SceneItem *item);
UIMenuController(std::weak_ptr<SceneItem> item);
void onStart() override;
};
}

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UISimpleMenu::UISimpleMenu(SceneItem *item) :
UISimpleMenu::UISimpleMenu(std::weak_ptr<SceneItem> item) :
SceneItemComponent(item)
{
@ -16,8 +16,8 @@ UISimpleMenu::UISimpleMenu(SceneItem *item) :
std::vector<std::shared_ptr<SceneItemComponent>> UISimpleMenu::getDependencies() {
return {
(this->menu = this->item->getComponent<UIMenuController>()),
(this->canvas == nullptr ? (this->canvas = this->item->getComponent<UICanvas>()) : nullptr)
(this->menu = this->item.lock()->getComponent<UIMenuController>()),
(this->canvas == nullptr ? (this->canvas = this->item.lock()->getComponent<UICanvas>()) : nullptr)
};
}
@ -26,7 +26,7 @@ void UISimpleMenu::onStart() {
assertNotNull(this->menu, "UISimpleMenu::onStart: Menu cannot be null");
assertNotNull(this->canvas, "UISimpleMenu::onStart: Canvas cannot be null");
menuItems = this->item->findChildren<UISimpleMenuItem>();
menuItems = this->item.lock()->findChildren<UISimpleMenuItem>();
auto updateSimpleMenuPos = [&](int32_t x, int32_t y) {
if(currentlySelected != nullptr) {
@ -75,7 +75,7 @@ void UISimpleMenu::onStart() {
case UI_DRAW_TYPE_WORLD_ABSOLUTE:
mouse *= 2.0f;
mouse -= glm::vec2(1, 1);
ray.origin = canvas->camera->item->getWorldPosition();
ray.origin = canvas->camera->item.lock()->getWorldPosition();
ray.direction = canvas->camera->getRayDirectionFromScreenSpace(mouse);
break;
@ -107,7 +107,7 @@ void UISimpleMenu::onStart() {
if(!raytestQuad(
ray,
glm::vec2(0, 0), size,
highlight->item->getWorldTransform(),
highlight->item.lock()->getWorldTransform(),
&point,
&normal,
&distance

View File

@ -16,7 +16,7 @@ namespace Dawn {
std::vector<std::shared_ptr<UISimpleMenuItem>> menuItems;
public:
UISimpleMenu(SceneItem *item);
UISimpleMenu(std::weak_ptr<SceneItem> item);
std::vector<std::shared_ptr<SceneItemComponent>> getDependencies() override;
void onStart() override;
};

View File

@ -7,11 +7,11 @@
using namespace Dawn;
UISimpleMenuItem::UISimpleMenuItem(SceneItem *item) : SceneItemComponent(item) {
UISimpleMenuItem::UISimpleMenuItem(std::weak_ptr<SceneItem> item) : SceneItemComponent(item) {
}
std::shared_ptr<UIComponent> UISimpleMenuItem::getComponentForHighlighting() {
if(uiComponent == nullptr) uiComponent = item->getComponent<UIComponent>();
if(uiComponent == nullptr) uiComponent = item.lock()->getComponent<UIComponent>();
return uiComponent;
}

View File

@ -17,7 +17,7 @@ namespace Dawn {
int32_t menuY = 0;
std::shared_ptr<UIComponent> uiComponent = nullptr;
UISimpleMenuItem(SceneItem *item);
UISimpleMenuItem(std::weak_ptr<SceneItem> item);
/**
* Returns the UI component that this simple UI menu item uses to figure

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UILabel::UILabel(SceneItem *item) :
UILabel::UILabel(std::weak_ptr<SceneItem> item) :
UIComponentRenderable(item),
lineHeight(1.0f),
textAlign(UI_LABEL_TEXT_ALIGN_LEFT)
@ -90,7 +90,7 @@ std::vector<struct ShaderPassItem> UILabel::getUIRenderPasses() {
auto shader = getGame()->renderManager->fontShader;
// Translate
glm::mat4 model = item->getWorldTransform();
glm::mat4 model = item.lock()->getWorldTransform();
model = glm::translate(model, glm::vec3(this->textOffset, 0.0f));
struct ShaderPassItem item;

View File

@ -79,7 +79,7 @@ namespace Dawn {
// @optional
StateProperty<enum UILabelTextAlign> textAlign;
UILabel(SceneItem *item);
UILabel(std::weak_ptr<SceneItem> item);
void onStart() override;
std::vector<struct ShaderPassItem> getUIRenderPasses() override;

View File

@ -8,7 +8,7 @@
using namespace Dawn;
UIRichTextLabel::UIRichTextLabel(SceneItem *item) :
UIRichTextLabel::UIRichTextLabel(std::weak_ptr<SceneItem> item) :
UILabel(item)
{

View File

@ -12,7 +12,7 @@ namespace Dawn {
// @innerXml
StateProperty<std::string> richText;
UIRichTextLabel(SceneItem *item);
UIRichTextLabel(std::weak_ptr<SceneItem> item);
void onStart() override;
};

View File

@ -7,7 +7,7 @@
using namespace Dawn;
UISimpleLabel::UISimpleLabel(SceneItem *i) :
UISimpleLabel::UISimpleLabel(std::weak_ptr<SceneItem> i) :
UILabel(i),
text("Hello World"),
font(nullptr),

View File

@ -22,7 +22,7 @@ namespace Dawn {
// @optional
StateProperty<struct Color> color;
UISimpleLabel(SceneItem *item);
UISimpleLabel(std::weak_ptr<SceneItem> item);
void onStart() override;
};