From d76d07c13879cfcc793a00be364cb80d2f70a398 Mon Sep 17 00:00:00 2001 From: w1z7ard Date: Mon, 25 Jun 2007 02:43:27 +0000 Subject: [PATCH] - some prototype stubs in PresetFilters, where merge stuff will prob go - minor work / review of preset switcher git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/personal/carm/dev-1.0@225 6778bc44-b910-0410-a7a0-be141de4315d --- src/projectM-engine/Parser.cpp | 8 ++--- src/projectM-engine/PresetFilters.hpp | 42 ++++++++++++++++++++++++++ src/projectM-engine/PresetFrameIO.hpp | 2 +- src/projectM-engine/PresetSwitcher.hpp | 38 ++++++++++++++--------- 4 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 src/projectM-engine/PresetFilters.hpp diff --git a/src/projectM-engine/Parser.cpp b/src/projectM-engine/Parser.cpp index 7c1db6b15..88c6137da 100755 --- a/src/projectM-engine/Parser.cpp +++ b/src/projectM-engine/Parser.cpp @@ -374,13 +374,11 @@ int Parser::parse_line(FILE * fs, Preset * preset) { if (update_string_buffer(preset->per_frame_eqn_string_buffer, &preset->per_frame_eqn_string_index) < 0) return PROJECTM_FAILURE; - - - + return PROJECTM_SUCCESS; - + } - + /* Wavecode initial condition case */ if (!strncmp(eqn_string, WAVECODE_STRING, WAVECODE_STRING_LENGTH)) { diff --git a/src/projectM-engine/PresetFilters.hpp b/src/projectM-engine/PresetFilters.hpp new file mode 100644 index 000000000..49dcfa7ca --- /dev/null +++ b/src/projectM-engine/PresetFilters.hpp @@ -0,0 +1,42 @@ +#ifndef PRESET_FILTERS_HPP +#define PRESET_FILTERS_HPP +#include "Preset.hpp" +/// This is probably where merging stuff will be placed +/// ISSUE: merge presets or just PresetInputs? +class PresetFilters { + +/// The merge functor decides how to put the presets together. +/// Assumes getMergedPreset() is implemented. +/// A sample is below +class LinearMergeFunctor { + +public: + LinearMergeFunctor(Preset & presetAB):m_alpha(0), m_presetAB(presetAB) {} + + void operator() (const Preset & presetA, const Preset & presetB) { + ; + } + + Preset & getMergedPreset() { + return m_presetAB; + } + + void setAlpha(float alpha) { + m_alpha = alpha; + } + +private: + float m_alpha; + Preset & m_presetAB; + +}; + +template +static void merge(const Preset & presetA, const Preset & presetB, MergeFunctor & functor); + + + + +}; + +#endif diff --git a/src/projectM-engine/PresetFrameIO.hpp b/src/projectM-engine/PresetFrameIO.hpp index 1efe5ca73..f46f8b787 100644 --- a/src/projectM-engine/PresetFrameIO.hpp +++ b/src/projectM-engine/PresetFrameIO.hpp @@ -6,7 +6,7 @@ class CustomWave; class CustomShape; typedef std::vector cwave_container; - typedef std::vector cshape_container; +typedef std::vector cshape_container; /** Container for all preset writeable engine variables. It's a struct * so that it's light weight. Access is done directly on diff --git a/src/projectM-engine/PresetSwitcher.hpp b/src/projectM-engine/PresetSwitcher.hpp index 7c431e226..7ed36c85b 100644 --- a/src/projectM-engine/PresetSwitcher.hpp +++ b/src/projectM-engine/PresetSwitcher.hpp @@ -1,7 +1,22 @@ +/** PresetSwitcher.hpp: + * This class is a WIP that provides methods to load presets, switch presets, and + * merge them. The user of this class decides when / how to switch by calling functions + * of this class at the appropriate times in the renderer. + * DECISION: Merging / etc. goes in PresetFilters.hpp! Loading goes in here, switching goes in here + */ + +/// More specifically, we need to +/// (1) load presets from a path(s) +/// (2) set which preset is the "active" presets +/// (3) merge two presets together - probably doesn't belong in this class +/// how about another class called PresetFilters? + + +/// @idea Weighted random based on user stats + #ifndef PRESET_SWITCHER_HPP #define PRESET_SWITCHER_HPP #include "Preset.hpp" - #include "projectM.h" typedef enum { @@ -12,24 +27,19 @@ typedef enum { } switch_mode_t; -typedef enum { -SOFT_CUT, -HARD_CUT -} cut_type; - class PresetSwitcher { public: /** Preset switching */ - static int loadPresetDir( char *dir ); - static int closePresetDir(); - static int switchPreset( switch_mode_t switch_mode, int cut_type ); - static void switchToIdlePreset(); - static int loadPresetByFile( char *filename ); - static int initPresetLoader(); - static int destroyPresetLoader(); -int is_valid_extension(const struct dirent* ent); + int loadPresetDir( char *dir ); + int closePresetDir(); + int switchPreset( switch_mode_t switch_mode, int cut_type ); + int loadPresetByFile( char *filename ); + int initPresetLoader(); + int destroyPresetLoader(); + static int is_valid_extension(const struct dirent* ent); + /* destroyPresetLoader: closes the preset loading library. This should be done when PresetSwitcher does cleanup */