#include "profiler.h"
#include "mainmenumanager.h"
#include "gettext.h"
+#include "log.h"
+#include "filesys.h"
/*
TODO: Move content-aware stuff to separate file by adding properties
void gotText(std::wstring text)
{
std::string ntext = wide_to_narrow(text);
- dstream<<"Changing text of a sign node: "
+ infostream<<"Changing text of a sign node: "
<<ntext<<std::endl;
m_client->sendSignNodeText(m_p, ntext);
}
InventoryList *mainlist = inventory->getList("main");
if(mainlist == NULL)
{
- dstream<<"WARNING: draw_hotbar(): mainlist == NULL"<<std::endl;
+ errorstream<<"draw_hotbar(): mainlist == NULL"<<std::endl;
return;
}
v3s16 pos_i = floatToInt(player_position, BS);
- /*dstream<<"pos_i=("<<pos_i.X<<","<<pos_i.Y<<","<<pos_i.Z<<")"
+ /*infostream<<"pos_i=("<<pos_i.X<<","<<pos_i.Y<<","<<pos_i.Z<<")"
<<std::endl;*/
s16 a = d;
SharedPtr<Server> server;
if(address == ""){
draw_load_screen(L"Creating server...", driver, font);
- dstream<<DTIME<<"Creating server"<<std::endl;
+ infostream<<"Creating server"<<std::endl;
server = new Server(map_dir, configpath);
server->start(port);
}
*/
draw_load_screen(L"Creating client...", driver, font);
- dstream<<DTIME<<"Creating client"<<std::endl;
+ infostream<<"Creating client"<<std::endl;
MapDrawControl draw_control;
Client client(device, playername.c_str(), password, draw_control);
}
catch(ResolveError &e)
{
- dstream<<DTIME<<"Couldn't resolve address"<<std::endl;
+ errorstream<<"Couldn't resolve address"<<std::endl;
//return 0;
error_message = L"Couldn't resolve address";
//gui_loadingtext->remove();
Attempt to connect to the server
*/
- dstream<<DTIME<<"Connecting to server at ";
- connect_address.print(&dstream);
- dstream<<std::endl;
+ infostream<<"Connecting to server at ";
+ connect_address.print(&infostream);
+ infostream<<std::endl;
client.connect(connect_address);
bool could_connect = false;
{
error_message = L"Access denied. Reason: "
+client.accessDeniedReason();
- dstream<<DTIME<<wide_to_narrow(error_message)<<std::endl;
+ errorstream<<wide_to_narrow(error_message)<<std::endl;
}
else
{
error_message = L"Connection timed out.";
- dstream<<DTIME<<"Timed out."<<std::endl;
+ errorstream<<"Timed out."<<std::endl;
}
//gui_loadingtext->remove();
return;
L"",
core::rect<s32>(5, 5+(text_height+5)*1, 795, (5+text_height)*2),
false, false);
-
// At the middle of the screen
// Object infos are shown in this
gui::IGUIStaticText *guitext_info = guienv->addStaticText(
//guitext_chat->setBackgroundColor(video::SColor(96,0,0,0));
core::list<ChatLine> chat_lines;
+ // Profiler text
+ gui::IGUIStaticText *guitext_profiler = guienv->addStaticText(
+ L"<Profiler>",
+ core::rect<s32>(6, 4+(text_height+5)*3, 400,
+ (text_height+5)*3 + text_height*35),
+ false, false);
+ guitext_profiler->setBackgroundColor(video::SColor(80,0,0,0));
+ guitext_profiler->setVisible(false);
+
/*GUIQuickInventory *quick_inventory = new GUIQuickInventory
(guienv, NULL, v2s32(10, 70), 5, &local_inventory);*/
/*GUIQuickInventory *quick_inventory = new GUIQuickInventory
bool respawn_menu_active = false;
+ bool show_profiler = false;
+
/*
Main loop
*/
{
error_message = L"Access denied. Reason: "
+client.accessDeniedReason();
- dstream<<DTIME<<wide_to_narrow(error_message)<<std::endl;
+ errorstream<<wide_to_narrow(error_message)<<std::endl;
break;
}
busytime = busytime_u32 / 1000.0;
}
- //dstream<<"busytime_u32="<<busytime_u32<<std::endl;
+ //infostream<<"busytime_u32="<<busytime_u32<<std::endl;
// Necessary for device->getTimer()->getTime()
device->run();
object_hit_delay_timer -= dtime;
+ g_profiler->add("Elapsed time", dtime);
+ g_profiler->avg("FPS", 1./dtime);
+
/*
Log frametime for visualization
*/
Visualize frametime in terminal
*/
/*for(u32 i=0; i<dtime*400; i++)
- dstream<<"X";
- dstream<<std::endl;*/
+ infostream<<"X";
+ infostream<<std::endl;*/
/*
Time average and jitter calculation
if(counter < 0)
{
counter = 30.0;
- client.printDebugInfo(dstream);
+ client.printDebugInfo(infostream);
}
}
*/
float profiler_print_interval =
g_settings->getFloat("profiler_print_interval");
- if(profiler_print_interval != 0)
+ bool print_to_log = true;
+ if(profiler_print_interval == 0){
+ print_to_log = false;
+ profiler_print_interval = 5;
+ }
+ if(m_profiler_interval.step(0.030, profiler_print_interval))
{
- if(m_profiler_interval.step(0.030, profiler_print_interval))
- {
- dstream<<"Profiler:"<<std::endl;
- g_profiler->print(dstream);
- g_profiler->clear();
+ if(print_to_log){
+ infostream<<"Profiler:"<<std::endl;
+ g_profiler->print(infostream);
}
+
+ std::ostringstream os(std::ios_base::binary);
+ g_profiler->print(os);
+ guitext_profiler->setText(narrow_to_wide(os.str()).c_str());
+
+ g_profiler->clear();
}
/*
*/
if(input->wasKeyDown(getKeySetting("keymap_inventory")))
{
- dstream<<DTIME<<"the_game: "
+ infostream<<"the_game: "
<<"Launching inventory"<<std::endl;
GUIInventoryMenu *menu =
}
else if(input->wasKeyDown(EscapeKey))
{
- dstream<<DTIME<<"the_game: "
+ infostream<<"the_game: "
<<"Launching pause menu"<<std::endl;
// It will delete itself by itself
(new GUIPauseMenu(guienv, guiroot, -1, g_gamecallback,
irr::video::IImage* const image = driver->createScreenShot();
if (image) {
irr::c8 filename[256];
- snprintf(filename, 256, "%s/screenshot_%u.png",
+ snprintf(filename, 256, "%s" DIR_DELIM "screenshot_%u.png",
g_settings->get("screenshot_path").c_str(),
device->getTimer()->getRealTime());
if (driver->writeImageToFile(image, filename)) {
std::wstringstream sstr;
sstr<<"Saved screenshot to '"<<filename<<"'";
- dstream<<"Saved screenshot to '"<<filename<<"'"<<std::endl;
+ infostream<<"Saved screenshot to '"<<filename<<"'"<<std::endl;
chat_lines.push_back(ChatLine(sstr.str()));
} else{
- dstream<<"Failed to save screenshot '"<<filename<<"'"<<std::endl;
+ infostream<<"Failed to save screenshot '"<<filename<<"'"<<std::endl;
}
image->drop();
}
}
+ else if(input->wasKeyDown(getKeySetting("keymap_toggle_profiler")))
+ {
+ show_profiler = !show_profiler;
+ guitext_profiler->setVisible(show_profiler);
+ }
// Item selection with mouse wheel
{
{
g_selected_item = i;
- dstream<<DTIME<<"Selected item: "
+ infostream<<"Selected item: "
<<g_selected_item<<std::endl;
}
}
if(draw_control.range_all)
{
draw_control.range_all = false;
- dstream<<DTIME<<"Disabled full viewing range"<<std::endl;
+ infostream<<"Disabled full viewing range"<<std::endl;
}
else
{
draw_control.range_all = true;
- dstream<<DTIME<<"Enabled full viewing range"<<std::endl;
+ infostream<<"Enabled full viewing range"<<std::endl;
}
}
}
if(first_loop_after_window_activation){
- //dstream<<"window active, first loop"<<std::endl;
+ //infostream<<"window active, first loop"<<std::endl;
first_loop_after_window_activation = false;
}
else{
s32 dy = input->getMousePos().Y - displaycenter.Y;
if(invert_mouse)
dy = -dy;
- //dstream<<"window active, pos difference "<<dx<<","<<dy<<std::endl;
+ //infostream<<"window active, pos difference "<<dx<<","<<dy<<std::endl;
/*const float keyspeed = 500;
if(input->isKeyDown(irr::KEY_UP))
if(device->getCursorControl()->isVisible() == false)
device->getCursorControl()->setVisible(true);
- //dstream<<"window inactive"<<std::endl;
+ //infostream<<"window inactive"<<std::endl;
first_loop_after_window_activation = true;
}
else if(event.type == CE_PLAYER_DAMAGE)
{
//u16 damage = event.player_damage.amount;
- //dstream<<"Player damage: "<<damage<<std::endl;
+ //infostream<<"Player damage: "<<damage<<std::endl;
damage_flash_timer = 0.05;
if(event.player_damage.amount >= 2){
damage_flash_timer += 0.05 * event.player_damage.amount;
nodepos_old = v3s16(-32768,-32768,-32768);
}
- //dstream<<"Client returned selected_active_object != NULL"<<std::endl;
+ //infostream<<"Client returned selected_active_object != NULL"<<std::endl;
core::aabbox3d<f32> *selection_box
= selected_active_object->getSelectionBox();
do_punch = true;
}
if(do_punch){
- dstream<<DTIME<<"Left-clicked object"<<std::endl;
+ infostream<<"Left-clicked object"<<std::endl;
left_punch = true;
}
if(do_punch_damage){
}
else if(input->getRightClicked())
{
- dstream<<DTIME<<"Right-clicked object"<<std::endl;
+ infostream<<"Right-clicked object"<<std::endl;
client.clickActiveObject(1,
selected_active_object->getId(), g_selected_item);
}
{
if(nodepos != nodepos_old)
{
- dstream<<DTIME<<"Pointing at ("<<nodepos.X<<","
+ infostream<<"Pointing at ("<<nodepos.X<<","
<<nodepos.Y<<","<<nodepos.Z<<")"<<std::endl;
if(nodepos_old != v3s16(-32768,-32768,-32768))
if(input->getLeftClicked() ||
(input->getLeftState() && nodepos != nodepos_old))
{
- dstream<<DTIME<<"Started digging"<<std::endl;
+ infostream<<"Started digging"<<std::endl;
client.groundAction(0, nodepos, neighbourpos, g_selected_item);
}
if(input->getLeftClicked())
if(prop.diggable == false)
{
- /*dstream<<"Material "<<(int)material
+ /*infostream<<"Material "<<(int)material
<<" not diggable with \""
<<toolname<<"\""<<std::endl;*/
// I guess nobody will wait for this long
if(dig_index < CRACK_ANIMATION_LENGTH)
{
//TimeTaker timer("client.setTempMod");
- //dstream<<"dig_index="<<dig_index<<std::endl;
+ //infostream<<"dig_index="<<dig_index<<std::endl;
client.setTempMod(nodepos, NodeMod(NODEMOD_CRACK, dig_index));
}
else
{
- dstream<<DTIME<<"Digging completed"<<std::endl;
+ infostream<<"Digging completed"<<std::endl;
client.groundAction(3, nodepos, neighbourpos, g_selected_item);
client.clearTempMod(nodepos);
client.removeNode(nodepos);
if(input->getRightClicked())
{
- dstream<<DTIME<<"Ground right-clicked"<<std::endl;
+ infostream<<"Ground right-clicked"<<std::endl;
// If metadata provides an inventory view, activate it
if(meta && meta->getInventoryDrawSpecString() != "" && !random_input)
{
- dstream<<DTIME<<"Launching custom inventory view"<<std::endl;
+ infostream<<"Launching custom inventory view"<<std::endl;
/*
Construct the unique identification string of the node
*/
}
else if(meta && meta->typeId() == CONTENT_SIGN_WALL && !random_input)
{
- dstream<<"Sign node right-clicked"<<std::endl;
+ infostream<<"Sign node right-clicked"<<std::endl;
SignNodeMetadata *signmeta = (SignNodeMetadata*)meta;
if(input->getLeftReleased())
{
- dstream<<DTIME<<"Left button released (stopped digging)"
+ infostream<<"Left button released (stopped digging)"
<<std::endl;
client.groundAction(2, v3s16(0,0,0), v3s16(0,0,0), 0);
}
if(input->getRightReleased())
{
- //dstream<<DTIME<<"Right released"<<std::endl;
+ //inostream<<DTIME<<"Right released"<<std::endl;
// Nothing here
}
"(% .1f, % .1f, % .1f)"
" (% .3f < btime_jitter < % .3f"
", dtime_jitter = % .1f %%"
- ", v_range = %.1f)",
+ ", v_range = %.1f, RTT = %.3f)",
player_position.X/BS,
player_position.Y/BS,
player_position.Z/BS,
busytime_jitter1_min_sample,
busytime_jitter1_max_sample,
dtime_jitter1_max_fraction * 100.0,
- draw_control.wanted_range
+ draw_control.wanted_range,
+ client.getRTT()
);
guitext2->setText(narrow_to_wide(temptext).c_str());
guitext_chat->setRelativePosition(rect);
- if(chat_lines.size() == 0)
+ // Don't show chat if empty or profiler is enabled
+ if(chat_lines.size() == 0 || show_profiler)
guitext_chat->setVisible(false);
else
guitext_chat->setVisible(true);
{
client.selectPlayerItem(g_selected_item);
old_selected_item = g_selected_item;
- //dstream<<"Updating local inventory"<<std::endl;
+ //infostream<<"Updating local inventory"<<std::endl;
client.getLocalInventory(local_inventory);
// Update wielded tool
//timer3.stop();
- //dstream<<DTIME<<"smgr->drawAll()"<<std::endl;
+ //infostream<<"smgr->drawAll()"<<std::endl;
{
TimeTaker timer("smgr");
for(core::list< core::aabbox3d<f32> >::Iterator i=hilightboxes.begin();
i != hilightboxes.end(); i++)
{
- /*dstream<<"hilightbox min="
+ /*infostream<<"hilightbox min="
<<"("<<i->MinEdge.X<<","<<i->MinEdge.Y<<","<<i->MinEdge.Z<<")"
<<" max="
<<"("<<i->MaxEdge.X<<","<<i->MaxEdge.Y<<","<<i->MaxEdge.Z<<")"