diff options
Diffstat (limited to 'MAFH2/BattleMenu.py')
-rw-r--r-- | MAFH2/BattleMenu.py | 494 |
1 files changed, 247 insertions, 247 deletions
diff --git a/MAFH2/BattleMenu.py b/MAFH2/BattleMenu.py index 2cf1aec..f4ef6c4 100644 --- a/MAFH2/BattleMenu.py +++ b/MAFH2/BattleMenu.py @@ -1,247 +1,247 @@ -import pygame -from fortuneengine.GameEngineElement import GameEngineElement -from fortuneengine.DrawableObject import DrawableObject -from fortuneengine.DrawableFontObject import DrawableFontObject - -from constants import MENU_PATH -from gettext import gettext as _ - -NORMAL_MENU = 1 -GRID_MENU = 3 - -class BattleMenuHolder( GameEngineElement ): - def __init__(self, callback): - GameEngineElement.__init__(self, has_draw=True, has_event=False) - self.menu = None - self.callback = callback - self.background = DrawableObject([pygame.image.load( MENU_PATH + "battleMenubackground.gif")], '') - self.font = pygame.font.SysFont("cmr10",18,False,False) - self.disp = DrawableFontObject("", self.font) - self.sec_disp = DrawableFontObject("", self.font) - self.add_to_scene([self.background]) - self.add_to_scene([self.disp]) - self.add_to_scene([self.sec_disp]) - - def set_disp(self, msg): - self.disp.changeText(msg, (0,0,0)) - - def set_sec_disp(self, msg): - self.sec_disp.changeText(msg, (0,0,0)) - - def remove_from_engine(self): - super( BattleMenuHolder, self ).remove_from_engine() - self.clear_menu() - - def draw(self): - self.background.setPosition(0,286) - self.disp.setPosition(250,340) - self.sec_disp.setPosition(237, 375) - - def menu_called(self, id): - self.callback(id, self) - - def clear_menu(self): - if self.menu: - self.menu.clear() - self.menu.remove_from_engine() - self.menu = None - - def show_menu(self,id): - if self.is_in_engine(): - self.clear_menu() - else: - self.add_to_engine() - - y_offset = 0 - if id == "selection": - menu_type = NORMAL_MENU - menu_options = [ - [_("Attack"), lambda: self.menu_called("attack_show"), 140,1], - [_('Special'), lambda: self.show_menu("special"), 140,1], - [_('Magic'), lambda: self.show_menu("magic"), 140,1], - [_('Scan'), lambda: self.menu_called("scan"), 140,1], - ] - - elif id == "attack": - y_offset = 50 - menu_type = GRID_MENU - menu_options = [ - ['1', lambda: self.menu_called('1'),44,1], - ['2', lambda: self.menu_called('2'),44,1], - ['3', lambda: self.menu_called('3'),44,1], - ['4', lambda: self.menu_called('4'),44,1], - ['5', lambda: self.menu_called('5'),44,1], - ['6', lambda: self.menu_called('6'),44,1], - ['7', lambda: self.menu_called('7'),44,1], - ['8', lambda: self.menu_called('8'),44,1], - ['9', lambda: self.menu_called('9'),44,1], - [_("C"), lambda: self.menu_called('clear'),44,1], - ['0', lambda: self.menu_called('0'),44,1], - [_("E"), lambda: self.menu_called('enter'),44,1], - ] - - elif id == "special": - menu_type = NORMAL_MENU - menu_options = [ - [_("Back"), lambda: self.show_menu("selection"),140,1] - ] - - elif id == "magic": - menu_type = NORMAL_MENU - menu_options = [ - [_("Fire"), lambda: self.menu_called("fire"), 140, 1], - [_("Lightning"), lambda: self.menu_called("lightning"), 140, 1], - [_("Missile"), lambda: self.menu_called("missile"), 140, 1], - [_("Heal"), lambda: self.menu_called("heal"), 140, 1], - [_("Back"), lambda: self.show_menu("selection"), 140, 1] - ] - - else: - print "Invalid Menu", id - return - - self.menu = BattleMenu(menu_options, 237, 375+y_offset, menu_type) - - -class BattleMenu(GameEngineElement): - def __init__(self, game_menu, x, y, type=NORMAL_MENU): - GameEngineElement.__init__(self, has_draw=True, has_event=True) - - self.menu = Menu(game_menu, type, self.game_engine.get_scene(), x, y ) - - self.add_to_engine() - - def event_handler(self, event): - return self.menu.update(event) - - def draw(self): - self.menu.draw() - - def clear(self): - self.menu.clear() - -class Menu(object): - def __init__(self, options, cols, scene, x=237, y=375): - """Initialize the EzMenu! options should be a sequence of lists in the - format of [option_name, option_function]""" - - self.options = options - self.scene = scene - self.x = x - self.y = y - self.cols = cols - self.font = pygame.font.SysFont("cmr10",18,False,False) - self.option = 0 - self.width = 1 - self.color = [0, 0, 0] - self.hcolor = [255, 0, 0] - self.height = len(self.options)*self.font.get_height() - self.font_list = [] - self.rect_list = [] - - for o in self.options: - self.font_list.append(DrawableFontObject(o[0], self.font)) - ren = self.font.render(o[0], 1, [0,0,0]) - if ren.get_width() > self.width: - self.width = ren.get_width() - - i=0 # Row Spacing - h=0 # Selection Spacing - j=0 # Col Spacing - for o in self.options: - newX = self.x + 45 * j - newY = self.y + i * 45 - - surf = pygame.Surface((o[2],44)) - surf.fill((0, 74, 94)) - tempDO = DrawableObject([surf], "") - tempDO.setPosition(newX,newY) - self.rect_list.append(tempDO) - - surf = pygame.Surface((o[2]-4, 40)) - surf.fill((4, 119, 152)) - tempDO = DrawableObject([surf], "") - tempDO.setPosition(newX+2, newY+2) - self.rect_list.append(tempDO) - - j+=o[3] - h+=1 - if j >= self.cols: - i+=1 - j=0 - - self.scene.addObjects(self.rect_list) - self.scene.addObjects(self.font_list) - - def draw(self): - #self.scene.drawEntireScene(surface) - """Draw the menu to the surface.""" - i=0 # Row Spacing - h=0 # Selection Spacing - j=0 # Col Spacing - k=1 # Rect Counter - for o in self.options: - if h==self.option: - clr = self.hcolor - else: - clr = self.color - text = o[0] - self.font_list[h].changeText(text, clr) - - newX = self.x + 45 * j - newY = self.y + i * 45 - - self.font_list[h].setPosition(newX + 15, newY + 12) - - j+=o[3] - h+=1 - k+=2 - if j >= self.cols: - i+=1 - j=0 - - - def update(self, event): - """Update the menu and get input for the menu.""" - return_val = False - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_DOWN: - if self.cols != 1: - self.option += self.cols - else: - self.option += 1 - return_val = True - elif event.key == pygame.K_UP: - if self.cols != 1: - self.option -= self.cols - else: - self.option -= 1 - return_val = True - elif event.key == pygame.K_RIGHT: - if self.cols != 1: - self.option += 1 - return_val = True - elif event.key == pygame.K_LEFT: - if self.cols != 1: - self.option -= 1 - return_val = True - elif event.key == pygame.K_RETURN: - self.options[self.option][1]() - return_val = True - - # This jumps for uniform size buttons - # TODO FIX ME: weird behavior when jumping over weird sized buttons. - self.option = self.option % len(self.options) - - return return_val - - def clear(self): - for text in self.font_list: - self.scene.removeObject(text) - for rect in self.rect_list: - self.scene.removeObject(rect) - - def set_pos(self, x, y): - """Set the topleft of the menu at x,y""" - self.x = x - self.y = y +import pygame
+from fortuneengine.GameEngineElement import GameEngineElement
+from fortuneengine.DrawableObject import DrawableObject
+from fortuneengine.DrawableFontObject import DrawableFontObject
+
+from constants import MENU_PATH
+from gettext import gettext as _
+
+NORMAL_MENU = 1
+GRID_MENU = 3
+
+class BattleMenuHolder( GameEngineElement ):
+ def __init__(self, callback):
+ GameEngineElement.__init__(self, has_draw=True, has_event=False)
+ self.menu = None
+ self.callback = callback
+ self.background = DrawableObject([pygame.image.load( MENU_PATH + "battleMenubackground.gif")], '')
+ self.font = pygame.font.SysFont("cmr10",18,False,False)
+ self.disp = DrawableFontObject("", self.font)
+ self.sec_disp = DrawableFontObject("", self.font)
+ self.add_to_scene([self.background])
+ self.add_to_scene([self.disp])
+ self.add_to_scene([self.sec_disp])
+
+ def set_disp(self, msg):
+ self.disp.changeText(msg, (0,0,0))
+
+ def set_sec_disp(self, msg):
+ self.sec_disp.changeText(msg, (0,0,0))
+
+ def remove_from_engine(self):
+ super( BattleMenuHolder, self ).remove_from_engine()
+ self.clear_menu()
+
+ def draw(self):
+ self.background.setPosition(0,286)
+ self.disp.setPosition(250,340)
+ self.sec_disp.setPosition(237, 375)
+
+ def menu_called(self, id):
+ self.callback(id, self)
+
+ def clear_menu(self):
+ if self.menu:
+ self.menu.clear()
+ self.menu.remove_from_engine()
+ self.menu = None
+
+ def show_menu(self,id):
+ if self.is_in_engine():
+ self.clear_menu()
+ else:
+ self.add_to_engine()
+
+ y_offset = 0
+ if id == "selection":
+ menu_type = NORMAL_MENU
+ menu_options = [
+ [_("Attack"), lambda: self.menu_called("attack_show"), 140,1],
+ [_('Special'), lambda: self.show_menu("special"), 140,1],
+ [_('Magic'), lambda: self.show_menu("magic"), 140,1],
+ [_('Scan'), lambda: self.menu_called("scan"), 140,1],
+ ]
+
+ elif id == "attack":
+ y_offset = 50
+ menu_type = GRID_MENU
+ menu_options = [
+ ['1', lambda: self.menu_called('1'),44,1],
+ ['2', lambda: self.menu_called('2'),44,1],
+ ['3', lambda: self.menu_called('3'),44,1],
+ ['4', lambda: self.menu_called('4'),44,1],
+ ['5', lambda: self.menu_called('5'),44,1],
+ ['6', lambda: self.menu_called('6'),44,1],
+ ['7', lambda: self.menu_called('7'),44,1],
+ ['8', lambda: self.menu_called('8'),44,1],
+ ['9', lambda: self.menu_called('9'),44,1],
+ [_("C"), lambda: self.menu_called('clear'),44,1],
+ ['0', lambda: self.menu_called('0'),44,1],
+ [_("E"), lambda: self.menu_called('enter'),44,1],
+ ]
+
+ elif id == "special":
+ menu_type = NORMAL_MENU
+ menu_options = [
+ [_("Back"), lambda: self.show_menu("selection"),140,1]
+ ]
+
+ elif id == "magic":
+ menu_type = NORMAL_MENU
+ menu_options = [
+ [_("Fire"), lambda: self.menu_called("fire"), 140, 1],
+ [_("Lightning"), lambda: self.menu_called("lightning"), 140, 1],
+ [_("Missile"), lambda: self.menu_called("missile"), 140, 1],
+ [_("Heal"), lambda: self.menu_called("heal"), 140, 1],
+ [_("Back"), lambda: self.show_menu("selection"), 140, 1]
+ ]
+
+ else:
+ print "Invalid Menu", id
+ return
+
+ self.menu = BattleMenu(menu_options, 237, 375+y_offset, menu_type)
+
+
+class BattleMenu(GameEngineElement):
+ def __init__(self, game_menu, x, y, type=NORMAL_MENU):
+ GameEngineElement.__init__(self, has_draw=True, has_event=True)
+
+ self.menu = Menu(game_menu, type, self.game_engine.get_scene(), x, y )
+
+ self.add_to_engine()
+
+ def event_handler(self, event):
+ return self.menu.update(event)
+
+ def draw(self):
+ self.menu.draw()
+
+ def clear(self):
+ self.menu.clear()
+
+class Menu(object):
+ def __init__(self, options, cols, scene, x=237, y=375):
+ """Initialize the EzMenu! options should be a sequence of lists in the
+ format of [option_name, option_function]"""
+
+ self.options = options
+ self.scene = scene
+ self.x = x
+ self.y = y
+ self.cols = cols
+ self.font = pygame.font.SysFont("cmr10",18,False,False)
+ self.option = 0
+ self.width = 1
+ self.color = [0, 0, 0]
+ self.hcolor = [255, 0, 0]
+ self.height = len(self.options)*self.font.get_height()
+ self.font_list = []
+ self.rect_list = []
+
+ for o in self.options:
+ self.font_list.append(DrawableFontObject(o[0], self.font))
+ ren = self.font.render(o[0], 1, [0,0,0])
+ if ren.get_width() > self.width:
+ self.width = ren.get_width()
+
+ i=0 # Row Spacing
+ h=0 # Selection Spacing
+ j=0 # Col Spacing
+ for o in self.options:
+ newX = self.x + 45 * j
+ newY = self.y + i * 45
+
+ surf = pygame.Surface((o[2],44))
+ surf.fill((0, 74, 94))
+ tempDO = DrawableObject([surf], "")
+ tempDO.setPosition(newX,newY)
+ self.rect_list.append(tempDO)
+
+ surf = pygame.Surface((o[2]-4, 40))
+ surf.fill((4, 119, 152))
+ tempDO = DrawableObject([surf], "")
+ tempDO.setPosition(newX+2, newY+2)
+ self.rect_list.append(tempDO)
+
+ j+=o[3]
+ h+=1
+ if j >= self.cols:
+ i+=1
+ j=0
+
+ self.scene.addObjects(self.rect_list)
+ self.scene.addObjects(self.font_list)
+
+ def draw(self):
+ #self.scene.drawEntireScene(surface)
+ """Draw the menu to the surface."""
+ i=0 # Row Spacing
+ h=0 # Selection Spacing
+ j=0 # Col Spacing
+ k=1 # Rect Counter
+ for o in self.options:
+ if h==self.option:
+ clr = self.hcolor
+ else:
+ clr = self.color
+ text = o[0]
+ self.font_list[h].changeText(text, clr)
+
+ newX = self.x + 45 * j
+ newY = self.y + i * 45
+
+ self.font_list[h].setPosition(newX + 15, newY + 12)
+
+ j+=o[3]
+ h+=1
+ k+=2
+ if j >= self.cols:
+ i+=1
+ j=0
+
+
+ def update(self, event):
+ """Update the menu and get input for the menu."""
+ return_val = False
+ if event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_DOWN:
+ if self.cols != 1:
+ self.option += self.cols
+ else:
+ self.option += 1
+ return_val = True
+ elif event.key == pygame.K_UP:
+ if self.cols != 1:
+ self.option -= self.cols
+ else:
+ self.option -= 1
+ return_val = True
+ elif event.key == pygame.K_RIGHT:
+ if self.cols != 1:
+ self.option += 1
+ return_val = True
+ elif event.key == pygame.K_LEFT:
+ if self.cols != 1:
+ self.option -= 1
+ return_val = True
+ elif event.key == pygame.K_RETURN:
+ self.options[self.option][1]()
+ return_val = True
+
+ # This jumps for uniform size buttons
+ # TODO FIX ME: weird behavior when jumping over weird sized buttons.
+ self.option = self.option % len(self.options)
+
+ return return_val
+
+ def clear(self):
+ for text in self.font_list:
+ self.scene.removeObject(text)
+ for rect in self.rect_list:
+ self.scene.removeObject(rect)
+
+ def set_pos(self, x, y):
+ """Set the topleft of the menu at x,y"""
+ self.x = x
+ self.y = y
|