From d7eff73234099be73a32fe4c747d41ba159693d6 Mon Sep 17 00:00:00 2001 From: auria Date: Sun, 15 Jan 2012 01:45:40 +0000 Subject: [PATCH] Different display for locked challenges; link toghether force field and challenge git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@10667 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/challenges/game_slot.hpp | 2 ++ src/states_screens/race_gui_overworld.cpp | 25 ++++++++++++------ src/states_screens/race_gui_overworld.hpp | 2 ++ src/tracks/track.cpp | 21 +++++++++++++++ src/tracks/track.hpp | 31 ++++++++++++----------- 5 files changed, 58 insertions(+), 23 deletions(-) diff --git a/src/challenges/game_slot.hpp b/src/challenges/game_slot.hpp index de193906f..f6b1da78a 100644 --- a/src/challenges/game_slot.hpp +++ b/src/challenges/game_slot.hpp @@ -96,6 +96,8 @@ public: void save (XMLWriter& file); int getPoints () const { return m_points; } + + const Challenge* getChallenge(const std::string& id) { return m_challenges_state[id]; } }; #endif diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp index 86bc6fe93..e579bc796 100644 --- a/src/states_screens/race_gui_overworld.cpp +++ b/src/states_screens/race_gui_overworld.cpp @@ -46,6 +46,10 @@ using namespace irr; #include "utils/string_utils.hpp" #include "utils/translation.hpp" +const int LOCKED = 0; +const int OPEN = 1; +const int COMPLETED = 2; + /** The constructor is called before anything is attached to the scene node. * So rendering to a texture can be done here. But world is not yet fully * created, so only the race manager can be accessed safely. @@ -102,6 +106,10 @@ RaceGUIOverworld::RaceGUIOverworld() m_lock = irr_driver->getTexture( file_manager->getTextureFile("gui_lock.png") ); m_open_challenge = irr_driver->getTexture( file_manager->getGUIDir() + "challenge.png" ); + + m_icons[0] = m_lock; + m_icons[1] = m_open_challenge; + m_icons[2] = m_trophy; } // RaceGUIOverworld //----------------------------------------------------------------------------- @@ -298,32 +306,33 @@ void RaceGUIOverworld::drawGlobalMiniMap() } // for only_draw_player_kart - //const std::vector& challenges = t->getChallengeList(); - const std::vector& forcefields = t->getForceFieldList(); + const std::vector& challenges = t->getChallengeList(); - for (unsigned int n=0; nmapPoint2MiniMap(forcefields[n].m_position, &draw_at); + t->mapPoint2MiniMap(challenges[n].m_position, &draw_at); //const ChallengeData* c = unlock_manager->getChallenge(challenges[n].m_challenge_id); // bool locked = (m_locked_challenges.find(c) != m_locked_challenges.end()); - bool locked = forcefields[n].m_is_locked; + int state = (challenges[n].m_force_field.m_is_locked ? LOCKED : OPEN); + const Challenge* c = unlock_manager->getCurrentSlot()->getChallenge(challenges[n].m_challenge_id); + if (c->isSolved()) state = COMPLETED; + const core::rect source(core::position2d(0,0), - (locked ? m_lock : m_open_challenge)->getOriginalSize()); + m_icons[state]->getOriginalSize()); core::rect dest(m_map_left+(int)(draw_at.getX()-m_marker_challenge_size/2), lower_y -(int)(draw_at.getY()+m_marker_challenge_size/2), m_map_left+(int)(draw_at.getX()+m_marker_challenge_size/2), lower_y -(int)(draw_at.getY()-m_marker_challenge_size/2)); - irr_driver->getVideoDriver()->draw2DImage(locked ? m_lock : m_open_challenge, + irr_driver->getVideoDriver()->draw2DImage(m_icons[state], dest, source, NULL, NULL, true); } // ---- Draw nearby challenge if any - const std::vector& challenges = t->getChallengeList(); for (unsigned int n=0; n= 0); + assert(closest_field_id < (int)m_force_fields.size()); + m_challenges[c].m_force_field = m_force_fields[closest_field_id]; + } + + // Create LOD nodes std::vector lod_nodes; lodLoader.done(m_root, m_all_cached_meshes, lod_nodes); for (unsigned int n=0; n& getChallengeList() const { return m_challenges; } - - /** Get list of force fields placed on that world. Works only for overworld. */ - const std::vector& getForceFieldList() const - { return m_force_fields; } }; // class Track