예제 #1
0
파일: items.py 프로젝트: penny64/r3-tdw
def check_for_collisions(entity):
    _x, _y = movement.get_position(entity)

    if _x < 0 or _x >= zones.get_active_size(
    )[0] - 1 or _y < 0 or _y >= zones.get_active_size()[1] - 1:
        entities.delete_entity(entity)

        return

    if (_x, _y) in zones.get_active_solids(entity):
        entities.trigger_event(entity, 'collision_with_solid')

        return

    for entity_id in entities.get_entity_group('life'):
        if entity_id == entity['owner']:
            continue

        if movement.get_position(entity) == movement.get_position_via_id(
                entity_id):
            entities.trigger_event(entity,
                                   'collision_with_entity',
                                   target_id=entity_id)

            return
예제 #2
0
def _reload_weapon(entity, weapon_id, ammo_id):
    _weapon = entities.get_entity(weapon_id)
    _ammo = entities.get_entity(ammo_id)
    _weapon_ammo = flags.get_flag(_weapon, 'ammo')
    _weapon_ammo_max = flags.get_flag(_weapon, 'ammo_max')
    _ammo_count = flags.get_flag(_ammo, 'ammo')

    if _weapon_ammo == _weapon_ammo_max:
        return

    _need_ammo = numbers.clip(_weapon_ammo_max - _weapon_ammo, 1, _ammo_count)
    _ammo_count -= _need_ammo

    entities.trigger_event(_weapon,
                           'set_flag',
                           flag='ammo',
                           value=_weapon_ammo + _need_ammo)

    if _ammo_count:
        entities.trigger_event(_ammo,
                               'set_flag',
                               flag='ammo',
                               value=_ammo_count)
    else:
        entities.delete_entity(_ammo)
예제 #3
0
def hit(entity, projectile, damage_mod=1.0):
    _accuracy = random.uniform(.7, 1)
    _hit_map = []

    for limb_name in entity['skeleton']['limbs']:
        _limb = entity['skeleton']['limbs'][limb_name]

        for i in range(int(round(_limb['health'] * _limb['accuracy']))):
            _hit_map.append(limb_name)

    _limb_name = random.choice(_hit_map)
    _limb = entity['skeleton']['limbs'][_limb_name]
    _damage = int(
        round((projectile['damage'] * _accuracy) * (numbers.clip(
            (1 - _limb['accuracy']), 0.25, .6) + .4)))
    _damage = int(round(_damage * damage_mod))
    _limb['health'] -= _damage
    _x, _y = movement.get_position(entity)
    _x += int(round(random.uniform(-1, 1)))
    _y += int(round(random.uniform(-1, 1)))
    _mod = _limb['health'] / float(_limb['max_health'])

    #effects.explosion(_x, _y, 6)

    if not (_x, _y) in zones.get_active_solids(entity,
                                               ignore_calling_entity=True):
        #effects.blood(_x, _y)
        effects.blood_splatter(
            _x, _y,
            movement.get_direction(projectile) + random.randint(-5, 5))
        entities.trigger_event(entity,
                               'animate',
                               animation=['X', '@@'],
                               repeat=4 * int(round((1 - _mod))),
                               delay=20 * _mod)

    if _limb['health'] <= 0:
        if _limb['critical']:
            if projectile['owner'] in entities.ENTITIES:
                entities.trigger_event(entities.get_entity(
                    projectile['owner']),
                                       'log_kill',
                                       target_id=entity['_id'])
                entities.trigger_event(entity,
                                       'killed_by',
                                       target_id=projectile['owner'])

            #entity['stats']['grave'] = {'':}
            entities.delete_entity(entity)
    else:
        if projectile['owner'] in entities.ENTITIES:
            entities.trigger_event(entities.get_entity(projectile['owner']),
                                   'did_damage',
                                   target_id=entity['_id'],
                                   damage=_damage)

        entities.trigger_event(entity,
                               'damage',
                               limb=_limb_name,
                               damage=_damage)
