object::Object* Simulation::buildObject(const String& name, object::Object::Type type) { // Try to find object internal object type auto desc = findObjectType(name); if (desc) { // Create parent object auto obj = buildObject(desc->baseName); // Configure obj->configure(desc->config, *this); return obj; } Log::debug("Create object '", name, "'"); // Create object with given name auto object = getPluginContext().createObject(name, *this, type); // Register module if (object) return addObject(std::move(object)); Log::warning("Unable to create object: ", name, " (unsupported by library?)"); return nullptr; }
char * getTextFromAnyVar (const variable & from) { switch (from.varType) { case SVT_STRING: return copyString (from.varData.theString); case SVT_FASTARRAY: { char * builder = copyString ("FAST:"); char * builder2; char * grabText; for (int i = 0; i < from.varData.fastArray -> size; i ++) { builder2 = joinStrings (builder, " "); if (! builder2) return NULL; delete builder; grabText = getTextFromAnyVar (from.varData.fastArray -> fastVariables[i]); builder = joinStrings (builder2, grabText); if (! builder) return NULL; delete grabText; grabText = NULL; delete builder2; builder2 = NULL; } return builder; } case SVT_STACK: { char * builder = copyString ("ARRAY:"); char * builder2; char * grabText; variableStack * stacky = from.varData.theStack -> first; while (stacky) { builder2 = joinStrings (builder, " "); if (! builder2) return NULL; delete builder; grabText = getTextFromAnyVar (stacky -> thisVar); builder = joinStrings (builder2, grabText); if (! builder) return NULL; delete grabText; grabText = NULL; delete builder2; builder2 = NULL; stacky = stacky -> next; } return builder; } case SVT_INT: { char * buff = new char[10]; if (! checkNew (buff)) return NULL; sprintf (buff, "%i", from.varData.intValue); return buff; } case SVT_FILE: { // char * buff = new char[15]; // if (! checkNew (buff)) return NULL; // sprintf (buff, "FILE %i", from.varData.intValue); return joinStrings ("", resourceNameFromNum (from.varData.intValue)); } /* case SVT_ANIM: { char * buff = new char[20]; if (! checkNew (buff)) return NULL; sprintf (buff, "%p", from.varData.animHandler); return buff; }*/ case SVT_OBJTYPE: { objectType * thisType = findObjectType (from.varData.intValue); if (thisType) return copyString (thisType -> screenName); } default: break; } return copyString (typeName[from.varType]); }