Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2009-01-12 18:38:48 +0000
committerStijn Buys <ingar@osirion.org>2009-01-12 18:38:48 +0000
commitc55945a1e81f5e49ef706cb3d0d37f17dbb84709 (patch)
treea050721b95b8c11134b6d373474382653c6fe063 /src
parent01a803bec48b1377d2714bce819fb2544eeeb44b (diff)
Improved loader message
Diffstat (limited to 'src')
-rw-r--r--src/client/client.cc8
-rw-r--r--src/client/video.cc96
-rw-r--r--src/client/video.h9
3 files changed, 69 insertions, 44 deletions
diff --git a/src/client/client.cc b/src/client/client.cc
index 6611bb2..66feecf 100644
--- a/src/client/client.cc
+++ b/src/client/client.cc
@@ -254,7 +254,8 @@ void Client::shutdown()
void Client::notify_connect()
{
- video::frame_loading("Connecting...");
+ video::set_loader_message("Loading...");
+ video::frame_loader();
view()->notify()->clear();
view()->chat()->clear();
@@ -277,6 +278,9 @@ void Client::notify_disconnect()
void Client::notify_zonechange()
{
+ video::set_loader_message("Loading...");
+ video::frame_loader();
+
// unload entity sounds
for (core::Entity::Registry::iterator it = core::Entity::registry().begin(); it != core::Entity::registry().end(); it++) {
core::Entity *entity = (*it).second;
@@ -339,7 +343,7 @@ void Client::notify_message(const core::Message::Channel channel, const std::str
}
void Client::notify_loader(const std::string &message) {
- video::loader_message(message.c_str());
+ video::set_loader_message(message.c_str());
}
//--- engine functions --------------------------------------------
diff --git a/src/client/video.cc b/src/client/video.cc
index 892f1a6..b4ee70e 100644
--- a/src/client/video.cc
+++ b/src/client/video.cc
@@ -10,11 +10,13 @@
#include "client/client.h"
#include "client/targets.h"
#include "render/render.h"
+#include "render/gl.h"
#include "core/core.h"
#include "core/gameserver.h"
#include "filesystem/filesystem.h"
#include "sys/sys.h"
#include "ui/ui.h"
+#include "ui/paint.h"
#include <SDL/SDL.h>
@@ -33,7 +35,6 @@ core::Cvar *draw_stats = 0;
core::Cvar *draw_devinfo = 0;
core::Cvar *draw_keypress = 0;
-
namespace video {
float fullscreen = 0;
@@ -50,7 +51,8 @@ int height_prev = 0;
const int width_default = 1024;
const int height_default = 768;
-bool is_loader_frame = false;
+std::string loader_message;
+bool is_loading = false;
bool init()
{
@@ -274,76 +276,92 @@ void set_cursor()
}
}
-void loader_message(const char *message)
+void set_loader_message(const std::string message)
{
- if (!is_loader_frame)
- return;
-
- frame_loading(message);
+ loader_message.assign(message);
+
+ if (is_loading)
+ frame_loader();
}
-void frame_loading(const char *message)
+void set_loader_message(const char *message)
{
- using namespace render;
-
- is_loader_frame = true;
+ if (message)
+ loader_message.assign(message);
+ else
+ loader_message.clear();
+
+ if (is_loading)
+ frame_loader();
+}
- // Clear the color and depth buffers.
- gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+void draw_loader()
+{
render::Camera::ortho();
-
- gl::enable(GL_TEXTURE_2D);
+
gl::enable(GL_BLEND);
gl::color(1.0f, 1.0f, 1.0f, 1.0f);
- render::Textures::load("bitmaps/banner");
- gl::begin(gl::Quads);
-
- gl::vertex(0, 0);
- gl::vertex(0, render::State::height());
- gl::vertex(render::State::width(), render::State::height());
- gl::vertex(render::State::width(), 0);
- gl::end();
+ math::Vector2f pos;
+ math::Vector2f size(render::State::width(), render::State::height());
+ ui::paint::bitmap(pos, size, "banner");
-
- if (message) {
+ if (loader_message.size()) {
+ using render::Text;
+ gl::enable(GL_TEXTURE_2D);
Text::setfont("gui", 12, 18);
Text::setcolor('N'); //set normal color
- Text::draw(Text::fontwidth(), Text::fontheight(), message);
+ Text::draw(Text::fontwidth(), Text::fontheight(), loader_message);
+ gl::disable(GL_TEXTURE_2D);
}
- gl::disable(GL_TEXTURE_2D);
gl::disable(GL_BLEND);
+
+}
+
+void frame_loader()
+{
+ // Clear the color and depth buffers.
+ gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ draw_loader();
+
+ is_loading = true;
SDL_GL_SwapBuffers();
}
void frame(float elapsed)
{
- is_loader_frame = false;
-
// detect fullscreen/windowed mode switch
if (fullscreen != r_fullscreen->value())
restart();
using namespace render;
+ is_loading = false;
+
// Clear the color and depth buffers.
gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
render::Stats::clear();
+ if (core::application()->connected()) {
+
+ if (core::game()->time() && core::localplayer()->zone()) {
+ render::Camera::frame(elapsed);
+ render::Camera::frustum();
- if (core::application()->connected() && core::game()->time() && core::localplayer()->zone()) {
- render::Camera::frame(elapsed);
- render::Camera::frustum();
-
- render::draw(elapsed); // draw the world
- targets::frame(); // validate current target, render sound
-
- if (!core::localplayer()->view() && targets::current()) // draw target docks etc
- render::draw_target(targets::current());
+ render::draw(elapsed); // draw the world
+ targets::frame(); // validate current target, render sound
- render::Camera::ortho();
+ if (!core::localplayer()->view() && targets::current()) // draw target docks etc
+ render::draw_target(targets::current());
+ render::Camera::ortho();
+
+ } else {
+ draw_loader();
+ }
+
} else {
render::Camera::ortho();
}
diff --git a/src/client/video.h b/src/client/video.h
index 80762ae..3ba3ad2 100644
--- a/src/client/video.h
+++ b/src/client/video.h
@@ -33,10 +33,13 @@ namespace video
void frame(float elapsed);
/// draw the loader screen
- void frame_loading(const char *message);
+ void frame_loader();
- /// update the loader screen
- void loader_message(const char *message);
+ /// update the loader screen message
+ void set_loader_message(const std::string message);
+
+ /// update the loader screen message
+ void set_loader_message(const char *message);
/// set the window caption
void set_caption();