From 04941856e36b4a33fae9543f571b268017ce8bda Mon Sep 17 00:00:00 2001
From: sanmit <sanmit@cs.utexas.edu>
Date: Fri, 29 Jan 2016 15:03:57 -0600
Subject: [PATCH] Edits to team names

---
 bin/HFO        |  8 ++---
 bin/Trainer.py | 86 +++++++++++---------------------------------------
 2 files changed, 22 insertions(+), 72 deletions(-)

diff --git a/bin/HFO b/bin/HFO
index 5d35f07..22376ac 100755
--- a/bin/HFO
+++ b/bin/HFO
@@ -120,10 +120,10 @@ def parseArgs():
                  help='Number of offensive uncontrolled players. Default: 0.')
   p.add_argument('--defense-npcs', dest='defenseNPCs', type=int, default=0,
                  help='Number of defensive uncontrolled players. Default: 0.')
-  p.add_argument('--offense-team', dest='offenseTeam', type=str, default='left',
-                 help='Team name to pull offensive NPCs from. Default: left.') 
-  p.add_argument('--defense-team', dest='defenseTeam', type=str, default='right',
-                 help='Team name to pull defensive NPCs from. Default: right')
+  p.add_argument('--offense-team', dest='offenseTeam', type=str, default='base',
+                 help='Team name to pull offensive NPCs from. Options: {base, helios} Default: base.') 
+  p.add_argument('--defense-team', dest='defenseTeam', type=str, default='base',
+                 help='Team name to pull defensive NPCs from. Options: {base, helios} Default: base')
   p.add_argument('--no-sync', dest='sync', action='store_false', default=True,
                  help='Run server in non-sync mode.')
   p.add_argument('--port', dest='port', type=int, default=6000,
diff --git a/bin/Trainer.py b/bin/Trainer.py
index 7552c13..e838ab9 100755
--- a/bin/Trainer.py
+++ b/bin/Trainer.py
@@ -51,38 +51,6 @@ class Trainer(object):
     self._connectedPlayers = []
     self.initMsgHandlers()
 
-  def launch_npc(self, player_num, play_offense, wait_until_join=True):
-    """
-      OBSOLETE -- Should we delete this method?
-      Launches a player using sample_player binary
-
-    Returns a Popen process object
-    """
-    print 'Launch npc %s-%d'%(self._offenseTeamName if play_offense
-                              else self._defenseTeamName, player_num)
-    if play_offense:
-      team_name = self._offenseTeamName
-    else:
-      team_name = self._defenseTeamName
-    binary_dir = os.path.dirname(os.path.realpath(__file__))
-    config_dir = os.path.join(binary_dir, '../config/formations-dt')
-    player_conf = os.path.join(binary_dir, '../config/player.conf')
-    player_cmd = os.path.join(binary_dir, 'sample_player')
-    player_cmd += ' -t %s -p %i --config_dir %s ' \
-                  ' --log_dir %s --player-config %s' \
-                  %(team_name, self._serverPort, config_dir,
-                    self._logDir, player_conf)
-    if self._record:
-        player_cmd += ' --record'
-    if player_num == 1:
-        player_cmd += ' -g'
-    kwargs = {'stdout':open('/dev/null', 'w'),
-              'stderr':open('/dev/null', 'w')}
-    p = subprocess.Popen(player_cmd.split(' '), shell = False, **kwargs)
-    if wait_until_join:
-      self.waitOnPlayer(player_num, play_offense)
-    return p
-
   def launch_agent(self, agent_num, agent_ext_num, play_offense, port, wait_until_join=True):
     """Launches a learning agent using the agent binary
 
@@ -129,49 +97,33 @@ class Trainer(object):
       self.waitOnPlayer(agent_ext_num, play_offense)
     return p
 
-  def getDefensiveRoster(self, team_name):
-    """
-      OBSOLETE -- Should we delete this method?
-      Returns a list of player numbers on a given team that are thought
-    to prefer defense. This map is not set in stone as the players on
-    some teams can adapt and change their roles.
-
-    """
-    if team_name == 'Borregos':
-      return [9,10,8,11,7,4,6,2,3,5]
-    elif team_name == 'WrightEagle':
-      return [5,2,8,9,10,6,3,11,4,7]
-    else:
-      return [2,3,4,5,6,7,8,11,9,10]
-
-  def getOffensiveRoster(self, team_name):
-    """
-      OBSOLETE -- Should we delete this method?
-      Returns a list of player numbers on a given team that are thought
-    to prefer offense. This map is not set in stone as the players on
-    some teams can adapt and change their roles.
-
-    """
-    if team_name == 'Borregos':
-      return [2,4,6,5,3,7,9,10,8,11]
-    elif team_name == 'WrightEagle':
-      return [11,4,7,3,6,10,8,9,2,5]
-    else:
-      return [11,7,8,9,10,6,3,2,4,5]
-
   def addTeam(self, team_name):
     """ Adds a team to the team list"""
-    self._teams.append(team_name)
+    # Check whether team name valid, and map to a format acceptable to third party binary
+    nameMap = {'base':'base', 'helios':'HELIOS'}
+    if team_name not in nameMap.keys():
+      print 'Invalid team name: ', team_name 
+      sys.exit(1)
+    # Create side specific team  
+    if len(self._teams) == 0: 
+      self._teams.append(nameMap[team_name] + '_left')
+    elif len(self._teams) == 1:
+      self._teams.append(nameMap[team_name] + '_right')
+    else:
+      print 'Too many teams added!'
+      sys.exit(1)
 
   def createTeam(self, name):
     teamDir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'teams')   
     if 'HELIOS' in name:
       print 'Creating team HELIOS'
       return teams.Helios(name, os.path.join(teamDir, 'helios', 'helios-13Eindhoven'), os.path.join(teamDir, 'helios', 'local', 'lib'), 'helios_player', host='localhost', port=self._serverPort)
-    # Agent2d (base) is the default
-    else:
+    elif 'base' in name:
       print 'Creating team Agent2d (base)'
       return teams.Agent2d(name, os.path.join(teamDir, 'base'), None, 'sample_player', self._logDir, self._record, host='localhost', port=self._serverPort)
+    else:
+      print 'Invalid team found'
+      sys.exit(1)
 
   def getTeams(self):
     """ Sets the offensive and defensive teams and player rosters. """
@@ -180,11 +132,9 @@ class Trainer(object):
     self._defenseTeamName = self._teams[1-self._offenseTeamInd]
     # set up offense
     offenseTeam = self.createTeam(self._offenseTeamName)    
+    self._offenseOrder = [1] + offenseTeam._offense_order # 1 for goalie
     # set up defense
     defenseTeam = self.createTeam(self._defenseTeamName)
-#    offensive_roster = self.getOffensiveRoster(self._offenseTeamName)
-#    defensive_roster = self.getDefensiveRoster(self._defenseTeamName)
-    self._offenseOrder = [1] + offenseTeam._offense_order # 1 for goalie
     self._defenseOrder = [1] + defenseTeam._defense_order # 1 for goalie
     return (offenseTeam, defenseTeam)
 
-- 
2.24.1