示例#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 create_position_map(squad):
	_coverage_positions = set()
	_known_targets = set()
	_known_squads = set()

	for member_id in squad['members']:
		_member = entities.get_entity(member_id)
		_x, _y = movement.get_position(_member)
		_sight = stats.get_vision(_member)
		
		if member_id in squad['member_position_maps']:
			_old_coverage_positions = squad['member_position_maps'][member_id].copy()
		
		else:
			_old_coverage_positions = set()
		
		_map_size = zones.get_active_size()
		squad['member_position_maps'][member_id] = set()
		squad['member_los_maps'][member_id] = tcod.map_new(_map_size[0], _map_size[1])
		
		tcod.map_copy(zones.get_active_los_map(), squad['member_los_maps'][member_id])
		
		_t = time.time()
		
		tcod.map_compute_fov(squad['member_los_maps'][member_id], _x, _y, radius=_sight, light_walls=False, algo=tcod.FOV_PERMISSIVE_2)
		
		for pos in shapes.circle(_x, _y, _sight):
			if pos[0] < 0 or pos[0] >= _map_size[0] or pos[1] < 0 or pos[1] >= _map_size[1]:
				continue
			
			if not tcod.map_is_in_fov(squad['member_los_maps'][member_id], pos[0], pos[1]):
				continue
		
			_coverage_positions.add(pos)
			squad['member_position_maps'][member_id].add(pos)
	
		#TODO: Do this elsewhere
		for target_id in _member['ai']['visible_targets']:
			if not target_id in entities.ENTITIES:
				continue
			
			_target = entities.get_entity(target_id)
			_known_squads.add((_target['ai']['faction'], _target['ai']['squad']))
		
		#TODO: Is this right?
		_known_targets.update(_member['ai']['visible_targets'])
		_positions_to_remove = _old_coverage_positions - _coverage_positions
	
		squad['known_targets'].update(_known_targets)
		squad['known_squads'].update(_known_squads)
		squad['coverage_positions'].update(_coverage_positions)
		squad['coverage_positions'] = squad['coverage_positions'] - _positions_to_remove
	
	if squad['known_targets']:
		update_position_maps(squad)
		
		logging.debug('Updated local position map - requesting squad update')
	
	else:
		logging.debug('Updated local position map.')
示例#3
0
文件: effects.py 项目: penny64/r3-tdw
def light(x, y, brightness, r=1., g=1., b=1., light_map=None):
	if '--no-fx' in sys.argv:
		return
	
	if light_map:
		_active_light_maps = zones.get_active_light_maps()
		_light_map = _active_light_maps[light_map]
	
	else:
		_light_map = post_processing.get_light_map()
	
	_width, _height = zones.get_active_size()
	
	for _x, _y in shapes.circle(x, y, brightness):
		if _x < 0 or _x >= _width or _y < 0 or _y >= _height:
			continue
		
		_brightness = 1 - ((numbers.float_distance((x, y), (_x, _y)) - 1.0) / float(brightness))
		_r = numbers.clip(2 * (_brightness * r), 1, 4)
		_g = numbers.clip(2 * (_brightness * g), 1, 4)
		_b = numbers.clip(2 * (_brightness * b), 1, 4)
		
		_min_r = min(_light_map[0][_y, _x], _r)
		_max_r = max(_light_map[0][_y, _x], _r)
		
		_min_g = min([_light_map[1][_y, _x], _g])
		_max_g = max([_light_map[1][_y, _x], _g])
		
		_min_b = min([_light_map[2][_y, _x], _b])
		_max_b = max([_light_map[2][_y, _x], _b])
		
		_light_map[0][_y, _x] = numbers.interp(_min_r, _max_r, .5)
		_light_map[1][_y, _x] = numbers.interp(_min_g, _max_g, .5)
		_light_map[2][_y, _x] = numbers.interp(_min_b, _max_b, .5)
示例#4
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
示例#5
0
def create_position_map(squad):
    _coverage_positions = set()
    _known_targets = set()
    _known_squads = set()

    for member_id in squad['members']:
        _member = entities.get_entity(member_id)
        _x, _y = movement.get_position(_member)
        _sight = stats.get_vision(_member)

        if member_id in squad['member_position_maps']:
            _old_coverage_positions = squad['member_position_maps'][
                member_id].copy()

        else:
            _old_coverage_positions = set()

        _map_size = zones.get_active_size()
        squad['member_position_maps'][member_id] = set()
        squad['member_los_maps'][member_id] = tcod.map_new(
            _map_size[0], _map_size[1])

        tcod.map_copy(zones.get_active_los_map(),
                      squad['member_los_maps'][member_id])

        _t = time.time()

        tcod.map_compute_fov(squad['member_los_maps'][member_id],
                             _x,
                             _y,
                             radius=_sight,
                             light_walls=False,
                             algo=tcod.FOV_PERMISSIVE_2)

        for pos in shapes.circle(_x, _y, _sight):
            if pos[0] < 0 or pos[0] >= _map_size[0] or pos[1] < 0 or pos[
                    1] >= _map_size[1]:
                continue

            if not tcod.map_is_in_fov(squad['member_los_maps'][member_id],
                                      pos[0], pos[1]):
                continue

            _coverage_positions.add(pos)
            squad['member_position_maps'][member_id].add(pos)

        #TODO: Do this elsewhere
        for target_id in _member['ai']['visible_targets']:
            if not target_id in entities.ENTITIES:
                continue

            _target = entities.get_entity(target_id)
            _known_squads.add(
                (_target['ai']['faction'], _target['ai']['squad']))

        #TODO: Is this right?
        _known_targets.update(_member['ai']['visible_targets'])
        _positions_to_remove = _old_coverage_positions - _coverage_positions

        squad['known_targets'].update(_known_targets)
        squad['known_squads'].update(_known_squads)
        squad['coverage_positions'].update(_coverage_positions)
        squad['coverage_positions'] = squad[
            'coverage_positions'] - _positions_to_remove

    if squad['known_targets']:
        update_position_maps(squad)

        logging.debug('Updated local position map - requesting squad update')

    else:
        logging.debug('Updated local position map.')