Пример #1
0
 def toma(self):
     if (self.slashleft and not self.swingleft and not self.backleft) or (
             self.slashright and not self.swingright and not self.backright
     ):
         block_hit_list_masked = sprite_collision(self, "espada", "col_sprites")
         for block in block_hit_list_masked:
             xclash, yclash = pg.sprite.collide_mask(self.espada, block)
             if self.slashleft:
                 self.clashleft = True
                 self.clash_count = self.chargecount
                 self.slashleft = False
                 self.backleft = False
                 self.slashright = False
                 self.backright = False
                 self.swingleft = False
                 self.swingright = False
             elif self.slashright:
                 self.clashright = True
                 self.clash_count = self.chargecount
                 self.slashleft = False
                 self.backleft = False
                 self.slashright = False
                 self.backright = False
                 self.swingleft = False
                 self.swingright = False
Пример #2
0
    def isWall(self, xorig, yorig):
        shortestX = 0
        shortestY = 0
        shortestPath = 5

        block_hit_list_masked = sprite_collision(self, None, "col_sprites")
        if block_hit_list_masked:
            for i in range(-5, 5):
                for j in range(-5, 5):
                    xorigprima = xorig + i
                    yorigprima = yorig + j
                    self.rect = self.image.get_rect(center=(xorigprima, yorigprima))
                    self.mask = pg.mask.from_surface(self.image)
                    block_hit_list_masked = sprite_collision(self, None, "col_sprites")
                    if not block_hit_list_masked:
                        if shortestPath > math.sqrt(i ** 2 + j ** 2):
                            shortestPath = math.sqrt(i ** 2 + j ** 2)
                            shortestX = i * 2
                            shortestY = j * 2

        return shortestX + xorig, shortestY + yorig
Пример #3
0
    def dis_tic(self):
        """Avoids that the character might enter into objects."""
        for i in range(vars.DISMAX_TIC):
            ratio = (self.dashcount + i) / self.dis
            x = self.xorigdash + ratio * (self.xdash - self.xorigdash)
            y = self.yorigdash + ratio * (self.ydash - self.yorigdash)
            self.rect = self.image.get_rect(center=(x - self.x + vars.HALF_SCREEN_X, y - self.y + vars.HALF_SCREEN_Y))
            block_hit_list_masked = sprite_collision(self, None, "col_sprites")
            if len(block_hit_list_masked) != 0:
                self.dashCD = True
                return i - vars.DIS_SECURE

        return i
Пример #4
0
    def body_collision(self, mult, signo, xorig, yorig, is_block_x: bool, is_block_y: bool):
        for i in range(0, mult * vars.VELOCITY):
            if is_block_x:
                self.x = xorig + i * signo
            elif is_block_y:
                self.y = yorig + i * signo
            self.rect = self.image.get_rect(
                center=(self.x - xorig + vars.HALF_SCREEN_X, self.y - yorig + vars.HALF_SCREEN_Y)
            )
            self.mask = pg.mask.from_surface(self.image)

            block_hit_list_masked = sprite_collision(self, None, "col_sprites")
            if len(block_hit_list_masked) != 0:
                if is_block_x:
                    self.x = xorig + (i - 1) * signo
                elif is_block_y:
                    self.y = yorig + (i - 1) * signo
                break
Пример #5
0
 def sword_collision(self, angle_grad, signo, angle, counter):
     #  Metodo para depurar la colision en movimiento.
     #  Como dos objetos en "movimiento" pueden superponerse sin llegar a colisionar
     #  hacemos un pequenno barrido de los angulos para ver si se encuentran.
     for i in range(1, vars.IPT_CHARGECOUNT_SLASH):
         #  TODO si el objeto es pequenno puede fallar.
         self.chargecount = counter - i
         self.anglehit = angle - angle_grad + signo * (self.chargecount) * vars.APT_SWORD
         self.espada.image = pg.transform.rotate(
             self.espada.image_orig, self.anglehit
         )
         self.espada.rect = self.espada.image.get_rect(center=self.rect.center)
         self.espada.mask = pg.mask.from_surface(self.espada.image)
         if self.espada.image != self.espada.image_orig and (
                 (self.slashleft and not self.swingleft and not self.backleft)
                 or (self.slashright and not self.swingright and not self.backright)
         ):
             block_hit_list_masked = sprite_collision(self, "espada", "col_sprites")
             if len(block_hit_list_masked) != 0:
                 break
Пример #6
0
    def ouch(self):
        block_hit_list_masked = sprite_collision(self, None, "enem_sword")

        for block in block_hit_list_masked:
            self.live -= 1
            xclash, yclash = pg.sprite.collide_mask(self, block)