-
Notifications
You must be signed in to change notification settings - Fork 0
/
inventory.py
125 lines (93 loc) · 3.92 KB
/
inventory.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Copyright (c) 2013-2015 by Joel Odom & Alex Odom, Marietta, GA All Rights Reserved
import pygame
import colors
import gui
import bernard
BORDER_WIDTH = 10
CONTROL_SPACING = 30
LIST_BOX_WIDTH = 200
LIST_BOX_HEIGHT = 200
class Inventory:
def __init__(self, player):
self.player = player
# add food list box
self.list_box_food = gui.ListBox(CONTROL_SPACING, 10, LIST_BOX_WIDTH, LIST_BOX_HEIGHT, 'Food')
for food_item in player.food:
item = gui.ListBoxItem(food_item.NAME, food_item.DESCRIPTION, food_item)
self.list_box_food.add_item(item)
# add bombs list box
self.list_box_bombs = gui.ListBox(
LIST_BOX_WIDTH + 2*CONTROL_SPACING, 10, LIST_BOX_WIDTH, LIST_BOX_HEIGHT, 'Bombs')
for bomb in player.bombs:
item = gui.ListBoxItem(bomb.NAME, bomb.DESCRIPTION, bomb)
item.TEXT = bomb.NAME
self.list_box_bombs.add_item(item)
# focus on the food list box
self.list_box_food.set_focus()
self.focused_control = self.list_box_food
# add the descriptive text box
self.descriptive_text_box = gui.TextBox(CONTROL_SPACING, 250, 600, 50);
# add the action text box
self.action_text_box = gui.TextBox(CONTROL_SPACING, 350, 600, 50);
# add the text box with the current weapon and lantern
self.lw_text_box = gui.TextBox(CONTROL_SPACING, 500, 600, 100);
def seize(self):
surface = pygame.display.get_surface()
need_redraw = True
# handle events
while True:
if need_redraw:
need_redraw = False
self.draw(surface)
pygame.display.update()
event = pygame.event.wait()
if event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE:
return # exit inventory screen
elif event.type == pygame.KEYUP and event.key == pygame.K_UP:
self.focused_control.select_previous_item()
need_redraw = True
elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
self.focused_control.select_next_item()
need_redraw = True
elif event.type == pygame.KEYUP and event.key == pygame.K_TAB:
if self.focused_control == self.list_box_food:
self.list_box_food.set_focus(False)
self.list_box_bombs.set_focus()
self.focused_control = self.list_box_bombs
else:
self.list_box_food.set_focus()
self.list_box_bombs.set_focus(False)
self.focused_control = self.list_box_food
need_redraw = True
elif event.type == pygame.KEYUP and event.key == pygame.K_RETURN:
# these may be set to None, which is okay
if self.focused_control == self.list_box_food:
self.player.selected_food = self.list_box_food.get_associated_object()
else:
self.player.selected_bomb = self.list_box_bombs.get_associated_object()
return # exit inventory screen
# TODO: handle resize
elif event.type == pygame.QUIT:
bernard.exit_program()
def draw(self, surface):
# update the text box text
self.descriptive_text_box.set_text(self.focused_control.get_verbose_text())
short_text = self.focused_control.get_short_text()
if short_text != None:
self.action_text_box.set_text("Press [ENTER] to select %s" % short_text)
else:
self.action_text_box.set_text("")
weapon_text = 'Weapon: %s' % self.player.weapon.NAME
lantern_text = 'Lantern: %s' % self.player.lantern.NAME
self.lw_text_box.set_text('%s\n%s' % (weapon_text, lantern_text));
# draw a background and a border
(surface_width, surface_height) = surface.get_size()
pygame.draw.rect(surface, colors.SOLID_BLACK, (0, 0, surface_width, surface_height), 0)
pygame.draw.rect(surface, colors.SOLID_GRAY, (0, 0, surface_width, surface_height),
BORDER_WIDTH)
# draw controls
self.list_box_food.draw(surface)
self.list_box_bombs.draw(surface)
self.descriptive_text_box.draw(surface)
self.action_text_box.draw(surface)
self.lw_text_box.draw(surface)