예제 #4
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _tick_fire(entity):
	_x, _y = movement.get_position(entity)
	_alpha = flags.get_flag(entity, 'alpha')
	_alpha += random.uniform(-.3, .3)
	_alpha = numbers.clip(_alpha, 0, 1)
	
	if not _alpha:
		#char(_x, _y, numbers.clip(flags.get_flag(entity, 'alpha_max') - random.uniform(.1, .2), 0, 1))
		entities.delete_entity(entity)
		
		return
	
	#entities.trigger_event(entity, 'set_char', char=random.choice(['*', '&', '%']))

	_color = list(display.get_color_at('tiles', _x, _y))
	_color[0] = numbers.interp_velocity(_color[0], random.choice([constants.FIRE_1, constants.FIRE_2, constants.FIRE_3]), _alpha)
	_color[1] = numbers.interp_velocity(_color[1], random.choice([constants.FIRE_1, constants.FIRE_2, constants.FIRE_3]), _alpha)
	
	for c in range(len(_color)):
		for i in range(len(_color)):
			_color[c][i] = int((round(_color[c][i])))
	
	entities.trigger_event(entity, 'set_fore_color', color=_color[0])
	entities.trigger_event(entity, 'set_back_color', color=_color[1])
	entities.trigger_event(entity, 'set_flag', flag='alpha', value=_alpha)
예제 #5
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _smoke_shooter_push(entity):
	_x, _y = movement.get_position(entity)
	_direction = movement.get_direction(entity)
	_mod = random.randint(-35, 35)
	_alpha = flags.get_flag(entity, 'alpha')
	
	if _mod < 0:
		_mod = numbers.clip(_mod, -35, -20)
	else:
		_mod = numbers.clip(_mod, 20, 35)
	
	_direction += _mod
	
	_v_x, _v_y = numbers.velocity(_direction, random.uniform(.65, .85))
	
	if not int(round(_x + _v_x)) == int(round(_x)) or not int(round(_y + _v_y)) == int(round(_y)):
		#smoke_cloud(_x + _v_x, _y + _v_y, random.randint(1, 2), start_alpha=_alpha, decay_amount=1.2)
		smoke(_x + _v_x, _y + _v_y, .75, start_amount=_alpha, decay_amount=random.uniform(3.0, 4.0))
	
	_x += _v_x
	_y += _v_y
	
	if (int(round(_x)), int(round(_y))) in zones.get_active_solids({}, no_life=True):
		entities.delete_entity(entity)
		
		return
	
	entities.trigger_event(entity, 'set_direction', direction=_direction)
	entities.trigger_event(entity, 'set_position', x=_x, y=_y)
	entities.trigger_event(entity, 'set_flag', flag='alpha', value=_alpha - .05)
예제 #6
0
파일: nodes.py 프로젝트: penny64/r3-tdw
def clear_path(entity):
    for node_id in entity['node_grid']['path']:
        _last_node = entity['node_grid']['nodes'][node_id]

        entities.delete_entity(_last_node['node'])

    entities.trigger_event(entity, 'stop')
    entity['node_grid']['path'] = []
    entity['node_grid']['nodes'] = {}
예제 #7
0
파일: nodes.py 프로젝트: witheld9/r3-tdw
def clear_path(entity):
	for node_id in entity['node_grid']['path']:
		_last_node = entity['node_grid']['nodes'][node_id]
		
		entities.delete_entity(_last_node['node'])
	
	entities.trigger_event(entity, 'stop')
	entity['node_grid']['path'] = []
	entity['node_grid']['nodes'] = {}
예제 #8
0
파일: items.py 프로젝트: witheld9/r3-tdw
def _bullet_tick(entity):
	_direction = movement.get_direction(entity)
	
	entities.trigger_event(entity, 'push_tank', direction=_direction)
	
	_x, _y = movement.get_position(entity)
	_distance = numbers.distance((_x, _y), entity['start_position'])
	_starting_target_distance = numbers.distance(entity['start_position'], entity['end_position'])
	
	if _distance > _starting_target_distance + (12 - (entity['speed'] * 2)):
		entities.delete_entity(entity)
예제 #9
0
파일: items.py 프로젝트: penny64/r3-tdw
def _bullet_tick(entity):
    _direction = movement.get_direction(entity)

    entities.trigger_event(entity, 'push_tank', direction=_direction)

    _x, _y = movement.get_position(entity)
    _distance = numbers.distance((_x, _y), entity['start_position'])
    _starting_target_distance = numbers.distance(entity['start_position'],
                                                 entity['end_position'])

    if _distance > _starting_target_distance + (12 - (entity['speed'] * 2)):
        entities.delete_entity(entity)
