From 4edcf6169b544fe99f93ae03ace881c38264745f Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 16 Oct 2014 12:55:59 +1100 Subject: [PATCH 01/42] Removed debug code. --- src/audio/sfx_manager.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 40eadb184..863025b8a 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -524,8 +524,6 @@ SFXBase* SFXManager::createSoundSource(SFXBuffer* buffer, m_all_sfx.getData().push_back(sfx); m_all_sfx.unlock(); } - else - printf(""); return sfx; } // createSoundSource From a09c1346b7460ad1280dc5d649f1571fd07562ae Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 21 Oct 2014 08:21:58 +1100 Subject: [PATCH 02/42] Fixed sound objects. --- src/tracks/track_object_presentation.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index 083ab3621..7f0bd7cf3 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -482,7 +482,8 @@ TrackObjectPresentationSound::TrackObjectPresentationSound(const XMLNode& xml_no xml_node.get("max_dist", &max_dist ); // first try track dir, then global dir - std::string soundfile = file_manager->getAsset(FileManager::MODEL,sound); + std::string soundfile = World::getWorld()->getTrack()->getTrackFile(sound); + //std::string soundfile = file_manager->getAsset(FileManager::MODEL,sound); if (!file_manager->fileExists(soundfile)) { soundfile = file_manager->getAsset(FileManager::SFX, sound); From c7d7e17ff97fada49e9477b049b87bd366d7ee28 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 21 Oct 2014 08:28:41 +1100 Subject: [PATCH 03/42] Handle setMasterVolume in sfx thread. --- src/audio/dummy_sfx.hpp | 2 ++ src/audio/sfx_base.hpp | 51 ++++++++++++++++++++------------------- src/audio/sfx_manager.cpp | 3 +++ src/audio/sfx_manager.hpp | 1 + src/audio/sfx_openal.cpp | 27 +++++++++++++-------- src/audio/sfx_openal.hpp | 1 + 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/audio/dummy_sfx.hpp b/src/audio/dummy_sfx.hpp index 765912902..578eded7b 100644 --- a/src/audio/dummy_sfx.hpp +++ b/src/audio/dummy_sfx.hpp @@ -55,6 +55,8 @@ public: virtual void reallySetSpeed(float factor) {} virtual void setVolume(float gain) {} virtual void reallySetVolume(float gain) {} + virtual void setMasterVolume(float gain) {} + virtual void reallySetMasterVolumeNow(float gain) {} virtual SFXStatus getStatus() { return SFX_STOPPED; } virtual void onSoundEnabledBack() {} virtual void setRolloff(float rolloff) {} diff --git a/src/audio/sfx_base.hpp b/src/audio/sfx_base.hpp index 4e647b87c..eedc85b59 100644 --- a/src/audio/sfx_base.hpp +++ b/src/audio/sfx_base.hpp @@ -52,31 +52,32 @@ public: virtual ~SFXBase() {} /** Late creation, if SFX was initially disabled */ - virtual bool init() = 0; - virtual bool isLooped() = 0; - virtual void updatePlayingSFX(float dt) = 0; - virtual void setPosition(const Vec3 &p) = 0; - virtual void reallySetPosition(const Vec3 &p) = 0; - virtual void setLoop(bool status) = 0; - virtual void reallySetLoop(bool status) = 0; - virtual void play() = 0; - virtual void reallyPlayNow() = 0; - virtual void stop() = 0; - virtual void reallyStopNow() = 0; - virtual void pause() = 0; - virtual void reallyPauseNow() = 0; - virtual void resume() = 0; - virtual void reallyResumeNow() = 0; - virtual void deleteSFX() = 0; - virtual void setSpeed(float factor) = 0; - virtual void reallySetSpeed(float factor) = 0; - virtual void setVolume(float gain) = 0; - virtual void reallySetVolume(float gain) = 0; - virtual void setMasterVolume(float gain) = 0; - virtual void onSoundEnabledBack() = 0; - virtual void setRolloff(float rolloff) = 0; - virtual const SFXBuffer* getBuffer() const = 0; - virtual SFXStatus getStatus() = 0; + virtual bool init() = 0; + virtual bool isLooped() = 0; + virtual void updatePlayingSFX(float dt) = 0; + virtual void setPosition(const Vec3 &p) = 0; + virtual void reallySetPosition(const Vec3 &p) = 0; + virtual void setLoop(bool status) = 0; + virtual void reallySetLoop(bool status) = 0; + virtual void play() = 0; + virtual void reallyPlayNow() = 0; + virtual void stop() = 0; + virtual void reallyStopNow() = 0; + virtual void pause() = 0; + virtual void reallyPauseNow() = 0; + virtual void resume() = 0; + virtual void reallyResumeNow() = 0; + virtual void deleteSFX() = 0; + virtual void setSpeed(float factor) = 0; + virtual void reallySetSpeed(float factor) = 0; + virtual void setVolume(float gain) = 0; + virtual void reallySetVolume(float gain) = 0; + virtual void setMasterVolume(float gain) = 0; + virtual void reallySetMasterVolumeNow(float gain) = 0; + virtual void onSoundEnabledBack() = 0; + virtual void setRolloff(float rolloff) = 0; + virtual const SFXBuffer* getBuffer() const = 0; + virtual SFXStatus getStatus() = 0; }; // SFXBase diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 1b45a8a5c..f629dcce0 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -287,6 +287,9 @@ void* SFXManager::mainLoop(void *obj) current->m_parameter); break; case SFX_VOLUME: current->m_sfx->reallySetVolume( current->m_parameter.getX()); break; + case SFX_MASTER_VOLUME: + current->m_sfx->reallySetMasterVolumeNow( + current->m_parameter.getX()); break; case SFX_LOOP: current->m_sfx->reallySetLoop( current->m_parameter.getX()!=0); break; case SFX_DELETE: { diff --git a/src/audio/sfx_manager.hpp b/src/audio/sfx_manager.hpp index 47e4cbb74..7bcf9efce 100644 --- a/src/audio/sfx_manager.hpp +++ b/src/audio/sfx_manager.hpp @@ -72,6 +72,7 @@ public: SFX_SPEED, SFX_POSITION, SFX_VOLUME, + SFX_MASTER_VOLUME, SFX_LOOP, SFX_LISTENER, SFX_UPDATE, diff --git a/src/audio/sfx_openal.cpp b/src/audio/sfx_openal.cpp index dafd3ce1f..ef8046ee0 100644 --- a/src/audio/sfx_openal.cpp +++ b/src/audio/sfx_openal.cpp @@ -208,24 +208,31 @@ void SFXOpenAL::reallySetVolume(float gain) } // reallySetVolume //----------------------------------------------------------------------------- - +/** Schedules setting of the master volume. + * \param gain Gain value. + */ void SFXOpenAL::setMasterVolume(float gain) +{ + // This needs to be called even if sfx are disabled atm, so only exit + // in case that the sfx could not be loaded in the first place. + if(m_status==SFX_UNKNOWN) return; + SFXManager::get()->queue(SFXManager::SFX_MASTER_VOLUME, this, gain); +} // setMasterVolume + +//----------------------------------------------------------------------------- +/** Sets the master volume. + * \param gain Master volume. + */ +void SFXOpenAL::reallySetMasterVolumeNow(float gain) { m_master_gain = gain; - if(m_status==SFX_UNKNOWN) return; - if(m_status==SFX_NOT_INITIALISED) - { - init(); - if(m_status==SFX_UNKNOWN) - return; - } - + if(m_status==SFX_UNKNOWN || m_status == SFX_NOT_INITIALISED) return; alSourcef(m_sound_source, AL_GAIN, (m_gain < 0.0f ? m_default_gain : m_gain) * m_master_gain); SFXManager::checkError("setting volume"); -} //setMasterVolume +} // reallySetMasterVolumeNow //----------------------------------------------------------------------------- /** Loops this sound effect. diff --git a/src/audio/sfx_openal.hpp b/src/audio/sfx_openal.hpp index f417fedbb..87a3c7d3b 100644 --- a/src/audio/sfx_openal.hpp +++ b/src/audio/sfx_openal.hpp @@ -100,6 +100,7 @@ public: virtual void setVolume(float gain); virtual void reallySetVolume(float gain); virtual void setMasterVolume(float gain); + virtual void reallySetMasterVolumeNow(float gain); virtual void onSoundEnabledBack(); virtual void setRolloff(float rolloff); // ------------------------------------------------------------------------ From 65b7589849ff375e7d40033b6d61aa4acbab4329 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 21 Oct 2014 08:31:10 +1100 Subject: [PATCH 04/42] Make sure the sfx are resumed before calling onSOundEnbaledBack(). --- src/audio/sfx_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index f629dcce0..41017e290 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -333,7 +333,7 @@ void SFXManager::soundToggled(const bool on) buffer->load(); } - resumeAll(); + reallyResumeAllNow(); m_all_sfx.lock(); const int sfx_amount = (int)m_all_sfx.getData().size(); for (int n=0; n Date: Fri, 17 Oct 2014 23:49:19 +0200 Subject: [PATCH 05/42] only one saved GP per GP-ident Conflicts: src/graphics/glwrap.cpp --- src/config/saved_grand_prix.cpp | 10 +- src/config/saved_grand_prix.hpp | 20 ++-- src/race/race_manager.cpp | 103 ++++++++---------- src/race/race_manager.hpp | 8 +- src/states_screens/dialogs/gp_info_dialog.cpp | 2 - src/states_screens/gp_info_screen.cpp | 24 ++-- 6 files changed, 74 insertions(+), 93 deletions(-) diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index 8f01643a6..e80714edd 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -143,29 +143,27 @@ void SavedGrandPrix::setKarts(const std::vector &kart_l //------------------------------------------------------------------------------ void SavedGrandPrix::loadKarts(std::vector & kart_list) { - //Fix aikarts int aikarts = 0; for(unsigned int i = 0; i < m_karts.size(); i++) { const KartProperties *kp = kart_properties_manager->getKart(m_karts[i].m_ident); - if(m_karts[i].m_local_player_id == -1) + if(m_karts[i].m_local_player_id == -1) // AI kart { - //AI kart found if(kp) kart_list[aikarts].m_ident = m_karts[i].m_ident; - kart_list[aikarts].m_score = m_karts[i].m_score; + kart_list[aikarts].m_score = m_karts[i].m_score; kart_list[aikarts].m_overall_time = m_karts[i].m_overall_time; aikarts++; } else { - //Get correct player + // Get correct player for(unsigned int x = kart_list.size()-m_player_karts; x < kart_list.size(); x++) { if(kart_list[x].m_local_player_id == m_karts[i].m_local_player_id) { - kart_list[x].m_score = m_karts[i].m_score; + kart_list[x].m_score = m_karts[i].m_score; kart_list[x].m_overall_time = m_karts[i].m_overall_time; } // if kart_list[x].m_local_player_id == m_karts[i].,_local } // for x diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index 840da10c7..f06f0ff0c 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -135,25 +135,19 @@ public: // ------------------------------------------------------------------------ /** Finds the right SavedGrandPrix given the specified data, or - * NULL if no matching GP was found. - */ + * NULL if no matching GP was found. */ static SavedGrandPrix* getSavedGP(unsigned int player, - const std::string &gpid, - int difficulty, int total_karts, - int player_karts) + const std::string &gpid, + const unsigned int number_of_players) { for (unsigned int n=0; ngetGPID() == gpid) && - (gp->getPlayerID() == player) && - (gp->getDifficulty() == difficulty) && - (gp->getTotalKarts() == total_karts) && - (gp->getPlayerKarts() == player_karts)){ + if (gp->getGPID() == gpid && + gp->getPlayerID() == player && + gp->getPlayerKarts() == (int)number_of_players) return gp; - } // if - } // for n + } return NULL; } // getSavedGP // ------------------------------------------------------------------------ diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 539466de3..11bdfe29b 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -279,15 +279,38 @@ void RaceManager::computeRandomKartList() void RaceManager::startNew(bool from_overworld) { m_started_from_overworld = from_overworld; + m_saved_gp = NULL; // There will be checks for this being NULL done later - if(m_major_mode==MAJOR_MODE_GRAND_PRIX) + if (m_major_mode==MAJOR_MODE_GRAND_PRIX) { // GP: get tracks, laps and reverse info from grand prix m_tracks = m_grand_prix.getTrackNames(); m_num_laps = m_grand_prix.getLaps(); m_reverse_track = m_grand_prix.getReverse(); + + // Saved GP only in offline mode + if (m_continue_saved_gp && !NetworkWorld::getInstance()->isRunning()) + { + // We look if Player 1 has a saved version of this GP. + m_saved_gp = SavedGrandPrix::getSavedGP( + StateManager::get() + ->getActivePlayerProfile(0) + ->getUniqueID(), + m_grand_prix.getId(), + m_player_karts.size()); + + if (m_saved_gp == NULL) + { + Log::error("Race Manager", "Can not continue Grand Prix '%s'" + "because it could not exist", + m_grand_prix.getId().c_str()); + m_continue_saved_gp = false; // simple and working + } else { + setNumKarts(m_saved_gp->getTotalKarts()); + setupPlayerKartInfo(); + } + } } - //assert(m_player_karts.size() > 0); // command line parameters: negative numbers=all karts if(m_num_karts < 0 ) m_num_karts = stk_config->m_max_karts; @@ -308,8 +331,8 @@ void RaceManager::startNew(bool from_overworld) race_manager->getMinorMode()==RaceManager::MINOR_MODE_FOLLOW_LEADER ? -1 : 0; - const unsigned int ai_kart_count = (unsigned int) m_ai_kart_list.size(); - for(unsigned int i=0; i()->isRunning()) // offline mode only + if (MAJOR_MODE_GRAND_PRIX) { - //We look if Player 1 has a saved version of this GP. - // ================================================= - SavedGrandPrix* gp = SavedGrandPrix::getSavedGP( StateManager::get() - ->getActivePlayerProfile(0) - ->getUniqueID(), - m_grand_prix.getId(), - m_difficulty, - m_num_karts, - (int)m_player_karts.size()); - - // Start the race with the appropriate track - // ========================================= - if(gp != NULL) + if (m_continue_saved_gp) { - if (m_continue_saved_gp) - { - m_track_number = gp->getNextTrack(); - gp->loadKarts(m_kart_status); - } - else - { - gp->remove(); - } + m_track_number = m_saved_gp->getNextTrack(); + m_saved_gp->loadKarts(m_kart_status); + } + else + { + m_track_number = 0; + m_saved_gp->remove(); } } + startNextRace(); } // startNew @@ -493,25 +501,16 @@ void RaceManager::next() { if(m_major_mode==MAJOR_MODE_GRAND_PRIX && !NetworkWorld::getInstance()->isRunning()) { - //Saving GP state - //We look if Player 1 has already saved this GP. - SavedGrandPrix* gp = - SavedGrandPrix::getSavedGP(StateManager::get() - ->getActivePlayerProfile(0) - ->getUniqueID(), - m_grand_prix.getId(), - m_difficulty, - m_num_karts, - (int)m_player_karts.size()); - if(gp != NULL) + // Saving GP state + // If Player 1 has already saved a GP, we adapt it + if(m_saved_gp != NULL) { - //if so addept it - gp->setKarts(m_kart_status); - gp->setNextTrack(m_track_number); + m_saved_gp->setKarts(m_kart_status); + m_saved_gp->setNextTrack(m_track_number); } else { - //create a new entry + // Otherwise we create a new entry UserConfigParams::m_saved_grand_prix_list.push_back( new SavedGrandPrix( StateManager::get()->getActivePlayerProfile(0) @@ -630,16 +629,8 @@ void RaceManager::exitRace(bool delete_world) PlayerManager::getCurrentPlayer()->grandPrixFinished(); if(m_major_mode==MAJOR_MODE_GRAND_PRIX&& !NetworkWorld::getInstance()->isRunning()) { - //Delete saved GP - SavedGrandPrix* gp = - SavedGrandPrix::getSavedGP(StateManager::get() - ->getActivePlayerProfile(0) - ->getUniqueID(), - m_grand_prix.getId(), - m_difficulty, - m_num_karts, - (int)m_player_karts.size()); - if(gp != NULL) gp->remove(); + if(m_saved_gp != NULL) + m_saved_gp->remove(); } StateManager::get()->resetAndGoToScreen( MainMenuScreen::getInstance() ); @@ -717,6 +708,7 @@ void RaceManager::exitRace(bool delete_world) if (delete_world) World::deleteWorld(); + m_saved_gp = NULL; m_track_number = 0; } // exitRace @@ -766,7 +758,6 @@ void RaceManager::startGP(const GrandPrixData &gp, bool from_overworld, { StateManager::get()->enterGameState(); setGrandPrix(gp); - setCoinTarget( 0 ); // Might still be set from a previous challenge race_manager->setupPlayerKartInfo(); m_continue_saved_gp = continue_saved_gp; diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 2d47aef98..5e7d9feca 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -36,6 +36,7 @@ #include "utils/vec3.hpp" class AbstractKart; +class SavedGrandPrix; class Track; static const std::string IDENT_STD ("STANDARD" ); @@ -326,6 +327,7 @@ private: std::vector m_ai_kart_list; int m_track_number; GrandPrixData m_grand_prix; + SavedGrandPrix* m_saved_gp; int m_num_karts; unsigned int m_num_finished_karts; unsigned int m_num_finished_players; @@ -410,11 +412,13 @@ public: */ void setDifficulty(Difficulty diff); + // ------------------------------------------------------------------------ + void setCoinTarget(int num) { m_coin_target = num; } // ------------------------------------------------------------------------ void setGrandPrix(const GrandPrixData &gp) { m_grand_prix = gp; - m_coin_target = 0; + setCoinTarget(0); } // ------------------------------------------------------------------------ void setAIKartOverride(const std::string& kart) @@ -453,8 +457,6 @@ public: m_ai_superpower = SUPERPOWER_NONE; } // ------------------------------------------------------------------------ - void setCoinTarget(int num) { m_coin_target = num; } - // ------------------------------------------------------------------------ void setTimeTarget(float num) { m_has_time_target = true; m_time_target = num; } /** \} */ diff --git a/src/states_screens/dialogs/gp_info_dialog.cpp b/src/states_screens/dialogs/gp_info_dialog.cpp index a283cae3c..464e9af30 100644 --- a/src/states_screens/dialogs/gp_info_dialog.cpp +++ b/src/states_screens/dialogs/gp_info_dialog.cpp @@ -203,8 +203,6 @@ void GPInfoDialog::addButtons() ->getActivePlayerProfile(0) ->getUniqueID(), m_gp.getId(), - race_manager->getDifficulty(), - race_manager->getNumberOfKarts(), race_manager->getNumLocalPlayers()); okBtn->m_properties[PROP_ID] = "start"; diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index d36133c92..8fc0c7422 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -81,7 +81,7 @@ void GPInfoScreen::loadedFromFile() // Only init the number of tracks here, this way the previously selected // number of tracks will be the default. m_num_tracks_spinner->setValue(1); - + m_ai_kart_spinner = getWidget("ai-spinner"); } // loadedFromFile @@ -97,14 +97,14 @@ void GPInfoScreen::setGP(const std::string &gp_ident) { // Doesn't matter what kind of GP we create, it just gets the // right id ("random"). - m_gp.createRandomGP(1, "standard", + m_gp.createRandomGP(1, "standard", m_reverse_spinner ? getReverse() : GrandPrixData::GP_NO_REVERSE); } } // setGP // ---------------------------------------------------------------------------- -/** Converts the currently selected reverse status into a value of type +/** Converts the currently selected reverse status into a value of type * GPReverseType . */ GrandPrixData::GPReverseType GPInfoScreen::getReverse() const @@ -130,8 +130,6 @@ void GPInfoScreen::beforeAddingWidget() SavedGrandPrix* saved_gp = SavedGrandPrix::getSavedGP( StateManager::get()->getActivePlayerProfile(0)->getUniqueID(), m_gp.getId(), - race_manager->getDifficulty(), - race_manager->getNumberOfKarts(), race_manager->getNumLocalPlayers()); RibbonWidget* ribbonButtons = getWidget("buttons"); @@ -194,10 +192,10 @@ void GPInfoScreen::init() else m_group_name = stringc(m_group_spinner->getStringValue().c_str()).c_str(); - // If there are more tracks selected atm as in the group (which can + // If there are more tracks selected atm as in the group (which can // happen if the group has been changed since last time this screen // was shown), adjust it: - int max_num_tracks = m_group_name=="all" + int max_num_tracks = m_group_name=="all" ? track_manager->getNumberOfRaceTracks() : (int)track_manager->getTracksInGroup(m_group_name).size(); m_num_tracks_spinner->setMax(max_num_tracks); @@ -207,7 +205,7 @@ void GPInfoScreen::init() } // Now create the random GP: - m_gp.createRandomGP(m_num_tracks_spinner->getValue(), + m_gp.createRandomGP(m_num_tracks_spinner->getValue(), m_group_name, getReverse(), true); } else @@ -215,7 +213,7 @@ void GPInfoScreen::init() getWidget("name")->setText(m_gp.getName(), false); m_gp.checkConsistency(); } - + // Number of AIs // ------------- const bool has_AI = race_manager->hasAI(); @@ -288,7 +286,7 @@ void GPInfoScreen::addScreenshot() m_screenshot_widget->m_h = screenshot_div->m_h; - // Temporary icon, will replace it just after + // Temporary icon, will replace it just after // (but it will be shown if the given icon is not found) m_screenshot_widget->m_properties[PROP_ICON] = "gui/main_help.png"; m_screenshot_widget->add(); @@ -336,7 +334,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, // the current track. The current value in the Number-of-tracks-spinner // has to be updated, since otherwise the displayed (and used) value // can be bigger than the maximum. (Might be a TODO to fix this) - int max_num_tracks = m_group_name=="all" + int max_num_tracks = m_group_name=="all" ? track_manager->getNumberOfRaceTracks() : (int)track_manager->getTracksInGroup(m_group_name).size(); m_num_tracks_spinner->setMax(max_num_tracks); @@ -344,7 +342,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, m_num_tracks_spinner->setValue(max_num_tracks); // Create a new (i.e. with new tracks) random gp, since the old // tracks might not all belong to the newly selected group. - + m_gp.createRandomGP(m_num_tracks_spinner->getValue(), m_group_name, getReverse(), /*new_tracks*/true); addTracks(); @@ -359,7 +357,7 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers() + num_ai; - + //Redraw scene because available buttons depend on current settings getWidget("buttons")->setSelection(0, PLAYER_ID_GAME_MASTER); reshowCurrentScreen(); From 035fc599ee1485be90eb429ead581142138112eb Mon Sep 17 00:00:00 2001 From: konstin Date: Sat, 18 Oct 2014 00:49:22 +0200 Subject: [PATCH 06/42] fix ordering of the karts and maybe some more --- src/config/saved_grand_prix.cpp | 8 ++++++++ src/config/saved_grand_prix.hpp | 5 +++-- src/race/race_manager.cpp | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index e80714edd..9059ba5cf 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -140,9 +140,15 @@ void SavedGrandPrix::setKarts(const std::vector &kart_l } } // setKarts +/* compares two KartStatus-objects for std::sort in the next function */ +bool cmp__l(RaceManager::KartStatus first, RaceManager::KartStatus second) +{ + return (first.m_score > second.m_score); +} //------------------------------------------------------------------------------ void SavedGrandPrix::loadKarts(std::vector & kart_list) { + int aikarts = 0; for(unsigned int i = 0; i < m_karts.size(); i++) { @@ -169,4 +175,6 @@ void SavedGrandPrix::loadKarts(std::vector & kart_list) } // for x } // if m_local_player_id == -1 } // for i + + std::sort(kart_list.begin(), kart_list.end(), cmp__l); } // loadKarts diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index f06f0ff0c..746132fa2 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -19,11 +19,13 @@ #ifndef HEADER_SAVED_GRAND_PRIX_HPP #define HEADER_SAVED_GRAND_PRIX_HPP -#include #include "config/user_config.hpp" #include "race/race_manager.hpp" #include "utils/ptr_vector.hpp" +#include +#include + class RaceManager; // ============================================================================ @@ -151,7 +153,6 @@ public: return NULL; } // getSavedGP // ------------------------------------------------------------------------ - }; // class SavedGrandPrix #endif diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 11bdfe29b..ee8e3d2ed 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -362,7 +362,7 @@ void RaceManager::startNew(bool from_overworld) init_gp_rank ++; } - if (MAJOR_MODE_GRAND_PRIX) + if (m_major_mode == MAJOR_MODE_GRAND_PRIX) { if (m_continue_saved_gp) { From f65ad8f84f8d699c77f946534a9d5a1af97674df Mon Sep 17 00:00:00 2001 From: konstin Date: Sat, 18 Oct 2014 20:54:25 +0200 Subject: [PATCH 07/42] Save GP reverse Type; close #1137 --- src/config/saved_grand_prix.cpp | 22 +++++++++++++--------- src/config/saved_grand_prix.hpp | 8 ++++++++ src/race/grand_prix_data.cpp | 2 ++ src/race/grand_prix_data.hpp | 18 ++++++++++++------ src/race/race_manager.cpp | 3 +++ 5 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index 9059ba5cf..0f808e642 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -68,6 +68,7 @@ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, RaceManager::Difficulty difficulty, int player_karts, int last_track, + int reverse_type, const std::vector &kart_list) : m_savedgp_group("SavedGP", "Represents the saved state of a GP"), @@ -75,7 +76,8 @@ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, m_gp_id(gp_id.c_str(), "gp_id", &m_savedgp_group), m_difficulty((int)difficulty,"difficulty", &m_savedgp_group), m_player_karts(player_karts,"player_karts", &m_savedgp_group), - m_next_track(last_track,"last_track", &m_savedgp_group) + m_next_track(last_track,"last_track", &m_savedgp_group), + m_reverse_type(reverse_type,"reverse_type", &m_savedgp_group) { for(unsigned int i =0; i < kart_list.size(); i++) { @@ -94,18 +96,20 @@ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, SavedGrandPrix::SavedGrandPrix(const XMLNode* node) : m_savedgp_group("SavedGP", "Represents the saved state of a GP"), - m_player_id(0, "player_id", &m_savedgp_group), - m_gp_id("-", "gp_id", &m_savedgp_group), - m_difficulty(0,"difficulty", &m_savedgp_group), + m_player_id (0, "player_id", &m_savedgp_group), + m_gp_id ("-", "gp_id", &m_savedgp_group), + m_difficulty (0,"difficulty", &m_savedgp_group), m_player_karts(0,"player_karts", &m_savedgp_group), - m_next_track(0,"last_track", &m_savedgp_group) + m_next_track (0,"last_track", &m_savedgp_group), + m_reverse_type(0,"reverse_type", &m_savedgp_group) { //m_player_group.findYourDataInAChildOf(node); - m_player_id.findYourDataInAnAttributeOf(node); - m_gp_id.findYourDataInAnAttributeOf(node); - m_difficulty.findYourDataInAnAttributeOf(node); + m_player_id. findYourDataInAnAttributeOf(node); + m_gp_id. findYourDataInAnAttributeOf(node); + m_difficulty. findYourDataInAnAttributeOf(node); m_player_karts.findYourDataInAnAttributeOf(node); - m_next_track.findYourDataInAnAttributeOf(node); + m_next_track. findYourDataInAnAttributeOf(node); + m_reverse_type.findYourDataInAnAttributeOf(node); std::vector karts; node->getNodes("Kart", karts); diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index 746132fa2..84b494067 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -76,6 +76,9 @@ protected: /** Index of the next to run track. */ IntUserConfigParam m_next_track; + /** GPReverseType of the GP as int */ + IntUserConfigParam m_reverse_type; + PtrVector m_karts; public: @@ -88,6 +91,7 @@ public: RaceManager::Difficulty difficulty, int player_karts, int last_track, + int reverse_type, const std::vector &kart_list); /** @@ -122,6 +126,10 @@ public: /** Returns the index of the last track finished when this GP was saved. */ int getNextTrack() const { return m_next_track; } + // ------------------------------------------------------------------------ + /** Returns the reverse Type. */ + int getReverseType() const { return m_reverse_type; } + // ------------------------------------------------------------------------ /** Sets the index of the last track finished. */ void setNextTrack(int next_track) { m_next_track = next_track; } diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index f7fac4613..e1c7d8f25 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -70,6 +70,7 @@ void GrandPrixData::createRandomGP(const unsigned int number_of_tracks, m_name = "Random Grand Prix"; m_editable = false; m_group = GP_NONE; + m_reverse_type = use_reverse; if(new_tracks) { @@ -155,6 +156,7 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, */ void GrandPrixData::changeReverse(const GrandPrixData::GPReverseType use_reverse) { + m_reverse_type = use_reverse; for (unsigned int i = 0; i < m_tracks.size(); i++) { if (use_reverse == GP_NO_REVERSE) diff --git a/src/race/grand_prix_data.hpp b/src/race/grand_prix_data.hpp index 81f9d7726..0a2c617ad 100644 --- a/src/race/grand_prix_data.hpp +++ b/src/race/grand_prix_data.hpp @@ -94,6 +94,9 @@ public: GP_DEFAULT_REVERSE = 3 }; // GPReverseType +private: + GPReverseType m_reverse_type; + public: #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) # pragma warning(disable:4290) @@ -145,22 +148,25 @@ public: // ------------------------------------------------------------------------ /** @return the (potentially translated) user-visible name of the Grand * Prix (apply fribidi as needed) */ - irr::core::stringw getName() const { return _LTR(m_name.c_str()); } + irr::core::stringw getName() const { return _LTR(m_name.c_str()); } // ------------------------------------------------------------------------ /** @return the internal indentifier of the Grand Prix (not translated) */ - const std::string& getId() const { return m_id; } + const std::string& getId() const { return m_id; } // ------------------------------------------------------------------------ /** Returns true if this GP is a random GP. */ - bool isRandomGP() const { return m_id=="random"; } + bool isRandomGP() const { return m_id=="random"; } // ------------------------------------------------------------------------ /** Returns the filename of the grand prix xml file. */ - const std::string& getFilename() const { return m_filename; } + const std::string& getFilename() const { return m_filename; } // ------------------------------------------------------------------------ - /** Returns the group. */ - enum GPGroupType getGroup() const { return m_group; } + enum GPGroupType getGroup() const { return m_group; } + + // ------------------------------------------------------------------------ + enum GPReverseType getReverseType() + const { return m_reverse_type; } }; // GrandPrixData #endif diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index ee8e3d2ed..173ce1f4a 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -308,6 +308,8 @@ void RaceManager::startNew(bool from_overworld) } else { setNumKarts(m_saved_gp->getTotalKarts()); setupPlayerKartInfo(); + m_grand_prix.changeReverse((GrandPrixData::GPReverseType)m_saved_gp->getReverseType()); + m_reverse_track = m_grand_prix.getReverse(); } } } @@ -519,6 +521,7 @@ void RaceManager::next() m_difficulty, (int)m_player_karts.size(), m_track_number, + m_grand_prix.getReverseType(), m_kart_status ) ); From 4647a50acb970fb051637876523f569d14026600 Mon Sep 17 00:00:00 2001 From: konstin Date: Sat, 18 Oct 2014 21:07:54 +0200 Subject: [PATCH 08/42] Save GP on abort --- src/race/race_manager.cpp | 35 +++++++++++++++----------- src/race/race_manager.hpp | 7 ++++-- src/states_screens/race_result_gui.cpp | 1 + 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 173ce1f4a..30bb79908 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -492,7 +492,6 @@ void RaceManager::startNextRace() } // startNextRace //----------------------------------------------------------------------------- - void RaceManager::next() { World::deleteWorld(); @@ -509,24 +508,12 @@ void RaceManager::next() { m_saved_gp->setKarts(m_kart_status); m_saved_gp->setNextTrack(m_track_number); + user_config->saveConfig(); } else { - // Otherwise we create a new entry - UserConfigParams::m_saved_grand_prix_list.push_back( - new SavedGrandPrix( - StateManager::get()->getActivePlayerProfile(0) - ->getUniqueID(), - m_grand_prix.getId(), - m_difficulty, - (int)m_player_karts.size(), - m_track_number, - m_grand_prix.getReverseType(), - m_kart_status - ) - ); + saveGP(); } - user_config->saveConfig(); } startNextRace(); } @@ -536,6 +523,24 @@ void RaceManager::next() } } // next +//----------------------------------------------------------------------------- +void RaceManager::saveGP() +{ + UserConfigParams::m_saved_grand_prix_list.push_back( + new SavedGrandPrix( + StateManager::get()->getActivePlayerProfile(0) + ->getUniqueID(), + m_grand_prix.getId(), + m_difficulty, + (int)m_player_karts.size(), + m_track_number, + m_grand_prix.getReverseType(), + m_kart_status + ) + ); + user_config->saveConfig(); +} + //----------------------------------------------------------------------------- /** This class is only used in computeGPRanks, but the C++ standard diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 5e7d9feca..e53956fc9 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -685,8 +685,11 @@ public: * \brief Higher-level method to start a GP without having to care about * the exact startup sequence */ - void startGP(const GrandPrixData &gp, bool from_overworld, - bool continue_saved_gp); + void startGP(const GrandPrixData &gp, bool from_overworld, + bool continue_saved_gp); + + /** Saves the current GP to the config */ + void saveGP(); /** * \brief Higher-level method to start a GP without having to care about diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index c618274c3..e9153d64f 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -393,6 +393,7 @@ void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, void RaceResultGUI::onConfirm() { + race_manager->saveGP(); // Save the aborted GP GUIEngine::ModalDialog::dismiss(); cleanupGPProgress(); StateManager::get()->popMenu(); From 321f0e7078223ebe1de8ce0195ee3169319e0d50 Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 20 Oct 2014 23:19:20 +0200 Subject: [PATCH 09/42] Remove saved GP when we start new race. Avoid a crash. Saved GP was deleted, but was not NULL. And in other place we have if(m_saved_gp != NULL) check, which was true for deleted object. --- src/race/race_manager.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 30bb79908..19e14a812 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -288,24 +288,26 @@ void RaceManager::startNew(bool from_overworld) m_num_laps = m_grand_prix.getLaps(); m_reverse_track = m_grand_prix.getReverse(); + // We look if Player 1 has a saved version of this GP. + m_saved_gp = SavedGrandPrix::getSavedGP( + StateManager::get() + ->getActivePlayerProfile(0) + ->getUniqueID(), + m_grand_prix.getId(), + m_player_karts.size()); + // Saved GP only in offline mode if (m_continue_saved_gp && !NetworkWorld::getInstance()->isRunning()) { - // We look if Player 1 has a saved version of this GP. - m_saved_gp = SavedGrandPrix::getSavedGP( - StateManager::get() - ->getActivePlayerProfile(0) - ->getUniqueID(), - m_grand_prix.getId(), - m_player_karts.size()); - if (m_saved_gp == NULL) { Log::error("Race Manager", "Can not continue Grand Prix '%s'" "because it could not exist", m_grand_prix.getId().c_str()); m_continue_saved_gp = false; // simple and working - } else { + } + else + { setNumKarts(m_saved_gp->getTotalKarts()); setupPlayerKartInfo(); m_grand_prix.changeReverse((GrandPrixData::GPReverseType)m_saved_gp->getReverseType()); @@ -364,6 +366,7 @@ void RaceManager::startNew(bool from_overworld) init_gp_rank ++; } + m_track_number = 0; if (m_major_mode == MAJOR_MODE_GRAND_PRIX) { if (m_continue_saved_gp) @@ -371,10 +374,10 @@ void RaceManager::startNew(bool from_overworld) m_track_number = m_saved_gp->getNextTrack(); m_saved_gp->loadKarts(m_kart_status); } - else + else if (m_saved_gp != NULL) { - m_track_number = 0; m_saved_gp->remove(); + m_saved_gp = NULL; } } From 04933af4b05e87c4469aa6f14185f409fa50f099 Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 20 Oct 2014 23:45:06 +0200 Subject: [PATCH 10/42] Redrawing GP info screen is not needed now. --- src/states_screens/gp_info_screen.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/states_screens/gp_info_screen.cpp b/src/states_screens/gp_info_screen.cpp index 8fc0c7422..db587f75c 100644 --- a/src/states_screens/gp_info_screen.cpp +++ b/src/states_screens/gp_info_screen.cpp @@ -357,11 +357,6 @@ void GPInfoScreen::eventCallback(Widget *, const std::string &name, const int num_ai = m_ai_kart_spinner->getValue(); race_manager->setNumKarts( race_manager->getNumLocalPlayers() + num_ai ); UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers() + num_ai; - - //Redraw scene because available buttons depend on current settings - getWidget("buttons")->setSelection(0, PLAYER_ID_GAME_MASTER); - reshowCurrentScreen(); - m_ai_kart_spinner->setFocusForPlayer(PLAYER_ID_GAME_MASTER); } else if(name=="back") { From 8d9f1aa002d5012e0c0f24831469e8b0dda0c608 Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 21 Oct 2014 08:48:21 +1100 Subject: [PATCH 11/42] Renamed SoundToggled to toggleSound. --- src/audio/sfx_manager.cpp | 4 ++-- src/audio/sfx_manager.hpp | 2 +- src/states_screens/options_screen_audio.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 41017e290..1a8ad86fc 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -321,7 +321,7 @@ void* SFXManager::mainLoop(void *obj) * resumes all sound effects. * \param on If sound is switched on or off. */ -void SFXManager::soundToggled(const bool on) +void SFXManager::toggleSound(const bool on) { // When activating SFX, load all buffers if (on) @@ -357,7 +357,7 @@ void SFXManager::soundToggled(const bool on) m_all_sfx.unlock(); pauseAll(); } -} // soundToggled +} // toggleSound //---------------------------------------------------------------------------- /** Returns if sfx can be played. This means sfx are enabled and diff --git a/src/audio/sfx_manager.hpp b/src/audio/sfx_manager.hpp index 7bcf9efce..01cbf0038 100644 --- a/src/audio/sfx_manager.hpp +++ b/src/audio/sfx_manager.hpp @@ -234,7 +234,7 @@ public: SFXBase* quickSound(const std::string &soundName); /** Called when sound was muted/unmuted */ - void soundToggled(const bool newValue); + void toggleSound(const bool newValue); // ------------------------------------------------------------------------ /** Prints the list of currently loaded sounds to stdout. Useful to diff --git a/src/states_screens/options_screen_audio.cpp b/src/states_screens/options_screen_audio.cpp index c3cfc751b..819a38a0d 100644 --- a/src/states_screens/options_screen_audio.cpp +++ b/src/states_screens/options_screen_audio.cpp @@ -163,7 +163,7 @@ void OptionsScreenAudio::eventCallback(Widget* widget, const std::string& name, CheckBoxWidget* w = dynamic_cast(widget); UserConfigParams::m_sfx = w->getState(); - SFXManager::get()->soundToggled(UserConfigParams::m_sfx); + SFXManager::get()->toggleSound(UserConfigParams::m_sfx); if (UserConfigParams::m_sfx) { From 2e27d8724ae0147591a7de19b2da4a1fcaec8a3a Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 21 Oct 2014 00:35:25 +0200 Subject: [PATCH 12/42] Add a script that computes IBL factors --- tools/ibl.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 tools/ibl.py diff --git a/tools/ibl.py b/tools/ibl.py new file mode 100644 index 000000000..f90383b81 --- /dev/null +++ b/tools/ibl.py @@ -0,0 +1,51 @@ +import Image as img +import numpy as np +import pylab as pl + +n = 4 + +# constant factor of Ylm +c00 = 0.282095 +c1minus1 = 0.488603 +c10 = 0.488603 +c11 = 0.488603 +c2minus2 = 1.092548 +c2minus1 = 1.092548 +c21 = 1.092548 +c20 = 0.315392 +c22 = 0.546274 + +def computeYmlOnGrid(Xgrid, Ygrid, Zgrid): + "compute Yml from Y00 to Y22 on Xgrid/Ygrid/Zgrid" + "Xgrid/Ygrid/Zgrid must be normalised" + Y00 = c00 + Y1minus1 = c1minus1 * Ygrid + Y10 = c10 * Zgrid + Y11 = c11 * Xgrid + Y2minus2 = c2minus2 * Xgrid * Ygrid + Y2minus1 = c2minus1 * Ygrid * Zgrid + Y21= c21 * Xgrid * Zgrid + Y20 = c20 * (3 * Zgrid * Zgrid - 1) + Y22 = c22 * (Xgrid * Xgrid - Ygrid * Ygrid) + return (Y00, Y1minus1, Y10, Y11, Y2minus2, Y2minus1, Y20, Y21, Y22) + + +Grid0, Grid1 = np.meshgrid(np.linspace(-1, 1, n), np.linspace(-1, 1, n)) + +FaceGrid = [(np.ones((n,n)), Grid0, Grid1), #GL_TEXTURE_CUBE_MAP_POSITIVE_X + (-1 * np.ones((n,n)), Grid0, Grid1), #GL_TEXTURE_CUBE_MAP_NEGATIVE_X + (Grid0, np.ones((n,n)), Grid1), #GL_TEXTURE_CUBE_MAP_POSITIVE_Y + (Grid0, -1 * np.ones((n,n)), Grid1), #GL_TEXTURE_CUBE_MAP_NEGATIVE_Y + (Grid0, Grid1, np.ones((n,n))), #GL_TEXTURE_CUBE_MAP_POSITIVE_Z + (Grid0, Grid1, -1 * np.ones((n,n)))] #GL_TEXTURE_CUBE_MAP_NEGATIVE_Z + +res = [] +for (Xd, Yd, Zd) in FaceGrid: + res.append(computeYmlOnGrid(Xd, Yd, Zd)) + +print(res) + +I = img.open("C:/Users/vljn_000/Documents/GitHub/stk-assets/textures/ants.png") +m = np.array(I) +print(type(m)) +pl.imshow(m) From 0025f908db7fd236d775b0dfa905cc1624ffb88c Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 20 Oct 2014 20:38:37 -0400 Subject: [PATCH 13/42] Add cleanup post-minimap-RTT. Appears to fix #1470 . Hard to know for sure since this bug is random :( --- src/tracks/quad_graph.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tracks/quad_graph.cpp b/src/tracks/quad_graph.cpp index a8198cdd1..638608adc 100644 --- a/src/tracks/quad_graph.cpp +++ b/src/tracks/quad_graph.cpp @@ -1104,6 +1104,13 @@ void QuadGraph::makeMiniMap(const core::dimension2du &dimension, *newRttMinimap = frame_buffer; World::getWorld()->setClearbackBufferColor(oldClearColor); World::getWorld()->forceFogDisabled(false); + + irr_driver->getSceneManager()->clear(); + VAOManager::kill(); + irr_driver->clearGlowingNodes(); + irr_driver->clearLights(); + irr_driver->clearForcedBloom(); + irr_driver->clearBackgroundNodes(); } // makeMiniMap //----------------------------------------------------------------------------- From 690ad4ce95024b44878ec391e4d1b756a210521a Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 21 Oct 2014 22:07:22 +1100 Subject: [PATCH 14/42] Fixed sfx direction. --- src/audio/sfx_manager.cpp | 6 +++--- src/audio/sfx_openal.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 1a8ad86fc..03261862c 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -814,15 +814,15 @@ void SFXManager::reallyPositionListenerNow() float orientation[6]; orientation[0] = m_listener_front.getX(); orientation[1] = m_listener_front.getY(); - orientation[2] = m_listener_front.getZ(); + orientation[2] = -m_listener_front.getZ(); //up vector orientation[3] = m_listener_up.getX(); orientation[4] = m_listener_up.getY(); - orientation[5] = m_listener_up.getZ(); + orientation[5] = -m_listener_up.getZ(); const Vec3 &pos = m_listener_position.getData(); - alListener3f(AL_POSITION, pos.getX(), pos.getY(), pos.getZ()); + alListener3f(AL_POSITION, pos.getX(), pos.getY(), -pos.getZ()); alListenerfv(AL_ORIENTATION, orientation); } m_listener_position.unlock(); diff --git a/src/audio/sfx_openal.cpp b/src/audio/sfx_openal.cpp index ef8046ee0..1d676410a 100644 --- a/src/audio/sfx_openal.cpp +++ b/src/audio/sfx_openal.cpp @@ -410,8 +410,8 @@ void SFXOpenAL::reallySetPosition(const Vec3 &position) return; } - alSource3f(m_sound_source, AL_POSITION, (float)position.getX(), - (float)position.getY(), (float)position.getZ()); + alSource3f(m_sound_source, AL_POSITION, position.getX(), + position.getY(), -position.getZ()); if (SFXManager::get()->getListenerPos().distance(position) > m_sound_buffer->getMaxDist()) From c012e98f9b17b7f88333851182d0332371bc739e Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 22 Oct 2014 08:20:26 +1100 Subject: [PATCH 15/42] Allow disabling of hw stats collection. --- data/gui/options_ui.stkgui | 11 +++++-- src/config/hardware_stats.cpp | 3 ++ src/config/user_config.hpp | 6 ++++ src/main.cpp | 9 ++++-- src/states_screens/options_screen_ui.cpp | 39 ++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/data/gui/options_ui.stkgui b/data/gui/options_ui.stkgui index 5e411fba1..266ace0f6 100644 --- a/data/gui/options_ui.stkgui +++ b/data/gui/options_ui.stkgui @@ -33,6 +33,12 @@