VN Textbox Scroll initial version

This commit is contained in:
2023-05-20 22:13:22 -07:00
parent d3ac3b688b
commit f8ca5f2e17
16 changed files with 347 additions and 72 deletions

View File

@ -13,6 +13,8 @@ void SceneGenerator::generate(
struct MethodGenInfo &methodAssets,
struct MethodGenInfo &methodInit
) {
assertNotNull(scene);
classInfo.clazz = scene->name;
classInfo.constructorArgs = "DawnGame *game";
classInfo.extendArgs = "game";
@ -54,10 +56,12 @@ void SceneGenerator::generate(
int32_t childNumber = 0;
int32_t componentNumber = 0;
std::map<std::string, std::string> assetMap;
std::vector<struct SceneItemComponent> componentsUnused;
auto sceneItems = scene->items.begin();
while(sceneItems != scene->items.end()) {
SceneItemGenerator::generate(
auto itDeps = scene->dependencies.begin();
while(itDeps != scene->dependencies.end()) {
auto dep = *itDeps;
SceneItemGenerator::generateDependency(
assetNumber,
componentNumber,
childNumber,
@ -68,24 +72,15 @@ void SceneGenerator::generate(
&methodAssets.body,
"",
"this",
&(*sceneItems),
""
componentsUnused,
scene->items,
scene->code,
dep
);
++sceneItems;
++itDeps;
}
// Seal methods
line(&methodAssets.body, "return assets;", "");
// Code
auto itCode = scene->code.begin();
while(itCode != scene->code.end()) {
SceneCodeGenerator::generate(
&classInfo.publicProperties,
&methodInit.body,
&(*itCode),
""
);
++itCode;
}
}

View File

@ -7,6 +7,76 @@
using namespace Dawn;
void SceneItemGenerator::generateDependency(
int32_t &assetNumber,
int32_t &componentNumber,
int32_t &childNumber,
std::map<std::string, std::string> &assetMap,
std::vector<std::string> &includes,
std::vector<std::string> *publicProperties,
std::vector<std::string> *initBody,
std::vector<std::string> *assetBody,
std::string name,
std::string sceneRef,
std::vector<struct SceneItemComponent> &components,
std::vector<struct SceneItem> &children,
std::vector<struct SceneCode> &code,
struct SceneItemDependency dep
) {
switch(dep.type) {
case SCENE_ITEM_DEPENDENCY_TYPE_CODE: {
auto i = &code[dep.position];
SceneCodeGenerator::generate(
publicProperties,
initBody,
i,
""
);
line(initBody, "", "");
break;
}
case SCENE_ITEM_DEPENDENCY_TYPE_COMPONENT: {
auto i = &components[dep.position];
SceneItemComponentGenerator::generate(
assetMap,
componentNumber,
includes,
name,
publicProperties,
initBody,
i,
""
);
line(initBody, "", "");
break;
}
case SCENE_ITEM_DEPENDENCY_TYPE_ITEM: {
auto i = &children[dep.position];
SceneItemGenerator::generate(
assetNumber,
componentNumber,
childNumber,
assetMap,
includes,
publicProperties,
initBody,
assetBody,
name,
sceneRef,
i,
""
);
line(initBody, "", "");
break;
}
default:
assertUnreachable();
}
}
void SceneItemGenerator::generate(
int32_t &assetNumber,
int32_t &componentNumber,
@ -21,6 +91,11 @@ void SceneItemGenerator::generate(
struct SceneItem *item,
std::string tabs
) {
assertNotNull(publicProperties);
assertNotNull(initBody);
assertNotNull(assetBody);
assertNotNull(item);
// Determine interface
std::string name = "itm" + std::to_string(childNumber++);
std::string itemType = "SceneItem";
@ -82,26 +157,11 @@ void SceneItemGenerator::generate(
++itAssets;
}
// Add components for children
auto itComponents = item->components.begin();
while(itComponents != item->components.end()) {
SceneItemComponentGenerator::generate(
assetMap,
componentNumber,
includes,
name,
publicProperties,
initBody,
&(*itComponents),
""
);
++itComponents;
}
// Process sub children
auto itChildren = item->children.begin();
while(itChildren != item->children.end()) {
SceneItemGenerator::generate(
// Add the dependencies
auto itDeps = item->dependencies.begin();
while(itDeps != item->dependencies.end()) {
auto dep = *itDeps;
SceneItemGenerator::generateDependency(
assetNumber,
componentNumber,
childNumber,
@ -112,26 +172,16 @@ void SceneItemGenerator::generate(
assetBody,
name,
sceneRef,
&(*itChildren),
""
item->components,
item->children,
item->code,
dep
);
++itChildren;
++itDeps;
}
// Set parent
if(!parentRef.empty()) {
line(initBody, name + "->transform.setParent(&"+parentRef+"->transform);", "");
}
// Code
auto itCode = item->code.begin();
while(itCode != item->code.end()) {
SceneCodeGenerator::generate(
publicProperties,
initBody,
&(*itCode),
""
);
++itCode;
}
}

View File

@ -12,6 +12,23 @@
namespace Dawn {
class SceneItemGenerator : public CodeGen {
public:
static void generateDependency(
int32_t &assetNumber,
int32_t &componentNumber,
int32_t &childNumber,
std::map<std::string, std::string> &assetMap,
std::vector<std::string> &includes,
std::vector<std::string> *publicProperties,
std::vector<std::string> *initBody,
std::vector<std::string> *assetBody,
std::string name,
std::string sceneRef,
std::vector<struct SceneItemComponent> &components,
std::vector<struct SceneItem> &children,
std::vector<struct SceneCode> &code,
struct SceneItemDependency dep
);
static void generate(
int32_t &assetNumber,
int32_t &componentNumber,