00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VEE_OPERATOR_RANDOM_H
00021 #define VEE_OPERATOR_RANDOM_H
00022
00023 #include <vee_object.h>
00024 #include <vee_operator.h>
00025
00026 #include <vector>
00027
00028 enum VEE_MathOperation {
00029 VEE_MATH_NONE,
00030 VEE_MATH_ADD,
00031 VEE_MATH_SUBTRACT,
00032 VEE_MATH_MULTIPLY,
00033 VEE_MATH_DIVIDE,
00034 VEE_MATH_SIZEOF
00035 };
00036
00037 template <class T>
00038 class VEE_OperatorRandomSelect : public VEE_Operator
00039 {
00040 public:
00041 VEE_OperatorRandomSelect();
00042 virtual ~VEE_OperatorRandomSelect();
00043 virtual void operate(VEE_Object *, float);
00044 virtual VEE_Operator * clone() const;
00045
00046 void addValue(T v);
00047 bool removeValue(T v);
00048 int find(T v);
00049
00050 void setId(const std::string &id) { m_id = id; }
00051
00052 inline void deliver(VEE_Object *o, const T &);
00053
00054 protected:
00055 std::vector<T> m_values;
00056 std::string m_id;
00057 };
00058
00061
00062 class VEE_OperatorRandomSphereVector : public VEE_Operator
00063 {
00064 public:
00065 VEE_OperatorRandomSphereVector();
00066 virtual ~VEE_OperatorRandomSphereVector();
00067 virtual void operate(VEE_Object *, float);
00068 virtual VEE_Operator * clone() const;
00069
00070 virtual bool setValue(const char *, VEE_Value *);
00071
00072 void setId(const std::string &id) { m_id = id; }
00073 void setRadius(float r) { m_radius = r; }
00074
00075 protected:
00076 std::string m_id;
00077 float m_radius;
00078 };
00079
00082
00083 class VEE_OperatorRandomFloat : public VEE_Operator
00084 {
00085 public:
00086 VEE_OperatorRandomFloat();
00087 virtual ~VEE_OperatorRandomFloat();
00088 virtual void operate(VEE_Object *, float);
00089 virtual VEE_Operator * clone() const;
00090
00091 virtual bool setValue(const char *, VEE_Value *);
00092
00093 void setId(const std::string &id) { m_id = id; }
00094 void setRadius(float r) { m_radius = r; }
00095 void setOperation(VEE_MathOperation op) { m_operation = op; }
00096
00097 protected:
00098 std::string m_id;
00099 float m_radius;
00100 VEE_MathOperation m_operation;
00101 };
00102
00105
00106 class VEE_OperatorPerlinVector : public VEE_Operator
00107 {
00108 public:
00109 VEE_OperatorPerlinVector();
00110 virtual ~VEE_OperatorPerlinVector();
00111 virtual void operate(VEE_Object *, float);
00112 virtual VEE_Operator * clone() const;
00113
00114 virtual bool setValue(const char *, VEE_Value *);
00115
00116 void setId(const std::string &id) { m_id = id; }
00117 void setScale(const VEE_Vector3 & s) { m_scale = s; }
00118 void setOperation(VEE_MathOperation op) { m_operation = op; }
00119
00120 protected:
00121 std::string m_id;
00122 VEE_Vector3 m_scale;
00123 VEE_MathOperation m_operation;
00124 };
00125
00126 #endif