def display_inventory(self): """Display a message listing the player's inventory""" header = "Carrying:\n" nothing_func = lambda *args: None action_list = [(item, nothing_func) for item in self.inventory] if len(action_list) == 0: header += "Nothing at all" events.trigger_event("print_list", action_list, header=header)
def shutdown(): global NEXT_LOADER_CALLBACK logging.info('Shutting down...') _clean() events.trigger_event('shutdown') NEXT_LOADER_CALLBACK = None
def logic(): _time = get_time() _world = WORLDS[ACTIVE_WORLD] _world['last_tick'] = _time if _time>=_world['next_tick']: _world['next_tick'] = _time+(1.0/display.get_tps()) events.trigger_event('tick') events.trigger_event('cleanup')
def run(callback): global NEXT_LOADER_CALLBACK, NEXT_TRANSITION events.trigger_event('boot') load(callback) while NEXT_LOADER_CALLBACK: if NEXT_TRANSITION: while 1: break NEXT_TRANSITION = None NEXT_LOADER_CALLBACK()
def handle_input(): global MOUSE_POS, LAST_MOUSE_POS _mouse = tcod.mouse_get_status() _event = tcod.sys_check_for_event(tcod.EVENT_ANY, KEY, MOUSE) if KEY.c: _key_code = KEY.c else: _key_code = KEY.vk if _event == tcod.KEY_PRESSED: if not _key_code in INPUT: INPUT[_key_code] = 1 else: INPUT[_key_code] += 1 if '--keyout' in sys.argv and INPUT[_key_code] == 1: print KEY.c, KEY.vk, INPUT[_key_code] elif _event == tcod.KEY_RELEASED: INPUT[_key_code] = 0 LAST_MOUSE_POS = MOUSE_POS[:] MOUSE_POS = [int(round(i)) for i in numbers.interp_velocity(LAST_MOUSE_POS, (_mouse.cx, _mouse.cy), .8)] if not MOUSE_POS == LAST_MOUSE_POS: events.trigger_event('mouse_moved', x=MOUSE_POS[0], y=MOUSE_POS[1], dx=MOUSE_POS[0]-LAST_MOUSE_POS[0], dy=MOUSE_POS[1]-LAST_MOUSE_POS[1]) if _mouse.lbutton_pressed: events.trigger_event('mouse_pressed', x=MOUSE_POS[0], y=MOUSE_POS[1], button=1) if _mouse.rbutton_pressed: events.trigger_event('mouse_pressed', x=MOUSE_POS[0], y=MOUSE_POS[1], button=2) if _mouse.lbutton: events.trigger_event('mouse_held', x=MOUSE_POS[0], y=MOUSE_POS[1], button=1) if _mouse.rbutton: events.trigger_event('mouse_held', x=MOUSE_POS[0], y=MOUSE_POS[1], button=2)
def loop(): global KEYS_RELEASED _held = set(KEYS_HELD.keys()) _pressed = set(KEYS_PRESSED.keys()) _add_to_pressed = {key: 0 for key in _held-_pressed} KEYS_PRESSED.update(_add_to_pressed) for char in KEYS_PRESSED: _pressed_for_frames = (KEYS_PRESSED[char]+1) * KEYS_HELD.get(char) if not _pressed_for_frames and KEYS_PRESSED[char]: KEYS_RELEASED.append(char) KEYS_PRESSED[char] = _pressed_for_frames events.trigger_event('input') KEYS_RELEASED = []
def tick(): global CURRENT_TIME, HANG_TIME, ACCU, T if HANG_TIME: HANG_TIME -= 1 return False _new_time = worlds.get_time() _frame_time = _new_time-CURRENT_TIME CURRENT_TIME = _new_time ACCU = numbers.clip(ACCU+_frame_time, 0, DT) while ACCU >= DT: events.trigger_event('logic') ACCU -= DT T += DT display.set_clock_delta(_frame_time) events.trigger_event('frame')
def main(): global MAP for x in range(10000/100): for y in range(10000/100): MAP['%s,%s' % (x*100, y*100)] = {'solid': False} events.register_event('boot', display.boot) events.register_event('boot', entities.boot) events.register_event('boot', worlds.create, world_name='game') events.register_event('boot', boot) events.register_event('boot', ui.boot) events.register_event('boot', controls.boot, display.get_window()) events.register_event('load', display.load, level_editor=False) events.register_event('input', commands) events.register_event('loop', controls.loop) events.register_event('logic', worlds.logic) events.register_event('frame', window) events.register_event('shutdown', display.shutdown) events.trigger_event('boot') events.trigger_event('load') if display.RABBYT: while not display.WINDOW.has_exit: display.lib2d.step(pyglet.clock.tick()) display.WINDOW.dispatch_events() display.WINDOW.dispatch_event('on_draw') display.WINDOW.flip() else: while not display.WINDOW.has_exit: events.trigger_event('loop') display.WINDOW.dispatch_events() display.WINDOW.dispatch_event('on_draw') display.WINDOW.flip()
def on_draw(): _window_width, _window_height = get_window_size() if RABBYT: lib2d.clear(100) else: gl.glClearColor(36/255.0, 33/255.0, 30/255.0, 1) WINDOW.clear() glMatrixMode(GL_PROJECTION) glLoadIdentity() glPushMatrix() events.trigger_event('camera') CAMERA['center_on'] = numbers.interp_velocity(CAMERA['center_on'], CAMERA['next_center_on'], CAMERA['camera_move_speed']) CAMERA['next_zoom'] = numbers.clip(CAMERA['next_zoom'], .4, 40) CAMERA['zoom'] = numbers.interp(CAMERA['zoom'], CAMERA['next_zoom'], CAMERA['zoom_speed']) glOrtho(CAMERA['center_on'][0]-(_window_width*(.5*CAMERA['zoom'])), CAMERA['center_on'][0]+(_window_width*(.5*CAMERA['zoom'])), CAMERA['center_on'][1]+(_window_height*(.5*CAMERA['zoom']))+_window_height, CAMERA['center_on'][1]-(_window_height*(.5*CAMERA['zoom']))+_window_height, 0.0, 1.0) pyglet.graphics.draw(len(LEVEL_GRID)/2, GL_LINES, ('v2f', LEVEL_GRID), ('c4f', (.07, .07, .07, 1.0) * (len(LEVEL_GRID)/2))) if RABBYT: lib2d.render() else: events.trigger_event('draw') glPopMatrix() glPushMatrix() glOrtho(0, _window_width, 0, _window_height, 0.0, 1.0) for label in LABELS.values(): label.draw() glPopMatrix()
def _clean(): events.trigger_event('unload') events.trigger_event('cleanup') events.trigger_event('post_unload') events.unregister_all_events('unload') events.register_event('unload', display.clear_screen)
def drop_inventory(self): """Present list of inventory items and drop the one selected on the ground """ header = "Choose item to drop:\n" def drop(get_gameworld_cell, x, y, item): item_entity = ItemPickup([item], x, y, get_gameworld_cell) events.trigger_event("world_add_entity", item_entity) self.inventory.remove(item) action_list = [ (item, functools.partial(drop, get_gameworld_cell=self.get_gameworld_cell, x=self.x, y=self.y, item=item)) for item in self.inventory ] if len(action_list) == 0: header += "You hold nothing!" events.trigger_event("print_list", action_list, header=header)
def move(self, x_dir, y_dir): """Check the map and move the player in the given direction x_dir, y_dir: Values between -1 and 1 specifying the direction the player will move along that axis. """ self.should_move = True next_coords = (self.x + x_dir, self.y + y_dir) #First we directly inform the contents of the next cell that a player is trying #to enter it - this way we can minimize the use of the event next_cell_feature, next_cell_entities = self.get_gameworld_cell( *next_coords) thingies = next_cell_entities + [next_cell_feature] for thingy in thingies: self.should_move = (thingy.player_collision(self) and self.should_move) #Then we trigger an event for anyone not in the next cell who might care #If they stop us from moving, they should trigger "player_should_stop" events.trigger_event("player_enter_space", self, *next_coords) if self.should_move: self.x, self.y = next_coords
def main(): events.register_event("boot", display.boot) events.register_event("boot", entities.boot) events.register_event("boot", controls.boot, display.get_window()) events.register_event("boot", worlds.create, world_name="game") events.register_event("boot", ui.boot) events.register_event("boot", menu.boot) events.register_event("boot", battlefield.boot) events.register_event("boot", clock.boot) events.register_event("load", display.load) events.register_event("load", display.load) events.register_event("load", levels.load) events.register_event("loop", clock.tick) events.register_event("loop", controls.loop) events.register_event("logic", worlds.logic) events.register_event("frame", window) events.register_event("shutdown", display.shutdown) events.trigger_event("boot") events.trigger_event("load") # clock.create_scheduled_event('world_loop', worlds.loop, 1/display.get_tps()) # clock.create_scheduled_event('window_loop', window, 1/10.0) # pyglet.clock.schedule_interval(window, 1/10.0) # pyglet.clock.schedule_interval(worlds.loop, 1/display.get_tps()) if display.RABBYT: while not display.WINDOW.has_exit: display.lib2d.step(pyglet.clock.tick()) display.WINDOW.dispatch_events() display.WINDOW.dispatch_event("on_draw") display.WINDOW.flip() else: # pyglet.app.run() while not display.WINDOW.has_exit: events.trigger_event("loop") display.WINDOW.dispatch_events() display.WINDOW.dispatch_event("on_draw") display.WINDOW.flip()
def activate_portal(self, target_entity): """Change the map and move target_entity (probably the player) to the next map""" events.trigger_event("change_map_up") if self.dest_coords is not None: target_entity.x, target_entity.y = dest_coords
def drop(get_gameworld_cell, x, y, item): item_entity = ItemPickup([item], x, y, get_gameworld_cell) events.trigger_event("world_add_entity", item_entity) self.inventory.remove(item)
def receive_item(self, item): """Add item to the player's inventory""" self.inventory.append(item) events.trigger_event("print_message", "Picked up {0}".format(item))
def die(self): """Remove this entity from the world""" events.trigger_event("on_entity_death", self)
def player_collision(self, player): """On player collision, display the message""" events.trigger_event("print_message", self.message) return self.let_player_through
def handle_key(key): if key in ["y", "7"]: events.trigger_event("player_move", x_dir=-1, y_dir=-1) if key in ["KEY_UP", "k", "8"]: events.trigger_event("player_move", x_dir=0, y_dir=-1) if key in ["u", "9"]: events.trigger_event("player_move", x_dir=1, y_dir=-1) if key in ["KEY_LEFT", "h", "4"]: events.trigger_event("player_move", x_dir=-1, y_dir=0) if key in ["KEY_RIGHT", "l", "6"]: events.trigger_event("player_move", x_dir=+1, y_dir=0) if key in ["b", "1"]: events.trigger_event("player_move", x_dir=-1, y_dir=1) if key in ["KEY_DOWN", "j", "2"]: events.trigger_event("player_move", x_dir=0, y_dir=1) if key in ["n", "3"]: events.trigger_event("player_move", x_dir=1, y_dir=1) if key in ['i']: events.trigger_event("player_display_inventory") if key in ['d']: events.trigger_event("player_drop_inventory") if key in ['>', '<']: events.trigger_event("player_use_portal")
def shutdown(): events.trigger_event('shutdown')