Ignore:
Timestamp:
08/25/09 08:56:37 (10 years ago)
Author:
b0rland_parpg
Message:

Ticket #78, #80: Patch by superfluid. Moving the hud events and context menu code (and inventory code) from world.py to hud.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/scripts/hud.py

    r182 r261  
    1818import shutil, fife, pychan 
    1919from pychan.tools import callbackWithArguments as cbwa 
    20  
    21  
    22 class Hud(): 
     20from scripts.parpgfilebrowser import PARPGFileBrowser 
     21from scripts.context_menu import ContextMenu 
     22import weakref 
     23 
     24class Hud(object): 
    2325    """Main Hud class""" 
    24     def __init__(self, engine, settings): 
     26    def __init__(self, engine, world, settings): 
    2527        """Initialise the instance. 
    2628           @type engine: fife.Engine 
     
    3032           @return: None""" 
    3133        pychan.init(engine, debug = True) 
     34 
    3235        # TODO: perhaps this should not be hard-coded here 
    3336        self.hud = pychan.loadXML("gui/hud.xml") 
     37        self.engine = engine 
    3438        self.settings = settings 
     39        self.world = weakref.proxy(world) 
    3540        self.actionsBox = self.hud.findChild(name="actionsBox") 
    3641        self.actionsText = [] 
     
    3843        self.initializeHud() 
    3944        self.initializeMainMenu() 
     45        self.initializeContextMenu() 
    4046        self.initializeOptionsMenu() 
    4147        self.initializeHelpMenu() 
     48        self.initializeEvents() 
    4249 
    4350    def initializeHud(self): 
     
    122129           @return: None""" 
    123130        self.hud.hide() 
    124          
     131 
     132    def initializeContextMenu(self): 
     133        """Initialize the Context Menu 
     134           @return: None""" 
     135        self.context_menu = ContextMenu (self.engine, [], (0,0)) 
     136        self.context_menu.hide() 
     137 
     138    def showContextMenu(self, data, pos): 
     139        """Display the Context Menu with data at pos 
     140           @type data: list 
     141           @param data: data to pass to context menu 
     142           @type pos: tuple 
     143           @param pos: tuple of x and y coordinates 
     144           @return: None""" 
     145        self.context_menu = ContextMenu(self.engine, data, pos) 
     146 
    125147    def initializeMainMenu(self): 
    126148        """Initalize the main menu. 
     
    153175        help_events = {"closeButton":self.help_dialog.hide} 
    154176        self.help_dialog.mapEvents(help_events) 
    155         main_help_text = "Welcome to Post-Apocalyptic RPG or PARPG![br][br]"\ 
     177        main_help_text = u"Welcome to Post-Apocalyptic RPG or PARPG![br][br]"\ 
    156178        "This game is still in development, so please expect for there to be bugs"\ 
    157179        " and[br]feel free to tell us about them at http://www.forums.parpg.net.[br]"\ 
     
    162184        " depending on[br]what you have clicked on, hence it's name \"context menu\".[br][br]" 
    163185         
    164         k_text =" Keybindings"  
     186        k_text = u" Keybindings"  
    165187        k_text+="[br] A : Add a test action to the actions display" 
    166188        k_text+="[br] I : Toggle the inventory screen" 
     
    230252        self.options_menu.mapEvents(self.options_events) 
    231253 
     254    def saveGame(self): 
     255        """ Called when the user wants to save the game. 
     256            @return: None""" 
     257        save_browser = PARPGFileBrowser(self.engine, 
     258                                   self.world.saveFunction, 
     259                                   savefile=True, 
     260                                   guixmlpath="gui/savebrowser.xml", 
     261                                   extensions = ('.dat')) 
     262        save_browser.showBrowser() 
     263             
     264    def newGame(self): 
     265        """Called when user request to start a new game. 
     266           @return: None""" 
     267        print 'new game' 
     268 
     269    def loadGame(self): 
     270        """ Called when the user wants to load a game. 
     271            @return: None""" 
     272        load_browser = PARPGFileBrowser(self.engine, 
     273                                   self.world.loadFunction, 
     274                                   savefile=False, 
     275                                   guixmlpath='gui/loadbrowser.xml', 
     276                                   extensions=('.dat')) 
     277        load_browser.showBrowser() 
     278 
     279    def quitGame(self): 
     280        """Called when user requests to quit game. 
     281           @return: None""" 
     282 
     283        window = pychan.widgets.Window(title=unicode("Quit?")) 
     284 
     285        hbox = pychan.widgets.HBox() 
     286        are_you_sure = "Are you sure you want to quit?" 
     287        label = pychan.widgets.Label(text=unicode(are_you_sure)) 
     288        yes_button = pychan.widgets.Button(name="yes_button",  
     289                                           text=unicode("Yes")) 
     290        no_button = pychan.widgets.Button(name="no_button", 
     291                                          text=unicode("No")) 
     292 
     293        window.addChild(label) 
     294        hbox.addChild(yes_button) 
     295        hbox.addChild(no_button) 
     296        window.addChild(hbox) 
     297 
     298        events_to_map = {"yes_button":self.world.quitFunction, 
     299                         "no_button":window.hide} 
     300         
     301        window.mapEvents(events_to_map) 
     302        window.show() 
     303 
     304    def toggleInventoryButton(self): 
     305        """Manually toggles the inventory button. 
     306           @return: None""" 
     307        button = self.hud.findChild(name="inventoryButton") 
     308        if(button.toggled == 0): 
     309            button.toggled = 1 
     310        else: 
     311            button.toggled = 0 
     312 
     313    def displayInventory(self, *args, **kwargs): 
     314        """Display's the inventory screen 
     315           @return: None""" 
     316        self.world.inventory.displayInventory(*args, **kwargs) 
     317 
     318    def refreshReadyImages(self): 
     319        """Make the Ready slot images on the HUD be the same as those  
     320           on the inventory 
     321           @return: None""" 
     322        self.setImages(self.hud.findChild(name="hudReady1"), 
     323                       self.world.inventory.inventory.findChild(name="Ready1").up_image) 
     324        self.setImages(self.hud.findChild(name="hudReady2"), 
     325                       self.world.inventory.inventory.findChild(name="Ready2").up_image) 
     326        self.setImages(self.hud.findChild(name="hudReady3"), 
     327                       self.world.inventory.inventory.findChild(name="Ready3").up_image) 
     328        self.setImages(self.hud.findChild(name="hudReady4"), 
     329                       self.world.inventory.inventory.findChild(name="Ready4").up_image) 
     330 
     331    def setImages(self, widget, image): 
     332        """Set the up, down, and hover images of an Imagebutton. 
     333           @type widget: pychan.widget 
     334           @param widget: widget to set 
     335           @type image: string 
     336           @param image: image to use 
     337           @return: None""" 
     338        widget.up_image = image 
     339        widget.down_image = image 
     340        widget.hover_image = image 
     341 
     342    def initializeEvents(self): 
     343        """Intialize Hud events 
     344           @return: None""" 
     345        events_to_map = {} 
     346        events_to_map["inventoryButton"] = cbwa(self.displayInventory, True) 
     347        events_to_map["saveButton"] = self.saveGame 
     348        events_to_map["loadButton"] = self.loadGame 
     349 
     350        hud_ready_buttons = ["hudReady1", "hudReady2", "hudReady3", "hudReady4"] 
     351 
     352        for item in hud_ready_buttons: 
     353            events_to_map[item] = cbwa(self.readyAction, item) 
     354 
     355        self.hud.mapEvents(events_to_map) 
     356 
     357        menu_events = {} 
     358        menu_events["newButton"] = self.newGame 
     359        menu_events["quitButton"] = self.quitGame 
     360        menu_events["saveButton"] = self.saveGame 
     361        menu_events["loadButton"] = self.loadGame 
     362        self.main_menu.mapEvents(menu_events) 
     363 
    232364    def updateVolumeText(self): 
    233365        """ 
     
    345477        self.options_menu.show() 
    346478     
    347     def toggleInventory(self): 
    348         """Manually toggles the inventory button. 
    349            @return: None""" 
    350         button = self.hud.findChild(name="inventoryButton") 
    351         if(button.toggled == 0): 
    352             button.toggled = 1 
    353         else: 
    354             button.toggled = 0 
    355  
    356479    def readyAction(self, ready_button): 
    357480        """ Called when the user selects a ready button from the HUD """ 
Note: See TracChangeset for help on using the changeset viewer.