X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fui%2Fui.cpp;h=e62894db3cdeef62af513a5d3e5aa4da10b9f5e5;hb=6c1097479fd1ea41f0f76b91e67613822acf2e90;hp=cedbcd127be0273798ab294b699c2cd40d128403;hpb=e59f3058d8786dc0a053c42bcec8f01b22ec25a9;p=blobs.git diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index cedbcd1..e62894d 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -7,6 +7,8 @@ #include "../creature/Need.hpp" #include "../graphics/Viewport.hpp" +#include +#include #include @@ -17,6 +19,11 @@ CreaturePanel::CreaturePanel(const app::Assets &assets) : assets(assets) , c(nullptr) , name(new Label(assets.fonts.large)) +, age(new Label(assets.fonts.medium)) +, mass(new Label(assets.fonts.medium)) +, pos(new Label(assets.fonts.medium)) +, tile(new Label(assets.fonts.medium)) +, goal(new Label(assets.fonts.medium)) , needs(new Panel) , panel() , health_meter(new Meter) @@ -33,9 +40,66 @@ CreaturePanel::CreaturePanel(const app::Assets &assets) health_panel ->Add(health_label) ->Add(health_meter) + ->Spacing(10.0f) + ->Direction(Panel::HORIZONTAL); + + age->Text("0000s (Newborn)"); + Label *age_label = new Label(assets.fonts.medium); + age_label->Text("Age"); + Panel *age_panel = new Panel; + age_panel + ->Add(age_label) + ->Add(age) + ->Spacing(10.0f) + ->Direction(Panel::HORIZONTAL); + + mass->Text("00.000kg"); + Label *mass_label = new Label(assets.fonts.medium); + mass_label->Text("Mass"); + Panel *mass_panel = new Panel; + mass_panel + ->Add(mass_label) + ->Add(mass) + ->Spacing(10.0f) + ->Direction(Panel::HORIZONTAL); + + pos->Text("<00.0, 00.0, 00.0>"); + Label *pos_label = new Label(assets.fonts.medium); + pos_label->Text("Pos"); + Panel *pos_panel = new Panel; + pos_panel + ->Add(pos_label) + ->Add(pos) + ->Spacing(10.0f) + ->Direction(Panel::HORIZONTAL); + + tile->Text("<00, 00> (mountains)"); + Label *tile_label = new Label(assets.fonts.medium); + tile_label->Text("Tile"); + Panel *tile_panel = new Panel; + tile_panel + ->Add(tile_label) + ->Add(tile) + ->Spacing(10.0f) + ->Direction(Panel::HORIZONTAL); + + goal->Text("long goal description"); + Label *goal_label = new Label(assets.fonts.medium); + goal_label->Text("Goal"); + Panel *goal_panel = new Panel; + goal_panel + ->Add(goal_label) + ->Add(goal) + ->Spacing(10.0f) ->Direction(Panel::HORIZONTAL); + panel .Add(name) + ->Add(age_panel) + ->Add(mass_panel) + ->Add(pos_panel) + ->Add(tile_panel) + ->Add(goal_panel) ->Add(health_panel) ->Add(needs) ->Padding(glm::vec2(10.0f)) @@ -88,6 +152,32 @@ void CreaturePanel::Hide() noexcept { void CreaturePanel::Draw(app::Assets &assets, graphics::Viewport &viewport) noexcept { if (!c) return; + age->Text(std::to_string(int(c->Age())) + "s (" + c->AgeName() + ")"); + { + std::stringstream ss; + ss << std::fixed << std::setprecision(3) << c->Mass() << "kg"; + mass->Text(ss.str()); + } + { + const glm::dvec3 &p = c->GetSituation().Position(); + std::stringstream ss; + ss << std::fixed << std::setprecision(1) + << "<" << p.x << ", " << p.y << ", " << p.z << ">"; + pos->Text(ss.str()); + } + { + glm::ivec2 t = c->GetSituation().SurfacePosition(); + std::stringstream ss; + ss << std::fixed << std::setprecision(1) + << "<" << t.x << ", " << t.y + << "> (" << c->GetSituation().GetTileType().label << ")"; + tile->Text(ss.str()); + } + if (c->Goals().empty()) { + goal->Text("none"); + } else { + goal->Text(c->Goals()[0]->Describe()); + } health_meter->Value(c->Health()); if (need_meters.size() != c->Needs().size()) {