all repos — Legends-RPG @ 5d4d09e8ded491a659f167c2e96f001b5a78037e

A fantasy mini-RPG built with Python and Pygame.

data/components/attackitems.py (view raw)

 1"""
 2Attack equipment for battles.
 3"""
 4import copy
 5import pygame as pg
 6from .. import tools, setup
 7from .. import constants as c
 8
 9
10class Sword(object):
11    """
12    Sword that appears during regular attacks.
13    """
14    def __init__(self, player):
15        self.player = player
16        self.sprite_sheet = setup.GFX['shopsigns']
17        self.image_list = self.make_image_list()
18        self.index = 0
19        self.timer = 0.0
20
21    def make_image_list(self):
22        """
23        Make the list of two images for animation.
24        """
25        image_list = [tools.get_image(48, 0, 16, 16, self.sprite_sheet),
26                      tools.get_image(0, 0, 22, 16, setup.GFX['sword2'])]
27        return image_list
28
29    @property
30    def image(self):
31        new_image = self.image_list[self.index]
32        return pg.transform.scale2x(new_image)
33
34    @property
35    def rect(self):
36        new_rect = copy.copy(self.player.rect)
37        new_rect.bottom += 17
38        new_rect.right -= 16
39        return new_rect
40
41    def update(self, current_time):
42        if (current_time - self.timer) > 60:
43            self.timer = current_time
44            if self.index == 0:
45                self.index += 1
46            else:
47                self.index -= 1
48
49    def draw(self, surface):
50        """
51        Draw sprite to surface.
52        """
53        if self.player.state == 'attack':
54            surface.blit(self.image, self.rect)
55
56
57class DamagePoints(pg.sprite.Sprite):
58    """
59    A sprite that shows how much damage an attack inflicted.
60    """
61    def __init__(self, damage, topleft_pos):
62        super(DamagePoints, self).__init__()
63        self.font = pg.font.Font(setup.FONTS[c.MAIN_FONT], 27)
64        self.image = self.make_surface(damage)
65        self.rect = self.image.get_rect(x=topleft_pos[0]+20,
66                                        bottom=topleft_pos[1]+10)
67        self.start_posy = self.rect.y
68        self.y_vel = -1
69        self.dead = False
70
71    def make_surface(self, damage):
72        """
73        Make the surface for the sprite.
74        """
75        if damage > 0:
76            text = "-{}".format(str(damage))
77            return self.font.render(text, True, c.RED)
78        else:
79            return self.font.render('Miss', True, c.WHITE)
80
81    def update(self):
82        """
83        Update sprite position or delete if necessary.
84        """
85        self.rect.y += self.y_vel
86        if self.rect.y < (self.start_posy - 50):
87            self.kill()
88
89
90
91
92
93
94