From dbe79a356760d5053642516de6c62c7c2696a4fe Mon Sep 17 00:00:00 2001 From: WindClan Date: Tue, 8 Jul 2025 05:14:29 -0400 Subject: [PATCH] feat(engine): add Players service --- autogen/src/object/codegen.cpp | 2 +- core/src/objects/datamodel.cpp | 2 ++ core/src/objects/meta.cpp | 2 ++ core/src/objects/service/players.cpp | 19 +++++++++++++++++++ core/src/objects/service/players.h | 22 ++++++++++++++++++++++ 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 core/src/objects/service/players.cpp create mode 100644 core/src/objects/service/players.h diff --git a/autogen/src/object/codegen.cpp b/autogen/src/object/codegen.cpp index fce06ca..712d264 100644 --- a/autogen/src/object/codegen.cpp +++ b/autogen/src/object/codegen.cpp @@ -79,7 +79,7 @@ static void writePropertySetHandler(std::ofstream& out, ClassAnalysis state) { std::string subtype = parseWeakPtr(prop.backingFieldType); if (prop.flags & PropertyFlag_Readonly) { - out << "\n return AssignToReadOnlyMember(GetClass()->className, name)"; + out << "\n return AssignToReadOnlyMember(GetClass()->className, name);"; } else if (prop.cframeMember == CFrameMember_Position) { out << "\n this->" << prop.fieldName << " = this->" << prop.fieldName << ".Rotation() + value.get();"; } else if (prop.cframeMember == CFrameMember_Rotation) { diff --git a/core/src/objects/datamodel.cpp b/core/src/objects/datamodel.cpp index 899e071..d097643 100644 --- a/core/src/objects/datamodel.cpp +++ b/core/src/objects/datamodel.cpp @@ -7,6 +7,7 @@ #include "objects/service/script/serverscriptservice.h" #include "datatypes/variant.h" #include "objects/service/workspace.h" +#include "objects/service/players.h" #include "logger.h" #include "panic.h" #include @@ -23,6 +24,7 @@ DataModel::DataModel() void DataModel::Init(bool runMode) { // Create default services GetService(); + GetService(); GetService(); // Init all services diff --git a/core/src/objects/meta.cpp b/core/src/objects/meta.cpp index eec6931..db5622f 100644 --- a/core/src/objects/meta.cpp +++ b/core/src/objects/meta.cpp @@ -13,6 +13,7 @@ #include "objects/service/script/serverscriptservice.h" #include "objects/service/selection.h" #include "objects/service/workspace.h" +#include "objects/service/players.h" #include "objects/datamodel.h" std::map INSTANCE_MAP = { @@ -32,6 +33,7 @@ std::map INSTANCE_MAP = { // Services { "Workspace", &Workspace::TYPE }, + { "Players", &Players::TYPE }, { "JointsService", &JointsService::TYPE }, { "ScriptContext", &ScriptContext::TYPE }, { "ServerScriptService", &ServerScriptService::TYPE }, diff --git a/core/src/objects/service/players.cpp b/core/src/objects/service/players.cpp new file mode 100644 index 0000000..4df2c4c --- /dev/null +++ b/core/src/objects/service/players.cpp @@ -0,0 +1,19 @@ +#include "players.h" +#include "objects/service/workspace.h" +#include "objects/datamodel.h" +#include + +Players::Players(): Service(&TYPE) { +} + +Players::~Players() = default; + +void Players::InitService() { + if (initialized) return; + initialized = true; + + // Clear any players if they for some reason exist + for (std::shared_ptr inst : GetChildren()) { + inst->Destroy(); + } +} \ No newline at end of file diff --git a/core/src/objects/service/players.h b/core/src/objects/service/players.h new file mode 100644 index 0000000..e659e61 --- /dev/null +++ b/core/src/objects/service/players.h @@ -0,0 +1,22 @@ +#pragma once + +#include "objects/annotation.h" +#include "objects/base/service.h" + +class DEF_INST_SERVICE Players : public Service { + AUTOGEN_PREAMBLE +protected: + void InitService() override; + bool initialized = false; + +public: + Players(); + ~Players(); + + static inline std::shared_ptr Create() { return std::make_shared(); }; + + DEF_PROP_CATEGORY(DATA) + DEF_PROP_(readonly,no_save) + int numPlayers = 0; + DEF_PROP int maxPlayers = 6; +}; \ No newline at end of file