-
Notifications
You must be signed in to change notification settings - Fork 0
/
ui.py
104 lines (87 loc) · 4.5 KB
/
ui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import pygame
from settings import *
class UI:
def __init__(self):
# general info
self.display_surface = pygame.display.get_surface()
self.font = pygame.font.Font(UI_FONT, UI_FONT_SIZE)
# bar setup
# takes the left, top, width, height
self.health_bar_rect = pygame.Rect(
10, 10, HEALTH_BAR_WIDTH, BAR_HEIGHT)
self.energy_bar_rect = pygame.Rect(
10, 34, ENERGY_BAR_WIDTH, BAR_HEIGHT)
# convert weapon dictionary into a list of graphic only
# we do this because we do not want the entire weapon dictionary
self.weapon_graphics = []
for weapon in weapon_data.values():
path = weapon['graphic']
weapon = pygame.image.load(path).convert_alpha()
self.weapon_graphics.append(weapon)
# convert magic dictionary
self.magic_graphics = []
for magic in magic_data.values():
magic = pygame.image.load(magic['graphic']).convert_alpha()
self.magic_graphics.append(magic)
def show_bar(self, current, max_amount, bg_rect, color):
# draw bg
pygame.draw.rect(self.display_surface, UI_BG_COLOR, bg_rect)
# converting stat tp pixel
ratio = current / max_amount # 100 / 100 = 1
current_width = bg_rect.width * ratio # 200 * 1 = 200
current_rect = bg_rect.copy()
current_rect.width = current_width
# drawing the bar
pygame.draw.rect(self.display_surface, color, current_rect)
# pygame.draw.rect(self.display_surface,
# UI_BORDER_COLOR, current_rect, 3) # draws a border color around the current health/energy rectangles only
pygame.draw.rect(self.display_surface,
UI_BORDER_COLOR, bg_rect, 3) # draws a border color around the total health/energy rectangle
def show_exp(self, exp):
# takes in info, AntiAliasing(AA), color
text_surf = self.font.render(str(int(exp)), False, TEXT_COLOR)
# location of exp bar
x = self.display_surface.get_size()[0] - 20
y = self.display_surface.get_size()[1] - 20
text_rect = text_surf.get_rect(bottomright=(x, y))
# drawing the exp bar with background and border
pygame.draw.rect(self.display_surface,
UI_BG_COLOR, text_rect.inflate(20, 20))
self.display_surface.blit(text_surf, text_rect)
pygame.draw.rect(self.display_surface,
UI_BORDER_COLOR, text_rect.inflate(20, 20), 3)
def selection_box(self, left, top, has_switched):
bg_rect = pygame.Rect(left, top, ITEM_BOX_SIZE, ITEM_BOX_SIZE)
pygame.draw.rect(self.display_surface, UI_BG_COLOR, bg_rect)
if has_switched:
pygame.draw.rect(self.display_surface,
UI_BORDER_COLOR_ACTIVE, bg_rect, 3) # highlights the border yellow when weapon/magic switched
else:
pygame.draw.rect(self.display_surface, UI_BORDER_COLOR,
bg_rect, 3) # default black border
return bg_rect
def weapon_overlay(self, weapon_index, has_switched):
# weapon #placed in the center of the weapon rectangle
bg_rect = self.selection_box(10, 630, has_switched)
# grab the weapon index from the weapon graphic list
weapon_surf = self.weapon_graphics[weapon_index]
# places the weapon in the center of the box
weapon_rect = weapon_surf.get_rect(center=bg_rect.center)
self.display_surface.blit(weapon_surf, weapon_rect)
def magic_overlay(self, magic_index, has_switched):
# magic #placed in the center of the magic rectangle
bg_rect = self.selection_box(80, 635, has_switched)
# grab the magic index from the magic graphic list
magic_surf = self.magic_graphics[magic_index]
# places the magic in the center of the box
magic_rect = magic_surf.get_rect(center=bg_rect.center)
self.display_surface.blit(magic_surf, magic_rect)
def display(self, player):
self.show_bar(
player.health, player.stats['health'], self.health_bar_rect, HEALTH_COLOR)
self.show_bar(
player.energy, player.stats['energy'], self.energy_bar_rect, ENERGY_COLOR)
self.show_exp(player.exp)
# add a "not" to reverse the color switching when weapon is switched
self.weapon_overlay(player.weapon_index, not player.can_switch_weapon)
self.magic_overlay(player.magic_index, not player.can_switch_magic)