diff --git a/src/dawn/assert/assert.hpp b/src/dawn/assert/assert.hpp index bb02731d..879771cb 100644 --- a/src/dawn/assert/assert.hpp +++ b/src/dawn/assert/assert.hpp @@ -50,6 +50,17 @@ static inline void assertTrue(bool_t x) {} * Asserts a function as being deprecated. */ void assertDeprecated(); + + /** + * Asserts that a given map has a key. + * + * @param map Map to check. + * @param key Key to try and assert exists. + */ + template<typename K, typename V> + void assertMapHasKey(std::map<K,V> map, K key) { + assertTrue(map.find(key) != map.end()); + } #else #define assertTrue assert diff --git a/src/dawn/asset/assets/LanguageAsset.cpp b/src/dawn/asset/assets/LanguageAsset.cpp index 8292d1d0..5cb30fb8 100644 --- a/src/dawn/asset/assets/LanguageAsset.cpp +++ b/src/dawn/asset/assets/LanguageAsset.cpp @@ -72,6 +72,8 @@ void LanguageAsset::updateAsync() { std::string LanguageAsset::getValue(std::string key) { assertTrue(this->state == 0x07); + assertMapHasKey(this->values, key); + assertTrue(this->values[key].begin >= 0 && this->values[key].length > 0); // Get the positions struct AssetLanguageValue value = this->values[key]; diff --git a/src/dawn/ui/UILabel.cpp b/src/dawn/ui/UILabel.cpp index 7e7a9060..10ddf9c5 100644 --- a/src/dawn/ui/UILabel.cpp +++ b/src/dawn/ui/UILabel.cpp @@ -4,11 +4,14 @@ // https://opensource.org/licenses/MIT #include "UILabel.hpp" +#include "game/DawnGame.hpp" using namespace Dawn; UILabel::UILabel(UICanvas *canvas) : UIComponent(canvas) { - + getGame()->localeManager.eventLanguageUpdated.addListener( + this, &UILabel::onLanguageUpdated + ); } void UILabel::updatePositions() { @@ -17,15 +20,15 @@ void UILabel::updatePositions() { } void UILabel::updateMesh() { - if(!this->needsRebuffering) return; + if(!this->needsRebuffering || !this->hasText) return; if(this->font == nullptr || !this->font->isReady()) return; - if(this->text.size() == 0) return; float_t width = this->width; if(width == 0) width = -1; + std::string text = this->getGame()->localeManager.getString(key); this->font->buffer( - this->text, + text, this->fontSize, width, &this->mesh, @@ -35,17 +38,17 @@ void UILabel::updateMesh() { this->needsRebuffering = false; } -std::string UILabel::getText() { - return this->text; -} - void UILabel::setFont(Font *font) { this->font = font; this->needsRebuffering = true; } -void UILabel::setText(std::string text) { - this->text = text; +void UILabel::setText(std::string key) { + this->key = key; + this->hasText = false; + if(key.size() > 0 && this->getGame()->localeManager.getString(key).size()>0){ + this->hasText = true; + } this->needsRebuffering = true; } @@ -65,7 +68,7 @@ float_t UILabel::getContentHeight() { } void UILabel::drawSelf(UIShader *shader, glm::mat4 selfTransform) { - if(this->font == nullptr || this->text.size() == 0) return; + if(this->font == nullptr || !this->hasText) return; this->updateMesh(); shader->setUIColor(this->textColor); @@ -83,4 +86,17 @@ void UILabel::setTransform( ) { this->needsRebuffering = true; UIComponent::setTransform(xAlign, yAlign, alignment, z); +} + +void UILabel::onLanguageUpdated() { + this->needsRebuffering = true; + if(key.size() > 0 && this->getGame()->localeManager.getString(key).size()>0){ + this->hasText = true; + } +} + +UILabel::~UILabel() { + getGame()->localeManager.eventLanguageUpdated.removeListener( + this, &UILabel::onLanguageUpdated + ); } \ No newline at end of file diff --git a/src/dawn/ui/UILabel.hpp b/src/dawn/ui/UILabel.hpp index 2aaf5d41..7ed077d8 100644 --- a/src/dawn/ui/UILabel.hpp +++ b/src/dawn/ui/UILabel.hpp @@ -14,11 +14,15 @@ namespace Dawn { Mesh mesh; bool_t needsRebuffering = true; Font *font = nullptr; - std::string text = ""; + std::string key = ""; float_t fontSize = 10.0f; + bool_t hasText = false; void updatePositions() override; + /** Event for when the language strings are updated */ + void onLanguageUpdated(); + public: struct FontMeasure measure; int32_t startQuad = 0; @@ -43,13 +47,6 @@ namespace Dawn { */ void updateMesh(); - /** - * Returns the current text that the label has. - * - * @return The current label string. - */ - std::string getText(); - /** * Set the font to use for the label. * @@ -60,9 +57,9 @@ namespace Dawn { /** * Sets the text for the label to use. * - * @param text Text for the label to use. + * @param key Localzied string key for the label to use. */ - void setText(std::string text); + void setText(std::string key); /** * Sets / Updates the font size for the label. @@ -71,5 +68,6 @@ namespace Dawn { */ void setFontSize(float_t fontSize); + ~UILabel(); }; } \ No newline at end of file diff --git a/src/dawn/visualnovel/events/VisualNovelTextboxEvent.cpp b/src/dawn/visualnovel/events/VisualNovelTextboxEvent.cpp index 3f3cc04b..3bec52d3 100644 --- a/src/dawn/visualnovel/events/VisualNovelTextboxEvent.cpp +++ b/src/dawn/visualnovel/events/VisualNovelTextboxEvent.cpp @@ -9,15 +9,15 @@ using namespace Dawn; VisualNovelTextboxEvent::VisualNovelTextboxEvent( VisualNovelManager *manager, - std::string text + std::string key ) : IVisualNovelEvent(manager) { - this->text = text; + this->key = key; } void VisualNovelTextboxEvent::onStart(IVisualNovelEvent *previous) { if(this->manager->textBox == nullptr) return; - this->manager->textBox->setText(this->text); + this->manager->textBox->setText(this->key); this->manager->textBox->show(); this->hasSetText = true; } @@ -26,7 +26,7 @@ bool_t VisualNovelTextboxEvent::onUpdate() { if(this->manager->textBox == nullptr) return true; if(!this->hasSetText) { - this->manager->textBox->setText(this->text); + this->manager->textBox->setText(this->key); this->manager->textBox->show(); this->hasSetText = true; } diff --git a/src/dawn/visualnovel/events/VisualNovelTextboxEvent.hpp b/src/dawn/visualnovel/events/VisualNovelTextboxEvent.hpp index 6606674d..8c84e0aa 100644 --- a/src/dawn/visualnovel/events/VisualNovelTextboxEvent.hpp +++ b/src/dawn/visualnovel/events/VisualNovelTextboxEvent.hpp @@ -9,7 +9,7 @@ namespace Dawn { class VisualNovelTextboxEvent : public IVisualNovelEvent { protected: - std::string text; + std::string key; bool_t hasSetText = false; void onStart(IVisualNovelEvent *previous) override; diff --git a/src/dawn/visualnovel/ui/VisualNovelTextbox.cpp b/src/dawn/visualnovel/ui/VisualNovelTextbox.cpp index 0482a96d..311ab5c9 100644 --- a/src/dawn/visualnovel/ui/VisualNovelTextbox.cpp +++ b/src/dawn/visualnovel/ui/VisualNovelTextbox.cpp @@ -147,14 +147,14 @@ void VisualNovelTextbox::setFont(Font *font) { this->label.updateMesh(); } -void VisualNovelTextbox::setText(std::string text, float_t fontSize) { - this->label.setText(text); +void VisualNovelTextbox::setText(std::string key, float_t fontSize) { + this->label.setText(key); this->label.setFontSize(fontSize); this->label.updateMesh(); } -void VisualNovelTextbox::setText(std::string text) { - this->label.setText(text); +void VisualNovelTextbox::setText(std::string key) { + this->label.setText(key); this->label.updateMesh(); } diff --git a/src/dawn/visualnovel/ui/VisualNovelTextbox.hpp b/src/dawn/visualnovel/ui/VisualNovelTextbox.hpp index e1e7c719..fa400c98 100644 --- a/src/dawn/visualnovel/ui/VisualNovelTextbox.hpp +++ b/src/dawn/visualnovel/ui/VisualNovelTextbox.hpp @@ -70,17 +70,17 @@ namespace Dawn { /** * Sets the string (label) for this textbox. * - * @param text Text to set. + * @param text Localized string key to set. * @param fontSize Font size of the string. */ - void setText(std::string text, float_t fontSize); + void setText(std::string key, float_t fontSize); /** * Sets the string (label) for this textbox. * - * @param text Text to set. + * @param text Localized string key to set. */ - void setText(std::string text); + void setText(std::string key); /** * Sets the font size to use. diff --git a/src/dawnpokergame/scenes/TestScene.hpp b/src/dawnpokergame/scenes/TestScene.hpp index 4fc53389..e2bfdf53 100644 --- a/src/dawnpokergame/scenes/TestScene.hpp +++ b/src/dawnpokergame/scenes/TestScene.hpp @@ -41,9 +41,9 @@ namespace Dawn { ); start - ->then(new VisualNovelTextboxEvent(vnManager, "Starting Game")) + ->then(new VisualNovelTextboxEvent(vnManager, "test")) ->then(new PokerNewGameEvent(vnManager)) - ->then(new VisualNovelTextboxEvent(vnManager, "Game Started")) + ->then(new VisualNovelTextboxEvent(vnManager, "test")) ->then(new PokerInitialEvent(vnManager)) ; diff --git a/src/dawnpokergame/ui/PokerPlayerDisplay.cpp b/src/dawnpokergame/ui/PokerPlayerDisplay.cpp index 87110f95..b6167e24 100644 --- a/src/dawnpokergame/ui/PokerPlayerDisplay.cpp +++ b/src/dawnpokergame/ui/PokerPlayerDisplay.cpp @@ -37,7 +37,7 @@ PokerPlayerDisplay::PokerPlayerDisplay(UICanvas *canvas) : // Player Name this->borderInner.addChild(&this->labelName); - this->labelName.setText("Player Name"); + this->labelName.setText("undefined"); this->labelName.setFont(&this->font->font); this->labelName.setFontSize(40); this->labelName.setTransform( @@ -69,7 +69,7 @@ void PokerPlayerDisplay::setPlayer(PokerPlayer *player) { player->eventChipsChanged.addListener(this, &PokerPlayerDisplay::onPlayerChipsChanged); - this->labelName.setText("Name"); + this->labelName.setText("undefined"); this->animChips.clear(); this->animChips.restart(); this->animChipsValue = player->chips; @@ -80,11 +80,11 @@ void PokerPlayerDisplay::setPlayer(PokerPlayer *player) { void PokerPlayerDisplay::onSceneUpdate() { this->animChips.tick(getGame()->timeManager.delta); - std::stringstream stream; - stream.precision(0); - stream << "$"; - stream << this->animChipsValue; - this->labelChips.setText(stream.str()); + // std::stringstream stream; + // stream.precision(0); + // stream << "$"; + // stream << this->animChipsValue; + this->labelChips.setText("undefined"); } void PokerPlayerDisplay::onPlayerChipsChanged() {