VNSceneGen is more or less working

This commit is contained in:
2023-05-18 21:39:59 -07:00
parent 02589c0b98
commit a42ddd8e9e
9 changed files with 267 additions and 259 deletions

View File

@@ -13,73 +13,15 @@ void SceneGen::generate(
std::string tabs
) {
struct ClassGenInfo classInfo;
classInfo.clazz = scene->name;
classInfo.constructorArgs = "DawnGame *game";
classInfo.extendArgs = "game";
std::string baseClassName = "Scene";
// Determine extends
if(scene->extend.empty()) {
classInfo.includes.push_back("scene/Scene.hpp");
} else {
classInfo.includes.push_back(scene->extend + ".hpp");
// Get last slash of scene->extend
auto lastSlash = scene->extend.find_last_of('/');
if(lastSlash != std::string::npos) {
baseClassName = scene->extend.substr(lastSlash + 1);
} else {
baseClassName = scene->extend;
}
}
classInfo.extend = baseClassName;
// classInfo.extend = "Scene";
struct MethodGenInfo methodAssets;
methodAssets.name = "getRequiredAssets";
methodAssets.isOverride = true;
methodAssets.type = "std::vector<Asset*>";
line(&methodAssets.body, "auto assMan = &this->game->assetManager;", "");
struct MethodGenInfo methodInit;
methodInit.name = "stage";
methodInit.isOverride = true;
if(scene->extend.empty()) {
line(&methodAssets.body, "std::vector<Asset*> assets;", "");
} else {
line(&methodAssets.body, "std::vector<Asset*> assets = " + baseClassName + "::getRequiredAssets();", "");
line(&methodInit.body, baseClassName + "::stage();", "");
}
// Generate
int32_t assetNumber = 0;
int32_t childNumber = 0;
int32_t componentNumber = 0;
std::map<std::string, std::string> assetMap;
auto sceneItems = scene->items.begin();
while(sceneItems != scene->items.end()) {
SceneItemGenerator::generate(
assetNumber,
componentNumber,
childNumber,
assetMap,
classInfo.includes,
&classInfo.publicProperties,
&methodInit.body,
&methodAssets.body,
"",
"this",
&(*sceneItems),
""
);
++sceneItems;
}
// Seal methods
line(&methodAssets.body, "return assets;", "");
SceneGenerator::generate(
scene,
classInfo,
methodAssets,
methodInit
);
// Add in methods
CodeGen::methodGen(&classInfo.publicCode, methodAssets);

View File

@@ -4,8 +4,7 @@
// https://opensource.org/licenses/MIT
#pragma once
#include "util/parser/SceneParser.hpp"
#include "util/generator/SceneItemGenerator.hpp"
#include "util/generator/SceneGenerator.hpp"
namespace Dawn {
class SceneGen : public CodeGen {