Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/console.cc46
-rw-r--r--src/client/console.h2
-rw-r--r--src/client/video.cc10
3 files changed, 40 insertions, 18 deletions
diff --git a/src/client/console.cc b/src/client/console.cc
index 42ef78a..83d69de 100644
--- a/src/client/console.cc
+++ b/src/client/console.cc
@@ -50,6 +50,9 @@ std::deque<std::string> text;
// console visibility
bool console_visible;
+size_t console_scroll = 0;
+size_t input_pos = 0;
+
//--- engine functions --------------------------------------------
extern "C" void func_con_toggle(std::stringstream &args)
@@ -108,23 +111,29 @@ void draw()
gl::end();
// draw the console text
+ if (console_scroll > text.size())
+ console_scroll = text.size();
+
gl::enable(GL_TEXTURE_2D);
std::deque<std::string>::reverse_iterator rit = text.rbegin();
- float y = video::height*con_height-2*CHARHEIGHT-8;
+ float bottom = video::height*con_height-2*CHARHEIGHT-8;
+ float y = bottom+console_scroll*CHARHEIGHT;
while (y > 0 && rit < text.rend()) {
- std::string line(*rit);
+ if (y <= bottom) {
+ std::string line(*rit);
- if (line[0] == '?')
- gl::color(0.7f,0.7f,0.7f, 1.0f);
- else if (line[0] == '*')
- gl::color(1.0f,1.0f,0.0f, 1.0f);
- else if (line[0] == '!')
- gl::color(1.0f,0.0f,0.0f, 1.0f);
- else
- gl::color(1.0f,1.0f,1.0f, 1.0f);
- line.erase(0,2);
-
- draw_text(CHARWIDTH, y, line);
+ if (line[0] == '?')
+ gl::color(0.7f,0.7f,0.7f, 1.0f);
+ else if (line[0] == '*')
+ gl::color(1.0f,1.0f,0.0f, 1.0f);
+ else if (line[0] == '!')
+ gl::color(1.0f,0.0f,0.0f, 1.0f);
+ else
+ gl::color(1.0f,1.0f,1.0f, 1.0f);
+ line.erase(0,2);
+
+ draw_text(CHARWIDTH, y, line);
+ }
y -= CHARHEIGHT;
++rit;
}
@@ -159,6 +168,9 @@ void toggle()
{
console_visible = !console_visible;
setkeyboardmode(console_visible);
+ console_scroll = 0;
+ input.clear();
+ input_pos = 0;
}
void keypressed(const SDL_keysym &keysym)
@@ -175,6 +187,14 @@ void keypressed(const SDL_keysym &keysym)
input.erase(input.size()-1, 1);
}
break;
+ case SDLK_PAGEUP:
+ console_scroll +=5;
+ if (console_scroll > text.size()) console_scroll = text.size();
+ break;
+ case SDLK_PAGEDOWN:
+ if (console_scroll > 5) console_scroll -=5;
+ else console_scroll = 0;
+ break;
default:
break;
}
diff --git a/src/client/console.h b/src/client/console.h
index 3ea064e..e558438 100644
--- a/src/client/console.h
+++ b/src/client/console.h
@@ -14,7 +14,7 @@
#include <sstream>
#include <deque>
-#define MAXCONLINES 2048
+const size_t MAXCONLINES=2048;
namespace client {
diff --git a/src/client/video.cc b/src/client/video.cc
index f7ae792..19555ec 100644
--- a/src/client/video.cc
+++ b/src/client/video.cc
@@ -84,7 +84,8 @@ bool init()
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 2);
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
- flags = SDL_OPENGL | SDL_FULLSCREEN;
+ if (r_fullscreen->value()) flags = SDL_OPENGL | SDL_FULLSCREEN;
+ else flags = SDL_OPENGL;
if(!SDL_SetVideoMode(width, height, bpp, flags )) {
con_warn << "Failed to set video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl;
@@ -101,14 +102,15 @@ bool init()
con_print << " video mode " << width << "x" << height << "x" << bpp << "bpp" << std::endl;
aspect = (float) width / (float) height;
-
+ (*r_width) = width;
+ (*r_height) = height;
render::init();
+ video::reset();
+
view::init();
- video::reset();
-
return true;
}