Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/infowidget.cc4
-rw-r--r--src/core/application.cc11
-rw-r--r--src/core/cvar.cc3
-rw-r--r--src/core/cvar.h3
-rw-r--r--src/core/entity.cc9
-rw-r--r--src/dedicated/console.cc22
-rw-r--r--src/render/screenshot.cc4
-rw-r--r--src/sys/consoleinterface.cc55
-rw-r--r--src/sys/consoleinterface.h12
-rw-r--r--src/sys/sys.cc4
-rw-r--r--src/sys/sys.h2
11 files changed, 112 insertions, 17 deletions
diff --git a/src/client/infowidget.cc b/src/client/infowidget.cc
index 393734c..ed118a8 100644
--- a/src/client/infowidget.cc
+++ b/src/client/infowidget.cc
@@ -47,11 +47,11 @@ void DevInfoWidget::draw()
std::ostringstream textstream;
const core::Entity *target = targets::current();
- textstream << "^Ncore ^B";
+ textstream << "^Nuptime ^B";
time_to_stream(textstream, core::application()->time());
textstream << '\n';
if (core::game()) {
- textstream << "^Ntime ^B";
+ textstream << "^Ntime ^B";
time_to_stream(textstream, core::game()->time());
}
textstream << '\n';
diff --git a/src/core/application.cc b/src/core/application.cc
index 5c7e4e7..c731833 100644
--- a/src/core/application.cc
+++ b/src/core/application.cc
@@ -133,6 +133,9 @@ void Application::init(int count, char **arguments)
Cvar::sv_keepalive = Cvar::get("sv_keepalive", "120", core::Cvar::Archive);
Cvar::sv_keepalive->set_info("[int] number of seconds to keep dynamic objects alive");
+
+ Cvar::sv_collisionmargin = Cvar::get("sv_collisionmargin", 1.0f / 64.0f, core::Cvar::Archive);
+ Cvar::sv_collisionmargin->set_info("[float] margin for mesh collisions");
// network settings
Cvar::net_host = Cvar::get("net_host", "0.0.0.0", Cvar::Archive);
@@ -164,6 +167,14 @@ void Application::init(int count, char **arguments)
Cvar::con_ansi->set_info("[bool] console ANSI colors");
sys::set_ansi(Cvar::con_ansi->value());
+ if (Cvar::sv_dedicated->value()) {
+ Cvar::con_timestamps = Cvar::get("con_timestamps", "1", Cvar::Archive);
+ } else {
+ Cvar::con_timestamps = Cvar::get("con_timestamps", "0", Cvar::Archive);
+ }
+ Cvar::con_timestamps->set_info("[bool] enable console timestamps");
+ sys::set_console_timestamps(Cvar::con_timestamps->value());
+
#ifdef _WIN32
// Initialize win32 socket library
WSADATA wsa_data;
diff --git a/src/core/cvar.cc b/src/core/cvar.cc
index 66da4d4..609778a 100644
--- a/src/core/cvar.cc
+++ b/src/core/cvar.cc
@@ -18,6 +18,8 @@ namespace core
{
Cvar *Cvar::con_ansi = 0;
+Cvar *Cvar::con_timestamps = 0;
+
Cvar *Cvar::sv_dedicated = 0;
Cvar *Cvar::sv_private = 0;
Cvar *Cvar::sv_framerate = 0;
@@ -25,6 +27,7 @@ Cvar *Cvar::sv_name = 0;
Cvar *Cvar::sv_description = 0;
Cvar *Cvar::sv_password = 0;
Cvar *Cvar::sv_keepalive = 0;
+Cvar *Cvar::sv_collisionmargin = 0;
Cvar *Cvar::net_host = 0;
Cvar *Cvar::net_port = 0;
diff --git a/src/core/cvar.h b/src/core/cvar.h
index ffc11bf..864d751 100644
--- a/src/core/cvar.h
+++ b/src/core/cvar.h
@@ -156,9 +156,10 @@ public:
static Cvar *sv_description; // server description
static Cvar *sv_password; // server rcon password
static Cvar *sv_keepalive; // entity keepalive timeout
+ static Cvar *sv_collisionmargin; // bullet collision margin
static Cvar *con_ansi; // console ANSI colors
-
+ static Cvar *con_timestamps;// console timestamps
static Cvar *net_host; // network server ip (default binds to all interfaces)
static Cvar *net_port; // network port
diff --git a/src/core/entity.cc b/src/core/entity.cc
index 7aa72fa..ebe4938 100644
--- a/src/core/entity.cc
+++ b/src/core/entity.cc
@@ -515,8 +515,7 @@ void Entity::reset()
btVector3 modelscalevec(modelscale, modelscale, modelscale);
meshshape->setLocalScaling(modelscalevec);
- //meshshape->setMargin(0.0f);
- //meshshape->updateBound();
+ meshshape->setMargin(Cvar::sv_collisionmargin->value());
entity_collision_shape = meshshape;
// con_debug << " " << label() << " attached collision mesh: " << model()->collisionmesh()->size() << " triangles" << std::endl;
@@ -609,7 +608,7 @@ void EntityDynamic::reset()
btVector3 modelscalevec(modelscale, modelscale, modelscale);
meshshape->setLocalScaling(modelscalevec);
- //meshshape->setMargin(0.0f);
+ meshshape->setMargin(Cvar::sv_collisionmargin->value());
meshshape->updateBound();
entity_collision_shape = meshshape;
@@ -1027,10 +1026,10 @@ void EntityControlable::reset()
btVector3 modelscalevec(modelscale, modelscale, modelscale);
meshshape->setLocalScaling(modelscalevec);
- //meshshape->setMargin(0.0f);
+ meshshape->setMargin(Cvar::sv_collisionmargin->value());
meshshape->updateBound();
- entity_collision_shape = meshshape;
+ entity_collision_shape = meshshape;
} else {
// use bounding box
entity_collision_shape = new btBoxShape(to_btVector3(model()->box().max() * modelscale));
diff --git a/src/dedicated/console.cc b/src/dedicated/console.cc
index c2b71c0..b1629fd 100644
--- a/src/dedicated/console.cc
+++ b/src/dedicated/console.cc
@@ -206,10 +206,26 @@ void Console::draw_status()
if (core::game()) {
attroff(A_BOLD);
color_set(2, NULL);
- int minutes = (int) floorf(core::game()->time() / 60.0f);
- int seconds = (int) floorf(core::game()->time() - (float) minutes * 60.0f);
+
std::stringstream status;
- status << "time " << std::setfill(' ') << std::setw(3) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds;
+
+ // system time
+ int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0;
+ sys::get_datetime(year, month, day, hour, min, sec);
+
+ status << std::setw(4) << std::setfill('0') << year << "-"
+ << std::setw(2) << std::setfill('0') << month << "-"
+ << std::setw(2) << std::setfill('0') << day << " "
+ << std::setw(2) << hour << ":"
+ << std::setw(2) << min << ":"
+ << std::setw(2) << sec << " "
+ << std::setw(2) << " ";
+
+ // uptime
+ int uptime_minutes = (int) floorf(core::game()->time() / 60.0f);
+ int uptime_seconds = (int) floorf(core::game()->time() - (float) uptime_minutes * 60.0f);
+ status << "uptime " << std::setfill(' ') << std::setw(3) << uptime_minutes << ":" << std::setfill('0') << std::setw(2) << uptime_seconds;
+
mvaddnstr(0, 1, status.str().c_str(), status.str().size());
}
}
diff --git a/src/render/screenshot.cc b/src/render/screenshot.cc
index 7b40156..f75cbe8 100644
--- a/src/render/screenshot.cc
+++ b/src/render/screenshot.cc
@@ -68,10 +68,10 @@ void Screenshot::save()
// check if the date has changed since the previous screenshot;
std::stringstream filenamestr;
- int day, month, year, hour, min;
+ int day, month, year, hour, min, sec;
int date_serial;
- sys::get_datetime(year, month, day, hour, min);
+ sys::get_datetime(year, month, day, hour, min, sec);
date_serial = (day - 1) + (month - 1) * 31 + (year - 2000) * 31 * 12;
if (current_date != date_serial) {
current_number = 0;
diff --git a/src/sys/consoleinterface.cc b/src/sys/consoleinterface.cc
index 45f678d..ce82047 100644
--- a/src/sys/consoleinterface.cc
+++ b/src/sys/consoleinterface.cc
@@ -4,6 +4,7 @@
the terms of the GNU General Public License version 2
*/
+#include <iomanip>
#include "sys/consoleinterface.h"
namespace sys
@@ -15,6 +16,20 @@ const size_t DEFAULT_LOGSIZE = 2048;
bool con_ansicolor = false;
+bool con_timestamps = false;
+
+bool beginofline = true;
+
+bool console_timestamps()
+{
+ return con_timestamps;
+}
+
+void set_console_timestamps(const bool timestamps)
+{
+ con_timestamps = timestamps;
+}
+
bool ansi()
{
return con_ansicolor;
@@ -29,6 +44,13 @@ void set_ansi(const bool ansi)
}
}
+void fallback_print_timestamp()
+{
+ int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0;
+ get_datetime(year, month, day, hour, min, sec);
+ std::cout << year << "-" << month << "-" << day << " " << hour << ":" << min << ":" << sec << " ";
+}
+
void fallback_print(const std::string &text)
{
bool is_color_code = false;
@@ -40,6 +62,7 @@ void fallback_print(const std::string &text)
if ((*c) == '\n') {
std::cout << std::endl;
+ beginofline = true;
} else if ((*c) == '^') {
@@ -109,11 +132,19 @@ void fallback_print(const std::string &text)
std::cout << "\033[" << ansi_bold << ";" << ansi_color << "m";
c++;
} else {
+ if (beginofline && con_timestamps) {
+ fallback_print_timestamp();
+ }
std::cout << *c;
+ beginofline = false;
}
} else {
+ if (beginofline && con_timestamps) {
+ fallback_print_timestamp();
+ }
std::cout << *c;
+ beginofline = false;
}
c++;
@@ -127,9 +158,29 @@ int ConsoleBuffer::overflow(int c)
if (c == Traits::eof())
return Traits::not_eof(c);
- if (c == '\n') {
+ if (c == '\n') {
if (ConsoleInterface::instance()) {
- ConsoleInterface::instance()->event_text(con_buffer);
+ /*
+ * In the rcon case, the remote console will handle the timestamps
+ */
+ if (con_timestamps && !ConsoleInterface::instance()->rcon()) {
+ std::ostringstream str;
+ int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0;
+ get_datetime(year, month, day, hour, min, sec);
+
+ str << "^B"
+ << std::setw(4) << std::setfill('0') << year << "-"
+ << std::setw(2) << std::setfill('0') << month << "-"
+ << std::setw(2) << std::setfill('0') << day << " "
+ << std::setw(2) << hour << ":"
+ << std::setw(2) << min << ":"
+ << std::setw(2) << sec << " "
+ << std::setw(2) << con_buffer;
+
+ ConsoleInterface::instance()->event_text(str.str());
+ } else {
+ ConsoleInterface::instance()->event_text(con_buffer);
+ }
} else {
fallback_print(con_buffer);
std::cout << std::endl;
diff --git a/src/sys/consoleinterface.h b/src/sys/consoleinterface.h
index a7fde2e..b2dc5d6 100644
--- a/src/sys/consoleinterface.h
+++ b/src/sys/consoleinterface.h
@@ -20,12 +20,24 @@
namespace sys
{
+/// true if console timestamps are enabled
+bool console_timestamps();
+
+/// enable or disable consle timestamps
+void set_console_timestamps(const bool timestamps);
+
/// true if ANSI colors are enabled
bool ansi();
/// enable or disable ANSI colors
void set_ansi(bool enable = true);
+#ifdef HAVE_DEBUG_MESSAGES
+
+/// enable or disable debug messages
+
+#endif
+
/* -- ConsoleBuffer ------------------------------------------------ */
typedef std::char_traits<char> Traits;
diff --git a/src/sys/sys.cc b/src/sys/sys.cc
index f4e915d..39700b9 100644
--- a/src/sys/sys.cc
+++ b/src/sys/sys.cc
@@ -180,7 +180,7 @@ void sleep(float seconds)
#endif
}
-void get_datetime(int &year, int & month, int & day, int & hours, int & minutes)
+void get_datetime(int &year, int & month, int & day, int & hours, int & minutes, int &seconds)
{
#ifndef _WIN32
struct ::tm localtime;
@@ -193,6 +193,7 @@ void get_datetime(int &year, int & month, int & day, int & hours, int & minutes)
hours = localtime.tm_hour;
minutes = localtime.tm_min;
+ seconds = localtime.tm_sec;
#else
SYSTEMTIME localtime;
::GetLocalTime(&localtime);
@@ -203,6 +204,7 @@ void get_datetime(int &year, int & month, int & day, int & hours, int & minutes)
hours = localtime.wHour;
minutes = localtime.wMinute;
+ seconds = localtime.wSecond;
#endif
}
diff --git a/src/sys/sys.h b/src/sys/sys.h
index 3d94bcb..99c9291 100644
--- a/src/sys/sys.h
+++ b/src/sys/sys.h
@@ -46,7 +46,7 @@ void sleep(float seconds);
unsigned long time();
/// get the current system date and time
-void get_datetime(int &year, int & month, int & day, int & hours, int & minutes);
+void get_datetime(int &year, int & month, int & day, int & hours, int & minutes, int &seconds);
}
#include "sys/consoleinterface.h"