Working on removing ui label
This commit is contained in:
@ -18,6 +18,7 @@ void FPSLabelComponent::onStart() {
|
||||
if(this->label == nullptr) return;
|
||||
std::string strFps = std::to_string((int32_t)(1.0f / delta));
|
||||
std::string strTick = std::to_string((int32_t)(delta * 1000.0f));
|
||||
label->text = strFps + "FPS (" + strTick + "ms)";
|
||||
assertUnreachable();// Needs updating to new UI Label
|
||||
// label->text = strFps + "FPS (" + strTick + "ms)";
|
||||
}, this->item->scene->eventSceneUnpausedUpdate);
|
||||
}
|
@ -4,13 +4,13 @@
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "scene/components/ui/UILabel.hpp"
|
||||
#include "scene/components/ui/text/UILabelNew.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class FPSLabelComponent : public SceneItemComponent {
|
||||
public:
|
||||
/* @optional */
|
||||
UILabel *label = nullptr;
|
||||
UILabelNew *label = nullptr;
|
||||
|
||||
FPSLabelComponent(SceneItem *item);
|
||||
void onStart() override;
|
||||
|
@ -9,10 +9,9 @@ target_sources(${DAWN_TARGET_NAME}
|
||||
UICanvas.cpp
|
||||
UIComponent.cpp
|
||||
UIComponentRenderable.cpp
|
||||
UILabel.cpp
|
||||
UIImage.cpp
|
||||
UIBorder.cpp
|
||||
UILabelNew.cpp
|
||||
)
|
||||
|
||||
add_subdirectory(menu)
|
||||
add_subdirectory(menu)
|
||||
add_subdirectory(text)
|
@ -1,121 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "UILabel.hpp"
|
||||
#include "game/DawnGame.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
UILabel::UILabel(SceneItem *item) :
|
||||
UIComponentRenderable(item),
|
||||
text(""),
|
||||
fontSize(10.0f),
|
||||
font(&item->scene->game->renderManager.defaultFont),
|
||||
maxWidth(UI_LABEL_MAX_WIDTH_ALIGN),
|
||||
startQuad(0),
|
||||
quadCount(-1)
|
||||
{
|
||||
}
|
||||
|
||||
bool_t UILabel::hasText() {
|
||||
return (
|
||||
this->font != nullptr &&
|
||||
this->font->isReady() &&
|
||||
((std::string)this->text).size() > 0
|
||||
);
|
||||
}
|
||||
|
||||
void UILabel::updateMesh() {
|
||||
if(!this->needsRebuffering) return;
|
||||
if(!this->hasText()) return;
|
||||
|
||||
float_t width = this->maxWidth;
|
||||
assertTrue(
|
||||
width == UI_LABEL_MAX_WIDTH_NONE ||
|
||||
width == UI_LABEL_MAX_WIDTH_ALIGN ||
|
||||
width > 0
|
||||
);
|
||||
|
||||
if(width == UI_LABEL_MAX_WIDTH_ALIGN) {
|
||||
auto dimensional = this->getParentDimensional();
|
||||
auto align = (glm::vec4)this->alignment;
|
||||
float_t x;
|
||||
UIComponent::calculateDimensions(
|
||||
this->alignX,
|
||||
this->alignUnitLeft,
|
||||
this->alignUnitRight,
|
||||
&x,
|
||||
&width,
|
||||
dimensional->getWidth(),
|
||||
0,
|
||||
glm::vec2(align[0], align[2])
|
||||
);
|
||||
}
|
||||
|
||||
this->font->buffer(
|
||||
text,
|
||||
fontSize,
|
||||
width,
|
||||
&this->mesh,
|
||||
&this->measure
|
||||
);
|
||||
|
||||
this->needsRebuffering = false;
|
||||
|
||||
this->eventFontRebuffered.invoke();
|
||||
}
|
||||
|
||||
std::vector<struct ShaderPassItem> UILabel::getUIRenderPasses() {
|
||||
if(!this->hasText()) return {};
|
||||
this->updateMesh();
|
||||
|
||||
struct ShaderPassItem item;
|
||||
auto shader = getGame()->renderManager.uiShader;
|
||||
item.shader = shader;
|
||||
item.colorValues[shader->paramColor] = textColor;
|
||||
item.parameterBuffers[shader->bufferUiCanvas] = &getCanvas()->shaderBuffer;
|
||||
item.matrixValues[shader->paramModel] = this->transform->getWorldTransform();
|
||||
item.textureSlots[0] = this->font->getTexture();
|
||||
item.textureValues[shader->paramTexture] = 0;
|
||||
item.start = this->startQuad * QUAD_INDICE_COUNT;
|
||||
item.count = this->quadCount == -1 ? -1 : this->quadCount * QUAD_INDICE_COUNT;
|
||||
item.w = this->transform->getWorldPosition().z;
|
||||
item.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND;
|
||||
item.mesh = &mesh;
|
||||
|
||||
return { item };
|
||||
}
|
||||
|
||||
float_t UILabel::getContentWidth() {
|
||||
if(!this->hasText()) return 0;
|
||||
this->updateMesh();
|
||||
return this->measure.getWidth();
|
||||
}
|
||||
|
||||
float_t UILabel::getContentHeight() {
|
||||
if(!this->hasText()) return 0;
|
||||
this->updateMesh();
|
||||
return this->measure.getHeight();
|
||||
}
|
||||
|
||||
void UILabel::onStart() {
|
||||
UIComponent::onStart();
|
||||
|
||||
useEffect([&]{
|
||||
alignmentNeedsUpdating = true;
|
||||
}, { &fontSize, &font, &text, &maxWidth, &startQuad, &quadCount });
|
||||
|
||||
useEffect([&]{
|
||||
eventTextChanged.invoke();
|
||||
}, text);
|
||||
|
||||
useEffect([&]{
|
||||
needsRebuffering = true;
|
||||
}, alignmentNeedsUpdating);
|
||||
|
||||
useEvent([&]{
|
||||
needsRebuffering = true;
|
||||
}, eventAlignmentUpdated);
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "UIComponentRenderable.hpp"
|
||||
#include "display/font/Font.hpp"
|
||||
|
||||
#define UI_LABEL_MAX_WIDTH_NONE -1
|
||||
#define UI_LABEL_MAX_WIDTH_ALIGN 0
|
||||
|
||||
namespace Dawn {
|
||||
class UILabel : public UIComponentRenderable {
|
||||
private:
|
||||
bool_t needsRebuffering = true;
|
||||
Mesh mesh;
|
||||
|
||||
/**
|
||||
* Returns true if the label contains renderable text.
|
||||
*
|
||||
* @return True if the label has text, otherwise false.
|
||||
*/
|
||||
bool_t hasText();
|
||||
|
||||
/**
|
||||
* Internally performs the mesh update.
|
||||
*/
|
||||
void updateMesh();
|
||||
|
||||
public:
|
||||
//@optional
|
||||
StateProperty<std::string> text;
|
||||
// @optional
|
||||
StateProperty<float_t> fontSize;
|
||||
/* @optional */
|
||||
StateProperty<Font*> font;
|
||||
/* @optional */
|
||||
StateProperty<float_t> maxWidth;
|
||||
/* @optional */
|
||||
struct Color textColor = COLOR_WHITE;
|
||||
// @optional
|
||||
StateProperty<int32_t> startQuad;
|
||||
// @optional
|
||||
StateProperty<int32_t> quadCount;
|
||||
|
||||
StateEvent<> eventFontRebuffered;
|
||||
StateEvent<> eventTextChanged;
|
||||
|
||||
struct FontMeasure measure;
|
||||
|
||||
UILabel(SceneItem *item);
|
||||
|
||||
float_t getContentWidth() override;
|
||||
float_t getContentHeight() override;
|
||||
std::vector<struct ShaderPassItem> getUIRenderPasses() override;
|
||||
void onStart() override;
|
||||
};
|
||||
}
|
10
src/dawn/scene/components/ui/text/CMakeLists.txt
Normal file
10
src/dawn/scene/components/ui/text/CMakeLists.txt
Normal file
@ -0,0 +1,10 @@
|
||||
# Copyright (c) 2022 Dominic Masters
|
||||
#
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
# Sources
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
UILabelNew.cpp
|
||||
)
|
@ -21,10 +21,11 @@ namespace Dawn {
|
||||
std::string text;
|
||||
struct UILabelStyle style;
|
||||
|
||||
// Part index
|
||||
// Quad start
|
||||
// position
|
||||
// size
|
||||
// Part index?
|
||||
// Quad start?
|
||||
// quad count?
|
||||
// position?
|
||||
// size?
|
||||
// some kind of custom data e.g. wobble or shake?
|
||||
|
||||
usagelockid_t lockId = -1;
|
Reference in New Issue
Block a user