1 module artemisd.managers.teammanager;
2 
3 import artemisd.entity;
4 import artemisd.manager;
5 import artemisd.utils.bag;
6 import artemisd.utils.type;
7 import artemisd.utils.ext;
8 
9 
10 class TeamManager : Manager 
11 {
12     mixin TypeDecl;
13 
14     private Bag!string[string] playersByTeam;
15     private string[string] teamByPlayer;
16 
17     protected override void initialize() 
18     {
19     }
20     
21     string getTeam(string player) 
22     {
23         return teamByPlayer.get(player,"");
24     }
25     
26     void setTeam(string player, string team) 
27     {
28         removeFromTeam(player);
29         teamByPlayer[player]=team;
30         
31         auto players = playersByTeam.getWithDefault(team, new Bag!string);
32         players.add(player);
33     }
34     
35     Bag!string getPlayers(string team) 
36     {
37         return playersByTeam.getWithDefault(team, new Bag!string);
38     }
39     
40     void removeFromTeam(string player) 
41     {
42         auto team = player in teamByPlayer;
43         if( team )
44         {
45             teamByPlayer.remove(player);
46             auto players = *team in playersByTeam;
47             if( players )
48             {
49                 players.remove(player);
50             }
51         }
52     }
53 }
54 
55 unittest
56 {
57     TeamManager m = new TeamManager;
58     m.setTeam("e","g1");
59     m.setTeam("e1", "g1");
60     assert(m.getTeam("e") == "g1");
61     assert(m.getTeam("e1") == "g1");
62     assert(m.getPlayers("g1").toString() == "[e,e1]");
63 
64     m.removeFromTeam("e1");
65     assert(m.getTeam("e1") != "g1");
66     assert(m.getPlayers("g1").toString() == "[e]");
67 }