예제 #10
0
파일: ui_dialog.py 프로젝트: penny64/r3-tdw
def delete(dialog):
    global ACTIVE_DIALOG

    entities.delete_entity(dialog)

    if ACTIVE_DIALOG == dialog:
        _dialogs = entities.get_entity_group('ui_dialogs')

        if _dialogs:
            ACTIVE_DIALOG = entities.get_entity(_dialogs[len(_dialogs) - 1])
            entities.trigger_event(ACTIVE_DIALOG, 'reactivated')

        else:
            ACTIVE_DIALOG = None
예제 #11
0
def delete(dialog):
	global ACTIVE_DIALOG
	
	entities.delete_entity(dialog)
	
	if ACTIVE_DIALOG == dialog:
		_dialogs = entities.get_entity_group('ui_dialogs')
		
		if _dialogs:		
			ACTIVE_DIALOG = entities.get_entity(_dialogs[len(_dialogs)-1])
			entities.trigger_event(ACTIVE_DIALOG, 'reactivated')
			
		else:
			ACTIVE_DIALOG = None
예제 #12
0
파일: items.py 프로젝트: penny64/r3-tdw
def bullet(entity, x, y, tx, ty, speed, accuracy, damage):
    _entity = _create(x, y, 'Bullet', '.', 0, 'bullet')
    _entity['owner'] = entity['_id']
    _entity['start_position'] = (x, y)
    _entity['end_position'] = (tx, ty)
    _entity['speed'] = speed
    _entity['damage'] = damage

    entities.add_entity_to_group(_entity, 'bullets')
    timers.register(_entity)

    entities.trigger_event(_entity,
                           'set_direction',
                           direction=numbers.direction_to(
                               (x, y),
                               (tx, ty)) + random.uniform(-accuracy, accuracy))
    entities.trigger_event(_entity,
                           'create_timer',
                           time=speed,
                           repeat=-1,
                           enter_callback=_bullet_tick,
                           repeat_callback=_bullet_tick)
    entities.register_event(_entity, 'position_changed',
                            lambda e, **kwargs: check_for_collisions(e))
    entities.register_event(
        _entity, 'collision_with_entity', lambda e, target_id: entities.
        trigger_event(entities.get_entity(target_id), 'hit', projectile=e))
    entities.register_event(_entity, 'collision_with_entity',
                            lambda e, target_id: entities.delete_entity(e))
    entities.register_event(
        _entity, 'collision_with_solid', lambda e: effects.light(
            movement.get_position(e)[0],
            movement.get_position(e)[1], random.randint(3, 4)))
    entities.register_event(_entity, 'collision_with_solid',
                            lambda e: entities.delete_entity(e))
    entities.register_event(
        _entity, 'collision_with_solid',
        lambda e: effects.smoke_cloud(movement.get_position(e)[0],
                                      movement.get_position(e)[1],
                                      random.uniform(2, 2.75),
                                      start_alpha=random.uniform(0.45, .65),
                                      decay_amount=1.5))
    entities.register_event(_entity, 'check_next_position',
                            check_next_position)

    if not '--no-fx' in sys.argv:
        entities.register_event(
            _entity, 'position_changed',
            lambda e, x, y, **kwargs: _bullet_effects(e, x, y))
예제 #13
0
파일: ui_menu.py 프로젝트: witheld9/r3-tdw
def delete(menu):
	global ACTIVE_MENU, DELAY
	
	entities.delete_entity(menu)
	
	if ACTIVE_MENU == menu:
		_menus = entities.get_entity_group('ui_menus')
		
		if _menus:		
			ACTIVE_MENU = entities.get_entity(_menus[len(_menus)-1])
			entities.trigger_event(ACTIVE_MENU, 'reactivated')
			
		else:
			ACTIVE_MENU = None
	
	DELAY = 30
예제 #14
0
def delete(menu):
    global ACTIVE_MENU, DELAY

    entities.delete_entity(menu)

    if ACTIVE_MENU == menu:
        _menus = entities.get_entity_group('ui_menus')

        if _menus:
            ACTIVE_MENU = entities.get_entity(_menus[len(_menus) - 1])
            entities.trigger_event(ACTIVE_MENU, 'reactivated')

        else:
            ACTIVE_MENU = None

    DELAY = 30
