From f38106ce77e0580f2ceadaff92943421e2245116 Mon Sep 17 00:00:00 2001 From: unitraxx Date: Fri, 6 Sep 2013 00:06:59 +0000 Subject: [PATCH] Achievements looking good. Only server syncing and server-side need to be done. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/uni@13635 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/achievements.xml | 2 +- data/gui/online/notification_dialog.stkgui | 2 +- src/achievements/achievement.cpp | 6 +++--- src/achievements/achievement_info.hpp | 1 + src/achievements/achievements_manager.cpp | 2 -- src/modes/world.cpp | 4 ++++ src/physics/physics.cpp | 11 ++++++----- src/states_screens/dialogs/notification_dialog.cpp | 11 +++++++++-- src/states_screens/online_screen.cpp | 1 - 9 files changed, 25 insertions(+), 15 deletions(-) diff --git a/data/achievements.xml b/data/achievements.xml index e19b1824e..1e090a61b 100644 --- a/data/achievements.xml +++ b/data/achievements.xml @@ -12,6 +12,6 @@ - + diff --git a/data/gui/online/notification_dialog.stkgui b/data/gui/online/notification_dialog.stkgui index 7dfca0b17..90a9d739f 100644 --- a/data/gui/online/notification_dialog.stkgui +++ b/data/gui/online/notification_dialog.stkgui @@ -8,7 +8,7 @@ + I18N="User info dialog" text="View" label_location="bottom"/> diff --git a/src/achievements/achievement.cpp b/src/achievements/achievement.cpp index 580084715..3f5e90162 100644 --- a/src/achievements/achievement.cpp +++ b/src/achievements/achievement.cpp @@ -63,7 +63,7 @@ void Achievement::check() //show achievement GUIEngine::DialogQueue::get()->pushDialog( new NotificationDialog(NotificationDialog::T_Achievements, - irr::core::stringw(_("Completed achievement")) + irr::core::stringw("\"") + m_achievement_info->getDescription() + irr::core::stringw("\".") + irr::core::stringw(_("Completed achievement")) + irr::core::stringw(" \"") + m_achievement_info->getTitle() + irr::core::stringw("\".") )); //send to server Online::CurrentUser::get()->onAchieving(m_id); @@ -94,8 +94,8 @@ void SingleAchievement::load(XMLNode * input) // ============================================================================ void SingleAchievement::save(std::ofstream & out) { - out << " \n"; } // save diff --git a/src/achievements/achievement_info.hpp b/src/achievements/achievement_info.hpp index 11a936adc..847ac4316 100644 --- a/src/achievements/achievement_info.hpp +++ b/src/achievements/achievement_info.hpp @@ -48,6 +48,7 @@ public: virtual ~AchievementInfo () {}; uint32_t getID () const { return m_id; } irr::core::stringw getDescription () const { return m_description; } + irr::core::stringw getTitle () const { return m_title; } virtual Achievement::AchievementType getType () const = 0; virtual bool checkCompletion (Achievement * achievement) const = 0; bool needsResetAfterRace() const {return m_reset_after_race; } diff --git a/src/achievements/achievements_manager.cpp b/src/achievements/achievements_manager.cpp index ce914a70e..938fb7008 100644 --- a/src/achievements/achievements_manager.cpp +++ b/src/achievements/achievements_manager.cpp @@ -153,8 +153,6 @@ void AchievementsManager::createSlotsIfNeeded() } if(something_changed){ - Log::warn("AchievementsManager::save", - "errueeeur"); save(); } } // UnlockManager::createSlotsIfNeeded diff --git a/src/modes/world.cpp b/src/modes/world.cpp index 69862551b..1cc1040a1 100644 --- a/src/modes/world.cpp +++ b/src/modes/world.cpp @@ -24,6 +24,7 @@ #include #include +#include "achievements/achievements_manager.hpp" #include "audio/music_manager.hpp" #include "audio/sfx_base.hpp" #include "audio/sfx_manager.hpp" @@ -439,6 +440,9 @@ void World::terminateRace() &best_player); unlock_manager->getCurrentSlot()->raceFinished(); + ((MapAchievement *) AchievementsManager::get()->getActive()->getAchievement(1))->increase(getTrack()->getIdent(), 1); + AchievementsManager::get()->onRaceEnd(); + if (m_race_gui) m_race_gui->clearAllMessages(); // we can't delete the race gui here, since it is needed in case of diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 976f829ac..6064e91c0 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -18,6 +18,7 @@ #include "physics/physics.hpp" +#include "achievements/achievements_manager.hpp" #include "animations/three_d_animation.hpp" #include "karts/abstract_kart.hpp" #include "karts/kart_properties.hpp" @@ -236,12 +237,12 @@ void Physics::update(float dt) // Only explode a bowling ball if the target is // not invulnerable AbstractKart* target_kart = p->getUserPointer(1)->getPointerKart(); - if(p->getUserPointer(0)->getPointerFlyable()->getType() - !=PowerupManager::POWERUP_BOWLING || - !target_kart->isInvulnerable() ) + PowerupManager::PowerupType type = p->getUserPointer(0)->getPointerFlyable()->getType(); + if(type != PowerupManager::POWERUP_BOWLING || !target_kart->isInvulnerable()) { - p->getUserPointer(0)->getPointerFlyable() - ->hit(target_kart); + p->getUserPointer(0)->getPointerFlyable()->hit(target_kart); + if ( type ==PowerupManager::POWERUP_BOWLING ) + ((SingleAchievement *) AchievementsManager::get()->getActive()->getAchievement(2))->increase(1); } } diff --git a/src/states_screens/dialogs/notification_dialog.cpp b/src/states_screens/dialogs/notification_dialog.cpp index b080ee447..7e823dfde 100644 --- a/src/states_screens/dialogs/notification_dialog.cpp +++ b/src/states_screens/dialogs/notification_dialog.cpp @@ -57,6 +57,14 @@ void NotificationDialog::beforeAddingWidgets() assert(m_options_widget != NULL); m_view_widget = getWidget("view"); assert(m_view_widget != NULL); + if(m_type == T_Friends) + { + m_view_widget->setText(_("View Friends")); + } + else if (m_type == T_Achievements) + { + m_view_widget->setText(_("View Achievements")); + } m_cancel_widget = getWidget("cancel"); assert(m_cancel_widget != NULL); m_options_widget->setFocusForPlayer(PLAYER_ID_GAME_MASTER); @@ -131,8 +139,7 @@ void NotificationDialog::onUpdate(float dt) } else if (m_type == T_Achievements) { - ProfileManager::get()->setVisiting(CurrentUser::get()->getID()); - StateManager::get()->pushScreen(OnlineProfileFriends::getInstance()); //FIXME should actually pop up achievements screen + //FIXME } } return; diff --git a/src/states_screens/online_screen.cpp b/src/states_screens/online_screen.cpp index 00826a3db..c513a8a5e 100644 --- a/src/states_screens/online_screen.cpp +++ b/src/states_screens/online_screen.cpp @@ -151,7 +151,6 @@ void OnlineScreen::init() setInitialFocus(); DemoWorld::resetIdleTime(); m_online_status_widget->setText(Messages::signedInAs(CurrentUser::get()->getUserName()), false); - } // init // ----------------------------------------------------------------------------