def execute_turn_events(): print "Executing turn events for turn", fo.current_turn() # creating fields systems = fo.get_systems() radius = fo.get_universe_width() / 2.0 if random() < max(0.0003 * radius, 0.03): if random() < 0.4: field_type = "FLD_MOLECULAR_CLOUD" size = 5.0 else: field_type = "FLD_ION_STORM" size = 5.0 x = y = radius dist_from_center = 0.0 while (dist_from_center < radius) or any( hypot(fo.get_x(s) - x, fo.get_y(s) - y) < 50.0 for s in systems): angle = random() * 2.0 * pi dist_from_center = radius + uniform( min(max(radius * 0.02, 10), 50.0), min(max(radius * 0.05, 20), 100.0)) x = radius + (dist_from_center * sin(angle)) y = radius + (dist_from_center * cos(angle)) print "...creating new", field_type, "field, at distance", dist_from_center, "from center" if fo.create_field(field_type, x, y, size) == fo.invalid_object(): print >> sys.stderr, "Turn events: couldn't create new field" return True
def log_planets(): universe = fo.get_universe() planets_table = Table([ Text('id'), Text('name'), Text('system'), Text('type'), Sequence('specials'), Text('species'), Sequence('buildings') ], table_name='Planets summary') # group planets by system for sid in fo.get_systems(): for pid in fo.sys_get_planets(sid): planet = universe.getPlanet(pid) planet_type = fo.planet_get_type(pid).name planet_size = fo.planet_get_size(pid).name if planet_type != planet_size: planet_type = '%s %s' % (planet_type, planet_size) buildings = [ universe.getBuilding(x).name for x in planet.buildingIDs ] planets_table.add_row([ pid, planet.name, planet.systemID, planet_type, list(planet.specials), planet.speciesName, buildings ]) # Printing too much info at once will lead to truncation of text for line in planets_table.get_table().split('\n'): print line
def log_planets(): universe = fo.get_universe() planets_table = Table( [Text('id'), Text('name'), Text('system'), Text('type'), Sequence('specials'), Text('species'), Sequence('buildings')], table_name='Planets summary') # group planets by system for sid in fo.get_systems(): for pid in fo.sys_get_planets(sid): planet = universe.getPlanet(pid) planet_type = fo.planet_get_type(pid).name planet_size = fo.planet_get_size(pid).name if planet_type != planet_size: planet_type = '%s %s' % (planet_type, planet_size) buildings = [universe.getBuilding(x).name for x in planet.buildingIDs] planets_table.add_row([ pid, planet.name, planet.systemID, planet_type, list(planet.specials), planet.speciesName, buildings ]) # Printing too much info at once will lead to truncation of text for line in planets_table.get_table().split('\n'): print line
def execute_turn_events(): print "Executing turn events for turn", fo.current_turn() # creating fields systems = fo.get_systems() radius = fo.get_universe_width() / 2.0 if random() < max(0.0003 * radius, 0.03): if random() < 0.4: field_type = "FLD_MOLECULAR_CLOUD" size = 5.0 else: field_type = "FLD_ION_STORM" size = 5.0 x = y = radius dist_from_center = 0.0 while (dist_from_center < radius) or any(hypot(fo.get_x(s) - x, fo.get_y(s) - y) < 50.0 for s in systems): angle = random() * 2.0 * pi dist_from_center = radius + uniform(min(max(radius * 0.02, 10), 50.0), min(max(radius * 0.05, 20), 100.0)) x = radius + (dist_from_center * sin(angle)) y = radius + (dist_from_center * cos(angle)) print "...creating new", field_type, "field, at distance", dist_from_center, "from center" if fo.create_field(field_type, x, y, size) == fo.invalid_object(): print >> sys.stderr, "Turn events: couldn't create new field" return True
def execute_turn_events(): print "Executing turn events for turn", fo.current_turn() # creating fields systems = fo.get_systems() radius = fo.get_universe_width() / 2.0 if random() < max(0.0003 * radius, 0.03): if random() < 0.4: field_type = "FLD_MOLECULAR_CLOUD" size = 5.0 else: field_type = "FLD_ION_STORM" size = 5.0 x = y = radius dist_from_center = 0.0 while (dist_from_center < radius) or any(hypot(fo.get_x(s) - x, fo.get_y(s) - y) < 50.0 for s in systems): angle = random() * 2.0 * pi dist_from_center = radius + uniform(min(max(radius * 0.02, 10), 50.0), min(max(radius * 0.05, 20), 100.0)) x = radius + (dist_from_center * sin(angle)) y = radius + (dist_from_center * cos(angle)) print "...creating new", field_type, "field, at distance", dist_from_center, "from center" if fo.create_field(field_type, x, y, size) == fo.invalid_object(): print >> sys.stderr, "Turn events: couldn't create new field" # creating monsters gsd = fo.get_galaxy_setup_data() monster_freq = MONSTER_FREQUENCY[gsd.monsterFrequency] # monster freq ranges from 30 (= one monster per 30 systems) to 3 (= one monster per 3 systems) # (example: low monsters and 150 Systems results in 150 / 30 * 0.001 = 0.005) if monster_freq > 0 and random() < len(systems) / monster_freq * 0.001: #only spawn Krill at the moment, other monsters can follow in the future if random() < 1: monster_type = "SM_KRILL_1" else: monster_type = "SM_FLOATER" # search for systems without planets or fleets candidates = [s for s in systems if len(fo.sys_get_planets(s)) <= 0 and len(fo.sys_get_fleets(s)) <= 0] if not candidates: print >> sys.stderr, "Turn events: unable to find system for monster spawn" else: system = choice(candidates) print "...creating new", monster_type, "at", fo.get_name(system) # create monster fleet monster_fleet = fo.create_monster_fleet(system) # if fleet creation fails, report an error if monster_fleet == fo.invalid_object(): print >> sys.stderr, "Turn events: unable to create new monster fleet" else: # create monster, if creation fails, report an error monster = fo.create_monster(monster_type, monster_fleet) if monster == fo.invalid_object(): print >> sys.stderr, "Turn events: unable to create monster in fleet" return True
def log_systems(): universe = fo.get_universe() systems_table = Table( [Text('id'), Text('name'), Sequence('planets'), Sequence('connections'), Text('star')], table_name='System summary') for sid in fo.get_systems(): system = universe.getSystem(sid) systems_table.add_row([ sid, system.name, fo.sys_get_planets(sid), fo.sys_get_starlanes(sid), system.starType.name ]) # Printing too much info at once will lead to truncation of text for line in systems_table.get_table().split('\n'): print(line)
def log_systems(): universe = fo.get_universe() systems_table = Table( [Text('id'), Text('name'), Sequence('planets'), Sequence('connections'), Text('star')], table_name='System summary') for sid in fo.get_systems(): system = universe.getSystem(sid) systems_table.add_row([ sid, system.name, fo.sys_get_planets(sid), fo.sys_get_starlanes(sid), system.starType.name ]) # Printing too much info at once will lead to truncation of text for line in systems_table.get_table().split('\n'): print line
def log_systems(): universe = fo.get_universe() systems_table = Table( Text("id"), Text("name"), Sequence("planets"), Sequence("connections"), Text("star"), table_name="System summary", ) for sid in fo.get_systems(): system = universe.getSystem(sid) systems_table.add_row( sid, system.name, fo.sys_get_planets(sid), fo.sys_get_starlanes(sid), system.starType.name, ) systems_table.print_table(print)
def log_planets(): universe = fo.get_universe() planets_table = Table( Text("id"), Text("name"), Text("system"), Text("type"), Sequence("specials"), Text("species"), Sequence("buildings"), table_name="Planets summary", ) # group planets by system for sid in fo.get_systems(): for pid in fo.sys_get_planets(sid): planet = universe.getPlanet(pid) planet_type = fo.planet_get_type(pid).name planet_size = fo.planet_get_size(pid).name if planet_type != planet_size: planet_type = "%s %s" % (planet_type, planet_size) buildings = [ universe.getBuilding(x).name for x in planet.buildingIDs ] planets_table.add_row( pid, planet.name, planet.systemID, planet_type, list(planet.specials), planet.speciesName, buildings, ) planets_table.print_table(print)
def execute_turn_events(): print "Executing turn events for turn", fo.current_turn() # creating fields systems = fo.get_systems() radius = fo.get_universe_width() / 2.0 if random() < max(0.0003 * radius, 0.03): if random() < 0.4: field_type = "FLD_MOLECULAR_CLOUD" size = 5.0 else: field_type = "FLD_ION_STORM" size = 5.0 x = y = radius dist_from_center = 0.0 while (dist_from_center < radius) or any( hypot(fo.get_x(s) - x, fo.get_y(s) - y) < 50.0 for s in systems): angle = random() * 2.0 * pi dist_from_center = radius + uniform( min(max(radius * 0.02, 10), 50.0), min(max(radius * 0.05, 20), 100.0)) x = radius + (dist_from_center * sin(angle)) y = radius + (dist_from_center * cos(angle)) print "...creating new", field_type, "field, at distance", dist_from_center, "from center" if fo.create_field(field_type, x, y, size) == fo.invalid_object(): print >> sys.stderr, "Turn events: couldn't create new field" # creating monsters gsd = fo.get_galaxy_setup_data() monster_freq = MONSTER_FREQUENCY[gsd.monsterFrequency] # monster freq ranges from 1/30 (= one monster per 30 systems) to 1/3 (= one monster per 3 systems) # (example: low monsters and 150 Systems results in 150 / 30 * 0.01 = 0.05) if monster_freq > 0 and random() < len(systems) * monster_freq * 0.01: #only spawn Krill at the moment, other monsters can follow in the future if random() < 1: monster_type = "SM_KRILL_1" else: monster_type = "SM_FLOATER" # search for systems without planets or fleets candidates = [ s for s in systems if len(fo.sys_get_planets(s)) <= 0 and len(fo.sys_get_fleets(s)) <= 0 ] if not candidates: print >> sys.stderr, "Turn events: unable to find system for monster spawn" else: system = choice(candidates) print "...creating new", monster_type, "at", fo.get_name(system) # create monster fleet monster_fleet = fo.create_monster_fleet(system) # if fleet creation fails, report an error if monster_fleet == fo.invalid_object(): print >> sys.stderr, "Turn events: unable to create new monster fleet" else: # create monster, if creation fails, report an error monster = fo.create_monster(monster_type, monster_fleet) if monster == fo.invalid_object(): print >> sys.stderr, "Turn events: unable to create monster in fleet" return True
def execute_turn_events(): print("Executing turn events for turn", fo.current_turn()) # creating fields systems = fo.get_systems() radius = fo.get_universe_width() / 2.0 field_types = [ "FLD_MOLECULAR_CLOUD", "FLD_ION_STORM", "FLD_NANITE_SWARM", "FLD_METEOR_BLIZZARD", "FLD_VOID_RIFT" ] if random() < max(0.00015 * radius, 0.03): field_type = choice(field_types) size = 5.0 x = y = radius dist_from_center = uniform(0.35, 1.0) * radius angle = random() * 2.0 * pi x = radius + (dist_from_center * sin(angle)) y = radius + (dist_from_center * cos(angle)) print("...creating new", field_type, "field, at distance", dist_from_center, "from center") if fo.create_field(field_type, x, y, size) == fo.invalid_object(): print("Turn events: couldn't create new field", file=sys.stderr) # creating monsters gsd = fo.get_galaxy_setup_data() monster_freq = MONSTER_FREQUENCY[gsd.monsterFrequency] # monster freq ranges from 1/30 (= one monster per 30 systems) to 1/3 (= one monster per 3 systems) # (example: low monsters and 150 Systems results in 150 / 30 * 0.01 = 0.05) if monster_freq > 0 and random() < len(systems) * monster_freq * 0.01: # only spawn Krill at the moment, other monsters can follow in the future if random() < 1: monster_type = "SM_KRILL_1" else: monster_type = "SM_FLOATER" # search for systems without planets or fleets candidates = [ s for s in systems if len(fo.sys_get_planets(s)) <= 0 and len(fo.sys_get_fleets(s)) <= 0 ] if not candidates: print("Turn events: unable to find system for monster spawn", file=sys.stderr) else: system = choice(candidates) print("...creating new", monster_type, "at", fo.get_name(system)) # create monster fleet monster_fleet = fo.create_monster_fleet(system) # if fleet creation fails, report an error if monster_fleet == fo.invalid_object(): print("Turn events: unable to create new monster fleet", file=sys.stderr) else: # create monster, if creation fails, report an error monster = fo.create_monster(monster_type, monster_fleet) if monster == fo.invalid_object(): print("Turn events: unable to create monster in fleet", file=sys.stderr) return True