Ejemplo n.º 1
0
    def updateControls(self, game, key):
        self.timeUntilNextShot = max(0, self.timeUntilNextShot-1)
        self.timeUntilNextShot2 = max(0, self.timeUntilNextShot2-1)
        
        #print self.timeUntilNextShot
        
        if not self.po:
            return
        
        #shooting
        for gun in range(self.numGuns):
            left, right, up, down = 0, 0, 0, 0
            if self.id == 0: #player 1
                if gun == 0:
                    if key[K_w]: up = 1.
                    if key[K_s]: down = 1.
                    if key[K_a]: left = 1.
                    if key[K_d]: right = 1.
                elif gun == 1:
                    if key[K_t]: up = 1.
                    if key[K_g]: down = 1.
                    if key[K_f]: left = 1.
                    if key[K_h]: right = 1.
                    
            elif self.id == 1: #player 2
                if gun == 0:
                    if key[K_UP]: up = 1.
                    if key[K_DOWN]: down = 1.
                    if key[K_LEFT]: left = 1.
                    if key[K_RIGHT]: right = 1.
                elif gun == 1:
                    if key[K_i]: up = 1.
                    if key[K_k]: down = 1.
                    if key[K_j]: left = 1.
                    if key[K_l]: right = 1.
            elif self.id == 2 and gun == 0:
                pass
                #if key[K_i]: up = 1.
                #if key[K_k]: down = 1.
                #if key[K_j]: left = 1.
                #if key[K_l]: right = 1.
            elif self.id == 3 and gun == 0:
                pass
                #if key[K_t]: up = 1.
                #if key[K_g]: down = 1.
                #if key[K_f]: left = 1.
                #if key[K_h]: right = 1.
            
            if left and right:
                left, right = 0, 0
            if up and down:
                up, down = 0, 0

            numHeld = float(left+right+up+down)
            if numHeld < 1:
                continue
            
            if numHeld > 1:
                s = numHeld**0.5
                left /= s
                right /= s
                up /= s
                down /= s
                
            dx, dy = right - left, down - up
            
            if gun == 0 and self.timeUntilNextShot > 0 \
                    or gun == 1 and self.timeUntilNextShot2 > 0:
                continue
            
            if gun == 0:
                self.timeUntilNextShot += self.TIME_BETWEEN_SHOTS
            elif gun == 1:
                if self.favoriteFruit == "shotgun": #ugly special case
                    self.timeUntilNextShot2 += 20
                else:
                    self.timeUntilNextShot2 += self.TIME_BETWEEN_SHOTS
            
            if self.favoriteFruit == "shotgun" and gun != 1:
                for degree in range(-10, 10, 3):
                    a = math.radians(degree)
                    
                    b = Bullet()
                    b.po.pos = copy.copy(self.po.pos)
                    b.po.v = copy.copy(self.po.v) + (V3(dx, dy).rotate(a)) \
                            * b.BULLET_SPEED
                    b.owner = self.id
                    b.bulletType = self.favoriteFruit
                    game.bullets.append(b)
                    
                    vDiff = -0.3*(b.po.m * b.BULLET_SPEED) / self.po.m
                    self.po.v += V3(dx, dy) * vDiff
            else:
                b = Bullet()
                b.po.pos = copy.copy(self.po.pos)
                b.po.v = copy.copy(self.po.v) + V3(dx, dy) * b.BULLET_SPEED
                b.owner = self.id
                b.bulletType = self.favoriteFruit
                if gun == 1: #gun 1 is like jetpack...
                    #b.isVisisble = False
                    b.ttl = 1
                    r = 4.0
                    b.BULLET_SPEED *= -r
                    b.po.m /= r
                    
                game.bullets.append(b)
            
                #p = mv const.
                #p1 = p2 => m1 v1 = m2 v2 => v1 = (m2 v2) / m1
                #where 1 is the player, 2 is the bullet
                vDiff = -(b.po.m * b.BULLET_SPEED) / self.po.m
                self.po.v += V3(dx, dy) * vDiff