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