Improved compile time significantly
This commit is contained in:
@ -14,7 +14,7 @@
|
||||
#include "locale/LocaleManager.hpp"
|
||||
#include "save/SaveManager.hpp"
|
||||
#include "audio/AudioManager.hpp"
|
||||
#include "scene/SceneItemComponentListItems.hpp"
|
||||
#include "scene/SceneItemComponentList.hpp"
|
||||
|
||||
#define DAWN_GAME_INIT_RESULT_SUCCESS 0
|
||||
#define DAWN_GAME_UPDATE_RESULT_SUCCESS 0
|
||||
@ -25,7 +25,7 @@ namespace Dawn {
|
||||
|
||||
class IDawnGame {
|
||||
protected:
|
||||
SceneItemComponentListItems componentListItems;
|
||||
SceneItemComponentList componentList;
|
||||
|
||||
public:
|
||||
Scene *scene = nullptr;
|
||||
|
@ -135,6 +135,7 @@ namespace Dawn {
|
||||
#if DAWN_DEBUG_BUILD
|
||||
std::vector<struct SceneDebugLine> debugLines;
|
||||
void debugLine(struct SceneDebugLine line);
|
||||
void debugRay(struct SceneDebugRay ray);
|
||||
void debugCube(struct SceneDebugCube cube);
|
||||
void debugOrigin();
|
||||
void debugGrid();
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
namespace Dawn {
|
||||
struct SceneItemComponentRegister {
|
||||
int32_t i;
|
||||
uint8_t i;
|
||||
};
|
||||
|
||||
class SceneItemComponentList {
|
||||
@ -16,10 +16,23 @@ namespace Dawn {
|
||||
std::vector<struct SceneItemComponentRegister> components;
|
||||
|
||||
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>
|
||||
void append() {
|
||||
struct SceneItemComponentRegister 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();
|
||||
};
|
||||
}
|
@ -57,6 +57,14 @@ void Scene::debugLine(struct SceneDebugLine 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) {
|
||||
auto min = cube.min;
|
||||
auto max = cube.max;
|
||||
|
@ -23,6 +23,12 @@ namespace Dawn {
|
||||
glm::mat4 transform = glm::mat4(1.0f);
|
||||
};
|
||||
|
||||
struct SceneDebugRay {
|
||||
glm::vec3 start;
|
||||
glm::vec3 direction;
|
||||
struct Color color = COLOR_RED;
|
||||
};
|
||||
|
||||
struct SceneDebugLine {
|
||||
glm::vec3 v0 = glm::vec3(0, 0, 0);
|
||||
glm::vec3 v1 = glm::vec3(1, 1, 1);
|
||||
|
@ -22,5 +22,13 @@ void TicTacToeGame::onSceneUpdate() {
|
||||
mouse *= 2.0f;
|
||||
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 });
|
||||
}
|
@ -6,6 +6,7 @@
|
||||
#pragma once
|
||||
#include "scene/SceneItemComponent.hpp"
|
||||
#include "TicTacToeTile.hpp"
|
||||
#include "physics/3d/Ray3D.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class TicTacToeGame : public SceneItemComponent {
|
||||
|
@ -117,15 +117,15 @@ function(tool_scenecomponent clazz hfile)
|
||||
)
|
||||
if(NOT 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}"
|
||||
DEPENDS sceneitemcomponentgen
|
||||
)
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
${DAWN_GENERATED_DIR}/scene/SceneItemComponentListItems.cpp
|
||||
)
|
||||
endif()
|
||||
target_include_directories(${DAWN_TARGET_NAME}
|
||||
PUBLIC
|
||||
${DAWN_GENERATED_DIR}
|
||||
)
|
||||
add_dependencies(sceneitemcomponentgen ${clazz}_scenecomponent)
|
||||
add_dependencies(${DAWN_TARGET_NAME} sceneitemcomponentgen_cmd)
|
||||
endfunction()
|
||||
|
@ -14,21 +14,27 @@ void SceneItemComponentRootGen::generate(
|
||||
std::vector<struct SceneItemComponent> *info,
|
||||
std::string tabs = ""
|
||||
) {
|
||||
struct ClassGenInfo clazz;
|
||||
clazz.clazz = "SceneItemComponentListItems";
|
||||
clazz.extend = "SceneItemComponentList";
|
||||
clazz.includes.push_back("#include \"scene/SceneItemComponentList.hpp\"");
|
||||
|
||||
line(out, "#include \"scene/SceneItemComponentList.hpp\"", tabs);
|
||||
line(out, "", tabs);
|
||||
|
||||
auto it = info->begin();
|
||||
while(it != info->end()) {
|
||||
auto c = *it;
|
||||
clazz.includes.push_back("#include \"" + c.header + "\"");
|
||||
line(&clazz.constructorCode, "this->append<" + c.clazz + ">();", "");
|
||||
line(out, "#include \"" + c.header + "\"", tabs);
|
||||
++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() {
|
||||
|
Reference in New Issue
Block a user