feat(engine): add Player class

This commit is contained in:
WindClan 2025-07-08 06:22:14 -04:00 committed by m-doescode
parent dbe79a3567
commit 0134d5c0a9
4 changed files with 50 additions and 2 deletions

View file

@ -0,0 +1,11 @@
#include "player.h"
#include "objects/service/players.h"
#include "objects/datamodel.h"
Player::Player(): Instance(&TYPE) {
dataModel().value()->GetService<Players>()->numPlayers += 1;
}
Player::~Player() {
// Subtract from player count on remove
dataModel().value()->GetService<Players>()->numPlayers -= 1;
}

23
core/src/objects/player.h Normal file
View file

@ -0,0 +1,23 @@
#pragma once
#include "objects/annotation.h"
#include "objects/base/instance.h"
#include "objects/model.h"
#include <memory>
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<Model> 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<Player> New() { return std::make_shared<Player>(); };
static inline std::shared_ptr<Instance> Create() { return std::make_shared<Player>(); };
};

View file

@ -1,8 +1,12 @@
#include "players.h" #include "players.h"
#include "objects/service/workspace.h" #include "objects/service/workspace.h"
#include "objects/datamodel.h" #include "objects/datamodel.h"
#include "objects/player.h"
#include <memory> #include <memory>
int numPlayers;
int maxPlayers;
Players::Players(): Service(&TYPE) { Players::Players(): Service(&TYPE) {
} }
@ -16,4 +20,12 @@ void Players::InitService() {
for (std::shared_ptr<Instance> inst : GetChildren()) { for (std::shared_ptr<Instance> inst : GetChildren()) {
inst->Destroy(); inst->Destroy();
} }
}
std::shared_ptr<Player> Players::createLocalPlayer(int userId) {
std::shared_ptr<Player> newPlr = Player::New();
newPlr->name = "Player"+std::to_string(userId);
newPlr->userId = userId;
dataModel().value()->GetService<Players>()->AddChild(newPlr);
return newPlr;
} }

View file

@ -2,21 +2,23 @@
#include "objects/annotation.h" #include "objects/annotation.h"
#include "objects/base/service.h" #include "objects/base/service.h"
#include "objects/player.h"
class DEF_INST_SERVICE Players : public Service { class DEF_INST_SERVICE Players : public Service {
AUTOGEN_PREAMBLE AUTOGEN_PREAMBLE
protected: protected:
void InitService() override; void InitService() override;
bool initialized = false; bool initialized = false;
public: public:
Players(); Players();
~Players(); ~Players();
static inline std::shared_ptr<Instance> Create() { return std::make_shared<Players>(); }; static inline std::shared_ptr<Instance> Create() { return std::make_shared<Players>(); };
std::shared_ptr<Player> createLocalPlayer(int userId);
DEF_PROP_CATEGORY(DATA) DEF_PROP_CATEGORY(DATA)
DEF_PROP_(readonly,no_save) DEF_PROP_(readonly,no_save)
int numPlayers = 0; int numPlayers = 0;
DEF_PROP int maxPlayers = 6; DEF_PROP int maxPlayers = 10;
DEF_PROP std::weak_ptr<Player> localPlayer;
}; };