コード例 #1
0
ファイル: level.py プロジェクト: giulianoxt/pyasteroids
    def tick(self, time_elapsed):
        for obj in tuple(self.all_objects()):
            obj.tick(time_elapsed)
	    if (xisinstance(obj, Asteroid)):
		    if (obj.shot):
			    #
			    _info = {
			    'destructible'    : False,
        		    'destroys_player' : False,
        		    'target'          : False
			    }
			    vec_dir = (self.ship.shape.position - obj.shape.position).normalizing().scalar(50.)
			    bullet_pos = obj.shape.position
			    shape_bull = Shape(0.01, bullet_pos)
			    shape_bull.velocity = vec_dir
			    #
			    #(self, model, shape, element, lvl, duration, damage)
			    obj_sh = SimpleShootInvasor(self.models['InvasorSimpleGun'][0], shape_bull, _info, self, 20, 5)
			    self.add_object(obj_sh)
			    #
			    obj.shot = False

        self.wrap_ship()
        
        self.update_mouse_spin(time_elapsed)
        
        self.camera.tick(time_elapsed)
        
        if (self.has_skybox):
            self.update_skybox(time_elapsed)
        
        self.check_collisions(time_elapsed)
        
        self.time -= time_elapsed
コード例 #2
0
ファイル: gun.py プロジェクト: THECAESAR279/pyasteroids
    def single_shoot(self):
        d = self.pos.get_mod()
        ship_rot = self.ship.rotation

        bullet_pos = self.ship.shape.position + (ship_rot * self.pos).scalar(d)

        shape = Shape(0.01, bullet_pos)

        v_sz = self.shoot_velocity_sz + self.ship.shape.velocity.get_mod()
        shape.velocity = self.ship.ship_dir.normalizing().scalar(v_sz)

        obj = SimpleShoot(self.model, shape, SimpleGun._info, self.level,
                          self.duration, self.damage)

        self.level.add_object(obj)
コード例 #3
0
ファイル: gun.py プロジェクト: giulianoxt/pyasteroids
    def single_shoot(self):
        d = self.pos.get_mod()
        ship_rot = self.ship.rotation 
        
        bullet_pos = self.ship.shape.position + (ship_rot * self.pos).scalar(d)
        
        shape = Shape(0.01, bullet_pos)
        
        v_sz = self.shoot_velocity_sz + self.ship.shape.velocity.get_mod()
        shape.velocity = self.ship.ship_dir.normalizing().scalar(v_sz)

        obj = SimpleShoot(self.model, shape,
            SimpleGun._info, self.level, self.duration, self.damage
        )
        
        self.level.add_object(obj)
コード例 #4
0
ファイル: enemyship.py プロジェクト: giulianoxt/pyasteroids
    def tick(self, time_elapsed):
        Object.tick(self, time_elapsed)
        
        self.elapsed += time_elapsed
        
        if (self.elapsed >= self.time_interval_shot):
	    self.elapsed = 0.
	    _info = {
	    'destructible'    : False,
	    'destroys_player' : False,
	    'target'          : False
	    }
	    vec_dir = (self.level.ship.shape.position - self.shape.position -  self.gun_pos).normalizing().scalar(70.)
	    bullet_pos = self.shape.position + self.gun_pos
	    shape_bull = Shape(0.01, bullet_pos)
	    shape_bull.velocity = vec_dir
	    #
	    #(self, model, shape, element, lvl, duration, damage)
	    obj_sh = SimpleShootInvasor(self.level.models['InvasorSimpleGun'][0], shape_bull, _info, self.level, 20, 5)
	    self.level.add_object(obj_sh)
	    #
	       
コード例 #5
0
    def tick(self, time_elapsed):
        Object.tick(self, time_elapsed)

        self.elapsed += time_elapsed

        if (self.elapsed >= self.time_interval_shot):
            self.elapsed = 0.
            _info = {
                'destructible': False,
                'destroys_player': False,
                'target': False
            }
            vec_dir = (self.level.ship.shape.position - self.shape.position -
                       self.gun_pos).normalizing().scalar(70.)
            bullet_pos = self.shape.position + self.gun_pos
            shape_bull = Shape(0.01, bullet_pos)
            shape_bull.velocity = vec_dir
            #
            #(self, model, shape, element, lvl, duration, damage)
            obj_sh = SimpleShootInvasor(
                self.level.models['InvasorSimpleGun'][0], shape_bull, _info,
                self.level, 20, 5)
            self.level.add_object(obj_sh)
コード例 #6
0
ファイル: level.py プロジェクト: THECAESAR279/pyasteroids
    def tick(self, time_elapsed):
        for obj in tuple(self.all_objects()):
            obj.tick(time_elapsed)
            if (xisinstance(obj, Asteroid)):
                if (obj.shot):
                    #
                    _info = {
                        'destructible': False,
                        'destroys_player': False,
                        'target': False
                    }
                    vec_dir = (self.ship.shape.position -
                               obj.shape.position).normalizing().scalar(50.)
                    bullet_pos = obj.shape.position
                    shape_bull = Shape(0.01, bullet_pos)
                    shape_bull.velocity = vec_dir
                    #
                    #(self, model, shape, element, lvl, duration, damage)
                    obj_sh = SimpleShootInvasor(
                        self.models['InvasorSimpleGun'][0], shape_bull, _info,
                        self, 20, 5)
                    self.add_object(obj_sh)
                    #
                    obj.shot = False

        self.wrap_ship()

        self.update_mouse_spin(time_elapsed)

        self.camera.tick(time_elapsed)

        if (self.has_skybox):
            self.update_skybox(time_elapsed)

        self.check_collisions(time_elapsed)

        self.time -= time_elapsed
コード例 #7
0
ファイル: level.py プロジェクト: THECAESAR279/pyasteroids
    def make_spaceship(self, lvl, models):
        pos = None

        for obj in self.portals:
            if (obj.type == 'start'):
                pos = obj.shape.position
                break

        shape = Shape(lvl['ship']['mass'], pos)

        model, element = self.models[lvl['ship']['model']]

        self.ship = SpaceShip(model, shape, element, self)

        self.camera = Camera(self.ship, lvl['ship']['camera-dist'])

        self.add_object(self.ship)
コード例 #8
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
コード例 #9
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)
コード例 #10
0
from physics.vector3d import Vector3d
from physics.shape import Shape

sh = Shape(10.0)
sh.forces.append(Vector3d(1., 2., 3.))
#sh.forces_res.append(0.5)
sh.calculate_aceleration()
print sh.aceleration.x
コード例 #11
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)