From 24c695e83947d3457dbd1f5d696fa09b4ef953c0 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Mon, 12 May 2008 10:57:38 +0000 Subject: light offset bugfix, console word wrapping --- osirion.kdevelop | 2 +- osirion.kdevelop.pcs | Bin 655559 -> 659521 bytes osirion.kdevses | 13 ++---------- src/client/console.cc | 54 +++++++++++++++++++++++++++++++++++++++++--------- src/render/draw.cc | 2 +- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/osirion.kdevelop b/osirion.kdevelop index c65b0a6..58a8bfc 100644 --- a/osirion.kdevelop +++ b/osirion.kdevelop @@ -21,7 +21,7 @@ - src/model/libmodel.la + src/client/libclient.la debug diff --git a/osirion.kdevelop.pcs b/osirion.kdevelop.pcs index 6bf305e..65b692f 100644 Binary files a/osirion.kdevelop.pcs and b/osirion.kdevelop.pcs differ diff --git a/osirion.kdevses b/osirion.kdevses index 97be539..cd13d45 100644 --- a/osirion.kdevses +++ b/osirion.kdevses @@ -1,19 +1,10 @@ - + - + - - - - - - - - - diff --git a/src/client/console.cc b/src/client/console.cc index fae402c..914d32f 100644 --- a/src/client/console.cc +++ b/src/client/console.cc @@ -171,17 +171,52 @@ void draw() std::deque lines; for (std::deque::iterator it = text.begin(); it != text.end() && current_line < bottom; it++) { if (current_line >= bottom - height) { - std::string line(*it); - line.erase(0,2); - - while (line.size() > width) { - lines.push_back(line.substr(0, width)); - line.erase(0, width); + std::string linedata(*it); + linedata += '\n'; + + std::string word; + std::string line; + const char *c = linedata.c_str(); + + while (*c) { + // new word, wrap if necessary + if ((*c == '\n' ) || ( *c == ' ')) { + + if (line.size() + word.size() > width) { + if (line.size()) { + lines.push_back(line); + line.clear(); + } + } + + line.append(word); + word.clear(); + + // force break words longer than width + while (line.size() > width) { + lines.push_back(line.substr(0, width)); + line.erase(0, width); + } + + // new line + if (*c == '\n' ) { + lines.push_back(line); + line.clear(); + // new word + } else if (*c == ' ' ) { + line += ' '; + } + // new character + } else { + + word += *c; + } + + c++; } - if (line.size()) - lines.push_back(line); + } - current_line++; + current_line++; } float y = video::height*con_height-2*Text::fontheight()-4; @@ -387,6 +422,7 @@ void Console::flush() { console::flush(); } + std::ostream & Console::messagestream() { return (buffer << ". "); diff --git a/src/render/draw.cc b/src/render/draw.cc index e2037e2..7c35bf3 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -428,7 +428,7 @@ void draw_pass_model_fx() // strobe frequency t = 1.0f; if ((*lit)->strobe()) - t = (core::application()->time() + entity->state()->fuzz() + (*lit)->offset()) * (*lit)->frequency(); + t = (core::application()->time() + entity->state()->fuzz() - (*lit)->offset()) * (*lit)->frequency(); if (!(*lit)->strobe() || (( t - floorf(t)) <= (*lit)->time())) { math::Vector3f location = entity->state()->location() + (entity->axis() * (*lit)->location()); -- cgit v1.2.3