More menu changes, main menu stub displays w/ no actions
authorDan Olson <theoddone33@icculus.org>
Fri, 27 Nov 2009 13:36:15 +0000 (05:36 -0800)
committerDan Olson <theoddone33@icculus.org>
Fri, 27 Nov 2009 13:36:15 +0000 (05:36 -0800)
pyhexen.py
pyhexen/menu.py
pyhexen/vid.py

index 065095e..c77be04 100644 (file)
@@ -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 ()
        
index 032564a..3f5552c 100644 (file)
@@ -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))
+               
index 163e6f8..63ebcae 100644 (file)
@@ -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])