void GuiPowerDamageIndicator::onDraw(sf::RenderTarget& window) { if (!my_spaceship) return; sf::Color color; string display_text; float power = my_spaceship->systems[system].power_level; float health = my_spaceship->systems[system].health; float heat = my_spaceship->systems[system].heat_level; int alpha = 128; if (system == SYS_FrontShield) { power = std::max(power, my_spaceship->systems[SYS_RearShield].power_level); health = std::max(health, my_spaceship->systems[SYS_RearShield].health); heat = std::max(heat, my_spaceship->systems[SYS_RearShield].heat_level); } if (health <= 0.0) { color = sf::Color::Red; display_text = "DAMAGED"; }else if ((system == SYS_Warp || system == SYS_JumpDrive) && WarpJammer::isWarpJammed(my_spaceship->getPosition())) { color = sf::Color::Red; display_text = "JAMMED"; }else if (power == 0.0) { color = sf::Color::Red; display_text = "NO POWER"; }else if (my_spaceship->energy_level < 10) { color = sf::Color(255, 128, 0); alpha = 64; display_text = "LOW ENERGY"; }else if (power < 0.3) { color = sf::Color(255, 128, 0); alpha = 64; display_text = "LOW POWER"; }else if (heat > 0.90) { color = sf::Color(255, 128, 0); alpha = 64; display_text = "OVERHEATING"; }else{ return; } draw9Cut(window, rect, "button_background", sf::Color(0, 0, 0, alpha)); draw9Cut(window, rect, "border_background", color); if (rect.height > rect.width) drawVerticalText(window, rect, display_text, ACenter, text_size, main_font, color); else drawText(window, rect, display_text, ACenter, text_size, main_font, color); }
void GuiButton::onDraw(sf::RenderTarget& window) { sf::Color color = button_color; if (!enabled) color = color * sf::Color(96, 96, 96, 255); else if (hover) color = color * sf::Color(128, 128, 128, 255); draw9Cut(window, rect, "button_background", color); drawText(window, rect, text, ACenter, text_size, sf::Color::Black); }
void GuiSlider::onDraw(sf::RenderTarget& window) { draw9Cut(window, rect, "button_background", sf::Color(64,64,64, 255)); sf::Color color = sf::Color::White; if (!enabled) color = color * sf::Color(96, 96, 96, 255); else if (hover) color = sf::Color(255,255,255, 128); if (rect.width > rect.height) { float x; if (snap_value != std::numeric_limits<float>::infinity()) { x = rect.left + (rect.width - rect.height) * (snap_value - min_value) / (max_value - min_value); sf::RectangleShape backgroundZero(sf::Vector2f(8.0, rect.height)); backgroundZero.setPosition(x + rect.height / 2.0 - 4.0, rect.top); backgroundZero.setFillColor(sf::Color(8,8,8,255)); window.draw(backgroundZero); } x = rect.left + (rect.width - rect.height) * (value - min_value) / (max_value - min_value); draw9Cut(window, sf::FloatRect(x, rect.top, rect.height, rect.height), "button_background", color); }else{ float y; if (snap_value != std::numeric_limits<float>::infinity()) { y = rect.top + (rect.height - rect.width) * (snap_value - min_value) / (max_value - min_value); sf::RectangleShape backgroundZero(sf::Vector2f(rect.width, 8.0)); backgroundZero.setPosition(rect.left, y + rect.width / 2.0 - 4.0); backgroundZero.setFillColor(sf::Color(8,8,8,255)); window.draw(backgroundZero); } y = rect.top + (rect.height - rect.width) * (value - min_value) / (max_value - min_value); draw9Cut(window, sf::FloatRect(rect.left, y, rect.width, rect.width), "button_background", color); } if (overlay_label) { overlay_label->setText(string(value, 0)); } }
void GuiBox::onDraw(sf::RenderTarget& window) { if (fill_color.a > 0) draw9Cut(window, rect, "button_background", fill_color); draw9Cut(window, rect, "border_background", sf::Color::White); }