From da1f6b1d24674c8a8a47885d1c1133be8e8eed94 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Tue, 4 Feb 2025 20:18:58 +0100 Subject: [PATCH] refactor: TYPE_ -> static TYPE --- editor/panes/explorermodel.cpp | 4 ++-- editor/panes/explorermodel.h | 2 +- src/objects/base/instance.cpp | 8 +++----- src/objects/base/instance.h | 9 +++++---- src/objects/part.cpp | 12 +++++------- src/objects/part.h | 4 ++-- src/objects/workspace.cpp | 12 +++++------- src/objects/workspace.h | 4 ++-- 8 files changed, 25 insertions(+), 30 deletions(-) diff --git a/editor/panes/explorermodel.cpp b/editor/panes/explorermodel.cpp index 75d3265..b1bed69 100644 --- a/editor/panes/explorermodel.cpp +++ b/editor/panes/explorermodel.cpp @@ -148,10 +148,10 @@ Qt::ItemFlags ExplorerModel::flags(const QModelIndex &index) const : Qt::NoItemFlags | Qt::ItemIsDropEnabled; } -QImage ExplorerModel::iconOf(InstanceType* type) const { +QImage ExplorerModel::iconOf(const InstanceType* type) const { if (instanceIconCache.count(type->className)) return instanceIconCache[type->className]; - InstanceType* currentClass = type; + const InstanceType* currentClass = type; while (currentClass->explorerIcon.empty()) currentClass = currentClass->super; QImage icon("assets/icons/" + QString::fromStdString(currentClass->explorerIcon)); diff --git a/editor/panes/explorermodel.h b/editor/panes/explorermodel.h index aee8860..ed78f2a 100644 --- a/editor/panes/explorermodel.h +++ b/editor/panes/explorermodel.h @@ -45,7 +45,7 @@ public: private: InstanceRef rootItem; QModelIndex toIndex(InstanceRef item); - QImage iconOf(InstanceType* type) const; + QImage iconOf(const InstanceType* type) const; }; // #endif \ No newline at end of file diff --git a/src/objects/base/instance.cpp b/src/objects/base/instance.cpp index 88f58b4..e0af319 100644 --- a/src/objects/base/instance.cpp +++ b/src/objects/base/instance.cpp @@ -10,21 +10,19 @@ #include // Static so that this variable name is "local" to this source file -static InstanceType TYPE_ { +const InstanceType Instance::TYPE = { .super = NULL, .className = "Instance", .constructor = NULL, // Instance is abstract and therefore not creatable .explorerIcon = "instance", }; -InstanceType* Instance::TYPE = &TYPE_; - // Instance is abstract, so it should not implement GetClass directly // InstanceType* Instance::GetClass() { // return &TYPE_; // } -Instance::Instance(InstanceType* type) { +Instance::Instance(const InstanceType* type) { this->name = type->className; this->memberMap = std::make_unique( MemberMap { @@ -48,7 +46,7 @@ bool Instance::ancestryContinuityCheck(std::optional> } bool Instance::SetParent(std::optional> newParent) { - if (!ancestryContinuityCheck(newParent)) + if (this->parentLocked || !ancestryContinuityCheck(newParent)) return false; auto lastParent = GetParent(); diff --git a/src/objects/base/instance.h b/src/objects/base/instance.h index e85aded..51d485c 100644 --- a/src/objects/base/instance.h +++ b/src/objects/base/instance.h @@ -19,7 +19,7 @@ typedef std::shared_ptr(*InstanceConstructor)(); // Struct describing information about an instance struct InstanceType { - InstanceType* super; // May be null + const InstanceType* super; // May be null std::string className; InstanceConstructor constructor; std::string explorerIcon = ""; @@ -38,18 +38,19 @@ private: bool ancestryContinuityCheck(std::optional> newParent); protected: + bool parentLocked; std::unique_ptr memberMap; - Instance(InstanceType*); + Instance(const InstanceType*); virtual ~Instance(); virtual void OnParentUpdated(std::optional> oldParent, std::optional> newParent); public: - static InstanceType* TYPE; + const static InstanceType TYPE; std::string name; // Instance is abstract, so it should not implement GetClass directly - virtual InstanceType* GetClass() = 0; + virtual const InstanceType* GetClass() = 0; bool SetParent(std::optional> newParent); std::optional> GetParent(); inline const std::vector> GetChildren() { return children; } diff --git a/src/objects/part.cpp b/src/objects/part.cpp index 0bf0d36..099fd24 100644 --- a/src/objects/part.cpp +++ b/src/objects/part.cpp @@ -6,23 +6,21 @@ #include #include "physics/simulation.h" -static InstanceType TYPE_ { - .super = Instance::TYPE, +const InstanceType Part::TYPE = { + .super = &Instance::TYPE, .className = "Part", .constructor = &Part::CreateGeneric, .explorerIcon = "part", }; -InstanceType* Part::TYPE = &TYPE_; - -InstanceType* Part::GetClass() { - return &TYPE_; +const InstanceType* Part::GetClass() { + return &TYPE; } Part::Part(): Part(PartConstructParams {}) { } -Part::Part(PartConstructParams params): Instance(&TYPE_), position(params.position), rotation(params.rotation), +Part::Part(PartConstructParams params): Instance(&TYPE), position(params.position), rotation(params.rotation), scale(params.scale), material(params.material), anchored(params.anchored) { this->memberMap = std::make_unique(MemberMap { .super = std::move(this->memberMap), diff --git a/src/objects/part.h b/src/objects/part.h index 4268533..cc9a899 100644 --- a/src/objects/part.h +++ b/src/objects/part.h @@ -24,7 +24,7 @@ protected: void OnParentUpdated(std::optional> oldParent, std::optional> newParent) override; void onUpdated(std::string); public: - static InstanceType* TYPE; + const static InstanceType TYPE; // TODO: Switch these over to our dedicated datatypes glm::vec3 position; @@ -43,5 +43,5 @@ public: static inline std::shared_ptr New() { return std::make_shared(); }; static inline std::shared_ptr New(PartConstructParams params) { return std::make_shared(params); }; static inline InstanceRef CreateGeneric() { return std::make_shared(); }; - virtual InstanceType* GetClass() override; + virtual const InstanceType* GetClass() override; }; \ No newline at end of file diff --git a/src/objects/workspace.cpp b/src/objects/workspace.cpp index 594d4b2..9b75220 100644 --- a/src/objects/workspace.cpp +++ b/src/objects/workspace.cpp @@ -1,16 +1,14 @@ #include "workspace.h" -static InstanceType TYPE_ { - .super = Instance::TYPE, +const InstanceType Workspace::TYPE = { + .super = &Instance::TYPE, .className = "Workspace", .constructor = &Workspace::Create, }; -InstanceType* Workspace::TYPE = &TYPE_; - -InstanceType* Workspace::GetClass() { - return &TYPE_; +const InstanceType* Workspace::GetClass() { + return &TYPE; } -Workspace::Workspace(): Instance(&TYPE_) { +Workspace::Workspace(): Instance(&TYPE) { } diff --git a/src/objects/workspace.h b/src/objects/workspace.h index 11a1e09..a70eebe 100644 --- a/src/objects/workspace.h +++ b/src/objects/workspace.h @@ -6,11 +6,11 @@ class Workspace : public Instance { //private: public: - static InstanceType* TYPE; + const static InstanceType TYPE; Workspace(); static inline std::shared_ptr New() { return std::make_shared(); }; static inline InstanceRef Create() { return std::make_shared(); }; - virtual InstanceType* GetClass() override; + virtual const InstanceType* GetClass() override; }; \ No newline at end of file