From 621ae30464b68579309f8e383e547fa4b28dde06 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Tue, 6 May 2025 15:58:49 +0200 Subject: [PATCH] cleanup: detangled many includes --- autogen/src/data/codegen.cpp | 1 + autogen/src/object/codegen.cpp | 1 + core/src/common.cpp | 2 + core/src/common.h | 1 + core/src/datatypes/base.cpp | 1 + core/src/datatypes/base.h | 3 +- core/src/datatypes/cframe.cpp | 2 + core/src/datatypes/cframe.h | 8 ++-- core/src/datatypes/color3.cpp | 6 ++- core/src/datatypes/color3.h | 2 - core/src/datatypes/meta.cpp | 1 + core/src/datatypes/ref.cpp | 1 + core/src/datatypes/vector.cpp | 8 +++- core/src/datatypes/vector.h | 9 ++--- core/src/objects/base/instance.cpp | 11 +---- core/src/objects/base/instance.h | 3 +- core/src/objects/base/member.h | 40 +------------------ core/src/objects/base/service.cpp | 1 + core/src/objects/base/service.h | 5 ++- core/src/objects/datamodel.cpp | 2 + core/src/objects/joint/jointinstance.h | 2 +- core/src/objects/joint/rotate.h | 4 +- core/src/objects/joint/rotatev.h | 3 +- core/src/objects/joint/snap.h | 4 +- core/src/objects/joint/weld.h | 4 +- core/src/objects/jointsservice.cpp | 1 + core/src/objects/meta.cpp | 1 + core/src/objects/part.cpp | 36 ----------------- core/src/objects/script.cpp | 2 + .../objects/script/serverscriptservice.cpp | 1 + core/src/objects/workspace.cpp | 1 + core/src/objects/workspace.h | 3 ++ editor/mainglwidget.cpp | 1 + editor/mainwindow.cpp | 1 + editor/panes/propertiesview.cpp | 1 + tools/incltree.sh | 5 +++ 36 files changed, 71 insertions(+), 107 deletions(-) create mode 100755 tools/incltree.sh diff --git a/autogen/src/data/codegen.cpp b/autogen/src/data/codegen.cpp index 17abd33..eb4234a 100644 --- a/autogen/src/data/codegen.cpp +++ b/autogen/src/data/codegen.cpp @@ -417,6 +417,7 @@ void data::writeCodeForClass(std::ofstream& out, std::string headerPath, ClassAn out << "#define __AUTOGEN_EXTRA_INCLUDES__\n"; out << "#include \"" << headerPath << "\"\n\n"; out << "#include \"datatypes/meta.h\"\n"; + out << "#include \n"; out << "#include \"lua.h\"\n\n"; out << "const Data::TypeInfo " << fqn << "::TYPE = {\n" << " .name = \"" << state.serializedName << "\",\n" diff --git a/autogen/src/object/codegen.cpp b/autogen/src/object/codegen.cpp index d10c8f2..3961b6a 100644 --- a/autogen/src/object/codegen.cpp +++ b/autogen/src/object/codegen.cpp @@ -223,6 +223,7 @@ void object::writeCodeForClass(std::ofstream& out, std::string headerPath, Class out << "#define __AUTOGEN_EXTRA_INCLUDES__\n"; out << "#include \"" << state.headerPath << "\"\n\n"; + out << "#include \"datatypes/meta.h\"\n\n"; out << "const InstanceType " << state.name << "::TYPE = {\n" << " .super = &" << state.baseClass << "::TYPE,\n" << " .className = \"" << state.name << "\",\n" diff --git a/core/src/common.cpp b/core/src/common.cpp index bc5c1dd..8ac5714 100644 --- a/core/src/common.cpp +++ b/core/src/common.cpp @@ -1,5 +1,7 @@ // TEMPORARY COMMON DATA FOR DIFFERENT INTERNAL COMPONENTS +#include "objects/datamodel.h" +#include "datatypes/meta.h" #include "common.h" #include diff --git a/core/src/common.h b/core/src/common.h index 2faae1b..4234adb 100644 --- a/core/src/common.h +++ b/core/src/common.h @@ -2,6 +2,7 @@ #include "objects/base/instance.h" #include "objects/handles.h" #include "objects/workspace.h" +#include "objects/datamodel.h" #include "camera.h" #include #include diff --git a/core/src/datatypes/base.cpp b/core/src/datatypes/base.cpp index 92ca236..56beb07 100644 --- a/core/src/datatypes/base.cpp +++ b/core/src/datatypes/base.cpp @@ -3,6 +3,7 @@ #include "meta.h" #include #include +#include #include "lua.h" #define IMPL_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE, TYPE_NAME) Data::CLASS_NAME::CLASS_NAME(WRAPPED_TYPE in) : value(in) {} \ diff --git a/core/src/datatypes/base.h b/core/src/datatypes/base.h index 5819673..0048f19 100644 --- a/core/src/datatypes/base.h +++ b/core/src/datatypes/base.h @@ -3,12 +3,13 @@ #include #include #include -#include #include "error/result.h" #include "error/data.h" extern "C" { typedef struct lua_State lua_State; } +namespace pugi { class xml_node; }; + #define DEF_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE) class CLASS_NAME : public Data::Base { \ WRAPPED_TYPE value; \ public: \ diff --git a/core/src/datatypes/cframe.cpp b/core/src/datatypes/cframe.cpp index 031c683..d1fe67f 100644 --- a/core/src/datatypes/cframe.cpp +++ b/core/src/datatypes/cframe.cpp @@ -6,6 +6,8 @@ #include #include #include +#include "datatypes/meta.h" +#include #define GLM_ENABLE_EXPERIMENTAL #include // #include "meta.h" // IWYU pragma: keep diff --git a/core/src/datatypes/cframe.h b/core/src/datatypes/cframe.h index 4de284b..a4aca7f 100644 --- a/core/src/datatypes/cframe.h +++ b/core/src/datatypes/cframe.h @@ -6,10 +6,8 @@ #include #include #include -#include -#include -namespace rp = reactphysics3d; +namespace reactphysics3d { class Transform; }; namespace Data { class DEF_DATA_(name="CoordinateFrame") CFrame : public Base { @@ -26,7 +24,7 @@ namespace Data { DEF_DATA_CTOR CFrame(); DEF_DATA_CTOR CFrame(float x, float y, float z, float R00, float R01, float R02, float R10, float R11, float R12, float R20, float R21, float R22); DEF_DATA_CTOR CFrame(Vector3 , Vector3 lookAt, Vector3 up = Vector3(0, 1, 0)); - CFrame(const rp::Transform&); + CFrame(const reactphysics3d::Transform&); CFrame(Vector3 position, glm::quat quat); ~CFrame(); @@ -43,7 +41,7 @@ namespace Data { static void PushLuaLibrary(lua_State*); operator glm::mat4() const; - operator rp::Transform() const; + operator reactphysics3d::Transform() const; //inline static CFrame identity() { } DEF_DATA_PROP inline Vector3 Position() const { return translation; } diff --git a/core/src/datatypes/color3.cpp b/core/src/datatypes/color3.cpp index 8c2d155..17ae46d 100644 --- a/core/src/datatypes/color3.cpp +++ b/core/src/datatypes/color3.cpp @@ -1,6 +1,8 @@ #include "color3.h" -#include "meta.h" // IWYU pragma: keep -#include "panic.h" +#include "datatypes/meta.h" +#include +#include +#include Data::Color3::Color3(float r, float g, float b) : r(std::clamp(r, 0.f, 1.f)), g(std::clamp(g, 0.f, 1.f)), b(std::clamp(b, 0.f, 1.f)) {}; Data::Color3::Color3(const glm::vec3& vec) : r(std::clamp(vec.x, 0.f, 1.f)), g(std::clamp(vec.y, 0.f, 1.f)), b(std::clamp(vec.z, 0.f, 1.f)) {}; diff --git a/core/src/datatypes/color3.h b/core/src/datatypes/color3.h index 87f86fb..f9fcb12 100644 --- a/core/src/datatypes/color3.h +++ b/core/src/datatypes/color3.h @@ -2,9 +2,7 @@ #include "base.h" #include "datatypes/annotation.h" -#include #include -#include namespace Data { class DEF_DATA Color3 : public Base { diff --git a/core/src/datatypes/meta.cpp b/core/src/datatypes/meta.cpp index d83c56f..35aba4d 100644 --- a/core/src/datatypes/meta.cpp +++ b/core/src/datatypes/meta.cpp @@ -4,6 +4,7 @@ #include "datatypes/ref.h" #include "logger.h" #include "panic.h" +#include #include Data::String Data::Variant::ToString() const { diff --git a/core/src/datatypes/ref.cpp b/core/src/datatypes/ref.cpp index d8bfa94..3aa35a1 100644 --- a/core/src/datatypes/ref.cpp +++ b/core/src/datatypes/ref.cpp @@ -8,6 +8,7 @@ #include "objects/base/instance.h" #include "lua.h" #include "objects/base/member.h" +#include Data::InstanceRef::InstanceRef() {}; Data::InstanceRef::InstanceRef(std::weak_ptr instance) : ref(instance) {}; diff --git a/core/src/datatypes/vector.cpp b/core/src/datatypes/vector.cpp index 5acff69..ebf3092 100644 --- a/core/src/datatypes/vector.cpp +++ b/core/src/datatypes/vector.cpp @@ -2,9 +2,15 @@ #include #include #include +#include +#include #include +#include #include "datatypes/base.h" -#include "meta.h" // IWYU pragma: keep +#include "datatypes/meta.h" +#include + +namespace rp = reactphysics3d; Data::Vector3::Vector3() : vector(glm::vec3(0, 0, 0)) {}; Data::Vector3::Vector3(const glm::vec3& src) : vector(src) {}; diff --git a/core/src/datatypes/vector.h b/core/src/datatypes/vector.h index 03062c4..90bca11 100644 --- a/core/src/datatypes/vector.h +++ b/core/src/datatypes/vector.h @@ -2,11 +2,10 @@ #include "base.h" #include "datatypes/annotation.h" -#include #include -#include +#include -namespace rp = reactphysics3d; +namespace reactphysics3d { class Vector3; }; namespace Data { class DEF_DATA_(from_string) Vector3 : public Base { @@ -17,7 +16,7 @@ namespace Data { DEF_DATA_CTOR Vector3(); DEF_DATA_CTOR Vector3(float x, float y, float z); Vector3(const glm::vec3&); - Vector3(const rp::Vector3&); + Vector3(const reactphysics3d::Vector3&); ~Vector3(); DEF_DATA_PROP static Data::Vector3 ZERO; @@ -32,7 +31,7 @@ namespace Data { static void PushLuaLibrary(lua_State*); operator glm::vec3() const; - operator rp::Vector3() const; + operator reactphysics3d::Vector3() const; DEF_DATA_PROP inline float X() const { return vector.x; } DEF_DATA_PROP inline float Y() const { return vector.y; } diff --git a/core/src/objects/base/instance.cpp b/core/src/objects/base/instance.cpp index 17c2614..e7607cd 100644 --- a/core/src/objects/base/instance.cpp +++ b/core/src/objects/base/instance.cpp @@ -6,6 +6,7 @@ #include "error/instance.h" #include "objects/base/member.h" #include "objects/base/refstate.h" +#include "objects/datamodel.h" #include "objects/meta.h" #include "logger.h" #include "panic.h" @@ -17,6 +18,7 @@ #include #include #include +#include #include "ptr_helpers.h" // Static so that this variable name is "local" to this source file @@ -32,15 +34,6 @@ const InstanceType Instance::TYPE = { // return &TYPE_; // } -constexpr FieldCodec classNameCodec() { - return FieldCodec { - .write = nullptr, - .read = [](void* source) -> Data::Variant { - return Data::String(((const InstanceType*)source)->className); - }, - }; -} - Instance::Instance(const InstanceType* type) { this->name = type->className; } diff --git a/core/src/objects/base/instance.h b/core/src/objects/base/instance.h index 2a28ff2..69d4c43 100644 --- a/core/src/objects/base/instance.h +++ b/core/src/objects/base/instance.h @@ -10,7 +10,6 @@ #include #include #include -#include #include "error/instance.h" #include "error/result.h" @@ -23,6 +22,8 @@ typedef std::shared_ptr(*InstanceConstructor)(); class DataModel; class Workspace; +namespace pugi { class xml_node; }; + typedef int InstanceFlags; // This instance should only be instantiated in special circumstances (i.e. by DataModel) and should be creatable directly via any API const InstanceFlags INSTANCE_NOTCREATABLE = (InstanceFlags)1<<0; diff --git a/core/src/objects/base/member.h b/core/src/objects/base/member.h index aaaaa19..d971b8f 100644 --- a/core/src/objects/base/member.h +++ b/core/src/objects/base/member.h @@ -1,48 +1,10 @@ #pragma once -#include "../../datatypes/base.h" -#include "datatypes/meta.h" -#include -#include -#include -#include +#include "datatypes/base.h" #include class Instance; -struct FieldCodec { - void (*write)(Data::Variant source, void* destination); - Data::Variant (*read)(void* source); -}; - -template -constexpr FieldCodec fieldCodecOf() { - return FieldCodec { - .write = [](Data::Variant source, void* destination) { - *(U*)destination = (U)source.get(); - }, - .read = [](void* source) -> Data::Variant { - return T(*(U*)source); - }, - }; -} - -template -constexpr FieldCodec fieldCodecOf() { - return FieldCodec { - .write = [](Data::Variant source, void* destination) { - *(T*)destination = source.get(); - }, - .read = [](void* source) -> Data::Variant { - return *(T*)source; - }, - }; -} - -template -std::function memberFunctionOf(void(T::*func)(std::string), T* obj) { - return std::bind(func, obj, std::placeholders::_1); -} typedef int PropertyFlags; const PropertyFlags PROP_HIDDEN = 1 << 0; // Hidden from the editor diff --git a/core/src/objects/base/service.cpp b/core/src/objects/base/service.cpp index d1ae37a..f183884 100644 --- a/core/src/objects/base/service.cpp +++ b/core/src/objects/base/service.cpp @@ -1,4 +1,5 @@ #include "service.h" +#include "objects/datamodel.h" #include "logger.h" #include "panic.h" #include diff --git a/core/src/objects/base/service.h b/core/src/objects/base/service.h index 50da1d2..c519741 100644 --- a/core/src/objects/base/service.h +++ b/core/src/objects/base/service.h @@ -2,8 +2,11 @@ // Services are top-level singletons and belong to a specific DataModel // They serve one specific task and can be accessed using game:GetService -#include "objects/datamodel.h" +#include "objects/base/instance.h" #include + +class DataModel; + class Service : public Instance { protected: Service(const InstanceType* type); diff --git a/core/src/objects/datamodel.cpp b/core/src/objects/datamodel.cpp index 543810a..70473e3 100644 --- a/core/src/objects/datamodel.cpp +++ b/core/src/objects/datamodel.cpp @@ -5,9 +5,11 @@ #include "objects/base/service.h" #include "objects/meta.h" #include "objects/script/serverscriptservice.h" +#include "datatypes/meta.h" #include "workspace.h" #include "logger.h" #include "panic.h" +#include #include #include #include diff --git a/core/src/objects/joint/jointinstance.h b/core/src/objects/joint/jointinstance.h index 4e98876..bc12a21 100644 --- a/core/src/objects/joint/jointinstance.h +++ b/core/src/objects/joint/jointinstance.h @@ -4,7 +4,7 @@ #include "../annotation.h" #include #include -#include +#include "datatypes/cframe.h" //this is necessary ebcause we use std::weak_ptr without including it in this file #ifdef __AUTOGEN_EXTRA_INCLUDES__ diff --git a/core/src/objects/joint/rotate.h b/core/src/objects/joint/rotate.h index 37dac97..291829a 100644 --- a/core/src/objects/joint/rotate.h +++ b/core/src/objects/joint/rotate.h @@ -5,10 +5,12 @@ #include "objects/joint/jointinstance.h" #include +namespace reactphysics3d { class HingeJoint; } + class DEF_INST Rotate : public JointInstance { AUTOGEN_PREAMBLE - rp::HingeJoint* joint = nullptr; + reactphysics3d::HingeJoint* joint = nullptr; virtual void buildJoint() override; virtual void breakJoint() override; diff --git a/core/src/objects/joint/rotatev.h b/core/src/objects/joint/rotatev.h index 5e32c6b..945ac03 100644 --- a/core/src/objects/joint/rotatev.h +++ b/core/src/objects/joint/rotatev.h @@ -4,11 +4,12 @@ #include "objects/base/instance.h" #include "objects/joint/jointinstance.h" #include +namespace reactphysics3d { class HingeJoint; } class DEF_INST RotateV : public JointInstance { AUTOGEN_PREAMBLE - rp::HingeJoint* joint = nullptr; + reactphysics3d::HingeJoint* joint = nullptr; virtual void buildJoint() override; virtual void breakJoint() override; diff --git a/core/src/objects/joint/snap.h b/core/src/objects/joint/snap.h index 3f8a327..13b5f76 100644 --- a/core/src/objects/joint/snap.h +++ b/core/src/objects/joint/snap.h @@ -5,10 +5,12 @@ #include "objects/joint/jointinstance.h" #include +namespace reactphysics3d { class FixedJoint; } + class DEF_INST Snap : public JointInstance { AUTOGEN_PREAMBLE - rp::FixedJoint* joint = nullptr; + reactphysics3d::FixedJoint* joint = nullptr; virtual void buildJoint() override; virtual void breakJoint() override; diff --git a/core/src/objects/joint/weld.h b/core/src/objects/joint/weld.h index 1d2f63d..2186199 100644 --- a/core/src/objects/joint/weld.h +++ b/core/src/objects/joint/weld.h @@ -5,10 +5,12 @@ #include "objects/joint/jointinstance.h" #include +namespace reactphysics3d { class FixedJoint; } + class DEF_INST Weld : public JointInstance { AUTOGEN_PREAMBLE - rp::FixedJoint* joint = nullptr; + reactphysics3d::FixedJoint* joint = nullptr; virtual void buildJoint() override; virtual void breakJoint() override; diff --git a/core/src/objects/jointsservice.cpp b/core/src/objects/jointsservice.cpp index 133832e..8126a0a 100644 --- a/core/src/objects/jointsservice.cpp +++ b/core/src/objects/jointsservice.cpp @@ -1,5 +1,6 @@ #include "jointsservice.h" #include "workspace.h" +#include "datamodel.h" #include JointsService::JointsService(): Service(&TYPE) { diff --git a/core/src/objects/meta.cpp b/core/src/objects/meta.cpp index dc1b0bd..21428ad 100644 --- a/core/src/objects/meta.cpp +++ b/core/src/objects/meta.cpp @@ -10,6 +10,7 @@ #include "objects/script/scriptcontext.h" #include "objects/script/serverscriptservice.h" #include "objects/workspace.h" +#include "objects/datamodel.h" std::map INSTANCE_MAP = { { "Instance", &Instance::TYPE }, diff --git a/core/src/objects/part.cpp b/core/src/objects/part.cpp index fcfbb5e..2f527b3 100644 --- a/core/src/objects/part.cpp +++ b/core/src/objects/part.cpp @@ -19,42 +19,6 @@ #include #include -// template -// constexpr FieldCodec fieldCodecOf() { -// return FieldCodec { -// .write = [](Data::Variant source, void* destination) { -// *(U*)destination = (U)source.get(); -// }, -// .read = [](void* source) -> Data::Variant { -// return T(*(U*)source); -// }, -// }; -// } - -constexpr FieldCodec cframePositionCodec() { - return FieldCodec { - .write = [](Data::Variant source, void* destination) { - CFrame* cframe = static_cast(destination); - *cframe = cframe->Rotation() + source.get(); - }, - .read = [](void* source) -> Data::Variant { - return static_cast(source)->Position(); - }, - }; -} - -constexpr FieldCodec cframeRotationCodec() { - return FieldCodec { - .write = [](Data::Variant source, void* destination) { - CFrame* cframe = static_cast(destination); - *cframe = CFrame::FromEulerAnglesXYZ(source.get()) + cframe->Position(); - }, - .read = [](void* source) -> Data::Variant { - return static_cast(source)->ToEulerAnglesXYZ(); - }, - }; -} - Part::Part(): Part(PartConstructParams { .size = glm::vec3(2, 1.2, 4), .color = Color3(0.639216f, 0.635294f, 0.647059f) }) { } diff --git a/core/src/objects/script.cpp b/core/src/objects/script.cpp index bff5895..0b1349e 100644 --- a/core/src/objects/script.cpp +++ b/core/src/objects/script.cpp @@ -4,6 +4,8 @@ #include "objects/base/member.h" #include "objects/script/scriptcontext.h" #include "objects/workspace.h" +#include "objects/datamodel.h" +#include "datatypes/ref.h" #include "lua.h" Script::Script(): Instance(&TYPE) { diff --git a/core/src/objects/script/serverscriptservice.cpp b/core/src/objects/script/serverscriptservice.cpp index 920b7ce..e24c98b 100644 --- a/core/src/objects/script/serverscriptservice.cpp +++ b/core/src/objects/script/serverscriptservice.cpp @@ -1,6 +1,7 @@ #include "serverscriptservice.h" #include "objects/script.h" #include "objects/workspace.h" +#include "objects/datamodel.h" ServerScriptService::ServerScriptService(): Service(&TYPE) { } diff --git a/core/src/objects/workspace.cpp b/core/src/objects/workspace.cpp index 4b77d18..925039e 100644 --- a/core/src/objects/workspace.cpp +++ b/core/src/objects/workspace.cpp @@ -3,6 +3,7 @@ #include "objects/base/instance.h" #include "objects/jointsservice.h" #include "objects/joint/jointinstance.h" +#include "objects/datamodel.h" #include "physics/util.h" #include #include diff --git a/core/src/objects/workspace.h b/core/src/objects/workspace.h index 1853cb0..e1fe8e5 100644 --- a/core/src/objects/workspace.h +++ b/core/src/objects/workspace.h @@ -2,11 +2,14 @@ #include "objects/annotation.h" #include "objects/base/service.h" +#include #include #include #include #include +namespace rp = reactphysics3d; + struct RaycastResult { rp::Vector3 worldPoint; rp::Vector3 worldNormal; diff --git a/editor/mainglwidget.cpp b/editor/mainglwidget.cpp index 1d421d0..f2b6ee3 100755 --- a/editor/mainglwidget.cpp +++ b/editor/mainglwidget.cpp @@ -13,6 +13,7 @@ #include "physics/util.h" #include "rendering/renderer.h" #include "rendering/shader.h" +#include "datatypes/meta.h" #define PI 3.14159 diff --git a/editor/mainwindow.cpp b/editor/mainwindow.cpp index 80c5cb3..dbb339c 100644 --- a/editor/mainwindow.cpp +++ b/editor/mainwindow.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #ifdef _NDEBUG #define NDEBUG diff --git a/editor/panes/propertiesview.cpp b/editor/panes/propertiesview.cpp index f91f2d6..1637ddf 100644 --- a/editor/panes/propertiesview.cpp +++ b/editor/panes/propertiesview.cpp @@ -1,6 +1,7 @@ #include "panes/propertiesview.h" #include "common.h" #include "datatypes/base.h" +#include "datatypes/meta.h" #include "objects/base/member.h" #include diff --git a/tools/incltree.sh b/tools/incltree.sh new file mode 100755 index 0000000..138ec05 --- /dev/null +++ b/tools/incltree.sh @@ -0,0 +1,5 @@ +#!/usr/bin/bash + +(cd core/src; cinclude2dot --paths > /tmp/tree.dot) +dot -Tsvg /tmp/tree.dot -o /tmp/tree.svg +inkscape /tmp/tree.svg & \ No newline at end of file