Improved compile time significantly

This commit is contained in:
2023-02-24 00:06:12 -08:00
parent 21b917cf71
commit 1d39e86d91
9 changed files with 60 additions and 17 deletions

View File

@ -14,7 +14,7 @@
#include "locale/LocaleManager.hpp" #include "locale/LocaleManager.hpp"
#include "save/SaveManager.hpp" #include "save/SaveManager.hpp"
#include "audio/AudioManager.hpp" #include "audio/AudioManager.hpp"
#include "scene/SceneItemComponentListItems.hpp" #include "scene/SceneItemComponentList.hpp"
#define DAWN_GAME_INIT_RESULT_SUCCESS 0 #define DAWN_GAME_INIT_RESULT_SUCCESS 0
#define DAWN_GAME_UPDATE_RESULT_SUCCESS 0 #define DAWN_GAME_UPDATE_RESULT_SUCCESS 0
@ -25,7 +25,7 @@ namespace Dawn {
class IDawnGame { class IDawnGame {
protected: protected:
SceneItemComponentListItems componentListItems; SceneItemComponentList componentList;
public: public:
Scene *scene = nullptr; Scene *scene = nullptr;

View File

@ -135,6 +135,7 @@ namespace Dawn {
#if DAWN_DEBUG_BUILD #if DAWN_DEBUG_BUILD
std::vector<struct SceneDebugLine> debugLines; std::vector<struct SceneDebugLine> debugLines;
void debugLine(struct SceneDebugLine line); void debugLine(struct SceneDebugLine line);
void debugRay(struct SceneDebugRay ray);
void debugCube(struct SceneDebugCube cube); void debugCube(struct SceneDebugCube cube);
void debugOrigin(); void debugOrigin();
void debugGrid(); void debugGrid();

View File

@ -8,7 +8,7 @@
namespace Dawn { namespace Dawn {
struct SceneItemComponentRegister { struct SceneItemComponentRegister {
int32_t i; uint8_t i;
}; };
class SceneItemComponentList { class SceneItemComponentList {
@ -16,10 +16,23 @@ namespace Dawn {
std::vector<struct SceneItemComponentRegister> components; std::vector<struct SceneItemComponentRegister> components;
protected: protected:
/**
* Request the list to append a scene item component of type T
* to the registry.
*
* @tparam T Parameter type of the SceneItemComponent
*/
template<class T> template<class T>
void append() { void append() {
struct SceneItemComponentRegister r; struct SceneItemComponentRegister r;
this->components.push_back(r); this->components.push_back(r);
} }
public:
/**
* Initialies the scene item component list. This constructor is generated
* at build time from the scene item component registry tool.
*/
SceneItemComponentList();
}; };
} }

View File

@ -57,6 +57,14 @@ void Scene::debugLine(struct SceneDebugLine line) {
this->debugLines.push_back(line); this->debugLines.push_back(line);
} }
void Scene::debugRay(struct SceneDebugRay ray) {
this->debugLine((struct SceneDebugLine){
.v0 = ray.start,
.v1 = ray.start + ray.direction,
.color = ray.color
});
}
void Scene::debugCube(struct SceneDebugCube cube) { void Scene::debugCube(struct SceneDebugCube cube) {
auto min = cube.min; auto min = cube.min;
auto max = cube.max; auto max = cube.max;

View File

@ -23,6 +23,12 @@ namespace Dawn {
glm::mat4 transform = glm::mat4(1.0f); glm::mat4 transform = glm::mat4(1.0f);
}; };
struct SceneDebugRay {
glm::vec3 start;
glm::vec3 direction;
struct Color color = COLOR_RED;
};
struct SceneDebugLine { struct SceneDebugLine {
glm::vec3 v0 = glm::vec3(0, 0, 0); glm::vec3 v0 = glm::vec3(0, 0, 0);
glm::vec3 v1 = glm::vec3(1, 1, 1); glm::vec3 v1 = glm::vec3(1, 1, 1);

View File

@ -22,5 +22,13 @@ void TicTacToeGame::onSceneUpdate() {
mouse *= 2.0f; mouse *= 2.0f;
mouse -= glm::vec2(1, 1); mouse -= glm::vec2(1, 1);
Camera *camera = getScene()->findComponent<Camera>();
if(camera == nullptr) return;
struct Ray3D ray;
glm::vec3 pos = glm::vec3(mouse.x * camera->orthoRight, mouse.y * camera->orthoBottom, 0.0f);
ray.direction = glm::vec3(0, 0, -15);
ray.origin = pos;
getScene()->debugRay((struct SceneDebugRay){ .start = ray.origin, .direction = ray.direction });
} }

View File

@ -6,6 +6,7 @@
#pragma once #pragma once
#include "scene/SceneItemComponent.hpp" #include "scene/SceneItemComponent.hpp"
#include "TicTacToeTile.hpp" #include "TicTacToeTile.hpp"
#include "physics/3d/Ray3D.hpp"
namespace Dawn { namespace Dawn {
class TicTacToeGame : public SceneItemComponent { class TicTacToeGame : public SceneItemComponent {

View File

@ -117,15 +117,15 @@ function(tool_scenecomponent clazz hfile)
) )
if(NOT TARGET sceneitemcomponentgen_cmd) if(NOT TARGET sceneitemcomponentgen_cmd)
add_custom_target(sceneitemcomponentgen_cmd add_custom_target(sceneitemcomponentgen_cmd
COMMAND sceneitemcomponentgen --input="${DAWN_TEMP_DIR}/SceneItemComponents.txt" --output="${DAWN_GENERATED_DIR}/scene/SceneItemComponentListItems.hpp" COMMAND sceneitemcomponentgen --input="${DAWN_TEMP_DIR}/SceneItemComponents.txt" --output="${DAWN_GENERATED_DIR}/scene/SceneItemComponentListItems.cpp"
COMMENT "Generating scene item component ${hfile}::${clazz}" COMMENT "Generating scene item component ${hfile}::${clazz}"
DEPENDS sceneitemcomponentgen DEPENDS sceneitemcomponentgen
) )
target_sources(${DAWN_TARGET_NAME}
PRIVATE
${DAWN_GENERATED_DIR}/scene/SceneItemComponentListItems.cpp
)
endif() endif()
target_include_directories(${DAWN_TARGET_NAME}
PUBLIC
${DAWN_GENERATED_DIR}
)
add_dependencies(sceneitemcomponentgen ${clazz}_scenecomponent) add_dependencies(sceneitemcomponentgen ${clazz}_scenecomponent)
add_dependencies(${DAWN_TARGET_NAME} sceneitemcomponentgen_cmd) add_dependencies(${DAWN_TARGET_NAME} sceneitemcomponentgen_cmd)
endfunction() endfunction()

View File

@ -14,21 +14,27 @@ void SceneItemComponentRootGen::generate(
std::vector<struct SceneItemComponent> *info, std::vector<struct SceneItemComponent> *info,
std::string tabs = "" std::string tabs = ""
) { ) {
struct ClassGenInfo clazz; line(out, "#include \"scene/SceneItemComponentList.hpp\"", tabs);
clazz.clazz = "SceneItemComponentListItems"; line(out, "", tabs);
clazz.extend = "SceneItemComponentList";
clazz.includes.push_back("#include \"scene/SceneItemComponentList.hpp\"");
auto it = info->begin(); auto it = info->begin();
while(it != info->end()) { while(it != info->end()) {
auto c = *it; auto c = *it;
clazz.includes.push_back("#include \"" + c.header + "\""); line(out, "#include \"" + c.header + "\"", tabs);
line(&clazz.constructorCode, "this->append<" + c.clazz + ">();", "");
++it; ++it;
} }
line(out, "", tabs);
line(out, "using namespace Dawn;", tabs);
line(out, "", tabs);
classGen(out, clazz); line(out, "SceneItemComponentList::SceneItemComponentList() {", tabs);
it = info->begin();
while(it != info->end()) {
auto c = *it;
line(out, "this->append<" + c.clazz + ">();", tabs + " ");
++it;
}
line(out, "}", tabs);
} }
std::vector<std::string> SceneItemComponentRegister::getRequiredFlags() { std::vector<std::string> SceneItemComponentRegister::getRequiredFlags() {