const char *DynamicConsoleMethodComponent::callOnBehaviors( U32 argc, const char *argv[] ) { // Set Owner SimObject *pThis; pThis = dynamic_cast<SimObject *>( this ); AssertFatal( pThis, "DynamicConsoleMethodComponent::callOnBehaviors : this should always exist!" ); const char* result = ""; bool handled = false; if( getComponentCount() > 0 ) { VectorPtr<SimComponent *>&componentList = lockComponentList(); for( SimComponentIterator nItr = (componentList.end()-1); nItr >= componentList.begin(); nItr-- ) { argv[0] = StringTable->insert(argv[0]); SimComponent *pComponent = (*nItr); AssertFatal( pComponent, "DynamicConsoleMethodComponent::callOnBehaviors - NULL component in list!" ); handled = pComponent->callMethodOnComponents(argc, argv, &result); if (handled) break; } unlockComponentList(); } if (!handled) { result = "ERR_CALL_NOT_HANDLED"; } return result; }
// Call all components that implement methodName giving them a chance to operate // Components are called in reverse order of addition const char *DynamicConsoleMethodComponent::_callMethod( U32 argc, const char *argv[], bool callThis /* = true */ ) { // Set Owner SimObject *pThis = dynamic_cast<SimObject *>( this ); AssertFatal( pThis, "DynamicConsoleMethodComponent::callMethod : this should always exist!" ); const char *cbName = StringTable->insert(argv[0]); if( getComponentCount() > 0 ) { VectorPtr<SimComponent *>&componentList = lockComponentList(); for( SimComponentIterator nItr = (componentList.end()-1); nItr >= componentList.begin(); nItr-- ) { argv[0] = cbName; SimComponent *pComponent = (*nItr); AssertFatal( pComponent, "DynamicConsoleMethodComponent::callMethod - NULL component in list!" ); DynamicConsoleMethodComponent *pThisComponent = dynamic_cast<DynamicConsoleMethodComponent*>( pComponent ); AssertFatal( pThisComponent, "DynamicConsoleMethodComponent::callMethod - Non DynamicConsoleMethodComponent component attempting to callback!"); // Only call on first depth components // Should isMethod check these calls? [11/22/2006 justind] if(pComponent->isEnabled()) Con::execute( pThisComponent, argc, argv ); // Bail if this was the first element //if( nItr == componentList.begin() ) // break; } unlockComponentList(); } // Set Owner Field const char* result = ""; if(callThis) result = Con::execute( pThis, argc, argv, true ); // true - exec method onThisOnly, not on DCMCs return result; }
bool SimComponent::callMethodOnComponents( U32 argc, const char* argv[], const char** result ) { const char *cbName = StringTable->insert(argv[0]); if (isEnabled()) { if(isMethod(cbName)) { // This component can handle the given method *result = Con::execute( this, argc, argv, true ); return true; } else if( getComponentCount() > 0 ) { // Need to try the component's children bool handled = false; VectorPtr<SimComponent *>&componentList = lockComponentList(); for( SimComponentIterator nItr = (componentList.end()-1); nItr >= componentList.begin(); nItr-- ) { argv[0] = cbName; SimComponent *pComponent = (*nItr); AssertFatal( pComponent, "SimComponent::callMethodOnComponents - NULL component in list!" ); // Call on children handled = pComponent->callMethodOnComponents( argc, argv, result ); if (handled) break; } unlockComponentList(); if (handled) return true; } } return false; }
/*Adiciona novo componente criado no Pallete (A string adicional é para componentes especiais)*/ void CodeGenerator::addManagedComponent(scv::Component *object, const std::string &type, const std::string &aString) { _managed.push_back(new ManagedComponent(object, type + scv::toString(getComponentCount(object->getType())) + aString , type)); }