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 }