00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __OBJ_Sound__
00021 #define __OBJ_Sound__
00022
00023 #include "OBJ_API.h"
00024 #include "OBJ_Geometry.h"
00025
00026 enum OBJ_SoundIndex
00027 {
00028 I_SOUND_ACTIVE = I_N_GEO_INDICES,
00029 I_SOUND_VOLUME,
00030 I_SOUND_TYPE,
00031 I_SOUND_CONE,
00032 I_SOUND_OUTER_CONE,
00033 I_SOUND_DROPOFF,
00034 I_SOUND_DROPOFF_RATE,
00035 I_SOUND_OUTER_VOLUME,
00036 I_CHOP_SOURCEPATH,
00037 I_N_SOUND_INDICES
00038 };
00039
00040
00041 #define FLOAT_PARM(name, idx, vi, t) \
00042 return evalFloat(name, &handleIndirect[idx], vi, t);
00043 #define INT_PARM(name, idx, vi, t) \
00044 return evalInt(name, &handleIndirect[idx], vi, t);
00045 #define STR_PARM(name, idx, vi, t) \
00046 evalString(str, name, &handleIndirect[idx], vi, (float)t);
00047
00048 class OBJ_API OBJ_Sound : public OBJ_Geometry
00049 {
00050 public:
00051 OBJ_Sound(OP_Network *net,
00052 const char *name,
00053 OP_Operator *op);
00054 virtual ~OBJ_Sound();
00055
00056 static OP_Node *myConstructor(OP_Network *net,
00057 const char *name,
00058 OP_Operator *entry);
00059
00060 virtual OBJ_OBJECT_TYPE getObjectType() const;
00061
00062 virtual unsigned disableParms();
00063
00064 void getSoundSource(UT_String &choppath, fpreal t);
00065 int isDirectional() { return EMISSION_TYPE(); }
00066 int getRolloffType() { return DROPOFF(); }
00067 void getSoundParms(int &active,
00068 float &volume, float &volume2,
00069 float &angle1, float &angle2,
00070 float &rolloff, float t);
00071
00072 virtual void resolveObsoleteParms(PRM_ParmList *obsolete);
00073 static PRM_Template *getObsolete();
00074 static PRM_Template *getTemplateList();
00075 protected:
00076
00077 virtual OP_ERROR cookMyObj(OP_Context &context);
00078
00079 virtual int *getIndirect() const
00080 { return handleIndirect; }
00081
00082 private:
00083
00084 int ACTIVE(float t)
00085 { INT_PARM("soundactive", I_SOUND_ACTIVE, 0, t); }
00086
00087 float VOLUME(float t)
00088 { FLOAT_PARM("volume", I_SOUND_VOLUME, 0, t); }
00089
00090 int EMISSION_TYPE()
00091 { INT_PARM("direct", I_SOUND_TYPE, 0, 0); }
00092
00093 float EMISSION_CONE(float t)
00094 { FLOAT_PARM("emitcone", I_SOUND_CONE, 0, t); }
00095
00096 float OUTER_CONE(float t)
00097 { FLOAT_PARM("outcone", I_SOUND_OUTER_CONE, 0, t); }
00098
00099 int DROPOFF()
00100 { INT_PARM("dropoff", I_SOUND_DROPOFF, 0, 0); }
00101
00102 float DROPOFF_RATE(float t)
00103 { FLOAT_PARM("droprate", I_SOUND_DROPOFF_RATE, 0, t); }
00104
00105 float OUTER_VOLUME(float t)
00106 { FLOAT_PARM("outvolume", I_SOUND_OUTER_VOLUME, 0, t); }
00107
00108 public:
00109 virtual int isObjectRenderable() const;
00110
00111 private:
00112 static int *handleIndirect;
00113 };
00114
00115 #undef FLOAT_PARM
00116 #undef STR_PARM
00117 #undef INT_PARM
00118
00119 #endif