diff --git a/NS.py b/NS.py index 7313c14..33a24c7 100644 --- a/NS.py +++ b/NS.py @@ -1412,6 +1412,8 @@ class Boss(Animation): class Sword(Animation): + OFFSET = 10 + def __init__(self, parent): Animation.__init__(self, parent) image = load(self.get_resource("Sword.png")).convert_alpha() @@ -1483,31 +1485,36 @@ class Sword(Animation): def update(self): Animation.update(self) display_count = 0 - displayed_positions = [] - displayed_sprites = [] + offset = [self.OFFSET] * 6 for sprite in self.sprites: if not sprite.is_hidden(): - if sprite.sword_position not in displayed_positions: - display_count += 1 - displayed_positions.append(sprite.sword_position) - displayed_sprites.append(sprite) + display_count += 1 + offset[sprite.sword_position] -= self.OFFSET display_index = 0 - for sprite in reversed(displayed_sprites): - display_index += 1 - alpha = int(float(display_index) / display_count * 255) - frame = sprite.get_current_frame() - surface = frame.copy() - rect = surface.get_rect() - colors = self.get_game().platform.get_color_pair_from_edge(sprite.sword_position) - color_a = colors[0].r, colors[0].g, colors[0].b, alpha - color_b = colors[1].r, colors[1].g, colors[1].b, alpha - if sprite.sword_position == NS.N or sprite.sword_position == NS.S: - surface.fill(color_a, (0, 0, rect.w / 2, rect.h), BLEND_RGBA_MULT) - surface.fill(color_b, (rect.centerx, 0, rect.w / 2, rect.h), BLEND_RGBA_MULT) - else: - surface.fill(color_a, (0, 0, rect.w, rect.h / 2), BLEND_RGBA_MULT) - surface.fill(color_b, (0, rect.centery, rect.w, rect.h / 2), BLEND_RGBA_MULT) - self.get_display_surface().blit(surface, sprite.location.topleft) + for sprite in reversed(self.sprites): + if not sprite.is_hidden(): + display_index += 1 + alpha = int(float(display_index) / display_count * 255) + frame = sprite.get_current_frame() + surface = frame.copy() + rect = surface.get_rect() + colors = self.get_game().platform.get_color_pair_from_edge(sprite.sword_position) + color_a = colors[0].r, colors[0].g, colors[0].b, alpha + color_b = colors[1].r, colors[1].g, colors[1].b, alpha + if sprite.sword_position == NS.NE: + location = sprite.location.move(*([offset[sprite.sword_position]] * 2)).topleft + else: + location = sprite.location.move(offset[sprite.sword_position], + -offset[sprite.sword_position]) + if sprite.sword_position == NS.N or sprite.sword_position == NS.S: + surface.fill(color_a, (0, 0, rect.w / 2, rect.h), BLEND_RGBA_MULT) + surface.fill(color_b, (rect.centerx, 0, rect.w / 2, rect.h), BLEND_RGBA_MULT) + self.get_display_surface().blit(surface, location) + else: + surface.fill(color_a, (0, 0, rect.w, rect.h / 2), BLEND_RGBA_MULT) + surface.fill(color_b, (0, rect.centery, rect.w, rect.h / 2), BLEND_RGBA_MULT) + self.get_display_surface().blit(surface, location) + offset[sprite.sword_position] += self.OFFSET # sprite.update()