From a6b3247c0ce756e02fec03766993a6ffe6af43c7 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Sun, 12 Jan 2025 18:38:23 +0100 Subject: [PATCH] feat: Add basic part class --- src/objects/base/instance.cpp | 12 ++++++++++-- src/objects/base/instance.h | 6 +++++- src/objects/part.cpp | 16 ++++++++++++++++ src/objects/part.h | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/objects/part.cpp create mode 100644 src/objects/part.h diff --git a/src/objects/base/instance.cpp b/src/objects/base/instance.cpp index 28a2aa6..1fdc358 100644 --- a/src/objects/base/instance.cpp +++ b/src/objects/base/instance.cpp @@ -12,8 +12,16 @@ static InstanceType TYPE_ { InstanceType* Instance::TYPE = &TYPE_; -InstanceType* GetClass() { - return &TYPE_; +// Instance is abstract, so it should not implement GetClass directly +// InstanceType* Instance::GetClass() { +// return &TYPE_; +// } + +Instance::Instance(InstanceType* type) { + this->name = type->className; +} + +Instance::~Instance () { } void Instance::SetParent(std::optional> newParent) { diff --git a/src/objects/base/instance.h b/src/objects/base/instance.h index 614951e..4830698 100644 --- a/src/objects/base/instance.h +++ b/src/objects/base/instance.h @@ -16,11 +16,15 @@ class Instance : std::enable_shared_from_this { private: std::optional> parent; std::vector> children; +protected: + Instance(InstanceType*); + virtual ~Instance(); public: static InstanceType* TYPE; std::string name; - InstanceType* GetClass(); + // Instance is abstract, so it should not implement GetClass directly + virtual InstanceType* GetClass() = 0; void 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 new file mode 100644 index 0000000..e881a8d --- /dev/null +++ b/src/objects/part.cpp @@ -0,0 +1,16 @@ +#include "part.h" + +static InstanceType TYPE_ { + .super = Instance::TYPE, + .className = "Part", + .constructor = &Part::CreateGeneric, +}; + +InstanceType* Part::TYPE = &TYPE_; + +InstanceType* Part::GetClass() { + return &TYPE_; +} + +Part::Part(): Instance(&TYPE_) { +} diff --git a/src/objects/part.h b/src/objects/part.h new file mode 100644 index 0000000..06a282b --- /dev/null +++ b/src/objects/part.h @@ -0,0 +1,14 @@ +#pragma once + +#include "base.h" +#include + +class Part : public Instance { +public: + static InstanceType* TYPE; + + Part(); + + static inline InstanceRef CreateGeneric() { return std::make_shared(); }; + virtual InstanceType* GetClass() override; +}; \ No newline at end of file