From 4d62a7d3f80255ff0e19f9f117b4416687660836 Mon Sep 17 00:00:00 2001 From: Tad Walter Date: Thu, 1 Jan 2026 16:51:40 -0500 Subject: [PATCH 1/5] Team and Teams --- Client/App/App.vcproj | 8 ++ Client/App/include/v8datamodel/Team.h | 6 +- Client/App/include/v8datamodel/Teams.h | 15 ++-- Client/App/v8datamodel/Team.cpp | 53 ++++++++++++ Client/App/v8datamodel/Teams.cpp | 107 ++++++++++++++++++++++++ Client/Network/include/Network/Player.h | 15 +++- 6 files changed, 192 insertions(+), 12 deletions(-) create mode 100644 Client/App/v8datamodel/Team.cpp create mode 100644 Client/App/v8datamodel/Teams.cpp diff --git a/Client/App/App.vcproj b/Client/App/App.vcproj index fe1db49b..f0a05a10 100644 --- a/Client/App/App.vcproj +++ b/Client/App/App.vcproj @@ -1278,6 +1278,14 @@ RelativePath=".\v8datamodel\RootInstance.cpp" > + + + + >> getTeams(); - G3D::Color3 getTeamColorForHumanoid(Humanoid*); + boost::shared_ptr>> getTeams() + { + return teams.read(); + } + G3D::Color3 getTeamColorForHumanoid(Humanoid* humanoid); protected: virtual void onChildAdded(Instance*); virtual void onChildRemoving(Instance*); diff --git a/Client/App/v8datamodel/Team.cpp b/Client/App/v8datamodel/Team.cpp new file mode 100644 index 00000000..640f8b4f --- /dev/null +++ b/Client/App/v8datamodel/Team.cpp @@ -0,0 +1,53 @@ +#include "v8datamodel/Team.h" + +namespace RBX +{ + const char* sTeam = "Team"; + + static const Reflection::PropDescriptor prop_Score("Score", "Data", &Team::getScore, &Team::setScore, Reflection::PropertyDescriptor::STANDARD); + static const Reflection::PropDescriptor prop_Color("TeamColor", "Data", &Team::getTeamColor, &Team::setTeamColor, Reflection::PropertyDescriptor::STANDARD); + static const Reflection::PropDescriptor prop_AutoAssignable("AutoAssignable", "Data", &Team::getAutoAssignable, &Team::setAutoAssignable, Reflection::PropertyDescriptor::STANDARD); + + Team::Team() + : score(0), + color(BrickColor::lego_194), + autoAssignable(true), + autoColorCharacters(true) + { + setName("Team"); + color = BrickColor::lego_1; + } + + int Team::getScore() const + { + return score; + } + + void Team::setScore(int newScore) + { + score = newScore; + raisePropertyChanged(prop_Score); + } + + BrickColor Team::getTeamColor() const + { + return color; + } + + void Team::setTeamColor(BrickColor newColor) + { + color = newColor; + raisePropertyChanged(prop_Color); + } + + bool Team::getAutoAssignable() const + { + return autoAssignable; + } + + void Team::setAutoAssignable(bool value) + { + autoAssignable = value; + raisePropertyChanged(prop_AutoAssignable); + } +} \ No newline at end of file diff --git a/Client/App/v8datamodel/Teams.cpp b/Client/App/v8datamodel/Teams.cpp new file mode 100644 index 00000000..49fa0abb --- /dev/null +++ b/Client/App/v8datamodel/Teams.cpp @@ -0,0 +1,107 @@ +#include "v8datamodel/Teams.h" +#include "v8datamodel/ModelInstance.h" +#include "Network/Players.h" + +namespace RBX +{ + const char* sTeams = "Teams"; + + Teams::Teams() + { + setName("Teams"); + } + + Team::~Team() + { + } + + int Teams::getNumPlayersInTeam(BrickColor brickColor) + { + const ServiceProvider* provider = ServiceProvider::findServiceProvider(this); + Network::Players* players = provider->find(); + RBXASSERT(players); + + int numOfPlayers = 0; + for (size_t i = 0; i < players->numChildren(); i++) + { + Network::Player* player = fastDynamicCast(players->getChild(i)); + if (player) + { + if (!player->getNeutral() && player->getTeamColor() == brickColor) + numOfPlayers++; + } + } + + return numOfPlayers; + } + + bool Teams::teamExists(BrickColor brickColor) + { + return getTeamFromTeamColor(brickColor) != NULL; + } + + Team* Teams::getTeamFromTeamColor(BrickColor brickColor) + { + for (size_t i = 0; i < numChildren(); i++) + { + Team* team = fastDynamicCast(getChild(i)); + if (team && team->getTeamColor() == brickColor) + return team; + } + + return NULL; + } + + G3D::Color3 Teams::getTeamColorForHumanoid(Humanoid* humanoid) + { + const ServiceProvider* provider = ServiceProvider::findServiceProvider(this); + Network::Players* players = provider->find(); + RBXASSERT(players); + + for (size_t i = 0; i < players->numChildren(); i++) + { + Network::Player* player = fastDynamicCast(players->getChild(i)); + if (player) + { + if (!player->getNeutral() && player->getCharacter()) + { + ModelInstance* character = player->getCharacter(); + if (character->findFirstChildOfType() == humanoid) + { + return player->getTeamColor().color3(); + } + } + } + } + + return G3D::Color3::white(); + } + + void Teams::assignNewPlayerToTeam(Network::Player* player) + { + BrickColor currentTeam(BrickColor::lego_28); + bool foundTeam = false; + + for (size_t i = 0; i < numChildren(); i++) + { + Team* team = fastDynamicCast(getChild(i)); + if (team) + { + if (team->getAutoAssignable() == true) + { + if (getNumPlayersInTeam(team->getTeamColor()) < currentTeam.number) + { + currentTeam = team->getTeamColor(); + foundTeam = true; + } + } + } + } + + if (foundTeam) + { + player->setTeamColor(currentTeam); + player->setNeutral(false); + } + } +} \ No newline at end of file diff --git a/Client/Network/include/Network/Player.h b/Client/Network/include/Network/Player.h index 8c3cdee0..1bef48de 100644 --- a/Client/Network/include/Network/Player.h +++ b/Client/Network/include/Network/Player.h @@ -66,11 +66,20 @@ namespace RBX public: virtual XmlElement* write(); virtual void setName(const std::string&); - ModelInstance* getCharacter() const; + ModelInstance* getCharacter() const + { + return character.get(); + } void setCharacter(ModelInstance*); - BrickColor getTeamColor() const; + BrickColor getTeamColor() const + { + return teamColor; + } void setTeamColor(BrickColor); - bool getNeutral() const; + bool getNeutral() const + { + return neutral; + } void setNeutral(bool); std::string getCharacterAppearance() const; void setCharacterAppearance(const std::string&); From 2f13c69458dad20b61fdb70192f5bef7c3048230 Mon Sep 17 00:00:00 2001 From: Tad Walter Date: Thu, 1 Jan 2026 17:35:05 -0500 Subject: [PATCH 2/5] Added Changes --- Client/App/v8datamodel/Teams.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Client/App/v8datamodel/Teams.cpp b/Client/App/v8datamodel/Teams.cpp index 49fa0abb..71005b1a 100644 --- a/Client/App/v8datamodel/Teams.cpp +++ b/Client/App/v8datamodel/Teams.cpp @@ -17,8 +17,7 @@ namespace RBX int Teams::getNumPlayersInTeam(BrickColor brickColor) { - const ServiceProvider* provider = ServiceProvider::findServiceProvider(this); - Network::Players* players = provider->find(); + Network::Players* players = ServiceProvider::findServiceProvider(this)->find(); RBXASSERT(players); int numOfPlayers = 0; @@ -54,8 +53,7 @@ namespace RBX G3D::Color3 Teams::getTeamColorForHumanoid(Humanoid* humanoid) { - const ServiceProvider* provider = ServiceProvider::findServiceProvider(this); - Network::Players* players = provider->find(); + Network::Players* players = ServiceProvider::findServiceProvider(this)->find(); RBXASSERT(players); for (size_t i = 0; i < players->numChildren(); i++) @@ -79,7 +77,7 @@ namespace RBX void Teams::assignNewPlayerToTeam(Network::Player* player) { - BrickColor currentTeam(BrickColor::lego_28); + BrickColor currentTeam = BrickColor::lego_28; bool foundTeam = false; for (size_t i = 0; i < numChildren(); i++) From 7ce4741056656fd07d718277c9dd5ec75fc8eccd Mon Sep 17 00:00:00 2001 From: Tad Walter Date: Thu, 1 Jan 2026 17:47:46 -0500 Subject: [PATCH 3/5] Added Def to BrickColor --- Client/App/include/v8datamodel/BrickColor.h | 5 ++++- Client/App/v8datamodel/Team.cpp | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Client/App/include/v8datamodel/BrickColor.h b/Client/App/include/v8datamodel/BrickColor.h index b6d90a48..70e93a59 100644 --- a/Client/App/include/v8datamodel/BrickColor.h +++ b/Client/App/include/v8datamodel/BrickColor.h @@ -172,7 +172,10 @@ namespace RBX public: BrickColor(int number); - BrickColor(); + BrickColor() + { + number = lego_194; + } BrickColor(Number number) : number(number) { diff --git a/Client/App/v8datamodel/Team.cpp b/Client/App/v8datamodel/Team.cpp index 640f8b4f..3431de76 100644 --- a/Client/App/v8datamodel/Team.cpp +++ b/Client/App/v8datamodel/Team.cpp @@ -10,7 +10,6 @@ namespace RBX Team::Team() : score(0), - color(BrickColor::lego_194), autoAssignable(true), autoColorCharacters(true) { From ac0b64bfddff8e57fabc2d079296d2e8e4863fc1 Mon Sep 17 00:00:00 2001 From: Tad Walter Date: Thu, 1 Jan 2026 19:06:49 -0500 Subject: [PATCH 4/5] member initializer --- Client/App/include/v8datamodel/BrickColor.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Client/App/include/v8datamodel/BrickColor.h b/Client/App/include/v8datamodel/BrickColor.h index 70e93a59..9432aac4 100644 --- a/Client/App/include/v8datamodel/BrickColor.h +++ b/Client/App/include/v8datamodel/BrickColor.h @@ -172,10 +172,7 @@ namespace RBX public: BrickColor(int number); - BrickColor() - { - number = lego_194; - } + BrickColor() : number(lego_194) {} BrickColor(Number number) : number(number) { From 14ea03a7f7cb5befd524980dcf71f8d238892399 Mon Sep 17 00:00:00 2001 From: Tad Walter Date: Thu, 1 Jan 2026 19:18:49 -0500 Subject: [PATCH 5/5] separate line --- Client/App/include/v8datamodel/BrickColor.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Client/App/include/v8datamodel/BrickColor.h b/Client/App/include/v8datamodel/BrickColor.h index 9432aac4..2b06df7d 100644 --- a/Client/App/include/v8datamodel/BrickColor.h +++ b/Client/App/include/v8datamodel/BrickColor.h @@ -172,7 +172,10 @@ namespace RBX public: BrickColor(int number); - BrickColor() : number(lego_194) {} + BrickColor() + : number(lego_194) + { + } BrickColor(Number number) : number(number) {