1 #include "debugRenderer.h"
2 #include "main.h"
3 
DebugRenderer()4 DebugRenderer::DebugRenderer()
5 : Renderable(mouseLayer)
6 {
7     fps_timer.restart();
8     fps = 0.0;
9     fps_counter = 0;
10 
11     show_fps = false;
12     show_datarate = false;
13     show_timing_graph = false;
14 
15 #ifdef DEBUG
16     show_fps = show_datarate = true;
17 #endif
18 }
19 
render(sf::RenderTarget & window)20 void DebugRenderer::render(sf::RenderTarget& window)
21 {
22     fps_counter++;
23     if (fps_counter > 30)
24     {
25         fps = fps_counter / fps_timer.restart().asSeconds();
26         fps_counter = 0;
27     }
28     string text = "";
29     if (show_fps)
30         text = text + "FPS: " + string(fps) + "\n";
31 
32     if (show_datarate && game_server)
33     {
34         text = text + string(game_server->getSendDataRate() / 1000, 1) + " kb per second\n";
35         text = text + string(game_server->getSendDataRatePerClient() / 1000, 1) + " kb per client\n";
36     }
37     if (show_timing_graph)
38     {
39         if (timing_graph_points.size() > window.getView().getSize().x)
40             timing_graph_points.clear();
41         timing_graph_points.push_back(engine->getEngineTiming());
42         sf::VertexArray update_points(sf::LinesStrip, timing_graph_points.size());
43         sf::VertexArray server_update_points(sf::LinesStrip, timing_graph_points.size());
44         sf::VertexArray collision_points(sf::LinesStrip, timing_graph_points.size());
45         sf::VertexArray render_points(sf::LinesStrip, timing_graph_points.size());
46         for(unsigned int n=0; n<timing_graph_points.size(); n++)
47         {
48             update_points[n].position.x = float(n);
49             update_points[n].position.y = window.getView().getSize().y - timing_graph_points[n].update * 10000;
50             server_update_points[n].position.x = float(n);
51             server_update_points[n].position.y = window.getView().getSize().y - timing_graph_points[n].server_update * 10000;
52             collision_points[n].position.x = float(n);
53             collision_points[n].position.y = window.getView().getSize().y - (timing_graph_points[n].update + timing_graph_points[n].collision) * 10000;
54             render_points[n].position.x = float(n);
55             render_points[n].position.y = window.getView().getSize().y - (timing_graph_points[n].render + timing_graph_points[n].update + timing_graph_points[n].collision) * 10000;
56 
57             update_points[n].color = sf::Color::Red;
58             server_update_points[n].color = sf::Color::Yellow;
59             collision_points[n].color = sf::Color::Cyan;
60             render_points[n].color = sf::Color::Green;
61         }
62         window.draw(server_update_points);
63         window.draw(update_points);
64         window.draw(collision_points);
65         window.draw(render_points);
66 
67         sf::Text text_update("Update: " + string(timing_graph_points.back().update * 1000) + "ms", *main_font, 18);
68         sf::Text text_server_update("ServerUpdate: " + string(timing_graph_points.back().server_update * 1000) + "ms", *main_font, 18);
69         sf::Text text_collision("Collision: " + string(timing_graph_points.back().collision * 1000) + "ms", *main_font, 18);
70         sf::Text text_render("Render: " + string(timing_graph_points.back().render * 1000) + "ms", *main_font, 18);
71 
72         sf::VertexArray fps60_line(sf::LinesStrip, 2);
73         fps60_line[0].position = sf::Vector2f(0, window.getView().getSize().y - 166);
74         fps60_line[1].position = sf::Vector2f(window.getView().getSize().x, window.getView().getSize().y - 166);
75         fps60_line[0].color = sf::Color(255, 255, 255, 128);
76         fps60_line[1].color = sf::Color(255, 255, 255, 128);
77         window.draw(fps60_line);
78 
79         text_update.setPosition(0, window.getView().getSize().y - 18 * 4 - 170);
80         text_server_update.setPosition(0, window.getView().getSize().y - 18 * 3 - 170);
81         text_collision.setPosition(0, window.getView().getSize().y - 18 * 2 - 170);
82         text_render.setPosition(0, window.getView().getSize().y - 18 - 170);
83         text_update.setColor(sf::Color::Red);
84         text_server_update.setColor(sf::Color::Yellow);
85         text_collision.setColor(sf::Color::Cyan);
86         text_render.setColor(sf::Color::Green);
87         window.draw(text_update);
88         window.draw(text_server_update);
89         window.draw(text_collision);
90         window.draw(text_render);
91     }
92 
93     sf::Text textElement(text, *main_font, 18);
94     textElement.setPosition(0, 0);
95     window.draw(textElement);
96 }
97 
handleKeyPress(sf::Event::KeyEvent key,int unicode)98 void DebugRenderer::handleKeyPress(sf::Event::KeyEvent key, int unicode)
99 {
100     if (key.code == sf::Keyboard::F10)
101     {
102         show_fps = !show_fps;
103         show_datarate = !show_datarate;
104     }
105     if (key.code == sf::Keyboard::F11)
106     {
107         show_timing_graph = !show_timing_graph;
108         timing_graph_points.clear();
109         if (show_timing_graph)
110             P<WindowManager>(engine->getObject("windowManager"))->setFrameLimit(0);
111         else
112             P<WindowManager>(engine->getObject("windowManager"))->setFrameLimit(60);
113     }
114 }
115