CGPValue *CGPValue::Duplicate(CTextPool **textPool) { CGPValue *newValue; CGPObject *iterator; char *name; if (textPool) { name = (*textPool)->AllocText((char *)mName, true, textPool); } else { name = (char *)mName; } newValue = new CGPValue(name); iterator = mList; while(iterator) { if (textPool) { name = (*textPool)->AllocText((char *)iterator->GetName(), true, textPool); } else { name = (char *)iterator->GetName(); } newValue->AddValue(name); iterator = iterator->GetNext(); } return newValue; }
//------------------------------------------------------ // ParseEmitterFxStrings // Reads in a group of fx file names and registers them // // input: // Parse group that contains the list of fx to parse // // return: // success of parse operation. //------------------------------------------------------ bool CPrimitiveTemplate::ParseEmitterFxStrings( CGPValue *grp ) { const char *val; int handle; if ( grp->IsList() ) { // If we are a list we have to do separate processing CGPObject *list = grp->GetList(); while ( list ) { // name is actually the value contained in the list val = list->GetName(); handle = theFxScheduler.RegisterEffect( val ); if ( handle ) { mEmitterFxHandles.AddHandle( handle ); } else { theFxHelper.Print( "FxTemplate: Emitter effect file not found.\n" ); return false; } list = (CGPValue *)list->GetNext(); } } else { // Let's get a value val = grp->GetTopValue(); if ( val ) { handle = theFxScheduler.RegisterEffect( val ); if ( handle ) { mEmitterFxHandles.AddHandle( handle ); } else { theFxHelper.Print( "FxTemplate: Emitter effect file not found.\n" ); return false; } } else { // empty "list" theFxHelper.Print( "CPrimitiveTemplate::ParseEmitterFxStrings called with an empty list!\n" ); return false; } } mFlags |= FX_EMIT_FX; return true; }
bool CGPValue::Write(CTextPool **textPool, int depth) { int i; CGPObject *next; if (!mList) { return true; } for(i=0;i<depth;i++) { (*textPool)->AllocText("\t", false, textPool); } WriteText(textPool, mName); if (!mList->GetNext()) { (*textPool)->AllocText("\t\t", false, textPool); mList->WriteText(textPool, mList->GetName()); (*textPool)->AllocText("\r\n", false, textPool); } else { (*textPool)->AllocText("\r\n", false, textPool); for(i=0;i<depth;i++) { (*textPool)->AllocText("\t", false, textPool); } (*textPool)->AllocText("[\r\n", false, textPool); next = mList; while(next) { for(i=0;i<depth+1;i++) { (*textPool)->AllocText("\t", false, textPool); } mList->WriteText(textPool, next->GetName()); (*textPool)->AllocText("\r\n", false, textPool); next = next->GetNext(); } for(i=0;i<depth;i++) { (*textPool)->AllocText("\t", false, textPool); } (*textPool)->AllocText("]\r\n", false, textPool); } return true; }
//------------------------------------------------------ // ParseModels // Reads in a group of models and registers them // // input: // Parse group that contains the list of models to parse // // return: // success of parse operation. //------------------------------------------------------ bool CPrimitiveTemplate::ParseModels( CGPValue *grp ) { const char *val; int handle; if ( grp->IsList() ) { // If we are a list we have to do separate processing CGPObject *list = grp->GetList(); while ( list ) { // name is actually the value contained in the list val = list->GetName(); handle = theFxHelper.RegisterModel( val ); mMediaHandles.AddHandle( handle ); list = (CGPValue *)list->GetNext(); } } else { // Let's get a value val = grp->GetTopValue(); if ( val ) { handle = theFxHelper.RegisterModel( val ); mMediaHandles.AddHandle( handle ); } else { // empty "list" theFxHelper.Print( "CPrimitiveTemplate::ParseModels called with an empty list!\n" ); return false; } } mFlags |= FX_ATTACHED_MODEL; return true; }