diff --git a/core/src/objects/player.cpp b/core/src/objects/player.cpp new file mode 100644 index 0000000..e502ba4 --- /dev/null +++ b/core/src/objects/player.cpp @@ -0,0 +1,11 @@ +#include "player.h" +#include "objects/service/players.h" +#include "objects/datamodel.h" + +Player::Player(): Instance(&TYPE) { + dataModel().value()->GetService()->numPlayers += 1; +} +Player::~Player() { + // Subtract from player count on remove + dataModel().value()->GetService()->numPlayers -= 1; +} \ No newline at end of file diff --git a/core/src/objects/player.h b/core/src/objects/player.h new file mode 100644 index 0000000..7af5b3e --- /dev/null +++ b/core/src/objects/player.h @@ -0,0 +1,23 @@ +#pragma once + +#include "objects/annotation.h" +#include "objects/base/instance.h" +#include "objects/model.h" +#include + +class DEF_INST_(not_creatable) Player : public Instance { + AUTOGEN_PREAMBLE + +public: + Player(); + ~Player(); + + DEF_PROP_CATEGORY(DATA) + DEF_PROP_(readonly) int userId = 0; + DEF_PROP std::weak_ptr character; + DEF_PROP_CATEGORY(TEAM) //placeholder, we cant add TeamColor or Teams yet since no BrickColor + DEF_PROP bool neutral = true; + + static inline std::shared_ptr New() { return std::make_shared(); }; + static inline std::shared_ptr Create() { return std::make_shared(); }; +}; \ No newline at end of file diff --git a/core/src/objects/service/players.cpp b/core/src/objects/service/players.cpp index 4df2c4c..531467e 100644 --- a/core/src/objects/service/players.cpp +++ b/core/src/objects/service/players.cpp @@ -1,8 +1,12 @@ #include "players.h" #include "objects/service/workspace.h" #include "objects/datamodel.h" +#include "objects/player.h" #include +int numPlayers; +int maxPlayers; + Players::Players(): Service(&TYPE) { } @@ -16,4 +20,12 @@ void Players::InitService() { for (std::shared_ptr inst : GetChildren()) { inst->Destroy(); } +} + +std::shared_ptr Players::createLocalPlayer(int userId) { + std::shared_ptr newPlr = Player::New(); + newPlr->name = "Player"+std::to_string(userId); + newPlr->userId = userId; + dataModel().value()->GetService()->AddChild(newPlr); + return newPlr; } \ No newline at end of file diff --git a/core/src/objects/service/players.h b/core/src/objects/service/players.h index e659e61..859639c 100644 --- a/core/src/objects/service/players.h +++ b/core/src/objects/service/players.h @@ -2,21 +2,23 @@ #include "objects/annotation.h" #include "objects/base/service.h" +#include "objects/player.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(); }; + std::shared_ptr createLocalPlayer(int userId); DEF_PROP_CATEGORY(DATA) DEF_PROP_(readonly,no_save) int numPlayers = 0; - DEF_PROP int maxPlayers = 6; + DEF_PROP int maxPlayers = 10; + DEF_PROP std::weak_ptr localPlayer; }; \ No newline at end of file