예제 #1
0
 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)
예제 #2
0
파일: __init__.py 프로젝트: witheld9/r3-tdw
def shutdown():
	global NEXT_LOADER_CALLBACK

	logging.info('Shutting down...')
	
	_clean()
	events.trigger_event('shutdown')

	NEXT_LOADER_CALLBACK = None
예제 #3
0
파일: __init__.py 프로젝트: penny64/r3-tdw
def shutdown():
    global NEXT_LOADER_CALLBACK

    logging.info('Shutting down...')

    _clean()
    events.trigger_event('shutdown')

    NEXT_LOADER_CALLBACK = None
예제 #4
0
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')
예제 #5
0
파일: __init__.py 프로젝트: penny64/r3-tdw
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()
예제 #6
0
파일: __init__.py 프로젝트: witheld9/r3-tdw
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()
예제 #7
0
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)
예제 #8
0
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 = []
예제 #9
0
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')
예제 #10
0
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()
예제 #11
0
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()
예제 #12
0
파일: __init__.py 프로젝트: witheld9/r3-tdw
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)
예제 #13
0
파일: __init__.py 프로젝트: penny64/r3-tdw
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)
예제 #14
0
    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)
예제 #15
0
    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
예제 #16
0
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()
예제 #17
0
 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
예제 #18
0
 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)
예제 #19
0
 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))
예제 #20
0
 def die(self):
     """Remove this entity from the world"""
     events.trigger_event("on_entity_death", self)
예제 #21
0
 def player_collision(self, player):
     """On player collision, display the message"""
     events.trigger_event("print_message", self.message)
     return self.let_player_through
예제 #22
0
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")
예제 #23
0
def shutdown():
	events.trigger_event('shutdown')