예제 #15
0
파일: life.py 프로젝트: witheld9/r3-tdw
def _reload_weapon(entity, weapon_id, ammo_id):
	_weapon = entities.get_entity(weapon_id)
	_ammo = entities.get_entity(ammo_id)
	_weapon_ammo = flags.get_flag(_weapon, 'ammo')
	_weapon_ammo_max = flags.get_flag(_weapon, 'ammo_max')
	_ammo_count = flags.get_flag(_ammo, 'ammo')

	if _weapon_ammo == _weapon_ammo_max:
		return

	_need_ammo = numbers.clip(_weapon_ammo_max - _weapon_ammo, 1, _ammo_count)
	_ammo_count -= _need_ammo

	entities.trigger_event(_weapon, 'set_flag', flag='ammo', value=_weapon_ammo + _need_ammo)

	if _ammo_count:
		entities.trigger_event(_ammo, 'set_flag', flag='ammo', value=_ammo_count)
	else:
		entities.delete_entity(_ammo)
예제 #16
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _vapor_fade(entity):
	entity['alpha'] -= entity['fade_rate']
	
	if entity['alpha'] <= 0:
		entities.delete_entity(entity)
		
		return
	
	_x, _y = movement.get_position(entity)
		
	_color = list(display.get_color_at('tiles', _x, _y))
	_color[0] = numbers.interp_velocity(_color[0], (255, 255, 255), entity['alpha'])
	_color[1] = numbers.interp_velocity(_color[1], (255, 255, 255), entity['alpha'])
	
	for c in range(len(_color)):
		for i in range(len(_color)):
			_color[c][i] = int((round(_color[c][i])))
	
	entities.trigger_event(entity, 'set_fore_color', color=_color[0])
	entities.trigger_event(entity, 'set_back_color', color=_color[1])		
예제 #17
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _tick_smoke(entity):
	_x, _y = movement.get_position(entity)
	_alpha = flags.get_flag(entity, 'alpha')
	_alpha_mode = flags.get_flag(entity, 'alpha_mode')
	_alpha_max = flags.get_flag(entity, 'alpha_max')
	_fore_color = flags.get_flag(entity, 'fore_color')
	_back_color = flags.get_flag(entity, 'back_color')
	_decay_mod = flags.get_flag(entity, 'decay')
	
	if _alpha_mode:
		_alpha -= random.uniform(.001 * _decay_mod, .005 * _decay_mod)
		
		if _alpha <= 0:
			display._set_char('tiles', _x, _y, ' ', (0, 0, 0), None)
			entities.delete_entity(entity)
			
			return
	
	else:
		_alpha += random.uniform(.01, .05)
		
		if _alpha > _alpha_max:
			_alpha_mode = 1
	
	_alpha = numbers.clip(_alpha, 0, 1)
	
	#entities.trigger_event(entity, 'set_char', char=random.choice(['*', '&', '%']))

	_color = list(display.get_color_at('tiles', _x, _y))
	_color[0] = numbers.interp_velocity(_color[0], _fore_color, _alpha)
	_color[1] = numbers.interp_velocity(_color[1], _back_color, _alpha)
	
	for c in range(len(_color)):
		for i in range(len(_color)):
			_color[c][i] = int((round(_color[c][i])))
	
	entities.trigger_event(entity, 'set_fore_color', color=_color[0])
	entities.trigger_event(entity, 'set_back_color', color=_color[1])
	
	entities.trigger_event(entity, 'set_flag', flag='alpha', value=_alpha)
	entities.trigger_event(entity, 'set_flag', flag='alpha_mode', value=_alpha_mode)
예제 #18
0
def cleanup(entity):
	_squad = ai_squads.get_assigned_squad(entity)
	
	_squad['members'].remove(entity['_id'])
	
	if _squad['leader'] == entity['_id']:
		logging.warning('Leader of squad died. Handle this.')
		
		if _squad['members']:
			_squad['leader'] = list(_squad['members'])[0]
		
		else:
			_squad['leader'] = None
	
	if entity['_id'] in _squad['member_info']:
		del _squad['member_info'][entity['_id']]
	
	if not _squad['members']:
		del FACTIONS[_squad['faction']]['squads'][_squad['squad_id']]
		
		entities.delete_entity(_squad)
