summaryrefslogtreecommitdiff
path: root/scene.cpp
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2011-06-12 17:52:31 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2011-06-12 17:52:31 +0200
commitd289e0eacbd00538ee2bcaedeba4366cc1e98231 (patch)
tree16d49421b24520c1728149f96a63635340e2e4a2 /scene.cpp
parentd94e9e78af4e59e27524556b828291c1dfb72407 (diff)
Handle and render players with a placeholder texture.
Diffstat (limited to 'scene.cpp')
-rw-r--r--scene.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/scene.cpp b/scene.cpp
index a2b802b..0f68011 100644
--- a/scene.cpp
+++ b/scene.cpp
@@ -52,6 +52,7 @@ Scene::Scene() {
soil_texture = load_texture("textures/zooboing-469-sand-modified.jpg");
water_texture = load_texture("textures/zooboing-688-water.jpg");
marker_texture = load_texture("textures/cross.png");
+ placeholder_texture = load_texture("textures/placeholder.png");
/* init terrain */
terrain = new Terrain();
@@ -142,6 +143,12 @@ bool Scene::select(int x, int y, float& px, float& py, float& pz) {
void Scene::update() {
terrain->update(pos.x, pos.z);
+
+ // sort players once a second
+ if(SDL_GetTicks() - last_sort > 1000) {
+ sort_players();
+ last_sort = SDL_GetTicks();
+ }
}
void Scene::events() {
@@ -521,8 +528,21 @@ void Scene::render() {
glEnd();
glPopMatrix();
+ // player rendering
+ glPushMatrix();
+ glTranslatef(-pos.x, -pos.y, -pos.z);
+ glColor3f(1, 1, 1);
+
+ font->FaceSize(30);
+ for(PlayerList::iterator it = players.begin(); it != players.end(); it++) {
+ (*it)->render(font, steps, placeholder_texture);
+ }
+
+ glPopMatrix();
+
// HUD
video::ortho();
+ font->FaceSize(10);
float height = font->LineHeight();
glColor3f(1, 1, 1);
glTranslatef(0, video::height-height, 0);
@@ -577,3 +597,11 @@ GLuint Scene::load_texture(const char *filename) {
return texture;
}
+
+static bool playerlist_sort(Vector3 pos, Player::p a, Player::p b) {
+ return (a->get_pos() - pos).length() > (b->get_pos() - pos).length();
+}
+
+void Scene::sort_players() {
+ players.sort(boost::bind(&playerlist_sort, pos, _1, _2));
+}