def single_shoot(self): if (self.num_rockets > 0): self.num_rockets -= 1 else: return d = self.pos.get_mod() ship_rot = self.ship.rotation ship_pos = self.ship.shape.position bullet_pos = ship_pos + (ship_rot * self.pos).scalar(d) shape = Shape(0.01, bullet_pos) v_sz = self.ship.shape.velocity.get_mod() + self.initial_velocity shape.velocity = self.ship.ship_dir.normalizing().scalar(v_sz) shape.velocity_angular_x = uniform(-280.,280.) shape.velocity_angular_y = uniform(-280.,280.) shape.velocity_angular_z = uniform(-280.,280.) target_obj = None min_dist = 1073741824 for obj in chain(self.level.planets, self.level.asteroids): if (not obj.target): continue pos = obj.shape.position d = dot_distance(ship_pos, pos) if (d < min_dist): min_dist = d target_obj = obj if (target_obj is None): self.num_rockets += 1 return obj = Missile(self.model, shape, SimpleMissile._info, self.level, self.damage, target_obj, self.attraction_vel ) self.level.add_object(obj) return obj
def load_file(self, level_name): lvl = yaml.load(open('resources/levels/' + level_name + '.lvl')) self.title = lvl['name'] self.dimensions = lvl['scene']['dimensions'] self.time = float(lvl['time']) * 60 #models = {} for element in lvl['elements']: file = open('resources/models/' + element['model']['file'], 'r') name = element['name'] subtitle = element['subtitle'] translate = element['model'].get('translate', (0., 0., 0.)) rotate = element['model'].get('rotate', (0., 0., 0.)) scale = element['model'].get('scale', 1.) rc = element['model'].get('radius_correction', 0.) gl_model = GLModel(file, translate, rotate, scale, rc) self.models[name] = (gl_model, element) file.close() self.dimensions = Vector3d(*lvl['scene']['dimensions']) type_class = { 'planet': Planet, 'asteroid': Asteroid, 'start_portal': Portal, 'end_portal': Portal, 'enemyship': EnemyShip } id_table = {} obj_set = set() for object in lvl['scene']['objects']: element_name = object['element'] shape = None model, element = self.models[element_name] mass = float(object['mass']) rvel = object['rotation_velocity'] movement = object['movement']['type'] if (movement == 'static'): pos = Vector3d(*object['pos']) shape = Shape(mass, pos) elif (movement == 'orbit'): center_id = object['movement']['center_planet_id'] center_obj = id_table[center_id] center_pos = Vector3d(*center_obj.shape.position) shape = Shape(mass, center_pos) shape.rotation_radius = object['movement']['radius'] shape.rot_vel_xy = object['movement']['rot_velocity_xy'] shape.rot_vel_z = object['movement']['rot_velocity_z'] shape.rot_xy = object['movement']['rot_xy'] shape.rot_z = object['movement']['rot_z'] elif (movement == 'dynamic'): pos = Vector3d(*object['pos']) shape = Shape(mass, pos) shape.velocity = Vector3d(*object['movement']['velocity']) shape.velocity_angular_x = rvel[0] shape.velocity_angular_y = rvel[1] shape.velocity_angular_z = rvel[2] type = element['type'] _object = type_class[type](model, shape, element) if (type == 'asteroid'): _object.asteroid_type = object['movement']['asteroid_type'] elif (type == 'enemyship'): _object.level = self _object.gun_pos = Vector3d(*object['gun_position']) obj_set.add(_object) if ('id' in object): id_table[object['id']] = _object for obj in obj_set: self.add_object(obj) Player.get_instance().beginning_level(self) self.make_spaceship(lvl, self.models) self.make_guns(self.models)
def load_file(self, level_name): lvl = yaml.load(open('resources/levels/' + level_name + '.lvl')) self.title = lvl['name'] self.dimensions = lvl['scene']['dimensions'] self.time = float(lvl['time']) * 60 #models = {} for element in lvl['elements']: file = open('resources/models/'+element['model']['file'], 'r') name = element['name'] subtitle = element['subtitle'] translate = element['model'].get('translate', (0.,0.,0.)) rotate = element['model'].get('rotate', (0.,0.,0.)) scale = element['model'].get('scale', 1.) rc = element['model'].get('radius_correction', 0.) gl_model = GLModel(file, translate, rotate, scale, rc) self.models[name] = (gl_model, element) file.close() self.dimensions = Vector3d(*lvl['scene']['dimensions']) type_class = { 'planet' : Planet, 'asteroid' : Asteroid, 'start_portal' : Portal, 'end_portal' : Portal, 'enemyship' : EnemyShip } id_table = { } obj_set = set() for object in lvl['scene']['objects']: element_name = object['element'] shape = None model, element = self.models[element_name] mass = float(object['mass']) rvel = object['rotation_velocity'] movement = object['movement']['type'] if (movement == 'static'): pos = Vector3d(*object['pos']) shape = Shape(mass, pos) elif (movement == 'orbit'): center_id = object['movement']['center_planet_id'] center_obj = id_table[center_id] center_pos = Vector3d(*center_obj.shape.position) shape = Shape(mass, center_pos) shape.rotation_radius = object['movement']['radius'] shape.rot_vel_xy = object['movement']['rot_velocity_xy'] shape.rot_vel_z = object['movement']['rot_velocity_z'] shape.rot_xy = object['movement']['rot_xy'] shape.rot_z = object['movement']['rot_z'] elif (movement == 'dynamic'): pos = Vector3d(*object['pos']) shape = Shape(mass, pos) shape.velocity = Vector3d(*object['movement']['velocity']) shape.velocity_angular_x = rvel[0] shape.velocity_angular_y = rvel[1] shape.velocity_angular_z = rvel[2] type = element['type'] _object = type_class[type](model, shape, element) if ( type == 'asteroid' ): _object.asteroid_type = object['movement']['asteroid_type'] elif ( type == 'enemyship' ): _object.level = self _object.gun_pos = Vector3d(*object['gun_position']) obj_set.add(_object) if ('id' in object): id_table[object['id']] = _object for obj in obj_set: self.add_object(obj) Player.get_instance().beginning_level(self) self.make_spaceship(lvl, self.models) self.make_guns(self.models)