예제 #1
0
def tick_eyemine(entity):
	if 'max_explode_velocity' in entity and entity['current_speed']>=entity['max_explode_velocity']:
		entities.trigger_event(entity, 'kill')
		entities.trigger_event(entity, 'explode')
		
		return entities.delete_entity(entity)
	
	if entity['current_target'] and entity['current_target'] in entities.ENTITIES:
		_target_object = entities.get_entity(entity['current_target'])
	else:
		_target_object = None
	
	for soldier_id in entities.get_sprite_groups(['enemies', 'players']):
		if entity['_id'] == soldier_id:
			continue
		
		if numbers.distance(entity['position'], entities.get_entity(soldier_id)['position'], old=True)>50:
			continue
		
		if _target_object and not entity['current_target'] == soldier_id and 'player' in _target_object:
			entities.trigger_event(_target_object,
			                       'score',
			                       target_id=entity['_id'],
			                       amount=10,
			                       text='Creative Escape')
		
		entities.trigger_event(entities.get_entity(soldier_id), 'hit', damage=6, target_id=entity['_id'])
		entities.trigger_event(entity, 'kill')
		entities.trigger_event(entity, 'explode')
		entities.delete_entity(entity)
		
		break
예제 #2
0
def handle_camera(entity_id, min_zoom=3.5, max_zoom=14.5, max_enemy_distance=2400, center_distance=600.0):
	if not entity_id in entities.ENTITIES:
		display.CAMERA['zoom_speed'] = .005
		display.CAMERA['next_zoom'] = 4.5
		
		return False
	
	if not clock.is_ticking():
		return False
	
	_player = entities.get_entity(entity_id)
	_center_pos = _player['position'].copy()
	_median_distance = []
	
	if 'in_space' in _player and _player['in_space']:
		_distance_to_center = numbers.distance(_player['position'], (worlds.get_size()[0]/2, worlds.get_size()[1]/2))
		
		_min_zoom = 2.0
		_max_zoom = max_zoom
		display.CAMERA['next_zoom'] = numbers.clip(_max_zoom*((_distance_to_center/3000.0)-1), _min_zoom, _max_zoom)
	
	elif _player['death_timer'] == -1:
		for enemy_id in entities.get_sprite_groups(['enemies', 'hazards']):
			_enemy = entities.get_entity(enemy_id)
			
			if 'player' in _enemy:
				continue
			
			_dist = numbers.distance(_player['position'], _enemy['position'])
			if _dist>=max_enemy_distance:
				continue
			
			_median_distance.append(_dist)
			_center_pos = numbers.interp_velocity(_center_pos, _enemy['position'], 0.5)
		
		if not _median_distance:
			_median_distance = [0]
		
		_distance_to_nearest_enemy = sum(_median_distance)/len(_median_distance)
		_min_zoom = min_zoom
		_max_zoom = max_zoom
		display.CAMERA['next_zoom'] = numbers.clip(_max_zoom*(_distance_to_nearest_enemy/float(center_distance)), _min_zoom, _max_zoom)
	else:
		display.CAMERA['zoom_speed'] = .05
		display.CAMERA['next_zoom'] = 1.5
	
	if display.CAMERA['next_zoom'] < 5:
		display.CAMERA['next_center_on'] = _center_pos
	else:
		display.CAMERA['next_center_on'] = _player['position'].copy()
예제 #3
0
def create_planet():
	for entity_id in entities.get_sprite_groups(['items', 'planets']):
		entities.delete_entity(entities.ENTITIES[entity_id])
	
	if LEVEL == 1:
		_planet = entities.create_entity(group='planets')
		sprites.register_entity(_planet, 'effects_foreground', 'planet.png', scale=1.0)
		movement.register_entity(_planet, x=worlds.get_size()[0]/2, y=worlds.get_size()[1]/2, speed=0)
		effects.create_image(_planet['position'][0], _planet['position'][1], 'ring.png', background=2, scale=2, parent_entity=_planet)
		items.create_gravity_well(x=worlds.get_size()[0]/2, y=worlds.get_size()[1]/2, strength=0.25)
	
	elif LEVEL == 2:
		ships.create_ivan_large(x=worlds.get_size()[0]/2, y=worlds.get_size()[1]/2)
		items.create_gravity_well(x=worlds.get_size()[0]/2, y=worlds.get_size()[1]/2, min_distance=1000, kill_engines=False, strength=0.75)
	
	return True
예제 #4
0
def _gravity_well(entity):
	_moving_groups = [name for name in entities.GROUPS if not name in entity['_groups'] and not name in entities.IGNORE_ENTITY_GROUPS]
	
	for entity_id in entities.get_sprite_groups(_moving_groups):
		_entity = entities.get_entity(entity_id)
		
		if numbers.distance(entity['position'], _entity['position'])<entity['min_distance']:
			_entity['in_space'] = False
			
			continue
		
		if entity['kill_engines']:
			_entity['in_space'] = True
		
		_velocity = numbers.velocity(numbers.direction_to(_entity['position'], entity['position']), entity['strength'])
		
		entities.trigger_event(_entity, 'push', velocity=_velocity)
예제 #5
0
파일: ai.py 프로젝트: witheld9/vector-kill
def find_target(entity, max_distance=-1):
	_closest_target = {'enemy_id': None, 'distance': 0}
	_enemy_sprite_groups = [name for name in entities.GROUPS if not name in entity['_groups'] and not name in entities.IGNORE_ENTITY_GROUPS]
	
	for soldier_id in entities.get_sprite_groups(_enemy_sprite_groups):
		if entity['_id'] == soldier_id:
			continue
		
		_distance = numbers.distance(entity['position'], entities.get_entity(soldier_id)['position'])
		
		if max_distance>-1 and _distance>max_distance:
			continue
		
		if not _closest_target['enemy_id'] or _distance<_closest_target['distance']:
			_closest_target['distance'] = _distance
			_closest_target['enemy_id'] = soldier_id
	
	return _closest_target['enemy_id']
