bool ExporterProject::ExportNode(StreamFormatted& stream, NodeItem* item) { Node* node = item->GetNode(); // write out the node class id stream.write(node->classId()); // write out the node name std::string name(item->SceneItem()->text(0).toUtf8()); ExportProperty(stream, &name); // write out the count of items stream.write(uint32_t(item->Drivers().size())); // export each node driver const NodeItem::tNodeDrivers& drivers = item->Drivers(); NodeItem::tNodeDrivers::const_iterator it(drivers.begin()), itEnd(drivers.end()); for (; it != itEnd; ++it) { INodeDriver* driver = *it; // write out id of driver stream.write(driver->Id()); // write out driver data driver->Update(); driver->Export(stream, this); } // export children Array* children = node->getChildren(); // write child count stream.write(uint32_t(children ? children->count() : 0)); Object* object; CCARRAY_FOREACH(children, object) { Node* child = (Node*)object; NodeItem* childItem = MainWindow::instance()->GetNodeItemFromNode(child); if (childItem) { if (!ExportNode(stream, childItem)) { // insert logging return false; } } }
void FLuaScriptCodeGenerator::ExportClass(UClass* Class, const FString& SourceHeaderFilename, const FString& GeneratedHeaderFilename, bool bHasChanged) { if (!CanExportClass(Class)) { return; } UE_LOG(LogScriptGenerator, Log, TEXT("Exporting class %s"), *Class->GetName()); ExportedClasses.Add(Class->GetFName()); LuaExportedClasses.Add(Class); AllSourceClassHeaders.Add(SourceHeaderFilename); const FString ClassGlueFilename = GetScriptHeaderForClass(Class); AllScriptHeaders.Add(ClassGlueFilename); const FString ClassNameCPP = GetClassNameCPP(Class); FString GeneratedGlue(TEXT("#pragma once\r\n\r\n")); // Export all functions for (TFieldIterator<UFunction> FuncIt(Class /*, EFieldIteratorFlags::ExcludeSuper*/); FuncIt; ++FuncIt) { UFunction* Function = *FuncIt; if (CanExportFunction(ClassNameCPP, Class, Function)) { GeneratedGlue += ExportFunction(ClassNameCPP, Class, Function); } } // Export properties that are owned by this class int32 PropertyIndex = 0; for (TFieldIterator<UProperty> PropertyIt(Class /*, EFieldIteratorFlags::ExcludeSuper*/); PropertyIt; ++PropertyIt, ++PropertyIndex) { UProperty* Property = *PropertyIt; if (CanExportProperty(ClassNameCPP, Class, Property)) { UE_LOG(LogScriptGenerator, Log, TEXT(" %s %s"), *Property->GetClass()->GetName(), *Property->GetName()); GeneratedGlue += ExportProperty(ClassNameCPP, Class, Property, PropertyIndex); } } GeneratedGlue += ExportAdditionalClassGlue(ClassNameCPP, Class); SaveHeaderIfChanged(ClassGlueFilename, GeneratedGlue); }