def ClientMain(): # physics off, ai off by default # disable_physics() OpenNero.disable_ai() if not module.getMod().setup_map(): inputConfig.switchToHub() return # add a light source OpenNero.getSimContext().addLightSource(OpenNero.Vector3f(500, -500, 1000), 1500) # common.addSkyBox("data/sky/irrlicht2") # setup the gui CreateGui(common.getGuiManager()) # add a camera camRotateSpeed = 100 camMoveSpeed = 15000 camZoomSpeed = 200 cam = OpenNero.getSimContext().addCamera(camRotateSpeed, camMoveSpeed, camZoomSpeed) cam.setFarPlane(40000) cam.setEdgeScroll(False) recenter_cam = recenter(cam) recenter_cam() # create the io map ioMap = inputConfig.createInputMapping() ioMap.BindKey("KEY_SPACE", "onPress", recenter_cam) OpenNero.getSimContext().setInputMapping(ioMap)
def load_team(self, location, team=constants.OBJECT_TYPE_TEAM_0): NERO.module.NeroModule.load_team(self, location, team) rtneat = OpenNero.get_ai('rtneat-%s' % team) if rtneat: rtneat.set_lifetime(sys.maxint) rtneat.disable_evolution() OpenNero.disable_ai() # don't run until button
def parseInputCommand(content): """ Parse commands from training window """ mod = getMod() command, arg = content.attrib['command'], content.attrib['arg'] # first word is command rest is filename if command.isupper(): vali = int(arg) if command == "LT": mod.ltChange(vali) if command == "EE": mod.eeChange(vali) if command == "HP": mod.hpChange(vali) if command == "SP": mod.set_speedup(vali) if command == "save1": mod.save_team(arg, constants.OBJECT_TYPE_TEAM_0) if command == "load1": mod.load_team(arg, constants.OBJECT_TYPE_TEAM_0) if command == "rtneat": mod.deploy('rtneat') if command == "qlearning": mod.deploy('qlearning') if command == "pause": OpenNero.disable_ai() if command == "resume": OpenNero.enable_ai() if command == "example": print 'command: example' if arg == "start": print 'command: example start' mod.start_demonstration() elif arg == "cancel": print 'command: example cancel' OpenNero.get_environment().cancel_demonstration() elif arg == "confirm": print 'command: example confirm' OpenNero.get_environment().use_demonstration()
def deploy(self, ai='rtneat', team=constants.OBJECT_TYPE_TEAM_0): OpenNero.disable_ai() if ai == 'rtneat': OpenNero.set_ai('rtneat-%s' % team, None) self.environment.remove_all_agents(team) for _ in range(constants.pop_size): self.spawnAgent(ai=ai, team=team) OpenNero.enable_ai()
def start_tower1(self): #Problem reduction """ start the tower demo """ self.num_disks = 3 OpenNero.disable_ai() self.stop_agent() env = TowerEnvironment() env.initialize_blocks() self.set_environment(env) self.agent_id = common.addObject("data/shapes/character/BlocksRobot.xml", OpenNero.Vector3f(constants.GRID_DX, constants.GRID_DY, 2), type=constants.AGENT_MASK, scale=OpenNero.Vector3f(3,3,3)) OpenNero.enable_ai()
def start_my_planner_2_disk(): """ start the tower demo """ getMod().num_disks = 2 OpenNero.disable_ai() getMod().stop_agent() env = TowerEnvironment() env.initialize_blocks() getMod().set_environment(env) getMod().agent_id = common.addObject("data/shapes/character/MyPlanningRobot2.xml", OpenNero.Vector3f(TowerofHanoi.constants.GRID_DX, TowerofHanoi.constants.GRID_DY, 2), type=TowerofHanoi.constants.AGENT_MASK, scale=OpenNero.Vector3f(3,3,3)) OpenNero.enable_ai()
def start_nlp_extended(): #Natural Language Processing """ start the tower demo """ getMod().num_disks = 3 OpenNero.disable_ai() getMod().stop_agent() env = TowerEnvironment() env.initialize_blocks() getMod().set_environment(env) getMod().agent_id = common.addObject("data/shapes/character/MyNLPRobot.xml", OpenNero.Vector3f(TowerofHanoi.constants.GRID_DX, TowerofHanoi.constants.GRID_DY, 2), type=TowerofHanoi.constants.AGENT_MASK, scale=OpenNero.Vector3f(3,3,3)) OpenNero.enable_ai()
def start_tower3(self): #2 Disk Goal Stack Planner """ start the tower demo """ self.num_disks = 2 OpenNero.disable_ai() self.stop_agent() env = TowerEnvironment() env.initialize_blocks() self.set_environment(env) #self.set_environment(TowerEnvironment()) self.agent_id = common.addObject("data/shapes/character/BlocksRobot3.xml", OpenNero.Vector3f(constants.GRID_DX, constants.GRID_DY, 2), type=constants.AGENT_MASK, scale=OpenNero.Vector3f(3,3,3)) OpenNero.enable_ai()
def start_rtneat(self, pop_size): " start the rtneat learning demo " OpenNero.disable_ai() #self.environment = RoombaEnvironment(constants.XDIM, constants.YDIM, self) #set_environment(self.environment) #self.reset_sandbox() # Create RTNEAT object rbound = OpenNero.FeatureVectorInfo() rbound.add_continuous(-sys.float_info.max, sys.float_info.max) rtneat = OpenNero.RTNEAT("data/ai/neat-params.dat", 2, 1, pop_size, 1.0, rbound, False) rtneat.set_weight(0,1) OpenNero.set_ai("rtneat",rtneat) OpenNero.enable_ai() self.distribute_bots(pop_size, "data/shapes/roomba/RoombaRTNEAT.xml")
def setup_map(self): """ setup the test environment """ OpenNero.disable_ai() if self.environment: error("Environment already created") return self.environment = self.create_environment() OpenNero.set_environment(self.environment) self.environment.setup() return True
def parseInputCommand(content): """ Parse commands from training window """ mod = getMod() command, arg = content.attrib['command'], content.attrib['arg'] # first word is command rest is filename if command.isupper(): vali = int(arg) if command == "save1": mod.save_team(arg, constants.OBJECT_TYPE_TEAM_0) if command == "load1": mod.load_team(arg, constants.OBJECT_TYPE_TEAM_0) if command == "rtneat": mod.deploy('rtneat', 'neat') if command == "qlearning": mod.deploy('none', 'qlearning') if command == "pause": OpenNero.disable_ai() if command == "resume": OpenNero.enable_ai()
def start_agent_state_space_search(self): # State-space search """ start the tower demo """ self.num_disks = 3 OpenNero.disable_ai() self.stop_agent() env = TowerEnvironment() env.initialize_blocks() self.set_environment(env) # self.set_environment(TowerEnvironment()) self.agent_id = common.addObject( "data/shapes/character/BlocksRobot2.xml", OpenNero.Vector3f(constants.GRID_DX, constants.GRID_DY, 2), type=constants.AGENT_MASK, scale=OpenNero.Vector3f(3, 3, 3), ) OpenNero.enable_ai()
def start_demonstration(self): ''' start the keyboard agent to collect demonstration example ''' OpenNero.disable_ai() team = constants.OBJECT_TYPE_TEAM_0 self.curr_team = team #self.environment.remove_all_agents(team) location = (self.spawn_x[team], self.spawn_y[team], 2) agnt = common.addObject( "data/shapes/character/steve_keyboard.xml", position = OpenNero.Vector3f(*location), type=team) OpenNero.enable_ai() self.environment.start_tracing() return agnt
def add_bots(self, bot_type, num_bots): OpenNero.disable_ai() num_bots = int(num_bots) if bot_type.lower().find("script") >= 0: self.distribute_bots(num_bots, "data/shapes/roomba/Roomba.xml") OpenNero.enable_ai() return True elif bot_type.lower().find("rtneat") >= 0: self.start_rtneat(num_bots) return True elif bot_type.lower().find("rlagent") >= 0: self.distribute_bots(num_bots, "data/shapes/roomba/RLAgent.xml") OpenNero.enable_ai() return True else: return False
def ClientMain(): global modify_object_id global object_ids global guiMan OpenNero.disable_ai() if not module.getMod().setup_map(): switchToHub() return # add a light source OpenNero.getSimContext().addLightSource(OpenNero.Vector3f(500, -500, 1000), 1500) common.addSkyBox("data/sky/irrlicht2") # setup the gui guiMan = common.getGuiManager() object_ids = {} modify_object_id = {} # add a camera camRotateSpeed = 100 camMoveSpeed = 15000 camZoomSpeed = 200 cam = OpenNero.getSimContext().addCamera(camRotateSpeed, camMoveSpeed, camZoomSpeed) cam.setFarPlane(40000) cam.setEdgeScroll(False) def recenter(cam): def closure(): cam.setPosition(OpenNero.Vector3f(0, 0, 100)) cam.setTarget(OpenNero.Vector3f(100, 100, 0)) return closure recenter_cam = recenter(cam) recenter_cam() # create the io map ioMap = createInputMapping() ioMap.BindKey("KEY_SPACE", "onPress", recenter_cam) OpenNero.getSimContext().setInputMapping(ioMap)
def load_team(self, location, team=constants.OBJECT_TYPE_TEAM_0): OpenNero.disable_ai() self.environment.remove_all_agents(team) if not os.path.exists(location): print location, 'does not exist, cannot load population' return # parse out different agents from the population file. contents = '' try: try: handle = gzip.open(location) contents = handle.read() finally: handle.close() except Exception, e: with open(location) as handle: contents = handle.read()
def parseInput(strn): if strn == "deploy" or len(strn) < 2: return mod = getMod() # first word is command rest is filename loc, val = strn.split(' ',1) vali = 1 if strn.isupper(): vali = int(val) if loc == "HP": mod.hpChange(vali) if loc == "SP": mod.set_speedup(vali) if loc == "load1": mod.load_team(val, constants.OBJECT_TYPE_TEAM_0) if loc == "load2": mod.load_team(val, constants.OBJECT_TYPE_TEAM_1) if loc == "rtneat": mod.deploy('rtneat', constants.OBJECT_TYPE_TEAM_0) mod.deploy('rtneat', constants.OBJECT_TYPE_TEAM_1) if loc == "qlearning": mod.deploy('qlearning', constants.OBJECT_TYPE_TEAM_0) mod.deploy('qlearning', constants.OBJECT_TYPE_TEAM_1) if loc == "pause": OpenNero.disable_ai() if loc == "resume": OpenNero.enable_ai()
def parseInput(strn): if strn == "deploy" or len(strn) < 2: return mod = getMod() # first word is command rest is filename loc, val = strn.split(' ', 1) vali = 1 if strn.isupper(): vali = int(val) if loc == "HP": mod.hpChange(vali) if loc == "SP": mod.set_speedup(vali) if loc == "load1": mod.load_team(val, constants.OBJECT_TYPE_TEAM_0) if loc == "load2": mod.load_team(val, constants.OBJECT_TYPE_TEAM_1) if loc == "rtneat": mod.deploy('rtneat', constants.OBJECT_TYPE_TEAM_0) mod.deploy('rtneat', constants.OBJECT_TYPE_TEAM_1) if loc == "qlearning": mod.deploy('qlearning', constants.OBJECT_TYPE_TEAM_0) mod.deploy('qlearning', constants.OBJECT_TYPE_TEAM_1) if loc == "pause": OpenNero.disable_ai() if loc == "resume": OpenNero.enable_ai()
def step(self, agent, action): """ 2A step for an agent """ # make sure RL agents cannot learn in battle mode. agent.alpha = 0.0 reward = NERO.NeroEnvironment.NeroEnvironment.step(self, agent, action) live_agents = sum(len(t) for t in self.teams.itervalues()) # wait until all agents have spawned before we keep track of damage. if self.print_damage < 0 and live_agents < 2 * constants.pop_size: return reward # print out damages every loop through the entire population. self.print_damage += 1 if self.print_damage >= live_agents: self.print_damage = 0 else: return reward damages = {} winner = None for team in constants.TEAMS: damages[team] = 0 agents = self.teams.get(team, set()) agent_damages = [self.get_state(a).total_damage for a in agents] if any(d < self.hitpoints for d in agent_damages): damage = sum(agent_damages) damage += (constants.pop_size - len(agents)) * self.hitpoints damages[team] = damage else: damages[team] = constants.pop_size * self.hitpoints winner = constants.OBJECT_TYPE_TEAM_0 if team == winner: winner = constants.OBJECT_TYPE_TEAM_1 if len(damages) == 2: ss = [] for t, d in sorted(damages.iteritems()): s = '%s: %d' % (constants.TEAM_LABELS[t], d) ss.append(s) ss = tuple(ss) if self.last_damage != ss: print 'damages sustained by: ' +' '.join(ss) self.last_damage = ss if not constants.getDisplayHint(): OpenNero.setWindowCaption('Damage sustained: ' + ' '.join(ss)) if winner is not None: s = constants.TEAM_LABELS[winner] + ' team wins!!!' print s try: if OpenNero.getAppConfig().rendertype != 'null': import tkMessageBox tkMessageBox.showinfo('NERO Battle Results', s) except: pass if not constants.getDisplayHint(): OpenNero.setWindowCaption(s) OpenNero.disable_ai() for a in self.teams[winner]: self.set_animation(a, self.get_state(a), 'jump') return reward
def remove_bots(self): """ remove all existing bots from the environment """ OpenNero.disable_ai() for id in self.agent_ids: common.removeObject(id) # delete id from Registry, not from list self.agent_ids = []
def setup_map(self): """ setup the test environment """ OpenNero.disable_ai() if self.environment: error("Environment already created") return # create the environment - this also creates the rtNEAT object self.environment = self.create_environment() OpenNero.set_environment(self.environment) # world walls height = constants.HEIGHT + constants.OFFSET common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM / 2, 0, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, constants.XDIM, constants.HEIGHT * 2), label="World Wall0", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(0, constants.YDIM / 2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(constants.WIDTH, constants.YDIM, constants.HEIGHT * 2), label="World Wall1", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM, constants.YDIM / 2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(constants.WIDTH, constants.YDIM, constants.HEIGHT * 2), label="World Wall2", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM / 2, constants.YDIM, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, constants.XDIM, constants.HEIGHT * 2), label="World Wall3", type=constants.OBJECT_TYPE_OBSTACLE) # Add an obstacle wall in the middle common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM / 2, constants.YDIM / 2, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, constants.YDIM / 4, constants.HEIGHT * 2), label="World Wall4", type=constants.OBJECT_TYPE_OBSTACLE) # Add some trees for i in (0.25, 0.75): for j in (0.25, 0.75): # don't collide with trees - they are over 500 triangles each common.addObject("data/shapes/tree/Tree.xml", OpenNero.Vector3f(i * constants.XDIM, j * constants.YDIM, constants.OFFSET), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, 1, 1), label="Tree %d %d" % (10 * i, 10 * j), type=constants.OBJECT_TYPE_LEVEL_GEOM) # collide with their trunks represented with cubes instead common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(i * constants.XDIM, j * constants.YDIM, constants.OFFSET), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, 1, constants.HEIGHT), type=constants.OBJECT_TYPE_OBSTACLE) # Add the surrounding Environment common.addObject("data/terrain/NeroWorld.xml", OpenNero.Vector3f(constants.XDIM / 2, constants.YDIM / 2, 0), scale=OpenNero.Vector3f(1.2, 1.2, 1.2), label="NeroWorld", type=constants.OBJECT_TYPE_LEVEL_GEOM) return True
def step(self, agent, action): """ 2A step for an agent """ # make sure RL agents cannot learn in battle mode. agent.alpha = 0.0 reward = NERO.NeroEnvironment.NeroEnvironment.step(self, agent, action) live_agents = sum(len(t) for t in self.teams.itervalues()) # wait until all agents have spawned before we keep track of damage. if self.print_damage < 0 and live_agents < 2 * constants.pop_size: return reward # print out damages every loop through the entire population. self.print_damage += 1 if self.print_damage >= live_agents: self.print_damage = 0 else: return reward damages = {} winner = None for team in constants.TEAMS: damages[team] = 0 agents = self.teams.get(team, set()) agent_damages = [self.get_state(a).total_damage for a in agents] if any(d < self.hitpoints for d in agent_damages): damage = sum(agent_damages) damage += (constants.pop_size - len(agents)) * self.hitpoints damages[team] = damage else: damages[team] = constants.pop_size * self.hitpoints winner = constants.OBJECT_TYPE_TEAM_0 if team == winner: winner = constants.OBJECT_TYPE_TEAM_1 if len(damages) == 2: ss = [] for t, d in sorted(damages.iteritems()): s = '%s: %d' % (constants.TEAM_LABELS[t], d) ss.append(s) ss = tuple(ss) if self.last_damage != ss: print 'damages sustained by: ' + ' '.join(ss) self.last_damage = ss if not constants.getDisplayHint(): OpenNero.setWindowCaption('Damage sustained: ' + ' '.join(ss)) if winner is not None: s = constants.TEAM_LABELS[winner] + ' team wins!!!' print s try: if OpenNero.getAppConfig().rendertype != 'null': import tkMessageBox tkMessageBox.showinfo('NERO Battle Results', s) except: pass if not constants.getDisplayHint(): OpenNero.setWindowCaption(s) OpenNero.disable_ai() for a in self.teams[winner]: self.set_animation(a, self.get_state(a), 'jump') return reward
def setup_map(self): """ setup the test environment """ OpenNero.disable_ai() if self.environment: error("Environment already created") return # create the environment - this also creates the rtNEAT object self.environment = self.create_environment() OpenNero.set_environment(self.environment) # world walls height = constants.HEIGHT + constants.OFFSET common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, 0, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, constants.XDIM, constants.HEIGHT*2), label="World Wall0", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(0, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(constants.WIDTH, constants.YDIM, constants.HEIGHT*2), label="World Wall1", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(constants.WIDTH, constants.YDIM, constants.HEIGHT*2), label="World Wall2", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, constants.XDIM, constants.HEIGHT*2), label="World Wall3", type=constants.OBJECT_TYPE_OBSTACLE) # Add an obstacle wall in the middle common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(constants.WIDTH, 100, constants.HEIGHT*2), label="World Wall4", type=constants.OBJECT_TYPE_OBSTACLE) # # Add some trees # for i in (0.25, 0.75): # for j in (0.25, 0.75): # # don't collide with trees - they are over 500 triangles each # common.addObject( # "data/shapes/tree/Tree.xml", # OpenNero.Vector3f(i * constants.XDIM, j * constants.YDIM, constants.OFFSET), # OpenNero.Vector3f(0, 0, 0), # scale=OpenNero.Vector3f(1, 1, 1), # label="Tree %d %d" % (10 * i, 10 * j), # type=constants.OBJECT_TYPE_LEVEL_GEOM) # # collide with their trunks represented with cubes instead # common.addObject( # "data/shapes/cube/Cube.xml", # OpenNero.Vector3f(i * constants.XDIM, j * constants.YDIM, constants.OFFSET), # OpenNero.Vector3f(0,0,0), # scale=OpenNero.Vector3f(1,1,constants.HEIGHT), # type=constants.OBJECT_TYPE_OBSTACLE) # Add the surrounding Environment common.addObject( "data/terrain/NeroWorld.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM/2, 0), scale=OpenNero.Vector3f(1.2, 1.2, 1.2), label="NeroWorld", type=constants.OBJECT_TYPE_LEVEL_GEOM) return True
def setup_map(self): """ setup the test environment """ OpenNero.disable_ai() if self.environment: error("Environment already created") return # create the environment - this also creates the rtNEAT object self.environment = self.create_environment() OpenNero.set_environment(self.environment) # world walls height = constants.HEIGHT + constants.OFFSET common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, 0, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.XDIM, constants.HEIGHT), label="World Wall0", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(0, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, constants.YDIM, constants.HEIGHT), label="World Wall1", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, constants.YDIM, constants.HEIGHT), label="World Wall2", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.XDIM, constants.HEIGHT), label="World Wall3", type=constants.OBJECT_TYPE_OBSTACLE) # Add an obstacle wall in the middle """ common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.YDIM / 4, constants.HEIGHT), label="World Wall4", type=constants.OBJECT_TYPE_OBSTACLE) """ # Add the surrounding Environment common.addObject( "data/terrain/NeroWorld.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM/2, 0), scale=OpenNero.Vector3f(1, 1, 1), label="NeroWorld", type=constants.OBJECT_TYPE_LEVEL_GEOM) self.spawnAgent(agent_xml = 'data/shapes/tree/Tree.xml', first_person = False) self.spawnAgent(agent_xml = 'data/shapes/character/steve_still_blue.xml', first_person = False) self.spawnAgent(agent_xml = 'data/shapes/character/sydney_still.xml', first_person = False, z_pos=5) self.spawnAgent(agent_xml = 'data/shapes/cube/GreenCube.xml', first_person = False, z_pos=7) return True
def setup_map(self): """ setup the test environment """ OpenNero.disable_ai() if self.environment: error("Environment already created") return # create the environment - this also creates the rtNEAT object self.environment = self.create_environment() OpenNero.set_environment(self.environment) # world walls height = constants.HEIGHT + constants.OFFSET common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM / 2, 0, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.XDIM, constants.HEIGHT), label="World Wall0", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(0, constants.YDIM / 2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, constants.YDIM, constants.HEIGHT), label="World Wall1", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM, constants.YDIM / 2, height), OpenNero.Vector3f(0, 0, 0), scale=OpenNero.Vector3f(1, constants.YDIM, constants.HEIGHT), label="World Wall2", type=constants.OBJECT_TYPE_OBSTACLE) common.addObject("data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM / 2, constants.YDIM, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.XDIM, constants.HEIGHT), label="World Wall3", type=constants.OBJECT_TYPE_OBSTACLE) # Add an obstacle wall in the middle """ common.addObject( "data/shapes/cube/Cube.xml", OpenNero.Vector3f(constants.XDIM/2, constants.YDIM/2, height), OpenNero.Vector3f(0, 0, 90), scale=OpenNero.Vector3f(1, constants.YDIM / 4, constants.HEIGHT), label="World Wall4", type=constants.OBJECT_TYPE_OBSTACLE) """ # Add the surrounding Environment common.addObject("data/terrain/NeroWorld.xml", OpenNero.Vector3f(constants.XDIM / 2, constants.YDIM / 2, 0), scale=OpenNero.Vector3f(1, 1, 1), label="NeroWorld", type=constants.OBJECT_TYPE_LEVEL_GEOM) self.spawnAgent(agent_xml='data/shapes/tree/Tree.xml', first_person=False) self.spawnAgent(agent_xml='data/shapes/character/steve_still_blue.xml', first_person=False) self.spawnAgent(agent_xml='data/shapes/character/sydney_still.xml', first_person=False, z_pos=5) self.spawnAgent(agent_xml='data/shapes/cube/GreenCube.xml', first_person=False, z_pos=7) return True