コード例 #1
0
ファイル: missile.py プロジェクト: THECAESAR279/pyasteroids
    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
コード例 #2
0
ファイル: level.py プロジェクト: THECAESAR279/pyasteroids
    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)
コード例 #3
0
ファイル: level.py プロジェクト: giulianoxt/pyasteroids
    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)