1 #include "CreaturePanel.hpp"
3 #include "../app/Assets.hpp"
4 #include "../creature/Creature.hpp"
5 #include "../graphics/Viewport.hpp"
7 #include <glm/gtx/transform.hpp>
10 #include <glm/gtx/io.hpp>
16 CreaturePanel::CreaturePanel(const app::Assets &assets)
18 , name(assets.fonts.large) {
19 name.Origin(Gravity::NORTH_EAST);
22 CreaturePanel::~CreaturePanel() {
26 void CreaturePanel::Show(creature::Creature &cr) {
31 void CreaturePanel::Hide() noexcept {
35 void CreaturePanel::Draw(app::Assets &assets, graphics::Viewport &viewport) noexcept {
38 const glm::vec2 margin(20.0f);
39 const glm::vec2 padding(10.0f);
41 const glm::vec2 size(name.Size() + 2.0f * padding);
42 const glm::vec2 half_size = size * 0.5f;
44 const glm::vec3 top_right(viewport.Width() - margin.x, margin.y, 0.0f);
45 name.Position(top_right - glm::vec3(padding.x, -padding.y, 1.0f));
47 assets.shaders.plain_color.Activate();
48 assets.shaders.plain_color.SetM(
49 glm::translate(glm::vec3(top_right.x - half_size.x, top_right.y + half_size.y, 0.0f))
50 * glm::scale(glm::vec3(half_size.x, half_size.y, 1.0f)));
51 assets.shaders.plain_color.SetColor(glm::vec3(0.7f, 0.7f, 0.7f));
52 assets.shaders.plain_color.DrawRect();
54 name.Draw(assets, viewport);
58 Label::Label(const graphics::Font &f)
62 , fg_color(0.0f, 0.0f, 0.0f, 1.0f)
63 , bg_color(0.0f, 0.0f, 0.0f, 0.0f)
64 , pos(0.0f, 0.0f, 0.0f)
65 , origin(Gravity::CENTER)
72 Label &Label::Text(const std::string &t) {
80 Label &Label::Font(const graphics::Font &f) {
88 Label &Label::Foreground(const glm::vec4 &c) {
93 Label &Label::Background(const glm::vec4 &c) {
98 glm::vec2 Label::Size() {
103 void Label::Draw(app::Assets &assets, graphics::Viewport &viewport) noexcept {
105 glm::vec2 size = Size();
106 glm::vec3 position = align(origin, size, pos);
108 std::cout << "pos: " << pos << ", size: " << size << ", position: " << position << std::endl;
110 assets.shaders.alpha_sprite.Activate();
111 assets.shaders.alpha_sprite.SetM(glm::translate(position)
112 * glm::scale(glm::vec3(size.x * 0.5f, size.y * 0.5f, 1.0f)));
113 assets.shaders.alpha_sprite.SetTexture(tex);
114 assets.shaders.alpha_sprite.SetFgColor(fg_color);
115 assets.shaders.alpha_sprite.SetBgColor(bg_color);
116 assets.shaders.alpha_sprite.DrawRect();
119 void Label::Update() {
121 font->Render(text, tex);