blob: f4c79984b1cfe526835c88f3a175aa57d6f4ce03 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#pragma once
#include "StarDrawable.hpp"
#include "StarUuid.hpp"
#include "StarJsonRpc.hpp"
#include "StarWarping.hpp"
#include "StarThread.hpp"
#include "StarDamageTypes.hpp"
namespace Star {
STAR_CLASS(TeamManager);
class TeamManager {
public:
TeamManager();
JsonRpcHandlers rpcHandlers();
void setConnectedPlayers(StringMap<List<Uuid>> const& connectedPlayers);
void playerDisconnected(Uuid const& playerUuid);
TeamNumber getPvpTeam(Uuid const& playerUuid);
HashMap<Uuid, TeamNumber> getPvpTeams();
Maybe<Uuid> getTeam(Uuid const& playerUuid) const;
private:
struct TeamMember {
String name;
int entity;
float healthPercentage;
float energyPercentage;
WorldId world;
Vec2F position;
WarpMode warpMode;
List<Drawable> portrait;
};
struct Team {
Uuid leaderUuid;
TeamNumber pvpTeamNumber;
Map<Uuid, TeamMember> members;
};
struct Invitation {
Uuid inviterUuid;
String inviterName;
};
void purgeInvitationsFor(Uuid const& playerUuid);
void purgeInvitationsFrom(Uuid const& playerUuid);
bool playerWithUuidExists(Uuid const& playerUuid) const;
Uuid createTeam(Uuid const& leaderUuid);
bool addToTeam(Uuid const& playerUuid, Uuid const& teamUuid);
bool removeFromTeam(Uuid const& playerUuid, Uuid const& teamUuid);
RecursiveMutex m_mutex;
Map<Uuid, Team> m_teams;
StringMap<List<Uuid>> m_connectedPlayers;
Map<Uuid, Invitation> m_invitations;
unsigned m_maxTeamSize;
TeamNumber m_pvpTeamCounter;
Json fetchTeamStatus(Json const& args);
Json updateStatus(Json const& args);
Json invite(Json const& args);
Json pollInvitation(Json const& args);
Json acceptInvitation(Json const& args);
Json removeFromTeam(Json const& args);
Json makeLeader(Json const& args);
};
}
|