diff options
Diffstat (limited to 'MAFH2/MagicMenu.py')
-rw-r--r-- | MAFH2/MagicMenu.py | 106 |
1 files changed, 70 insertions, 36 deletions
diff --git a/MAFH2/MagicMenu.py b/MAFH2/MagicMenu.py index 42d4bd9..8e4ea56 100644 --- a/MAFH2/MagicMenu.py +++ b/MAFH2/MagicMenu.py @@ -1,6 +1,8 @@ import pygame import random from fortuneengine.GameEngineElement import GameEngineElement +from fortuneengine.DrawableObject import DrawableObject +from fortuneengine.DynamicDrawableObject import DynamicDrawableObject from AnimatedSprite import Spritesheet from constants import MENU_PATH, PUZZLE_PATH @@ -12,20 +14,24 @@ class MagicMenuHolder( GameEngineElement ): GameEngineElement.__init__(self, has_draw=True, has_event=False) self.menu = None self.callback = callback - self.background = pygame.image.load(MENU_PATH + "battleMenubackground.gif") + self.background = DrawableObject([pygame.image.load( MENU_PATH + "battleMenubackground.gif")], '') + self.background.setPosition(0,286) + self.game_engine.get_scene().addObject(self.background) def remove_from_engine(self): + self.game_engine.get_scene().removeObject(self.background) super( MagicMenuHolder, self ).remove_from_engine() self.clear_menu() def draw(self,screen,time_delta): - screen.blit(self.background,(0,286,452,414)) + pass 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 @@ -89,9 +95,7 @@ class MagicMenu(GameEngineElement): def __init__(self, menu_options, x, y, spell_type): GameEngineElement.__init__(self, has_draw=True, has_event=True) magic_list = self.game_engine.get_object('battle').magic_list - self.menu = Menu(menu_options, spell_type, magic_list) - - + self.menu = Menu(menu_options, spell_type, magic_list, self.game_engine.get_scene()) self.menu.set_pos(x, y) self.add_to_engine() @@ -100,12 +104,16 @@ class MagicMenu(GameEngineElement): def draw(self,screen,time_delta): self.menu.draw( screen ) + + def clear(self): + self.menu.clear() class Menu(object): - def __init__(self, options, spelltype, magic_list): + def __init__(self, options, spelltype, magic_list, scene): """Initialize the EzMenu! options should be a sequence of lists in the format of [option_name, option_function]""" + self.scene = scene self.buttons = [] self.options = options self.x = 0 @@ -115,6 +123,7 @@ class Menu(object): self.width = 2 self.spelltype = spelltype self.magic_list = magic_list + self.reference = [] lightning = [] fire = [] @@ -130,56 +139,56 @@ class Menu(object): if(spelltype == 0): #fire attack for i in range(4): - self.buttons.append(pygame.transform.scale(fire[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(fire[i] , (60,60))], "")) #filler buttons for i in range(0,2): - self.buttons.append(pygame.transform.scale(lightning[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(lightning[i] , (60,60))], "")) random.seed() - self.buttons.append(pygame.transform.scale(heal[random.randint(0,3)] , (60,60))) - self.buttons.append(pygame.transform.scale(missile[random.randint(0,3)] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(heal[random.randint(0,3)] , (60,60))], "")) + self.buttons.append(DrawableObject([pygame.transform.scale(missile[random.randint(0,3)] , (60,60))], "")) - self.mainGlyph = pygame.image.load(PUZZLE_PATH + "FireGlyph.gif").convert() + self.mainGlyph = pygame.image.load(PUZZLE_PATH + "FireGlyph.gif").convert_alpha() self.glyphs = fire elif(spelltype == 1): #lightning attack for i in range(4): - self.buttons.append(pygame.transform.scale(lightning[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(lightning[i] , (60,60))], "")) #filler buttons for i in range(0,2): - self.buttons.append(pygame.transform.scale(fire[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(fire[i] , (60,60))], "")) random.seed() - self.buttons.append(pygame.transform.scale(heal[random.randint(0,3)] , (60,60))) - self.buttons.append(pygame.transform.scale(missile[random.randint(0,3)] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(heal[random.randint(0,3)] , (60,60))], "")) + self.buttons.append(DrawableObject([pygame.transform.scale(missile[random.randint(0,3)] , (60,60))], "")) - self.mainGlyph = pygame.image.load(PUZZLE_PATH + "LightningGlyph.gif").convert() + self.mainGlyph = pygame.image.load(PUZZLE_PATH + "LightningGlyph.gif").convert_alpha() self.glyphs = lightning elif(spelltype == 2): #missile attack for i in range(4): - self.buttons.append(pygame.transform.scale(missile[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(missile[i] , (60,60))], "")) #filler buttons for i in range(0,2): - self.buttons.append(pygame.transform.scale(lightning[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(lightning[i] , (60,60))], "")) random.seed() - self.buttons.append(pygame.transform.scale(heal[random.randint(0,3)] , (60,60))) - self.buttons.append(pygame.transform.scale(fire[random.randint(0,3)] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(heal[random.randint(0,3)] , (60,60))], "")) + self.buttons.append(DrawableObject([pygame.transform.scale(fire[random.randint(0,3)] , (60,60))], "")) - self.mainGlyph = pygame.image.load(PUZZLE_PATH + "MissileGlyph.gif").convert() + self.mainGlyph = pygame.image.load(PUZZLE_PATH + "MissileGlyph.gif").convert_alpha() self.glyphs = missile elif(spelltype == 3): #heal for i in range(4): - self.buttons.append(pygame.transform.scale(heal[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(heal[i] , (60,60))], "")) #filler buttons for i in range(0,2): - self.buttons.append(pygame.transform.scale(lightning[i] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(lightning[i] , (60,60))], "")) random.seed() - self.buttons.append(pygame.transform.scale(missile[random.randint(0,3)] , (60,60))) - self.buttons.append(pygame.transform.scale(fire[random.randint(0,3)] , (60,60))) + self.buttons.append(DrawableObject([pygame.transform.scale(missile[random.randint(0,3)] , (60,60))], "")) + self.buttons.append(DrawableObject([pygame.transform.scale(fire[random.randint(0,3)] , (60,60))], "")) - self.mainGlyph = pygame.image.load(PUZZLE_PATH + "HealGlyph.gif").convert() + self.mainGlyph = pygame.image.load(PUZZLE_PATH + "HealGlyph.gif").convert_alpha() self.glyphs = heal deck = [0,1,2,3,4,5,6,7] @@ -194,7 +203,25 @@ class Menu(object): self.buttons = tButtons self.options = tOptions - self.height = (len(self.options)*self.buttons[1].get_height()) / self.cols + surf = pygame.Surface((60,60)) + surf.fill((4, 119, 152)) + self.selectRect = DynamicDrawableObject([surf],"") + self.selectRect.setPosition(297, 435) + self.scene.addObject(self.selectRect) + self.scene.addObjects(self.buttons) + + self.mainGlyph.set_colorkey((255,0,255), pygame.RLEACCEL) + self.mainGlyphDO = DrawableObject([self.mainGlyph],"") + self.mainGlyphDO.setPosition(485,350) + + for image in self.glyphs: + tempDO = DrawableObject([image],"",True) + #tempDO.makeTransparent(True) + self.reference.append(tempDO) + self.scene.addObjects(self.reference) + self.scene.addObject(self.mainGlyphDO) + + self.height = (len(self.options)*self.buttons[1].getYSize()) / self.cols def draw(self, surface): """Draw the menu to the surface.""" @@ -202,8 +229,8 @@ class Menu(object): h=0 # Selection Spacing j=0 # Col Spacing index=0 #current spot in buttons list - height = self.buttons[0].get_height() - width = self.buttons[0].get_width() + height = 60 + width = 60 for o in self.options: @@ -211,8 +238,9 @@ class Menu(object): newY = self.y + i * height if h==self.option: - pygame.draw.rect(surface, (4, 119, 152), ( newX, newY, height, width)) - surface.blit(self.buttons[index], (newX, newY) ) + self.selectRect.setPosition(newX, newY) + self.buttons[index].setPosition(newX, newY) + #surface.blit(self.buttons[index], (newX, newY) ) j+=1 h+=1 @@ -221,14 +249,12 @@ class Menu(object): i+=1 j=0 - self.mainGlyph.set_colorkey((255,0,255), pygame.RLEACCEL) - surface.blit(self.mainGlyph, (485,350)) - - # Draw reference glyphs for i in range(4): if i in self.magic_list: - surface.blit(self.glyphs[i], (800+((i%2) * 150), 350+(i/2 * 150))) + #surface.blit(self.glyphs[i], (800+((i%2) * 150), 350+(i/2 * 150))) + self.reference[i].makeTransparent(False) + self.reference[i].setPosition(800+((i%2) * 150), 350+(i/2 * 150)) def update(self, event): """Update the menu and get input for the menu.""" @@ -262,6 +288,14 @@ class Menu(object): return return_val + def clear(self): + for object in self.buttons: + self.scene.removeObject(object) + for object in self.reference: + self.scene.removeObject(object) + self.scene.removeObject(self.mainGlyphDO) + self.scene.removeObject(self.selectRect) + def set_pos(self, x, y): """Set the topleft of the menu at x,y""" self.x = x |