-
Notifications
You must be signed in to change notification settings - Fork 0
/
GUI.py
133 lines (113 loc) · 5.47 KB
/
GUI.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
126
127
128
129
130
__author__ = 'Kamil'
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from panda3d.core import TransparencyAttrib
from EnumGameStates import EnumGameStates
from pandac.PandaModules import KeyboardButton
class Enum(tuple): __getattr__ = tuple.index
class EnumMenuOptions(Enum):
NEW_GAME = 0
QUIT = 1
class GUI(object):
__selected = None
__gameEngine = None
__gameState = None
__base = None
__screenImage = None
__titleImage = None
__newGameImage = None
__selectedImage = None
__quitImage = None
__screenImagePath = "textures/back.jpg"
__titleImagePath = "textures/title.png"
__newGameImagePath = "textures/newgame.png"
__quitImagePath = "textures/quit.png"
__selectedImagePath = "textures/selected.png"
__gameOverText = None
__backToMenuText = None
__tryAgainText = None
def __init__(self, gameEngine, base, gameState):
self.__gameEngine = gameEngine
self.__base = base
self.__gameState = gameState
self.__selected = EnumMenuOptions.NEW_GAME
def showMenu(self):
self.__screenImage = OnscreenImage(parent=self.__base.render2d, image=self.__screenImagePath, pos=(0,0,0))
self.preserveImageAspect(self.__screenImage)
self.__selectedImage = OnscreenImage(parent=self.__base.render2d, image=self.__selectedImagePath)
self.__selectedImage.setTransparency(TransparencyAttrib.MAlpha)
self.preserveImageAspect(self.__selectedImage)
self.__titleImage = OnscreenImage(parent=self.__base.render2d, image=self.__titleImagePath)
self.__titleImage.setTransparency(TransparencyAttrib.MAlpha)
self.__titleImage.setPos(0,0,0.5)
self.preserveImageAspect(self.__titleImage)
self.__newGameImage = OnscreenImage(parent=self.__base.render2d, image=self.__newGameImagePath)
self.__newGameImage.setTransparency(TransparencyAttrib.MAlpha)
self.__newGameImage.setPos(0,0,0.0)
self.preserveImageAspect(self.__newGameImage)
self.__quitImage = OnscreenImage(parent=self.__base.render2d, image=self.__quitImagePath)
self.__quitImage.setTransparency(TransparencyAttrib.MAlpha)
self.__quitImage.setPos(0,0,-0.2)
self.preserveImageAspect(self.__quitImage)
self.changeSelected(EnumMenuOptions.NEW_GAME)
def hideMenu(self):
self.__screenImage.removeNode()
self.__titleImage.removeNode()
self.__newGameImage.removeNode()
self.__quitImage.removeNode()
self.__selectedImage.removeNode()
def hideGameOver(self):
if self.__gameOverText != None:
self.__gameOverText.removeNode()
if self.__tryAgainText != None:
self.__tryAgainText.removeNode()
if self.__backToMenuText != None:
self.__backToMenuText.removeNode()
def update (self, elapsedTime):
is_down = self.__base.mouseWatcherNode.is_button_down
if (is_down(KeyboardButton.up()) and (self.__selected > 0)):
self.changeSelected(self.__selected - 1)
elif (is_down(KeyboardButton.down()) and (self.__selected < 1)):
self.changeSelected(self.__selected + 1)
elif is_down(KeyboardButton.enter()):
self.runSelectedOption()
pass
def runSelectedOption(self):
if self.__selected == EnumMenuOptions.NEW_GAME:
self.hideMenu()
self.__gameState.setGameState(EnumGameStates.PLAY)
elif self.__selected == EnumMenuOptions.QUIT:
self.__gameState.setGameState(EnumGameStates.EXITING)
def backToMenu(self):
self.hideGameOver()
self.__gameState.setGameState(EnumGameStates.MENU)
def preserveImageAspect(self, image):
image.setScale(float(image.getTexture().getXSize())/self.__base.win.getXSize(), 1, float(image.getTexture().getYSize())/self.__base.win.getYSize())
def changeSelected(self, menuOption):
if self.__gameState.getGameState() == EnumGameStates.MENU:
if menuOption == EnumMenuOptions.NEW_GAME:
self.__selectedImage.setPos(self.__newGameImage.getPos())
elif menuOption == EnumMenuOptions.QUIT:
self.__selectedImage.setPos(self.__quitImage.getPos())
self.__selected = menuOption
else:
pass
def showGameOver(self):
self.__gameOverText = OnscreenText(text = 'GAME OVER',
pos = (0.0, 0.4),
scale = 0.1,
parent = self.__base.render2d,
fg = (1,0,0,1),
shadow = (0,0,0,1))
self.__tryAgainText = OnscreenText(text = '"R" - try this level again',
pos = (0.0, 0.2),
scale = 0.07,
parent = self.__base.render2d,
fg = (1,0,0,1),
shadow = (0,0,0,1))
self.__backToMenuText = OnscreenText(text = '"Esc" - back to menu',
pos = (0.0, 0.0),
scale = 0.07,
parent = self.__base.render2d,
fg = (1,0,0,1),
shadow = (0,0,0,1))