28 std::vector<RenderItem> itemsToDraw;
32 for (
auto&& [trans, spriteComp] : view) {
37 if (!tex.loadFromFile(path)) {
38 log::error(
"TEXTURE ERROR: Impossible de charger '{}'", path);
49 s.setTextureRect(sf::IntRect({0, 0}, {32, 32}));
50 s.setColor(sf::Color::Magenta);
52 if (spriteComp.rectWidth > 0 && spriteComp.rectHeight > 0) {
53 s.setTextureRect(sf::IntRect(
54 {spriteComp.rectLeft, spriteComp.rectTop},
55 {spriteComp.rectWidth, spriteComp.rectHeight}
58 s.setColor(sf::Color(spriteComp.red, spriteComp.green, spriteComp.blue, spriteComp.opacity));
61 s.setPosition({trans.position.x, trans.position.y});
62 s.setRotation(sf::degrees(trans.rotation));
63 s.setScale({trans.scale.x, trans.scale.y});
64 s.setOrigin(valid && spriteComp.rectWidth > 0
65 ? sf::Vector2f(spriteComp.rectWidth / 2.0f, spriteComp.rectHeight / 2.0f)
66 : sf::Vector2f(16.f, 16.f));
68 itemsToDraw.push_back({spriteComp.zIndex, s});
71 std::sort(itemsToDraw.begin(), itemsToDraw.end(),
72 [](
const RenderItem& a,
const RenderItem& b) { return a.zIndex < b.zIndex; });
74 for (
const auto &item : itemsToDraw) {
77 sf::FloatRect bounds = item.sprite.getGlobalBounds();
78 sf::RectangleShape box({bounds.size.x, bounds.size.y});
79 box.setPosition({bounds.position.x, bounds.position.y});
80 box.setFillColor(sf::Color::Transparent);
81 box.setOutlineColor(sf::Color(255, 80, 80, 200));
82 box.setOutlineThickness(1.0f);
93 for (
auto&& [trans, box, type] : obstacleView) {
105 float posX = trans.position.x;
106 float posY = trans.position.y;
114 posX = trans.position.x - box.width / 2.0f;
115 posY = trans.position.y - box.height / 2.0f;
118 sf::RectangleShape rect({box.width, box.height});
119 rect.setPosition({posX, posY});
121 rect.setFillColor(sf::Color(40, 40, 40, 220));
122 rect.setOutlineColor(sf::Color(90, 90, 90, 240));
124 rect.setFillColor(sf::Color::Transparent);
125 rect.setOutlineColor(sf::Color(255, 0, 0, 240));
127 rect.setFillColor(sf::Color::Transparent);
128 rect.setOutlineColor(sf::Color(200, 50, 200, 240));
130 rect.setFillColor(sf::Color::Transparent);
131 rect.setOutlineColor(sf::Color(255, 165, 0, 240));
133 rect.setFillColor(sf::Color(60, 60, 60, 180));
134 rect.setOutlineColor(sf::Color(120, 120, 120, 220));
136 rect.setOutlineThickness(1.0f);
146 for (
auto&& [trans, box, shield] : shieldView) {
147 const float radius = std::max(box.width, box.height) / 2.0f + 8.0f;
149 sf::CircleShape circle(radius);
150 circle.setPosition(sf::Vector2f(trans.position.x - radius, trans.position.y - radius));
151 circle.setFillColor(sf::Color::Transparent);
152 circle.setOutlineColor(sf::Color(0, 255, 0,
static_cast<uint8_t
>(shield.alpha)));
153 circle.setOutlineThickness(2.5f);
157 sf::CircleShape innerCircle(radius - 4.0f);
158 innerCircle.setPosition(sf::Vector2f(trans.position.x - (radius - 4.0f), trans.position.y - (radius - 4.0f)));
159 innerCircle.setFillColor(sf::Color::Transparent);
160 innerCircle.setOutlineColor(sf::Color(100, 255, 100,
static_cast<uint8_t
>(shield.alpha * 0.5f)));
161 innerCircle.setOutlineThickness(1.0f);