// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "PrefabGen.hpp" using namespace Dawn; void PrefabGen::generate( std::vector *out, struct Prefab *info, std::string tabs ) { struct ClassGenInfo classInfo; classInfo.clazz = info->name; classInfo.extend = "SceneItemPrefab<" + info->name + ">"; classInfo.constructorArgs = "Scene *scene, sceneitemid_t id"; classInfo.extendArgs = "scene, id"; struct MethodGenInfo methodAssets; methodAssets.name = "prefabAssets"; methodAssets.isStatic = true; methodAssets.type = "std::vector"; methodAssets.args = "AssetManager *man"; line(&methodAssets.body, "std::vector assets;", ""); struct MethodGenInfo methodInit; methodInit.name = "prefabInit"; methodInit.isOverride = true; methodInit.args = "AssetManager *man"; classInfo.includes.push_back("prefab/SceneItemPrefab.hpp"); // Generate int32_t assetNumber = 0; int32_t childNumber = 0; int32_t componentNumber = 0; std::map assetMap; info->root.ref = "this"; SceneItemGenerator::generate( assetNumber, componentNumber, childNumber, assetMap, classInfo.includes, &classInfo.publicProperties, &methodInit.body, &methodAssets.body, "", "scene", &info->root, "" ); // Seal methods line(&methodAssets.body, "return assets;", ""); // Add in methods CodeGen::methodGen(&classInfo.publicCode, methodAssets); line(&classInfo.publicCode, "", ""); CodeGen::methodGen(&classInfo.publicCode, methodInit); CodeGen::classGen(out, classInfo); }