From e1b4d4c83073d5bb2e584d329c192c238fffc5a8 Mon Sep 17 00:00:00 2001 From: Dan Olson Date: Fri, 27 Nov 2009 05:36:15 -0800 Subject: [PATCH] More menu changes, main menu stub displays w/ no actions --- pyhexen.py | 23 +++++++++++++++++++-- pyhexen/menu.py | 54 ++++++++++++++++++++++++++++++++++++++++--------- pyhexen/vid.py | 2 +- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/pyhexen.py b/pyhexen.py index 065095e..c77be04 100644 --- a/pyhexen.py +++ b/pyhexen.py @@ -14,9 +14,28 @@ wad.InitMultipleFiles (['heretic.wad']) vid = pyhexen.vid.Video (wad) vid.Init () +vid.SetPalette (wad.CacheLumpName('PLAYPAL')) + menu = pyhexen.menu.Menu (wad, vid) -vid.SetPalette (wad.CacheLumpName('PLAYPAL')) +# Setup menus... these will be game-specific! +class MainMenu(pyhexen.menu.SubMenu): + def Draw (self): + frame = (self.menu.time/3) % 18 + self.menu.vid.DrawPatch (88, 0, self.menu.wad.CacheLumpName ('M_HTIC')) + self.menu.vid.DrawPatch (40, 10, self.menu.wad.CacheLumpNum (self.menu.SkullBaseLump + (17 - frame))) + self.menu.vid.DrawPatch (232, 10, self.menu.wad.CacheLumpNum (self.menu.SkullBaseLump + frame)) + +mainMenu = MainMenu (menu, 'main', 110, 56) +mainMenu.AddItem ("NEW GAME") +mainMenu.AddItem ("OPTIONS") +mainMenu.AddItem ("GAME FILES") +mainMenu.AddItem ("INFO") +mainMenu.AddItem ("QUIT GAME") + +menu.AddMenu (mainMenu) + +menu.Activate () while True: menu.Tick () @@ -24,7 +43,7 @@ while True: vid.DrawRawScreen (wad.CacheLumpName('TITLE')) vid.DrawPatch (4, 160, wad.CacheLumpName('ADVISOR')) - menu.DrawMainMenu () + menu.Draw () vid.WaitVBL () diff --git a/pyhexen/menu.py b/pyhexen/menu.py index 032564a..3f5552c 100644 --- a/pyhexen/menu.py +++ b/pyhexen/menu.py @@ -2,16 +2,39 @@ import struct import wad import vid +class SubMenu: + def __init__ (self, menu, name, x, y): + self.menu = menu + self.x = x + self.y = y + self.name = name + self.items = [ ] + + def Draw (self): + pass + + def AddItem (self, item): + self.items.append (item) + + def Choose (self, item): + pass + class Menu: def __init__ (self, wad, vid): self.wad = wad self.vid = vid self.time = 0 - self.active = True + self.active = False + self.current = 0 + self.currentitem = 0 + self.menus = [ ] self.SkullBaseLump = self.wad.GetNumForName("M_SKL00") self.FontABaseLump = self.wad.GetNumForName("FONTA_S")+1 self.FontBBaseLump = self.wad.GetNumForName("FONTB_S")+1 + def AddMenu (self, menu): + self.menus.append (menu) + def ProcessText (self, text, x, y, baselump, draw=True): for c in text: if ord (c) < 33: @@ -39,13 +62,26 @@ class Menu: def Tick (self): if self.active: self.time = self.time + 1 - - def Draw (self): - self.DrawMainMenu () + + def Activate (self): + self.current = 0 + self.time = 0 + self.active = True + + def Deactivate (self): pass - def DrawMainMenu (self): - frame = (self.time/3) % 18 - self.vid.DrawPatch (88, 0, self.wad.CacheLumpName ('M_HTIC')) - self.vid.DrawPatch (40, 10, self.wad.CacheLumpNum (self.SkullBaseLump + (17 - frame))) - self.vid.DrawPatch (232, 10, self.wad.CacheLumpNum (self.SkullBaseLump + frame)) + def Draw (self): + self.menus[self.current].Draw () + x = self.menus[self.current].x + y = self.menus[self.current].y + for i in self.menus[self.current].items: + self.DrawTextB (i, x, y) + y = y + 20 # ITEM_HEIGHT + y = self.menus[self.current].y+(self.currentitem*20)+-1 # ITEM_HEIGHT, SELECTOR_YOFFSET + if self.time & 16: + selName = 'M_SLCTR1' + else: + selName = 'M_SLCTR2' + self.vid.DrawPatch(x-28, y, self.wad.CacheLumpName (selName)) + diff --git a/pyhexen/vid.py b/pyhexen/vid.py index 163e6f8..63ebcae 100644 --- a/pyhexen/vid.py +++ b/pyhexen/vid.py @@ -25,7 +25,7 @@ class Video: # Stuff from V_* in the C code. def __blitRaw (self, data, w, h): screen = pygame.surfarray.pixels2d (self.screen) - for y in range(0,h): + for y in range(0, h): for x in range (0, w): screen[x,y] = ord (data[y * w + x]) -- 2.39.2