some touch up and empty() function added to preset chooser

git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/dev-1.0@330 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
w1z7ard
2007-08-14 22:35:58 +00:00
parent 1d189aac2e
commit 0b725cc4d2
2 changed files with 18 additions and 3 deletions

View File

@ -121,6 +121,11 @@ public:
template <class WeightFunctor>
std::auto_ptr<Preset> weightedRandom(const PresetInputs & presetInputs, PresetOutputs & preseOutputs);
/// True if no presets in directory
bool empty() const;
private:
template <class WeightFunctor>
std::auto_ptr<Preset> doWeightedSample(WeightFunctor & weightFunctor, const PresetInputs & presetInputs, PresetOutputs & presetOutputs);
@ -191,6 +196,11 @@ std::auto_ptr<Preset> PresetChooser::weightedRandom(const PresetInputs & presetI
return doWeightedSample(weightFunctor);
}
inline bool PresetChooser::empty() const {
return m_presetLoader->getNumPresets() == 0;
}
template <class WeightFunctor>
inline std::auto_ptr<Preset> PresetChooser::weightedRandom(const PresetInputs & presetInputs, PresetOutputs & presetOutputs){
@ -202,7 +212,7 @@ inline std::auto_ptr<Preset> PresetChooser::weightedRandom(const PresetInputs &
inline std::auto_ptr<Preset> PresetChooser::directoryIndex(std::size_t index, const PresetInputs & presetInputs,
PresetOutputs & presetOutputs) const {
return m_presetLoader->loadPreset(index,presetInputs, presetOutputs);
return m_presetLoader->loadPreset(index, presetInputs, presetOutputs);
}
template <class WeightFunctor>

View File

@ -169,7 +169,6 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
if (((*m_presetPos) == m_presetChooser->end())) {
*m_presetPos = m_presetChooser->begin();
}
m_activePreset = std::auto_ptr<Preset>(0);
m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs);
@ -178,13 +177,19 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
break;
case PROJECTM_K_r:
if (m_presetChooser->empty())
break;
m_activePreset = m_presetChooser->weightedRandom<PresetChooser::UniformRandomFunctor>
(this->presetInputs, this->presetOutputs);
presetInputs.frame = 0;
smoothFrame = 0;
break;
case PROJECTM_K_p:
if (m_presetChooser->empty())
break;
if (*m_presetPos != m_presetChooser->begin()) {
--(*m_presetPos);
} else {