Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/windowing/StarLargeCharPlateWidget.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/windowing/StarLargeCharPlateWidget.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/windowing/StarLargeCharPlateWidget.cpp')
-rw-r--r--source/windowing/StarLargeCharPlateWidget.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/source/windowing/StarLargeCharPlateWidget.cpp b/source/windowing/StarLargeCharPlateWidget.cpp
new file mode 100644
index 0000000..3a6118a
--- /dev/null
+++ b/source/windowing/StarLargeCharPlateWidget.cpp
@@ -0,0 +1,160 @@
+#include "StarLargeCharPlateWidget.hpp"
+#include "StarRoot.hpp"
+#include "StarJsonExtra.hpp"
+#include "StarPlayer.hpp"
+#include "StarAssets.hpp"
+
+namespace Star {
+
+LargeCharPlateWidget::LargeCharPlateWidget(WidgetCallbackFunc mainCallback, PlayerPtr player) : m_player(player) {
+ m_portraitScale = 0;
+
+ setSize(ButtonWidget::size());
+
+ auto assets = Root::singleton().assets();
+ auto charPlateImage = assets->json("/interface.config:largeCharPlate.backingImage").toString();
+
+ setCallback(mainCallback);
+ setImages(charPlateImage);
+
+ m_playerPlate = charPlateImage;
+ m_playerPlateHover = assets->json("/interface.config:largeCharPlate.playerHover").toString();
+ m_noPlayerPlate = assets->json("/interface.config:largeCharPlate.noPlayer").toString();
+ m_noPlayerPlateHover = assets->json("/interface.config:largeCharPlate.noPlayerHover").toString();
+ m_portraitOffset = jsonToVec2I(assets->json("/interface.config:largeCharPlate.portraitOffset"));
+ m_portraitScale = assets->json("/interface.config:largeCharPlate.portraitScale").toFloat();
+
+ String switchText = assets->json("/interface.config:largeCharPlate.switchText").toString();
+ String createText = assets->json("/interface.config:largeCharPlate.createText").toString();
+
+ m_portrait = make_shared<PortraitWidget>();
+ m_portrait->setScale(m_portraitScale);
+ m_portrait->setPosition(m_portraitOffset);
+ addChild("portrait", m_portrait);
+
+ String modeLabelText = assets->json("/interface.config:largeCharPlate.modeText").toString();
+ m_regularTextColor = Color::rgb(jsonToVec3B(assets->json("/interface.config:largeCharPlate.textColor")));
+ m_disabledTextColor = Color::rgb(jsonToVec3B(assets->json("/interface.config:largeCharPlate.textColorDisabled")));
+
+ m_modeNameOffset = jsonToVec2I(assets->json("/interface.config:largeCharPlate.modeNameOffset"));
+ m_modeOffset = jsonToVec2I(assets->json("/interface.config:largeCharPlate.modeOffset"));
+
+ m_modeName = make_shared<LabelWidget>(modeLabelText, Color::White, HorizontalAnchor::HMidAnchor);
+ addChild("modeName", m_modeName);
+ m_modeName->setPosition(m_modeNameOffset);
+ m_modeName->setAnchor(HorizontalAnchor::HMidAnchor, VerticalAnchor::BottomAnchor);
+
+ m_mode = make_shared<LabelWidget>();
+ addChild("mode", m_mode);
+ m_mode->setPosition(m_modeOffset);
+ m_mode->setAnchor(HorizontalAnchor::LeftAnchor, VerticalAnchor::BottomAnchor);
+
+ m_createCharText = assets->json("/interface.config:largeCharPlate.noPlayerText").toString();
+ m_createCharTextColor = Color::rgb(jsonToVec3B(assets->json("/interface.config:largeCharPlate.noPlayerTextColor")));
+ m_playerNameOffset = jsonToVec2I(assets->json("/interface.config:largeCharPlate.playerNameOffset"));
+
+ m_playerName = make_shared<LabelWidget>();
+ m_playerName->setColor(m_createCharTextColor);
+ m_playerName->setPosition(m_playerNameOffset);
+ m_playerName->setAnchor(HorizontalAnchor::HMidAnchor, VerticalAnchor::BottomAnchor);
+ addChild("player", m_playerName);
+}
+
+void LargeCharPlateWidget::renderImpl() {
+ Vec2I pressedOffset = isPressed() ? ButtonWidget::pressedOffset() : Vec2I(0, 0);
+
+ m_portrait->setPosition(m_portraitOffset + pressedOffset);
+ m_mode->setPosition(m_modeOffset + pressedOffset);
+ m_modeName->setPosition(m_modeNameOffset + pressedOffset);
+ m_playerName->setPosition(m_playerNameOffset + pressedOffset);
+ if (m_delete) {
+ m_delete->setPosition(m_deleteOffset + pressedOffset);
+ }
+
+ if (m_player) {
+ ButtonWidget::setImages(m_playerPlate, m_playerPlateHover);
+ ButtonWidget::renderImpl();
+ m_modeName->setColor(m_regularTextColor);
+ m_playerName->setColor(m_regularTextColor);
+ m_playerName->setText(m_player->name());
+ } else {
+ ButtonWidget::setImages(m_noPlayerPlate, m_noPlayerPlateHover);
+ ButtonWidget::enable();
+ ButtonWidget::renderImpl();
+ m_modeName->setColor(m_disabledTextColor);
+ m_playerName->setColor(m_createCharTextColor);
+ m_playerName->setText(m_createCharText);
+ }
+}
+
+void LargeCharPlateWidget::mouseOut() {
+ if (m_delete)
+ m_delete->mouseOut();
+
+ ButtonWidget::mouseOut();
+}
+
+void LargeCharPlateWidget::setPlayer(PlayerPtr player) {
+ m_player = player;
+ m_portrait->setEntity(m_player);
+
+ if (m_player) {
+ m_playerName->setText(m_player->name());
+ } else {
+ m_playerName->setText(m_createCharText);
+ }
+
+ auto modeTypeTextAndColor = Root::singleton().assets()->json("/interface.config:modeTypeTextAndColor").toArray();
+ int modeType;
+ if (m_player) {
+ modeType = 1 + (int)m_player->modeType();
+ } else {
+ modeType = 0;
+ }
+ auto thisModeType = modeTypeTextAndColor[modeType].toArray();
+ String modeTypeText = thisModeType[0].toString();
+ Color modeTypeColor = Color::rgb(jsonToVec3B(thisModeType[1]));
+ m_mode->setText(modeTypeText);
+ m_mode->setColor(modeTypeColor);
+}
+
+void LargeCharPlateWidget::enableDelete(WidgetCallbackFunc const& callback) {
+ disableDelete();
+
+ auto assets = Root::singleton().assets();
+
+ auto baseImage = assets->json("/interface.config:largeCharPlate.trashButton.baseImage").toString();
+ auto hoverImage = assets->json("/interface.config:largeCharPlate.trashButton.hoverImage").toString();
+ auto pressedImage = assets->json("/interface.config:largeCharPlate.trashButton.pressedImage").toString();
+ auto disabledImage = assets->json("/interface.config:largeCharPlate.trashButton.disabledImage").toString();
+ auto offset = jsonToVec2I(assets->json("/interface.config:largeCharPlate.trashButton.offset"));
+
+ m_delete = make_shared<ButtonWidget>(callback, baseImage, hoverImage, pressedImage, disabledImage);
+ addChild("trashButton", m_delete);
+ m_delete->setPosition(offset);
+ m_deleteOffset = offset;
+}
+
+void LargeCharPlateWidget::disableDelete() {
+ if (m_delete) {
+ removeChild(m_delete.get());
+ }
+
+ m_delete = {};
+}
+
+bool LargeCharPlateWidget::sendEvent(InputEvent const& event) {
+ if (event.is<MouseMoveEvent>() && m_delete) {
+ if (m_delete->inMember(*m_context->mousePosition(event)))
+ m_delete->mouseOver();
+ else
+ m_delete->mouseOut();
+ }
+
+ if (Widget::sendEvent(event))
+ return true;
+
+ return ButtonWidget::sendEvent(event);
+}
+
+}