blob: a951fedebfb1da8752eaca11abe98161a62df645 [file] [log] [blame]
/**
* projectM -- Milkdrop-esque visualisation SDK
* Copyright (C)2003-2007 projectM Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* See 'LICENSE.txt' included within this release
*
*/
/**
* $Id$
*
* Encapsulation of a custom wave
*
* $Log$
*/
#ifndef _CUSTOM_WAVE_H
#define _CUSTOM_WAVE_H
#define CUSTOM_WAVE_DEBUG 0
class CustomWave;
class GenExpr;
class PerPointEqn;
class Preset;
#include <vector>
#include "Common.hpp"
#include "Param.hpp"
#include "PerFrameEqn.hpp"
#include "Renderer/Waveform.hpp"
#include <map>
class CustomWave : public Waveform
{
public:
/** Empty constructor leaves wave in undefined state **/
//CustomWave() {}
/** Initializes a custom wave id given the integer id */
CustomWave(int id);
/** Destructor is necessary so we can free the per point matrices **/
~CustomWave();
ColoredPoint PerPoint(ColoredPoint p, const WaveformContext context);
/* Numerical id */
int id;
int per_frame_count;
/* Parameter tree associated with this custom wave */
std::map<std::string,Param*> param_tree;
/* Engine variables */
float x; /* x position for per point equations */
float y; /* y position for per point equations */
float r; /* red color value */
float g; /* green color value */
float b; /* blue color value */
float a; /* alpha color value */
float * x_mesh;
float * y_mesh;
float * r_mesh;
float * b_mesh;
float * g_mesh;
float * a_mesh;
float * value1;
float * value2;
float * sample_mesh;
bool enabled; /* if true then wave is visible, hidden otherwise */
float sample;
/* stupid t variables */
float t1;
float t2;
float t3;
float t4;
float t5;
float t6;
float t7;
float t8;
/* stupider q variables */
float q[NUM_Q_VARIABLES];
float v1,v2;
/* Data structures to hold per frame and per point equations */
std::map<std::string,InitCond*> init_cond_tree;
std::vector<PerFrameEqn*> per_frame_eqn_tree;
std::vector<PerPointEqn*> per_point_eqn_tree;
std::map<std::string,InitCond*> per_frame_init_eqn_tree;
/* Denotes the index of the last character for each string buffer */
int per_point_eqn_string_index;
int per_frame_eqn_string_index;
int per_frame_init_eqn_string_index;
int add_per_point_eqn(char * name, GenExpr * gen_expr);
void evalCustomWaveInitConditions(Preset *preset);
void loadUnspecInitConds();
void evalInitConds();
};
#endif /** !_CUSTOM_WAVE_H */