00001 #ifndef OMK_INP_TRIGGEREMITTEREXTENSION_H 00002 #define OMK_INP_TRIGGEREMITTEREXTENSION_H 00003 00004 #include "OMKAddOn.h" 00005 #include "OMKEventSignalEmitterUtil.h" 00006 #include "OMKExtensibleSimulatedObject.h" 00007 #include "OMKTriggerExtension.h" 00008 #include "OMKTransform.h" 00009 #include "OMKBaseType.h" 00010 #include "OMKTransformType.h" 00011 #include "OMKParametersAccessor.inl" 00012 namespace OMK 00013 { 00045 class OMKADDON_API TriggerEmitterExtension 00046 : public ExtensionT< OMK::ExtensibleSimulatedObject >, 00047 public EventSignalEmitterUtil 00048 { 00049 DECLARE_EXTENSION_FACTORY( TriggerEmitterExtension ) ; 00050 protected: 00051 IAttributeBaseT< bool >* _trigger ; 00052 virtual bool loadExtensionParameters( const ConfigurationParameterDescriptor * node ) ; 00055 virtual void postComputeParameters() ; 00056 }; 00057 00058 //============================================================================= 00132 template< typename T, typename ModelType > 00133 class TriggerEmitterExtensionT 00134 : public ExtensionT< OMK::ExtensibleSimulatedObject >, 00135 public ValuedEventSignalEmitterUtilT< T, ModelType > 00136 { 00137 public: 00139 friend class OMK::ExtensionCreatorT< TriggerEmitterExtensionT< T, ModelType > > ; 00141 static Name OMK_CLASS_ID ; 00143 static const bool REGISTERED_IN_EXTENSION_FACTORY ; 00144 protected: 00147 TriggerEmitterExtensionT( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 00148 : ExtensionT< OMK::ExtensibleSimulatedObject >( owner, id, registerExtension ), 00149 ValuedEventSignalEmitterUtilT< T, ModelType >(), 00150 _trigger( 0 ) 00151 { 00152 } 00153 00154 public: 00155 virtual ~TriggerEmitterExtensionT() {} 00156 protected: 00157 IAttributeBaseT< bool >* _trigger ; 00158 00159 virtual bool loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 00160 { 00161 bool ok = ExtensionT< OMK::ExtensibleSimulatedObject >::loadExtensionParameters( node ) 00162 && this->loadParametersUtil( _owner, node ) ; 00163 Name triggerId ; 00164 ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ; 00165 _trigger = _owner->getBaseAttribute< bool >( triggerId ) ; 00166 ok = ok && _trigger != 0 ; 00167 return ok ; 00168 } 00171 virtual void postComputeParameters() 00172 { 00173 if( _trigger->isUpdated() && _trigger->get() ) 00174 { 00175 this->sendUtil( _owner ) ; 00176 } 00177 } 00178 } ; 00179 00180 typedef TriggerEmitterExtensionT< int, OMK::Type::IntType > TriggerIntEmitterExtension ; 00181 typedef TriggerEmitterExtensionT< bool, OMK::Type::BoolType > TriggerBoolEmitterExtension ; 00182 typedef TriggerEmitterExtensionT< Name, Name > TriggerNameEmitterExtension ; 00183 typedef TriggerEmitterExtensionT< OMK::Type::StringType, OMK::Type::StringType > TriggerStringEmitterExtension ; 00184 typedef TriggerEmitterExtensionT< float, OMK::Type::FloatType > TriggerFloatEmitterExtension ; 00185 typedef TriggerEmitterExtensionT< OMK::Type::Transform, OMK::Type::TransformType > TriggerTransformEmitterExtension ; 00186 typedef TriggerEmitterExtensionT< std::pair< OMK::Name, OMK::Name >, 00187 OMK::Type::SimpleTypeT< std::pair< OMK::Name, OMK::Name > > > TriggerConnectEmitterExtension ; 00188 #if defined _MSC_VER 00189 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerIntEmitterExtension , "TriggerIntEmitter" ) ; 00190 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerBoolEmitterExtension , "TriggerBoolEmitter" ) ; 00191 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerNameEmitterExtension , "TriggerNameEmitter" ) ; 00192 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerFloatEmitterExtension , "TriggerFloatEmitter" ) ; 00193 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerStringEmitterExtension , "TriggerStringEmitter" ) ; 00194 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerTransformEmitterExtension, "TriggerTransformEmitter" ) ; 00195 REGISTER_TEMPLATE_EXTENSION_FACTORY( TriggerConnectEmitterExtension , "TriggerConnectEmitter" ) ; 00196 #endif //defined _MSC_VER 00197 00198 00199 //============================================================================= 00267 template< typename T, typename ModelType > 00268 class MultiTriggerEmitterExtensionT 00269 : public ExtensionT< OMK::ExtensibleSimulatedObject >, 00270 public MultiValuedEventSignalEmitterUtilT< T, ModelType > 00271 { 00272 public: 00274 friend class OMK::ExtensionCreatorT< MultiTriggerEmitterExtensionT< T, ModelType > > ; 00276 static Name OMK_CLASS_ID ; 00278 static const bool REGISTERED_IN_EXTENSION_FACTORY ; 00279 protected: 00282 MultiTriggerEmitterExtensionT( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 00283 : ExtensionT< OMK::ExtensibleSimulatedObject >( owner, id, registerExtension ), 00284 MultiValuedEventSignalEmitterUtilT< T, ModelType >(), 00285 _trigger( 0 ) 00286 { 00287 } 00288 00289 public: 00290 virtual ~MultiTriggerEmitterExtensionT() {} 00291 protected: 00292 IAttributeBaseT< bool >* _trigger ; 00293 00294 virtual bool loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 00295 { 00296 bool ok = ExtensionT< OMK::ExtensibleSimulatedObject >::loadExtensionParameters( node ) 00297 && this->loadParametersUtil( _owner, node ) ; 00298 Name triggerId ; 00299 ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ; 00300 _trigger = _owner->getBaseAttribute< bool >( triggerId ) ; 00301 ok = ok && _trigger != 0 ; 00302 return ok ; 00303 } 00306 virtual void postComputeParameters() 00307 { 00308 if( _trigger->isUpdated() ) 00309 { 00310 this->sendUtil( _owner, _trigger->get() ) ; 00311 } 00312 } 00313 } ; 00314 00315 typedef MultiTriggerEmitterExtensionT< int, OMK::Type::IntType > MultiTriggerIntEmitterExtension ; 00316 typedef MultiTriggerEmitterExtensionT< bool, OMK::Type::BoolType > MultiTriggerBoolEmitterExtension ; 00317 typedef MultiTriggerEmitterExtensionT< Name, Name > MultiTriggerNameEmitterExtension ; 00318 typedef MultiTriggerEmitterExtensionT< OMK::Type::StringType, OMK::Type::StringType > MultiTriggerStringEmitterExtension ; 00319 typedef MultiTriggerEmitterExtensionT< float, OMK::Type::FloatType > MultiTriggerFloatEmitterExtension ; 00320 typedef MultiTriggerEmitterExtensionT< OMK::Type::Transform, OMK::Type::TransformType > MultiTriggerTransformEmitterExtension ; 00321 typedef MultiTriggerEmitterExtensionT< std::pair< OMK::Name, OMK::Name >, 00322 OMK::Type::SimpleTypeT< std::pair< OMK::Name, OMK::Name > > > MultiTriggerConnectEmitterExtension ; 00323 #if defined _MSC_VER 00324 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerIntEmitterExtension , "MultiTriggerIntEmitter" ) ; 00325 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerBoolEmitterExtension , "MultiTriggerBoolEmitter" ) ; 00326 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerNameEmitterExtension , "MultiTriggerNameEmitter" ) ; 00327 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerFloatEmitterExtension , "MultiTriggerFloatEmitter" ) ; 00328 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerStringEmitterExtension , "MultiTriggerStringEmitter" ) ; 00329 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerTransformEmitterExtension, "MultiTriggerTransformEmitter" ) ; 00330 REGISTER_TEMPLATE_EXTENSION_FACTORY( MultiTriggerConnectEmitterExtension , "MultiTriggerConnectEmitter" ) ; 00331 #endif //defined _MSC_VER 00332 00333 00334 } // namespace OMK 00335 00336 #endif // OMK_INP_TRIGGEREMITTEREXTENSION_H
Documentation generated on Mon Jun 9 11:45:57 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |