def loop(entity): if not entity['smooth_draw']: entity['sprite'].set_position_and_rotate_and_scale(entity['position'][0], display.get_window_size()[1]+entity['position'][1], entity['next_rotation'], entity['next_scale']) if not entity['last_scale'] and not entity['next_scale']: entities.unregister_event(entity, 'loop', loop) else: _dt = worlds.get_interp() img = entity['sprite']._texture _scale = numbers.interp(entity['last_scale'], entity['next_scale'], _dt) x1 = int(entity['sprite']._x - img.anchor_x * _scale) y1 = int(entity['sprite']._y - img.anchor_y * _scale) x2 = int(x1 + img.width * _scale) y2 = int(y1 + img.height * _scale) entity['sprite']._scale = _scale if not entity['sprite']._visible: entity['sprite']._vertex_list.vertices[:] = [0, 0, 0, 0, 0, 0, 0, 0] else: entity['sprite']._vertex_list.vertices[:] = [x1, y1, x2, y1, x2, y2, x1, y2] return False _dt = worlds.get_interp() _rot = numbers.interp(entity['last_rotation'], entity['next_rotation'], _dt) entity['sprite'].set_position_and_rotate_and_scale(int(round(numbers.interp(entity['last_position'][0], entity['position'][0], _dt))), numbers.interp(display.get_window_size()[1]+entity['last_position'][1], display.get_window_size()[1]+entity['position'][1], _dt), _rot, numbers.interp(entity['last_scale'], entity['next_scale'], _dt))
def system_input(): if key_held('o'): display.CAMERA['next_zoom'] -= .1 elif key_held('p'): display.CAMERA['next_zoom'] += .1 elif key_held('['): display.CAMERA['next_zoom'] = 2.5 elif key_pressed('p'): _entities = set(entities.ENTITIES.keys()) _i = 0 for entity_group in entities.GROUPS: display.print_text(0, display.get_window_size()[1]-(_i*14), '%s: %s' % (entity_group, len(entities.GROUPS[entity_group])), fade_out_speed=255) _entities -= set(entities.GROUPS[entity_group]) _i += 1 display.print_text(0, display.get_window_size()[1]-(_i*14), 'Total: %s' % len(entities.ENTITIES), fade_out_speed=255) print 'Stranded ents:', len(_entities) for entity in _entities: _entity = entities.ENTITIES[entity] import pprint pp = pprint.PrettyPrinter(indent=4) print pp.pprint(_entity) break _i += 1 for group_name in display.SPRITE_GROUPS: display.print_text(0, display.get_window_size()[1]-(_i*14), '%s: %s' % (group_name, len(display.SPRITE_GROUPS[group_name]['sprites'])), fade_out_speed=255) _i += 1 elif key_pressed('z'): display.screenshot()
def delete(entity): time.sleep(.75) display.clear_text_group('bot_center') #TODO: Let menu take over display.CAMERA['zoom_speed'] = .09 display.CAMERA['next_zoom'] = 4.5 display.CAMERA['camera_move_speed'] = 0.02 #NOTERIETY -= entities.get_entity_group('enemies') events.unregister_event('camera', handle_camera) menu.setup_main_menu() _enemy_amount = len(entities.get_entity_group('enemies')) if _enemy_amount>=3: _loss_string = 'Pirates spread the news of your death...' elif _enemy_amount: _loss_string = 'People think a little less of you now...' else: _loss_string = 'Only the machines saw your death...' display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.25, _loss_string, text_group='bot_center', color=(255, 0, 0, 0), show_for=6, fade_in_speed=4, center=True)
def boss_victory(entity, victory_text='Boss Defeated'): display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.6, victory_text, color=(255, 255, 255, 255), show_for=1.5, font_size=42, center=True)
def unlock_chaingun(): display.print_text( display.get_window_size()[0] / 2, display.get_window_size()[1] * 0.30, "Unlocked: Ivan's Chaingun", color=(255, 255, 255, 150), font_size=18, center=True, show_for=2, )
def draw_menu(): _i = 0 display.clear_text_group('menu') for menu_item in MENU: _text = menu_item['text'] if _i == MENU_INDEX: _text = '> '+_text+' <' display.print_text(display.get_window_size()[0]/2, (display.get_window_size()[1]*.65)-(_i*24), _text, show_for=-1, center=True, text_group='menu') _i += 1
def create_player(): _player = ships.create_energy_ship() _player['player'] = True player.register_entity(_player) events.register_event('input', player.handle_input, _player['_id']) events.register_event('camera', player.handle_camera, _player['_id']) entities.register_event(_player, 'score', player.score) entities.register_event(_player, 'delete', player.delete) entities.register_event(_player, 'kill', lambda entity: events.unregister_event('input', player.handle_input)) entities.register_event(_player, 'kill', lambda entity: display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.75, 'Awarded medal:', color=(255, 0, 0, 50), font_size=18, show_for=3.5, fade_in_speed=6, center=True))
def weapon_selection(): global MENU_INDEX, MENU MENU_INDEX = 0 MENU = [{'text': 'None', 'callback': start_arena}, {'text': 'Chaingun', 'callback': lambda: start_arena(weapon='chaingun')}, {'text': 'Back', 'callback': setup_main_menu}] display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.8, 'VECTOR:KILL', color=(0, 255, 0, 100), font_name='Thin Design', font_size=42, center=True, show_for=-1, text_group='logo') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.20, 'Next unlock:', text_group='bot_center', color=(238, 221, 130, 255), show_for=-1, center=True) display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.15, 'Ivan\'s Chaingun', text_group='bot_center', color=(255, 215, 0, 255), show_for=-1, center=True) draw_menu()
def create_player(): _player = ships.create_energy_ship() _player['player'] = True player.register_entity(_player) events.register_event('input', player.handle_input, _player['_id']) events.register_event('camera', player.handle_camera, _player['_id']) entities.register_event(_player, 'score', player.score) entities.register_event(_player, 'delete', player.delete) entities.register_event( _player, 'kill', lambda entity: events.unregister_event('input', player.handle_input)) entities.register_event( _player, 'kill', lambda entity: display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .75, 'Awarded medal:', color=(255, 0, 0, 50), font_size=18, show_for=3.5, fade_in_speed=6, center=True))
def loop(): global TRANSITION_PAUSE, ANNOUNCE, NOTERIETY if entities.get_entity_group('players') and not entities.get_entity_group('enemies') and not entities.get_entity_group('hazards'): if TRANSITION_PAUSE: if ANNOUNCE: ANNOUNCE = False display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.95, 'WAVE CLEARED', color=(200, 200, 200, 255), text_group='bot_center', show_for=2, center=True) TRANSITION_PAUSE -= 1 return False NOTERIETY += LEVEL spawn_enemies()
def loop(): global TRANSITION_PAUSE, ANNOUNCE, NOTERIETY if entities.get_entity_group('players') and not entities.get_entity_group( 'enemies') and not entities.get_entity_group('hazards'): if TRANSITION_PAUSE: if ANNOUNCE: ANNOUNCE = False display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .95, 'WAVE CLEARED', color=(200, 200, 200, 255), text_group='bot_center', show_for=2, center=True) TRANSITION_PAUSE -= 1 return False NOTERIETY += LEVEL spawn_enemies()
def setup_main_menu(): global MENU events.register_event('input', control) events.register_event('loop', battlefield.loop_attract) events.register_event('camera', action_camera) battlefield.create(player=False) display.create_text_group('logo') display.create_text_group('menu') MENU = [{'text': 'Planet', 'callback': start_planet}, {'text': 'Arena', 'callback': weapon_selection}, {'text': 'Quit', 'callback': shutdown}] display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.8, 'VECTOR:KILL', color=(0, 255, 0, 100), font_name='Thin Design', font_size=42, center=True, show_for=-1, text_group='logo') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.20, 'Next unlock:', text_group='bot_center', color=(238, 221, 130, 255), show_for=-1, center=True) display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.15, 'Ivan\'s Chaingun', text_group='bot_center', color=(255, 215, 0, 255), show_for=-1, center=True) draw_menu()
def spawn_enemies(): global TRANSITION_PAUSE, ANNOUNCE, LEVEL if LEVEL == 5: _boss = ships.create_ivan(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _details = [ '<b>Stolovitzky, Ivan</b>', '<i>Suicidal maniac</i>', 'Wanted for: <b>Intergalactic Manslaughter</b>' ] display.camera_zoom(1.5) display.camera_focus_on(_boss['position']) display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .75, 'CRAZY IVAN', font_size=42, text_group='bot_center', center=True, color=(0, 240, 0, 50), fade_in_speed=24, show_for=3) _i = 0 for detail_text in _details: display.print_text(display.get_window_size()[0] * .6, display.get_window_size()[1] * .65 - (24 * _i), detail_text, font_size=20, text_group='bot_center', color=(240, 240, 240, 0), fade_in_speed=(len(_details) - _i) * 2, show_for=3) _i += 1 clock.hang_for(180) entities.register_event(_boss, 'kill', lambda entity: progress.unlock_chaingun()) TRANSITION_PAUSE = 240 ANNOUNCE = True LEVEL += 1 return False if not LEVEL % 4: for i in range(1 * (LEVEL - 1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) TRANSITION_PAUSE = 120 ANNOUNCE = True LEVEL += 1 return False for i in range(1 * (LEVEL - 1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _eyemine_spawn_point = (random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint(worlds.get_size()[1] * .25, worlds.get_size()[1] * .75)) for i in range(random.randint(2, 4) * LEVEL): _rand_distance = 350 + (120 * LEVEL) _x_mod = random.randint(-_rand_distance, _rand_distance) _y_mod = random.randint(-_rand_distance, _rand_distance) ships.create_eyemine(x=_eyemine_spawn_point[0] + _x_mod, y=_eyemine_spawn_point[1] + _y_mod) _move = random.randint(0, 1) if _move: _move_direction = random.randint(0, 359) for i in range(random.randint(1, 2) * LEVEL): _x, _y = random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint( worlds.get_size()[1] * .25, worlds.get_size()[1] * .75) _turret = ships.create_missile_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if LEVEL >= 3: for i in range(random.randint(1, 2) * (int(round(LEVEL * .25)))): _x, _y = random.randint(worlds.get_size()[0] * .25, worlds.get_size()[0] * .75), random.randint( worlds.get_size()[1] * .25, worlds.get_size()[1] * .75) _turret = ships.create_gun_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if 1 * (LEVEL - 1): display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0] / 2, display.get_window_size()[1] * .95, 'ENEMY FIGHTERS INBOUND', color=(0, 240, 0, 255), text_group='bot_center', show_for=1.5, center=True) LEVEL += 1 ANNOUNCE = True TRANSITION_PAUSE = 120
def spawn_enemies(): global TRANSITION_PAUSE, ANNOUNCE, LEVEL if LEVEL == 5: _boss = ships.create_ivan(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _details = ['<b>Stolovitzky, Ivan</b>', '<i>Suicidal maniac</i>', 'Wanted for: <b>Intergalactic Manslaughter</b>'] display.camera_zoom(1.5) display.camera_focus_on(_boss['position']) display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.75, 'CRAZY IVAN', font_size=42, text_group='bot_center', center=True, color=(0, 240, 0, 50), fade_in_speed=24, show_for=3) _i = 0 for detail_text in _details: display.print_text(display.get_window_size()[0]*.6, display.get_window_size()[1]*.65-(24*_i), detail_text, font_size=20, text_group='bot_center', color=(240, 240, 240, 0), fade_in_speed=(len(_details)-_i)*2, show_for=3) _i += 1 clock.hang_for(180) entities.register_event(_boss, 'kill', lambda entity: progress.unlock_chaingun()) TRANSITION_PAUSE = 240 ANNOUNCE = True LEVEL += 1 return False if not LEVEL % 4: for i in range(1*(LEVEL-1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) TRANSITION_PAUSE = 120 ANNOUNCE = True LEVEL += 1 return False for i in range(1*(LEVEL-1)): ships.create_flea(x=random.randint(0, worlds.get_size()[0]), y=random.randint(0, worlds.get_size()[1])) _eyemine_spawn_point = (random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75)) for i in range(random.randint(2, 4)*LEVEL): _rand_distance = 350+(120*LEVEL) _x_mod = random.randint(-_rand_distance, _rand_distance) _y_mod = random.randint(-_rand_distance, _rand_distance) ships.create_eyemine(x=_eyemine_spawn_point[0]+_x_mod, y=_eyemine_spawn_point[1]+_y_mod) _move = random.randint(0, 1) if _move: _move_direction = random.randint(0, 359) for i in range(random.randint(1, 2)*LEVEL): _x, _y = random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75) _turret = ships.create_missile_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if LEVEL >= 3: for i in range(random.randint(1, 2)*(int(round(LEVEL*.25)))): _x, _y = random.randint(worlds.get_size()[0]*.25, worlds.get_size()[0]*.75), random.randint(worlds.get_size()[1]*.25, worlds.get_size()[1]*.75) _turret = ships.create_gun_turret(x=_x, y=_y) if _move: entities.trigger_event(_turret, 'set_direction', direction=_move_direction) entities.trigger_event(_turret, 'set_minimum_velocity', velocity=[-5, -5]) entities.trigger_event(_turret, 'set_maximum_velocity', velocity=[5, 5]) entities.trigger_event(_turret, 'thrust') if 1*(LEVEL-1): display.clear_text_group('bot_center') display.print_text(display.get_window_size()[0]/2, display.get_window_size()[1]*.95, 'ENEMY FIGHTERS INBOUND', color=(0, 240, 0, 255), text_group='bot_center', show_for=1.5, center=True) LEVEL += 1 ANNOUNCE = True TRANSITION_PAUSE = 120