예제 #19
0
def cleanup(entity):
    _squad = ai_squads.get_assigned_squad(entity)

    _squad['members'].remove(entity['_id'])

    if _squad['leader'] == entity['_id']:
        logging.warning('Leader of squad died. Handle this.')

        if _squad['members']:
            _squad['leader'] = list(_squad['members'])[0]

        else:
            _squad['leader'] = None

    if entity['_id'] in _squad['member_info']:
        del _squad['member_info'][entity['_id']]

    if not _squad['members']:
        del FACTIONS[_squad['faction']]['squads'][_squad['squad_id']]

        entities.delete_entity(_squad)
예제 #20
0
파일: items.py 프로젝트: witheld9/r3-tdw
def check_for_collisions(entity):
	_x, _y = movement.get_position(entity)
	
	if _x < 0 or _x >= zones.get_active_size()[0]-1 or _y < 0 or _y >= zones.get_active_size()[1]-1:
		entities.delete_entity(entity)
		
		return
	
	if (_x, _y) in zones.get_active_solids(entity):
		entities.trigger_event(entity, 'collision_with_solid')
		
		return
	
	for entity_id in entities.get_entity_group('life'):
		if entity_id == entity['owner']:
			continue
		
		if movement.get_position(entity) == movement.get_position_via_id(entity_id):
			entities.trigger_event(entity, 'collision_with_entity', target_id=entity_id)
			
			return
예제 #21
0
파일: items.py 프로젝트: witheld9/r3-tdw
def bullet(entity, x, y, tx, ty, speed, accuracy, damage):
	_entity = _create(x, y, 'Bullet', '.', 0, 'bullet')
	_entity['owner'] = entity['_id']
	_entity['start_position'] = (x, y)
	_entity['end_position'] = (tx, ty)
	_entity['speed'] = speed
	_entity['damage'] = damage
	
	entities.add_entity_to_group(_entity, 'bullets')
	timers.register(_entity)
	
	entities.trigger_event(_entity, 'set_direction', direction=numbers.direction_to((x, y), (tx, ty))+random.uniform(-accuracy, accuracy))
	entities.trigger_event(_entity, 'create_timer', time=speed, repeat=-1, enter_callback=_bullet_tick, repeat_callback=_bullet_tick)
	entities.register_event(_entity, 'position_changed', lambda e, **kwargs: check_for_collisions(e))
	entities.register_event(_entity, 'collision_with_entity', lambda e, target_id: entities.trigger_event(entities.get_entity(target_id), 'hit', projectile=e))
	entities.register_event(_entity, 'collision_with_entity', lambda e, target_id: entities.delete_entity(e))
	entities.register_event(_entity, 'collision_with_solid', lambda e: effects.light(movement.get_position(e)[0], movement.get_position(e)[1], random.randint(3, 4)))
	entities.register_event(_entity, 'collision_with_solid', lambda e: entities.delete_entity(e))
	entities.register_event(_entity, 'collision_with_solid', lambda e: effects.smoke_cloud(movement.get_position(e)[0], movement.get_position(e)[1], random.uniform(2, 2.75), start_alpha=random.uniform(0.45, .65), decay_amount=1.5))
	entities.register_event(_entity, 'check_next_position', check_next_position)
	
	if not '--no-fx' in sys.argv:
		entities.register_event(_entity, 'position_changed', lambda e, x, y, **kwargs: _bullet_effects(e, x, y))
예제 #22
0
def _counter_2d_tick(entity):
	for i in range(int(entity['passes'])):
		if entity['x']['current'] < entity['x']['max']-1:
			entity['callback'](entity['x']['current'], entity['y']['current'])
			
			if entity['y']['current'] < entity['y']['max']-1:
				entity['y']['current'] += 1
			else:
				entity['y']['current'] = 0
				entity['x']['current'] += 1
			
		else:
			entity['callback'](entity['x']['current'], entity['y']['current'])
			entities.trigger_event(entity, 'finish')
			
			return entities.delete_entity(entity)
예제 #23
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _muzzle_delete(entity):
	entities.delete_entity(entity)
