diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp index 30bcf0ed7..4810d6502 100644 --- a/src/states_screens/race_gui_overworld.cpp +++ b/src/states_screens/race_gui_overworld.cpp @@ -100,7 +100,7 @@ RaceGUIOverworld::RaceGUIOverworld() } m_lock = irr_driver->getTexture( file_manager->getTextureFile("gui_lock.png") ); - + m_open_challenge = irr_driver->getTexture( file_manager->getGUIDir() + "challenge.png" ); } // RaceGUIOverworld //----------------------------------------------------------------------------- @@ -295,24 +295,27 @@ void RaceGUIOverworld::drawGlobalMiniMap() } // for only_draw_player_kart - const std::vector& challenges = t->getChallengeList(); + //const std::vector& challenges = t->getChallengeList(); + const std::vector& challenges = t->getForceFieldList(); + for (unsigned int n=0; nmapPoint2MiniMap(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()); + //const ChallengeData* c = unlock_manager->getChallenge(challenges[n].m_challenge_id); + // bool locked = (m_locked_challenges.find(c) != m_locked_challenges.end()); + bool locked = challenges[n].m_is_locked; const core::rect source(core::position2d(0,0), - m_lock->getOriginalSize()); + (locked ? m_lock : m_open_challenge)->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(m_lock, dest, - source, NULL, NULL, true); + irr_driver->getVideoDriver()->draw2DImage(locked ? m_lock : m_open_challenge, + dest, source, NULL, NULL, true); } } // drawGlobalMiniMap diff --git a/src/states_screens/race_gui_overworld.hpp b/src/states_screens/race_gui_overworld.hpp index 6494f5203..0ed401ee2 100644 --- a/src/states_screens/race_gui_overworld.hpp +++ b/src/states_screens/race_gui_overworld.hpp @@ -60,7 +60,8 @@ private: video::ITexture *m_trophy; video::ITexture *m_lock; - + video::ITexture *m_open_challenge; + /** The size of a single marker on the screen for AI karts, * need not be a power of 2. */ int m_marker_challenge_size; diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index f75f9bda9..74ec093a9 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -612,6 +612,7 @@ bool Track::loadMainTrack(const XMLNode &root) assert(m_gfx_effect_mesh==NULL); m_challenges.clear(); + m_force_fields.clear(); m_track_mesh = new TriangleMesh(); m_gfx_effect_mesh = new TriangleMesh(); @@ -696,6 +697,14 @@ bool Track::loadMainTrack(const XMLNode &root) continue; } + + core::vector3df xyz(0,0,0); + n->get("xyz", &xyz); + core::vector3df hpr(0,0,0); + n->get("hpr", &hpr); + core::vector3df scale(1.0f, 1.0f, 1.0f); + n->get("scale", &scale); + // some static meshes are conditional std::string condition; n->get("if", &condition); @@ -722,15 +731,11 @@ bool Track::loadMainTrack(const XMLNode &root) condition.c_str()); } - if (unlock_manager->getCurrentSlot()->getPoints() < val) - { - // show object - } - else - { - // don't show object - continue; - } + bool shown = (unlock_manager->getCurrentSlot()->getPoints() < val); + + m_force_fields.push_back(OverworldForceField(xyz, shown)); + + if (!shown) continue; } else { @@ -762,13 +767,6 @@ bool Track::loadMainTrack(const XMLNode &root) n->get("model", &model_name); full_path = m_root+"/"+model_name; - core::vector3df xyz(0,0,0); - n->get("xyz", &xyz); - core::vector3df hpr(0,0,0); - n->get("hpr", &hpr); - core::vector3df scale(1.0f, 1.0f, 1.0f); - n->get("scale", &scale); - // a special challenge orb object for overworld std::string challenge; n->get("challenge", &challenge); diff --git a/src/tracks/track.hpp b/src/tracks/track.hpp index 483b05e72..ea615ca0e 100644 --- a/src/tracks/track.hpp +++ b/src/tracks/track.hpp @@ -75,6 +75,18 @@ struct OverworldChallenge m_challenge_id = challenge_id; } }; +struct OverworldForceField +{ + core::vector3df m_position; + bool m_is_locked; + + OverworldForceField(core::vector3df position, bool is_locked) + { + m_position = position; + m_is_locked = is_locked; + } +}; + /** * \ingroup tracks @@ -95,6 +107,8 @@ private: /** Will only be sued on overworld */ std::vector m_challenges; + std::vector m_force_fields; + /** Start transforms of karts (either the default, or the ones taken * from the scene file). */ AlignedArray m_start_transforms; @@ -418,6 +432,11 @@ public: const std::vector& 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 #endif