//----------------------------------------------------------------------------- // Destroy any fields. //----------------------------------------------------------------------------- void FieldBrushObject::destroyFields() { // Fetch Dynamic-Field Dictionary. SimFieldDictionary* pFieldDictionary = getFieldDictionary(); // Any Field Dictionary? if ( pFieldDictionary == NULL ) { // No, so we're done. return; } // Iterate fields. for ( SimFieldDictionaryIterator itr(pFieldDictionary); *itr; ++itr ) { // Fetch Field Entry. SimFieldDictionary::Entry* fieldEntry = *itr; // Internal Field? if ( dStrstr( fieldEntry->slotName, INTERNAL_FIELD_PREFIX ) == fieldEntry->slotName ) { // Yes, so remove it. pFieldDictionary->setFieldValue( fieldEntry->slotName, "" ); } } }
void Settings::clearAllFields() { // Fetch Dynamic-Field Dictionary. SimFieldDictionary* pFieldDictionary = getFieldDictionary(); // Any Field Dictionary? if ( pFieldDictionary == NULL ) { // No, so we're done. return; } // Iterate fields. for ( SimFieldDictionaryIterator itr(pFieldDictionary); *itr; ++itr ) { // Fetch Field Entry. SimFieldDictionary::Entry* fieldEntry = *itr; // don't remove default field values if (dStrEndsWith(fieldEntry->slotName, "_default")) continue; // remove it. pFieldDictionary->setFieldValue( fieldEntry->slotName, "" ); } }
void Settings::remove(const UTF8 *settingName, bool includeDefaults) { // Fetch Dynamic-Field Dictionary. SimFieldDictionary* pFieldDictionary = getFieldDictionary(); // Any Field Dictionary? if ( pFieldDictionary == NULL ) { // No, so we're done. return; } String name; buildGroupString(name, settingName); StringTableEntry nameEntry = StringTable->insert(name.c_str()); StringTableEntry nameEntryDefault = StringTable->insert( String::ToString("%s%s",name.c_str(), "_default") ); // Iterate fields. for ( SimFieldDictionaryIterator itr(pFieldDictionary); *itr; ++itr ) { // Fetch Field Entry. SimFieldDictionary::Entry* fieldEntry = *itr; // is this a field of our current group if ( (dStrcmp(nameEntry, "") == 0) || dStrcmp( nameEntry, fieldEntry->slotName ) == 0 || (includeDefaults && dStrcmp( nameEntryDefault, fieldEntry->slotName ) == 0) ) { // Yes, so remove it. pFieldDictionary->setFieldValue( fieldEntry->slotName, "" ); } } }
bool TSStatic::onAdd() { PROFILE_SCOPE(TSStatic_onAdd); if ( isServerObject() ) { // Handle the old "usePolysoup" field SimFieldDictionary* fieldDict = getFieldDictionary(); if ( fieldDict ) { StringTableEntry slotName = StringTable->insert( "usePolysoup" ); SimFieldDictionary::Entry * entry = fieldDict->findDynamicField( slotName ); if ( entry ) { // Was "usePolysoup" set? bool usePolysoup = dAtob( entry->value ); // "usePolysoup" maps to the new VisibleMesh type if ( usePolysoup ) mCollisionType = VisibleMesh; // Remove the field in favor on the new "collisionType" field fieldDict->setFieldValue( slotName, "" ); } } } if ( !Parent::onAdd() ) return false; // Setup the shape. if ( !_createShape() ) { Con::errorf( "TSStatic::onAdd() - Shape creation failed!" ); return false; } setRenderTransform(mObjToWorld); // Register for the resource change signal. ResourceManager::get().getChangedSignal().notify( this, &TSStatic::_onResourceChanged ); addToScene(); _updateShouldTick(); // Accumulation if ( isClientObject() && mShapeInstance ) { if ( mShapeInstance->hasAccumulation() ) AccumulationVolume::addObject(this); } return true; }
// BTRTODO: Support arrays!? MaterialParameters* ProcessedCustomMaterial::allocMaterialParameters() { MaterialParameters* ret = Parent::allocMaterialParameters(); // See if any of the dynamic fields match up with shader constants we have. SimFieldDictionary* fields = mMaterial->getFieldDictionary(); if (!fields || fields->getNumFields() == 0) return ret; const Vector<GFXShaderConstDesc>& consts = ret->getShaderConstDesc(); for (U32 i = 0; i < consts.size(); i++) { // strip the dollar sign from the front. String stripped(consts[i].name); stripped.erase(0, 1); SimFieldDictionary::Entry* field = fields->findDynamicField(stripped); if (field) { MaterialParameterHandle* handle = getMaterialParameterHandle(consts[i].name); switch (consts[i].constType) { case GFXSCT_Float : setMaterialParameter<F32>(ret, handle, field->value); break; case GFXSCT_Float2: setMaterialParameter<Point2F>(ret, handle, field->value); break; case GFXSCT_Float3: setMaterialParameter<Point3F>(ret, handle, field->value); break; case GFXSCT_Float4: setMaterialParameter<Point4F>(ret, handle, field->value); break; case GFXSCT_Float2x2: case GFXSCT_Float3x3: setMatrixParameter(ret, handle, field->value, consts[i].constType); break; case GFXSCT_Float4x4: setMaterialParameter<MatrixF>(ret, handle, field->value); break; case GFXSCT_Int: setMaterialParameter<S32>(ret, handle, field->value); break; case GFXSCT_Int2: setMaterialParameter<Point2I>(ret, handle, field->value); break; case GFXSCT_Int3: setMaterialParameter<Point3I>(ret, handle, field->value); break; case GFXSCT_Int4: setMaterialParameter<Point4I>(ret, handle, field->value); break; // Do we want to ignore these? case GFXSCT_Sampler: case GFXSCT_SamplerCube: default: break; } } } return ret; }