예제 #24
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _fire_movement(entity, x, y, **kwargs):
	_solids = zones.get_active_solids({}, no_life=True)
	
	if (x, y) in _solids:
		entities.delete_entity(entity)
예제 #25
0
파일: nodes.py 프로젝트: penny64/r3-tdw
def handle_mouse_pressed(entity, x, y, button):
    global DRAGGING_NODE, LAST_CLICKED_POS, SELECTING_TARGET_CALLBACK

    if ui_menu.get_active_menu() or ui_menu.DELAY:
        return

    if timers.has_timer_with_name(entity, 'passout'):
        return

    _x = x + camera.X
    _y = y + camera.Y

    if button == 1:
        if DRAGGING_NODE:
            DRAGGING_NODE = None

        elif not (_x, _y) in zones.get_active_solids(entity):
            if not DRAGGING_NODE:
                for entity_id in [
                        t for t in entity['ai']['visible_life']
                        if entity['ai']['life_memory'][t]['can_see']
                ]:
                    if entity['_id'] == entity_id:
                        continue

                    _entity = entities.get_entity(entity_id)
                    _tx, _ty = movement.get_position(_entity)

                    if (_x, _y) == (_tx, _ty):
                        if SELECTING_TARGET_CALLBACK:
                            SELECTING_TARGET_CALLBACK(entity, entity_id)
                            SELECTING_TARGET_CALLBACK = None
                        else:
                            LAST_CLICKED_POS = (_x, _y)

                            create_life_interact_menu(entity, entity_id)

                        return

                else:
                    for entity_id in entities.get_entity_group('contexts'):
                        _entity = entities.get_entity(entity_id)

                        if not _entity['callback']:
                            continue

                        if (_entity['tile']['x'],
                                _entity['tile']['y']) == (_x, _y):
                            _entity['callback'](x + 2, y - 3)

                            return

                    else:
                        for entity_id in list(entity['ai']['targets'] -
                                              entity['ai']['visible_life']):
                            _tx, _ty = entity['ai']['life_memory'][entity_id][
                                'last_seen_at']

                            if (_tx, _ty - 2) == (_x, _y):
                                ui_dialog.create(
                                    x + 2, y - 3, '%s - Last seen <time>' %
                                    entities.get_entity(
                                        entity_id)['stats']['name'])

                                return

                        else:
                            for entity_id in entities.get_entity_group(
                                    'items'):
                                _item = entities.get_entity(entity_id)

                                if _item['stats']['owner']:
                                    continue

                                if (_x, _y) == movement.get_position(_item):
                                    create_item_menu(entity, _item, _x, _y)

                                    return

                            create_walk_node(entity, _x, _y, clear=True)

                            return

            for node in entity['node_grid']['nodes'].values():
                if (_x, _y) == (node['node']['x'], node['node']['y']):
                    DRAGGING_NODE = node
                    entities.trigger_event(DRAGGING_NODE['node'],
                                           'set_fore_color',
                                           color=(255, 255, 0))

                    break

                if (_x, _y) in node['node']['path']:
                    if not (_x, _y) in node['node']['busy_pos']:
                        LAST_CLICKED_POS = (_x, _y)

                        create_action_menu(entity,
                                           LAST_CLICKED_POS[0],
                                           LAST_CLICKED_POS[1],
                                           on_path=True)

                    else:
                        LAST_CLICKED_POS = None

                    return

    elif button == 2:
        if DRAGGING_NODE:
            entities.trigger_event(DRAGGING_NODE['node'],
                                   'set_fore_color',
                                   color=(255, 255, 255))

            DRAGGING_NODE = None

        else:
            for node in entity['node_grid']['nodes'].values():
                if (_x, _y) == (node['node']['x'], node['node']['y']):
                    entity['node_grid']['path'].remove(node['node']['_id'])
                    entities.delete_entity(node['node'])
                    redraw_path(entity)

                    del entity['node_grid']['nodes'][node['node']['_id']]

                    if not entity['node_grid']['nodes']:
                        clear_path(entity)

                    break
            else:
                create_walk_node(entity, _x, _y)
예제 #26
0
파일: missions.py 프로젝트: witheld9/r3-tdw
def complete_mission(mission):
	entities.delete_entity(mission)
	
	logging.info('STUB: Mission complete.')
