parent
58a5a415ec
commit
70d1389c54
@ -0,0 +1,170 @@ |
|||||||
|
#include "imgui.h" |
||||||
|
#include "imgui-SFML.h" |
||||||
|
#define _USE_MATH_DEFINES |
||||||
|
#include <math.h> |
||||||
|
#include <fmt/core.h> |
||||||
|
#include <SFML/Graphics/Texture.hpp> |
||||||
|
#include <SFML/Graphics/RectangleShape.hpp> |
||||||
|
#include <SFML/Graphics/CircleShape.hpp> |
||||||
|
#include <SFML/Graphics/Text.hpp> |
||||||
|
#include <SFML/Audio.hpp> |
||||||
|
#include <SFML/Window/Event.hpp> |
||||||
|
#include "sfmlgui.hpp" |
||||||
|
|
||||||
|
using namespace ImGui; |
||||||
|
|
||||||
|
void SFMLGui::ImGui_setup() { |
||||||
|
bool res = SFML::Init(window); |
||||||
|
fmt::println("IMGUI returned {}", res); |
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::ImGui_update() { |
||||||
|
sf::Vector2u size = window.getSize(); |
||||||
|
|
||||||
|
SFML::Update(window, deltaClock.restart()); |
||||||
|
|
||||||
|
SetNextWindowPos(ImVec2(0, 0)); |
||||||
|
SetNextWindowSize(ImVec2(size.x, size.y / 2)); |
||||||
|
|
||||||
|
Begin("Build Status", &window_active_out); |
||||||
|
|
||||||
|
TextColored(ImVec4(1,1,0,1), "Build Log"); |
||||||
|
BeginChild("Scrolling"); |
||||||
|
for(int n = 0; n < 50; n++) { |
||||||
|
TextWrapped("%04d: Some Text", n); |
||||||
|
} |
||||||
|
EndChild(); |
||||||
|
End(); |
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::Window_update() { |
||||||
|
if(show_build_log) { |
||||||
|
SFML::Render(window); |
||||||
|
} |
||||||
|
window.display(); |
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::handle_events() { |
||||||
|
sf::Event event; |
||||||
|
|
||||||
|
// is this a main event loop
|
||||||
|
while (window.pollEvent(event)) { |
||||||
|
if(show_build_log) { |
||||||
|
SFML::ProcessEvent(window, event); |
||||||
|
} |
||||||
|
|
||||||
|
switch(event.type) { |
||||||
|
case sf::Event::Closed: |
||||||
|
fmt::print("Exiting...\n"); |
||||||
|
window.close(); |
||||||
|
break; |
||||||
|
case sf::Event::KeyPressed: |
||||||
|
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) { |
||||||
|
if(show_build_log) { |
||||||
|
window_active_out = false; |
||||||
|
} else { |
||||||
|
window.close(); |
||||||
|
} |
||||||
|
} else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) { |
||||||
|
window_active_out = !window_active_out; |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
// do nothing
|
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
sf::Vector2f translate(int x, int y) { |
||||||
|
float step_x = X_DIM / TEXT_SIZE; |
||||||
|
float step_y = (Y_DIM - 12) / TEXT_SIZE; |
||||||
|
|
||||||
|
sf::Vector2f position{step_x * x, step_y * y * 2}; |
||||||
|
|
||||||
|
return position; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void SFMLGui::write_text(int x, int y, const char *content) { |
||||||
|
sf::Vector2f position = translate(x,y); |
||||||
|
sf::Text text; |
||||||
|
text.setFont(font); |
||||||
|
text.setString(content); |
||||||
|
text.setCharacterSize(TEXT_SIZE); |
||||||
|
text.setFillColor(sf::Color(100, 250, 50)); |
||||||
|
text.setPosition(position); |
||||||
|
window.draw(text); |
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::update_entities() { |
||||||
|
window.clear(); |
||||||
|
|
||||||
|
sf::RectangleShape face_box(translate(X_ROWS/4, Y_LINES/2)); |
||||||
|
face_box.setPosition(translate(X_ROWS/3+2,2)); |
||||||
|
face_box.setOutlineColor(sf::Color(50, 200, 25)); |
||||||
|
face_box.setOutlineThickness(10); |
||||||
|
face_box.setFillColor(sf::Color(200, 250, 200)); |
||||||
|
window.draw(face_box); |
||||||
|
|
||||||
|
sf::RectangleShape hp_bar(translate(32,2)); |
||||||
|
hp_bar.setPosition(translate(2,21)); |
||||||
|
hp_bar.setFillColor(sf::Color(100, 250, 50)); |
||||||
|
window.draw(hp_bar); |
||||||
|
|
||||||
|
sf::RectangleShape hp_box(translate(44,2)); |
||||||
|
hp_box.setPosition(translate(2,21)); |
||||||
|
hp_box.setOutlineColor(sf::Color(100, 200, 50)); |
||||||
|
hp_box.setOutlineThickness(10); |
||||||
|
hp_box.setFillColor(sf::Color::Transparent); |
||||||
|
window.draw(hp_box); |
||||||
|
|
||||||
|
write_text(2, 18, "HP 222"); |
||||||
|
// rounds text
|
||||||
|
write_text(9, 18, "Rounds 333"); |
||||||
|
// // streaks text
|
||||||
|
write_text(21, 18, "Streaks 444"); |
||||||
|
// // deaths text
|
||||||
|
write_text(33, 18, "Deaths 555"); |
||||||
|
|
||||||
|
if(show_build_log) { |
||||||
|
ImGui_update(); |
||||||
|
} |
||||||
|
Window_update(); |
||||||
|
|
||||||
|
show_build_log = window_active_out; |
||||||
|
} |
||||||
|
|
||||||
|
SFMLGui::SFMLGui() : window(sf::VideoMode(X_DIM, Y_DIM), "Turing's Tarpit", sf::Style::None, settings) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::startup() { |
||||||
|
fmt::print("Setting up a window for you...\n"); |
||||||
|
settings.antialiasingLevel = 8; |
||||||
|
|
||||||
|
if(!font.loadFromFile("./assets/text.ttf")) { |
||||||
|
fmt::println("Cannot load font."); |
||||||
|
} |
||||||
|
|
||||||
|
window.setPosition({.x=0,.y=0}); |
||||||
|
|
||||||
|
window.setFramerateLimit(FPS); |
||||||
|
window.setVerticalSyncEnabled(true); |
||||||
|
ImGui_setup(); |
||||||
|
|
||||||
|
// fake image here
|
||||||
|
if(!texture.loadFromFile("./assets/turing_tarpit_main_screen.png")) { |
||||||
|
fmt::println("Error loading sprite!"); |
||||||
|
} |
||||||
|
texture.setSmooth(true); |
||||||
|
background.setTexture(texture); |
||||||
|
} |
||||||
|
|
||||||
|
bool SFMLGui::is_open() { |
||||||
|
return window.isOpen(); |
||||||
|
} |
||||||
|
|
||||||
|
void SFMLGui::shutdown() { |
||||||
|
SFML::Shutdown(); |
||||||
|
} |
Loading…
Reference in new issue