def __init__(self): pg.init() self.display_width = 1200 self.display_height = 600 self.game_display = pg.display.set_mode( (self.display_width, self.display_height)) pg.display.set_caption('Yeah Toast!') self.clock = pg.time.Clock() self.screen_surf = pg.display.get_surface() self.x_mid = self.screen_surf.get_rect().centerx self.y_mid = self.screen_surf.get_rect().centery self.HappyBread = NewtonianItem(game_handle=self, sprite='resources/HappyBread_wT.png', coordinates=(self.x_mid, self.y_mid)) self.Toaster = Item(game_handle=self, sprite='resources/Toaster.png', coordinates=(256, 288)) self.fleet = Fleet([self.Toaster, self.HappyBread]) self.mode = {'move': 'accelerate', 'sticky_rotate': False}
def __init__(self, seed, fleets): App.world.setSeed(seed) for fleet in fleets: fleet = Fleet.load(fleet) team = CombatTeam.CombatTeam(fleet) App.world.addCombatTeam(team)
async def vehicle_data_for_routes(route_ids, test_mode=False): """Use getv3 to request real-time vehicle data for a given route set""" route_ids = normalize_custom_route_ids(route_ids) vehicles = await getV3( "vehicles", { "filter[route]": ",".join(route_ids), "include": "stop" }, ) # Iterate vehicles, only send new ones to the browser vehicles_to_display = [] for vehicle in vehicles: try: is_new = Fleet.car_array_is_new(vehicle["route"]["id"], vehicle["label"].split("-"), test_mode) if not is_new: continue vehicles_to_display.append({ "label": vehicle["label"], "route": derive_custom_route_name(vehicle), "direction": vehicle["direction_id"], "latitude": vehicle["latitude"], "longitude": vehicle["longitude"], "currentStatus": vehicle["current_status"], "stationId": vehicle["stop"]["parent_station"]["id"], "isNewTrain": is_new, }) except (KeyError, TypeError): continue return vehicles_to_display
class Game: def __init__(self): pg.init() self.display_width = 1200 self.display_height = 600 self.game_display = pg.display.set_mode( (self.display_width, self.display_height)) pg.display.set_caption('Yeah Toast!') self.clock = pg.time.Clock() self.screen_surf = pg.display.get_surface() self.x_mid = self.screen_surf.get_rect().centerx self.y_mid = self.screen_surf.get_rect().centery self.HappyBread = NewtonianItem(game_handle=self, sprite='resources/HappyBread_wT.png', coordinates=(self.x_mid, self.y_mid)) self.Toaster = Item(game_handle=self, sprite='resources/Toaster.png', coordinates=(256, 288)) self.fleet = Fleet([self.Toaster, self.HappyBread]) self.mode = {'move': 'accelerate', 'sticky_rotate': False} # self.events = [] # ----------------------------------------------------------------------- def game_loop(self): closed = False print('Debug output:') while not closed: events = pg.event.get() for event in events: if event.type == pg.QUIT: closed = True key = pg.key.get_pressed() # special controls # ---------------- # modes: if key[pg.K_1]: self.mode['move'] = "accelerate" if key[pg.K_2]: self.mode['move'] = "translate" self.HappyBread.reset_velocity() # freeze and reset if key[pg.K_f]: self.HappyBread.freeze() if key[pg.K_r]: self.HappyBread.reset_position(self.x_mid, self.y_mid) # Standard player controls: if self.mode['move'] == "translate": self.translate_control(self.HappyBread, key) elif self.mode['move'] == "accelerate": self.accelerate_control(self.HappyBread, key) # should add bouncing off of objects/walls # collision detection: if self.Toaster.collides_with(self.HappyBread): print("collision at " + self.HappyBread.center_to_string()) self.HappyBread.apply_force(6, 0) self.fleet.update() self.game_display.fill(black) self.show_all_items() pg.display.update() self.clock.tick(48) # Hobbit framerate # ----------------------------------------------------------------------- @staticmethod def show(item): item.show() def show_all_items(self): for item in self.fleet.items: item.show() # ----------------------------------------------------------------------- @staticmethod def translate_control(item, key, translation_sensitivity=10, rotation_sensitivity=6.4): # these controls give the bread (or any item) up/down and tumble left/right motion # ground_axis = self.display_height - item.sprite.get_rect().height / 2 if key[pg.K_w]: item.translate(0, -translation_sensitivity) if key[pg.K_a]: item.rotate(rotation_sensitivity) item.translate(-translation_sensitivity, 0) if key[pg.K_s]: # if item.center[1] < ground_axis: item.translate(0, translation_sensitivity) if key[pg.K_d]: item.rotate(-rotation_sensitivity) item.translate(translation_sensitivity, 0) if key[pg.K_UP]: item.translate_forward(translation_sensitivity) if key[pg.K_LEFT]: item.rotate(rotation_sensitivity) if key[pg.K_DOWN]: item.translate_forward(-translation_sensitivity) if key[pg.K_RIGHT]: item.rotate(-rotation_sensitivity) # mouse controls if pg.mouse.get_pressed()[0]: spot = pg.mouse.get_pos() print(spot) item.teleport(spot[0], spot[1]) item.rotate(item.omega) # silly rotation, press freeze to stop it def accelerate_control(self, item, key, accelerate_sensitivity=0.38, rotational_accelerate_sensitivity=0.5, target_rotation=8): # these controls give the item smooth wasd acceleration controls and left/right rotational acceleration # keyboard controls # ----------------- # non-relative up, down, left, right: if key[pg.K_w]: item.accelerate(0, -accelerate_sensitivity) if key[pg.K_a]: item.accelerate(-accelerate_sensitivity, 0) if key[pg.K_s]: item.accelerate(0, accelerate_sensitivity) if key[pg.K_d]: item.accelerate(accelerate_sensitivity, 0) # angular acceleration: if key[pg.K_q] or key[pg.K_u]: item.accelerate(0, 0, rotational_accelerate_sensitivity) self.mode['sticky_rotate'] = False if key[pg.K_e] or key[pg.K_o]: item.accelerate(0, 0, -rotational_accelerate_sensitivity) self.mode['sticky_rotate'] = False # relative forward, backward: if key[pg.K_i] or key[pg.K_UP]: item.accelerate_forward(accelerate_sensitivity) if key[pg.K_k] or key[pg.K_DOWN]: item.accelerate_forward(-accelerate_sensitivity) # sticky (non-accelerating) rotation: if key[pg.K_LEFT] or key[pg.K_j]: item.smooth_rotate(target_rotation, sensitivity=16) self.mode['sticky_rotate'] = True if key[pg.K_RIGHT] or key[pg.K_l]: item.smooth_rotate(-target_rotation, sensitivity=16) self.mode['sticky_rotate'] = True # reset rotation smoothly back to zero: if self.mode['sticky_rotate']: if not (key[pg.K_LEFT] or key[pg.K_j] or key[pg.K_RIGHT] or key[pg.K_l]): item.smooth_rotate(0, sensitivity=30) # mouse controls if pg.mouse.get_pressed()[0]: spot = pg.mouse.get_pos() item.smooth_translate(spot[0], spot[1])