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
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
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
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
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
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)