#include <iostream>
|
|
#include "components/panel_component.h"
|
|
#include "entity.h"
|
|
#include "raylib.h"
|
|
#include "render_state.h"
|
|
|
|
ant::components::ui::panel_component::panel_component(
|
|
int layer,
|
|
Color color,
|
|
ant::core::Vec2<> size,
|
|
ant::core::Vec2<> scale
|
|
)
|
|
: m_layer(layer)
|
|
, m_size(size)
|
|
, m_scale(scale)
|
|
, m_color(color)
|
|
{}
|
|
|
|
void ant::components::ui::panel_component::initialize() {
|
|
auto parent = owner()->parent();
|
|
while(parent) {
|
|
if(auto panels = parent->find_components("panel_component"); not panels.empty()) {
|
|
m_parent_panel = dynamic_pointer_cast<panel_component>(panels.front());
|
|
break;
|
|
}
|
|
parent = parent->parent();
|
|
}
|
|
}
|
|
|
|
ant::core::Vec2<> ant::components::ui::panel_component::scale() {
|
|
if(auto parent = m_parent_panel.lock(); parent) {
|
|
return parent->scale()*m_scale;
|
|
}
|
|
return m_scale;
|
|
}
|
|
|
|
|
|
|
|
|
|
void ant::components::ui::panel_component::render() {
|
|
auto pos = (*owner()).world_transform().position;
|
|
auto size = m_size*scale();
|
|
auto layer = [&]()-> float {
|
|
if(auto panel = m_parent_panel.lock()) {
|
|
auto parent_layer = -panel->m_layer;
|
|
auto bottom = static_cast<float>(std::floor(parent_layer));
|
|
auto climb = static_cast<float>(parent_layer) - bottom;
|
|
return -(bottom + 1 - (1 - climb) / 2);
|
|
}
|
|
return static_cast<float>(m_layer);
|
|
}();
|
|
auto color = m_color;
|
|
// TODO: add a warning for drawing a big panel in a smaller panel
|
|
ant::render::schedule_in_frame(layer, [pos, size, color] () {
|
|
std::cout << pos.X << " " << pos.Y << " " << size.X << " " << size.Y << " | " << (int)color.r << " " << (int)color.g << " " << (int)color.b << std::endl;
|
|
DrawRectangle(pos.X, pos.Y, size.X, size.Y, color);
|
|
});
|
|
}
|
|
void ant::components::ui::panel_component::update(std::chrono::duration<double>) {
|
|
|
|
}
|