예제 #6
0
def tick(bullet):
	for soldier_id in entities.get_sprite_groups(bullet['enemy_sprite_groups']):
		if bullet['owner_id'] == soldier_id:
			continue
		
		_entity = entities.get_entity(soldier_id)
		
		if numbers.distance(bullet['position'], _entity['position'], old=True)-_entity['collision_radius']>bullet['damage_radius']:
			continue
		
		if bullet['owner_id'] in entities.ENTITIES and 'player' in entities.get_entity(bullet['owner_id']):
			effects.create_particle(bullet['position'][0],
				                   bullet['position'][1],
				                   'hitmarker.png',
				                   direction=random.randint(0, 359),
				                   speed=random.randint(25, 30),
				                   background=False,
				                   fade_rate=0.8,
			                        scale_rate=1.02)
		
		entities.trigger_event(bullet, 'hit', target_id=soldier_id)
		entities.trigger_event(_entity, 'hit', damage=bullet['damage'], target_id=bullet['owner_id'])
		entities.delete_entity(bullet)
예제 #7
0
파일: ai.py 프로젝트: penny64/vector-kill
def find_target(entity, max_distance=-1):
    _closest_target = {'enemy_id': None, 'distance': 0}
    _enemy_sprite_groups = [
        name for name in entities.GROUPS if not name in entity['_groups']
        and not name in entities.IGNORE_ENTITY_GROUPS
    ]

    for soldier_id in entities.get_sprite_groups(_enemy_sprite_groups):
        if entity['_id'] == soldier_id:
            continue

        _distance = numbers.distance(
            entity['position'],
            entities.get_entity(soldier_id)['position'])

        if max_distance > -1 and _distance > max_distance:
            continue

        if not _closest_target[
                'enemy_id'] or _distance < _closest_target['distance']:
            _closest_target['distance'] = _distance
            _closest_target['enemy_id'] = soldier_id

    return _closest_target['enemy_id']
예제 #8
0
def handle_input(entity_id):
	if not entity_id in entities.ENTITIES or not 'player' in entities.ENTITIES[entity_id]:
		if controls.key_pressed(' '):
			battlefield.clean()
			battlefield.create_player()
			battlefield.spawn_enemies()
		
		return False
	
	if not clock.is_ticking() and controls.key_pressed(' '):
		clock.hang_for(0)
	
	_entity = entities.get_entity(entity_id)
	_move_speed = _entity['speed']
	
	if controls.key_held('s'):
		#entities.trigger_event(_entity, 'accelerate', velocity=[0, _move_speed])
		entities.trigger_event(_entity, 'set_direction', direction=270)
		entities.trigger_event(_entity, 'thrust')
	
	if controls.key_held('a'):
		#entities.trigger_event(_entity, 'accelerate', velocity=[-_move_speed, 0])
		entities.trigger_event(_entity, 'set_direction', direction=180)
		entities.trigger_event(_entity, 'thrust')
	
	if controls.key_held('d'):
		#entities.trigger_event(_entity, 'accelerate', velocity=[_move_speed, 0])
		entities.trigger_event(_entity, 'set_direction', direction=0)
		entities.trigger_event(_entity, 'thrust')
	
	if controls.key_held('w'):
		#entities.trigger_event(_entity, 'accelerate', velocity=[0, -_move_speed])
		entities.trigger_event(_entity, 'set_direction', direction=90)
		entities.trigger_event(_entity, 'thrust')
	
	if controls.key_pressed('q'):
		entities.trigger_event(_entity,
		                       'create_timer',
		                       time=120,
		                       enter_callback=lambda entity: entities.trigger_event(_entity, 'set_maximum_velocity', velocity=[80, 80]) and entities.trigger_event(_entity, 'set_speed', speed=80),
		                       exit_callback=lambda entity: entities.trigger_event(_entity, 'set_maximum_velocity', velocity=[30, 30]))
	
	if controls.key_pressed('v'):
		for entity_id in entities.get_sprite_groups(['hazards', 'enemies']):
			entities.delete_entity_via_id(entity_id)
	
	if controls.key_held_ord(controls.NUM_1):
		entities.trigger_event(_entity, 'shoot', direction=225)
	
	if controls.key_held_ord(controls.NUM_2):
		entities.trigger_event(_entity, 'shoot', direction=270)
	
	if controls.key_held_ord(controls.NUM_3):
		entities.trigger_event(_entity, 'shoot', direction=315)
	
	if controls.key_held_ord(controls.NUM_4):
		entities.trigger_event(_entity, 'shoot', direction=180)
	
	if controls.key_held_ord(controls.NUM_6):
		entities.trigger_event(_entity, 'shoot', direction=0)
	
	if controls.key_held_ord(controls.NUM_7):
		entities.trigger_event(_entity, 'shoot', direction=135)
	
	if controls.key_held_ord(controls.NUM_8):
		entities.trigger_event(_entity, 'shoot', direction=90)
	
	if controls.key_held_ord(controls.NUM_9):
		entities.trigger_event(_entity, 'shoot', direction=45)
	
	if controls.key_held_ord(controls.NUM_5):
		entities.trigger_event(_entity, 'shoot_alt')
	
	if controls.key_held('x'):
		battlefield.clean()