diff options
Diffstat (limited to 'scene.cpp')
-rw-r--r-- | scene.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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)); +} |