Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/MAFH2/BattleMenu.py
diff options
context:
space:
mode:
Diffstat (limited to 'MAFH2/BattleMenu.py')
-rw-r--r--MAFH2/BattleMenu.py494
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