예제 #27
0
파일: effects.py 프로젝트: penny64/r3-tdw
def _printer_exit(entity):
	entities.delete_entity(entity)
예제 #28
0
def complete_mission(mission):
    entities.delete_entity(mission)

    logging.info('STUB: Mission complete.')
예제 #29
0
파일: nodes.py 프로젝트: witheld9/r3-tdw
def handle_mouse_pressed(entity, x, y, button):
	global DRAGGING_NODE, LAST_CLICKED_POS, SELECTING_TARGET_CALLBACK
	
	if ui_menu.get_active_menu() or ui_menu.DELAY:
		return
	
	if timers.has_timer_with_name(entity, 'passout'):
		return
	
	_x = x+camera.X
	_y = y+camera.Y
	
	if button == 1:
		if DRAGGING_NODE:
			DRAGGING_NODE = None
		
		elif not (_x, _y) in zones.get_active_solids(entity):
			if not DRAGGING_NODE:
				for entity_id in [t for t in entity['ai']['visible_life'] if entity['ai']['life_memory'][t]['can_see']]:
					if entity['_id'] == entity_id:
						continue
					
					_entity = entities.get_entity(entity_id)
					_tx, _ty = movement.get_position(_entity)
					
					if (_x, _y) == (_tx, _ty):
						if SELECTING_TARGET_CALLBACK:
							SELECTING_TARGET_CALLBACK(entity, entity_id)
							SELECTING_TARGET_CALLBACK = None
						else:
							LAST_CLICKED_POS = (_x, _y)
					
							create_life_interact_menu(entity, entity_id)
						
						return
				
				else:
					for entity_id in entities.get_entity_group('contexts'):
						_entity = entities.get_entity(entity_id)
						
						if not _entity['callback']:
							continue
						
						if (_entity['tile']['x'], _entity['tile']['y']) == (_x, _y):
							_entity['callback'](x+2, y-3)
							
							return
					
					else:
						for entity_id in list(entity['ai']['targets'] - entity['ai']['visible_life']):
							_tx, _ty = entity['ai']['life_memory'][entity_id]['last_seen_at']
							
							if (_tx, _ty-2) == (_x, _y):
								ui_dialog.create(x + 2, y - 3, '%s - Last seen <time>' % entities.get_entity(entity_id)['stats']['name'])
								
								return
							
						else:
							for entity_id in entities.get_entity_group('items'):
								_item = entities.get_entity(entity_id)
								
								if _item['stats']['owner']:
									continue
								
								if (_x, _y) == movement.get_position(_item):
									create_item_menu(entity, _item, _x, _y)
									
									return
							
							create_walk_node(entity, _x, _y, clear=True)
							
							return
			
			for node in entity['node_grid']['nodes'].values():
				if (_x, _y) == (node['node']['x'], node['node']['y']):
					DRAGGING_NODE = node
					entities.trigger_event(DRAGGING_NODE['node'], 'set_fore_color', color=(255, 255, 0))
					
					break
				
				if (_x, _y) in node['node']['path']:
					if not (_x, _y) in node['node']['busy_pos']:
						LAST_CLICKED_POS = (_x, _y)
						
						create_action_menu(entity, LAST_CLICKED_POS[0], LAST_CLICKED_POS[1], on_path=True)
					
					else:
						LAST_CLICKED_POS = None
					
					return
	
	elif button == 2:
		if DRAGGING_NODE:
			entities.trigger_event(DRAGGING_NODE['node'], 'set_fore_color', color=(255, 255, 255))
			
			DRAGGING_NODE = None
		
		else:
			for node in entity['node_grid']['nodes'].values():
				if (_x, _y) == (node['node']['x'], node['node']['y']):
					entity['node_grid']['path'].remove(node['node']['_id'])
					entities.delete_entity(node['node'])
					redraw_path(entity)
					
					del entity['node_grid']['nodes'][node['node']['_id']]
					
					if not entity['node_grid']['nodes']:
						clear_path(entity)
					
					break
			else:
				create_walk_node(entity, _x, _y)
예제 #30
0
파일: stats.py 프로젝트: penny64/r3-tdw
def kill(entity, **kwargs):
	entities.delete_entity(entity)