//------------------------------------------------------------------------- bool PUOnTimeObserverTranslator::translateChildProperty( PUScriptCompiler* compiler, PUAbstractNode *node ) { PUPropertyAbstractNode* prop = reinterpret_cast<PUPropertyAbstractNode*>(node); PUObserver* ob = static_cast<PUObserver*>(prop->parent->context); PUOnTimeObserver* observer = static_cast<PUOnTimeObserver*>(ob); if (prop->name == token[TOKEN_ONTIME]) { // Property: on_time if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_ONTIME], 2)) { std::string compareType; float val = 0.0f; PUAbstractNodeList::const_iterator i = prop->values.begin(); if(getString(**i, &compareType)) { if (compareType == token[TOKEN_LESS_THAN]) { observer->setCompare(CO_LESS_THAN); } else if (compareType == token[TOKEN_GREATER_THAN]) { observer->setCompare(CO_GREATER_THAN); } else if (compareType == token[TOKEN_EQUALS]) { observer->setCompare(CO_EQUALS); } ++i; if(getFloat(**i, &val)) { observer->setThreshold(val); return true; } } } } else if (prop->name == token[TOKEN_SINCE_START_SYSTEM]) { // Property: since_start_system if (passValidateProperty(compiler, prop, token[TOKEN_SINCE_START_SYSTEM], VAL_BOOL)) { bool val; if(getBoolean(*prop->values.front(), &val)) { observer->setSinceStartSystem(val); return true; } } } return false; }
//----------------------------------------------------------------------- bool DoEnableComponentEventHandlerTranslator::translateChildProperty(ScriptCompiler* compiler, const AbstractNodePtr &node) { PropertyAbstractNode* prop = reinterpret_cast<PropertyAbstractNode*>(node.get()); ParticleEventHandler* evt = any_cast<ParticleEventHandler*>(prop->parent->context); DoEnableComponentEventHandler* handler = static_cast<DoEnableComponentEventHandler*>(evt); if (prop->name == token[TOKEN_DOENABLE_COMPONENT]) { // Property: enable_component if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_DOENABLE_COMPONENT], 3)) { String componentType; String name; bool enabled = true; AbstractNodeList::const_iterator i = prop->values.begin(); if(getString(*i, &componentType)) { if (componentType == token[TOKEN_DOENABLE_EMITTER_COMPONENT]) { handler->setComponentType(CT_EMITTER); } else if (componentType == token[TOKEN_DOENABLE_AFFECTOR_COMPONENT]) { handler->setComponentType(CT_AFFECTOR); } else if (componentType == token[TOKEN_DOENABLE_OBSERVER_COMPONENT]) { handler->setComponentType(CT_OBSERVER); } else if (componentType == token[TOKEN_DOENABLE_TECHNIQUE_COMPONENT]) { handler->setComponentType(CT_TECHNIQUE); } ++i; if(getString(*i, &name)) { handler->setComponentName(name); ++i; if (getBoolean(*i, &enabled)) { handler->setComponentEnabled(enabled); return true; } } } } } return false; }
//------------------------------------------------------------------------- bool PUOnVelocityObserverTranslator::translateChildProperty( PUScriptCompiler* compiler, PUAbstractNode *node ) { PUPropertyAbstractNode* prop = reinterpret_cast<PUPropertyAbstractNode*>(node); PUObserver* ob = static_cast<PUObserver*>(prop->parent->context); PUOnVelocityObserver* observer = static_cast<PUOnVelocityObserver*>(ob); if (prop->name == token[TOKEN_ONVELOCITY_THRESHOLD]) { // Property: velocity_threshold if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_ONVELOCITY_THRESHOLD], 2)) { std::string compareType; float val = 0.0f; PUAbstractNodeList::const_iterator i = prop->values.begin(); if(getString(**i, &compareType)) { if (compareType == token[TOKEN_LESS_THAN]) { observer->setCompare(CO_LESS_THAN); } else if (compareType == token[TOKEN_GREATER_THAN]) { observer->setCompare(CO_GREATER_THAN); } else if (compareType == token[TOKEN_EQUALS]) { observer->setCompare(CO_EQUALS); } ++i; if(getFloat(**i, &val)) { observer->setThreshold(val); return true; } } } } return false; }
//------------------------------------------------------------------------- bool ScriptTranslator::passValidateProperty(Ogre::ScriptCompiler* compiler, Ogre::PropertyAbstractNode* prop, const Ogre::String& token, ValidationType validationType) { if (!passValidatePropertyNoValues(compiler, prop, token)) { return false; } bool ret = true; switch(validationType) { case VAL_BOOL: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 1) && passValidatePropertyValidBool(compiler, prop); } break; case VAL_COLOURVALUE: { ret = passValidatePropertyNumberOfValuesRange(compiler, prop, token, 3, 4); } break; case VAL_INT: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 1) && passValidatePropertyValidInt(compiler, prop); } break; case VAL_QUATERNION: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 4) && passValidatePropertyValidQuaternion(compiler, prop); } break; case VAL_REAL: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 1) && passValidatePropertyValidReal(compiler, prop); } break; case VAL_STRING: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 1); } break; case VAL_UINT: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 1) && passValidatePropertyValidUint(compiler, prop); } break; case VAL_VECTOR2: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 2) && passValidatePropertyValidVector2(compiler, prop); } break; case VAL_VECTOR3: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 3) && passValidatePropertyValidVector3(compiler, prop); } break; case VAL_VECTOR4: { ret = passValidatePropertyNumberOfValues(compiler, prop, token, 4) && passValidatePropertyValidVector4(compiler, prop); } break; } return ret; }
//----------------------------------------------------------------------- bool OnPositionObserverTranslator::translateChildProperty(ScriptCompiler* compiler, const AbstractNodePtr &node) { PropertyAbstractNode* prop = reinterpret_cast<PropertyAbstractNode*>(node.get()); ParticleObserver* ob = any_cast<ParticleObserver*>(prop->parent->context); OnPositionObserver* observer = static_cast<OnPositionObserver*>(ob); if (prop->name == token[TOKEN_ONPOSITION_X]) { // Property: position_x if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_ONPOSITION_X], 2)) { String compareType; Real val = 0; AbstractNodeList::const_iterator i = prop->values.begin(); if(getString(*i, &compareType)) { if (compareType == token[TOKEN_LESS_THAN]) { observer->setComparePositionX(CO_LESS_THAN); } else if (compareType == token[TOKEN_GREATER_THAN]) { observer->setComparePositionX(CO_GREATER_THAN); } else if (compareType == token[TOKEN_EQUALS]) { observer->setComparePositionX(CO_EQUALS); } ++i; if(getReal(*i, &val)) { observer->setPositionXThreshold(val); return true; } } } } else if (prop->name == token[TOKEN_ONPOSITION_Y]) { // Property: position_y if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_ONPOSITION_Y], 2)) { String compareType; Real val = 0; AbstractNodeList::const_iterator i = prop->values.begin(); if(getString(*i, &compareType)) { if (compareType == token[TOKEN_LESS_THAN]) { observer->setComparePositionY(CO_LESS_THAN); } else if (compareType == token[TOKEN_GREATER_THAN]) { observer->setComparePositionY(CO_GREATER_THAN); } else if (compareType == token[TOKEN_EQUALS]) { observer->setComparePositionY(CO_EQUALS); } ++i; if(getReal(*i, &val)) { observer->setPositionYThreshold(val); return true; } } } } else if (prop->name == token[TOKEN_ONPOSITION_Z]) { // Property: position_z if (passValidatePropertyNumberOfValues(compiler, prop, token[TOKEN_ONPOSITION_Z], 2)) { String compareType; Real val = 0; AbstractNodeList::const_iterator i = prop->values.begin(); if(getString(*i, &compareType)) { if (compareType == token[TOKEN_LESS_THAN]) { observer->setComparePositionZ(CO_LESS_THAN); } else if (compareType == token[TOKEN_GREATER_THAN]) { observer->setComparePositionZ(CO_GREATER_THAN); } else if (compareType == token[TOKEN_EQUALS]) { observer->setComparePositionZ(CO_EQUALS); } ++i; if(getReal(*i, &val)) { observer->setPositionZThreshold(val); return true; } } } } return false; }