00001 /*! \file 00002 \author victorien ferry & www.m4nkind.com 00003 \brief This file applies the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1 , read file COPYING. 00004 */ 00005 #ifndef COM_M4NKIND_PackDynamicFloat_H 00006 #define COM_M4NKIND_PackDynamicFloat_H 00007 00008 #include "PackDynamicType.h" 00009 #include "PackFloat_FixedPoint.h" 00010 #include "PackFloat.h" 00011 #include "PackObjectReference.h" 00012 /*! 00013 \class PackDynamicFloat 00014 \brief Base type that lets you choose between a constant scalar expression or a reference to an equation. 00015 It supports 1,2 or 3 vector like PackFloat, but is not extended from packfloat. 00016 */ 00017 class PackDynamicFloat : public PackDynamicType 00018 { 00019 /*================================================================== 00020 PUBLIC 00021 ==================================================================*/ 00022 public: 00023 /*! 00024 \brief Constructor. There should only be initialisation there. 00025 \param _DimensionEnum the dimension of the value.:(1,2,3,4) PackFloat::vd_... 00026 */ 00027 PackDynamicFloat( PackFloat::VectorDimension _DimensionEnum); 00028 #ifdef _ENGINE_EDITABLE_ 00029 /*! 00030 \brief editable mode accesor, that force a constant type, and its value. 00031 \param _value the new value. 00032 \param _dimensionIndex of the dimension affected. 0 is default. 00033 */ 00034 void SetConstant(float _value,unsigned int _dimensionIndex=0); 00035 #endif 00036 /*! 00037 \brief Compute 1,2,3 or 4 value according to a parameter list (X,Y,Z,D). 00038 An equation can manage one or more dimensions on input and output. 00039 the unused output parameters are left untouch, so that you 00040 can set your default values there. 00041 Note this version is not virtual, because there is no reason for extension a prioris. 00042 \param _OutgoingParameterTable result table. elements are writen or not according to the equation. 00043 \param _IncomingParameterTable. float table, the (X,Y,Z,D) parameters. 00044 */ 00045 void Compute( float _OutgoingParameterTable[4] , const float _IncomingParameterTable[4] ); 00046 00047 /*================================================================== 00048 PROTECTED 00049 ==================================================================*/ 00050 protected: 00051 //! the optionnal constant, valid if PackDynamicType selected. 00052 PackFloat mSer_Constant; 00053 //! the optional reference to an equation, valid if PackDynamicType selected. 00054 PackObjectReference mSer_EquationReference; 00055 00056 //! the number of Dimension managed if PackFloat was initialized as a vector 00057 const unsigned int m_NumberOfDimensionManaged; 00058 }; 00059 /*! 00060 \def REGISTER_MEMBER_PACKDYNAMICFLOAT 00061 00062 \brief This macro is used to register a serializable member in a class constructor. 00063 For editable mode, it uses _MemberName to explicit the use of the member, in order 00064 to display it in a GUI for example. 00065 00066 */ 00067 #ifdef _ENGINE_EDITABLE_ 00068 #define REGISTER_MEMBER_PACKDYNAMICFLOAT(_object,_MemberName,_DefaultVal) \ 00069 RegisterSerializableMember(_object);\ 00070 _object.SetMemberName( _MemberName );\ 00071 _object.SetConstant(_DefaultVal,0);\ 00072 _object.SetConstant(_DefaultVal,1);\ 00073 _object.SetConstant(_DefaultVal,2); 00074 #else 00075 #define REGISTER_MEMBER_PACKDYNAMICFLOAT(_object,_MemberName,_DefaultVal) \ 00076 RegisterSerializableMember(_object); 00077 #endif 00078 /*! 00079 \def REGISTER_MEMBER_PACKDYNAMICFLOAT_XY 00080 00081 \brief This macro is used to register a serializable member in a class constructor. 00082 For editable mode, it uses _MemberName to explicit the use of the member, in order 00083 to display it in a GUI for example. 00084 00085 */ 00086 #ifdef _ENGINE_EDITABLE_ 00087 #define REGISTER_MEMBER_PACKDYNAMICFLOAT_XY(_object,_MemberName,_DefaultValX,_DefaultValY) \ 00088 RegisterSerializableMember(_object);\ 00089 _object.SetMemberName( _MemberName );\ 00090 _object.SetConstant(_DefaultValX,0);\ 00091 _object.SetConstant(_DefaultValY,1); 00092 #else 00093 #define REGISTER_MEMBER_PACKDYNAMICFLOAT_XY(_object,_MemberName,_DefaultValX,_DefaultValY) \ 00094 RegisterSerializableMember(_object); 00095 #endif 00096 /*! 00097 \def REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ 00098 00099 \brief This macro is used to register a serializable member in a class constructor. 00100 For editable mode, it uses _MemberName to explicit the use of the member, in order 00101 to display it in a GUI for example. 00102 00103 */ 00104 #ifdef _ENGINE_EDITABLE_ 00105 #define REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ(_object,_MemberName,_DefaultValX,_DefaultValY,_DefaultValZ) \ 00106 RegisterSerializableMember(_object);\ 00107 _object.SetMemberName( _MemberName );\ 00108 _object.SetConstant(_DefaultValX,0);\ 00109 _object.SetConstant(_DefaultValY,1);\ 00110 _object.SetConstant(_DefaultValZ,2); 00111 #else 00112 #define REGISTER_MEMBER_PACKDYNAMICFLOAT_XYZ(_object,_MemberName,_DefaultValX,_DefaultValY,_DefaultValZ) \ 00113 RegisterSerializableMember(_object); 00114 #endif 00115 //end of file 00116 #endif
/\/\ 4 N k ! N D _______ _ __ ___ _____ ___ _ _ ____ ___________ __//___ /________ |/ / ___________\_______/ \ / _ _ \/ _ / _ / _/_/____/ _ __ / / / / / / / \ \/ / / \ \ / \\___/___/___/ ¯ _____/_____/ ______\___/_____/\________\\ \________/_ ___ __ l____\ /elD! http://www.m4nkind.com \____/