topical media & game development

talk show tell print

lib-game-delta3d-demos-fireFighter-hudcomponent.h / h



  /* -*-c++-*-
   * Delta3D Open Source Game and Simulation Engine
   * Copyright (C) 2006, Alion Science and Technology, BMH Operation
   *
   * This library is free software; you can redistribute it and/or modify it under
   * the terms of the GNU Lesser General Public License as published by the Free
   * Software Foundation; either version 2.1 of the License, or (at your option)
   * any later version.
   *
   * This library is distributed in the hope that it will be useful, but WITHOUT
   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
   * details.
   *
   * You should have received a copy of the GNU Lesser General Public License
   * along with this library; if not, write to the Free Software Foundation, Inc.,
   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   *
   * William E. Johnson II
   */
  ifndef DELTA_FIRE_FIGHTER_HUD_COMPONENT
  define DELTA_FIRE_FIGHTER_HUD_COMPONENT
  
  include <dtGame/gmcomponent.h>
  include <dtCore/timer.h>
  include <fireFighter/export.h>
  include <CEGUIUDim.h> // So we get CEGUI::UVector2 without including everything in CEGUI.h
  
  // Forward declarations
  namespace CEGUI
  {
     class PushButton;
     class Window;
     class EventArgs;
     class UVector2;
  }
  
  namespace dtGUI
  {
     class CEUIDrawable;
  }
  
  namespace dtCore
  {
     class DeltaWin;
     class Keyboard;
     class Mouse;
  }
  
  namespace dtActors
  {
     class TaskActorProxy;
  }
  
  class GameState;
  class GameItemActor;
  class HelpWindow;
  
  class FIRE_FIGHTER_EXPORT HUDComponent : public dtGame::GMComponent
  {
     public:
  
        static const std::string NAME;
  
  
Constructor HUDComponent(dtCore::DeltaWin &win, dtCore::Keyboard &keyboard, dtCore::Mouse &mouse, const std::string &name = NAME);

  
Processes incoming messages virtual void ProcessMessage(const dtGame::Message &msg);

  
Override virtual void OnAddedToGM();

     protected:
  
  
Destructor virtual ~HUDComponent();

  
Shows the Main menu void ShowMainMenu();

  
Shows the End menu void ShowEndMenu();

  
Displays the HUD void ShowHUD();

  
Hides the currently all menus void HideMenus();

  
Shows the intro help void ShowIntroMenu(); private:
Private helper method to build the main menu


      void BuildMainMenu();

      
Private helper method to build the HUD


      void BuildHUD();

      
Private helper method to build the end of game menu


      void BuildEndMenu();

      
Private helper method to build the intro menu


      void BuildIntroMenu();

      
Private helper method to init the GUI


      void SetupGUI(dtCore::DeltaWin &win,
                    dtCore::Keyboard &keyboard,
                    dtCore::Mouse &mouse);

      
Callback for when the start button is clicked


      bool OnStartWithObjectives(const CEGUI::EventArgs &e);

      
Callback for when the start button is clicked


      bool OnStart(const CEGUI::EventArgs &e);

      
Callback for when the quit button is clicked


      bool OnQuit(const CEGUI::EventArgs &e);

      
Callback for when the quit button is clicked


      bool OnReturnToMenu(const CEGUI::EventArgs &e);

      
Callback for when the quit button is clicked


      bool OnHelpWindowClosed(const CEGUI::EventArgs &e);

      
Helper method to quickly build and send game state changed messages
parameter: oldState the old state
parameter: newState the new state


      void SendGameStateChangedMessage(GameState &oldState, GameState &newState);

      
Private helper method to refresh the HUDComponent when states change


      void Refresh();

      
Private helper method to toggle the mouse on and off
parameter: enable True to show the mouse


      void ShowMouse(bool enable);

      
Shows the "Item of interest" image


      void ShowGameItemImage();

      
Adds an item to the HUD


      void AddItemToHUD(GameItemActor *item);

      
Sets the currently selected item


      void SetSelectedItem(GameItemActor *item);

      
Sets the currently activated item


      void SetActivatedItem(GameItemActor *item);

      
Sets the currently activated item


      void SetDeactivatedItem(GameItemActor *item);

      
Private helper method to hide the game item image


      void HideGameItemImage();

      
Private helper method called once per tick to update the tasks UI


      void UpdateMediumDetailData(CEGUI::Window *parent);

      
Recursively adds subtasks to the UI from parent tasks


      unsigned int RecursivelyAddTasks(const std::string &indent, 
                                       unsigned int curIndex,
                                       const dtActors::TaskActorProxy *taskProxy, 
                                       unsigned int &numCompleted, 
                                       CEGUI::Window *parent);

      
Utility method to set the text, position, and color of a text control Check to see if the data changed. The default values for color and position won't do anything since they use a color and position < 0.


      void UpdateStaticText(CEGUI::Window *textControl, 
                            const std::string &newText,
                            float red   = -1.0f, 
                            float green = -1.0f, 
                            float blue  = -1.0f,
                            float x     = -1.0f, 
                            float y     = -1.0f);

      
Private helper method to create text for the task actors


      CEGUI::Window* CreateText(const std::string &name, 
                                CEGUI::Window *parent, 
                                const std::string &text,
                                float x, float y, float width, float height);

      
Refreshes the debriefing screen


      void RefreshDebriefScreen();

      
Updates the main background during game play


      void UpdateHUDBackground();

      CEGUI::PushButton *mStartWithObjectives, *mStart, *mQuit, *mReturnToMenu;
      CEGUI::Window *mMainWindow;
      CEGUI::Window *mWindowBackground, *mHUDBackground, *mDebriefBackground, 
                    *mIntroBackground, *mGameItemImage, 
                    *mFireSuitIcon, *mFireHoseIcon, *mSCBAIcon, 
                    *mInventoryUseFireSuitIcon, *mInventoryUseFireHoseIcon, *mInventoryUseSCBAIcon, 
                    *mInventorySelectIcon, 
                    *mTargetIcon;

      CEGUI::Window *mAppHeader, *mDebriefHeaderText, *mIntroText;

      dtCore::RefPtr<dtGUI::CEUIDrawable> mGUI;

      bool mShowObjectives;
      GameState *mCurrentState;
      CEGUI::UVector2 mFireSuitIconPos, mFireHoseIconPos, mSCBAIconPos; 
      std::vector<CEGUI::Window*> mTaskTextList;
      CEGUI::Window *mTasksHeaderText;
      const unsigned int mNumTasks;
      CEGUI::Window *mMissionCompletedText, *mMissionFailedText;
      bool mMissionComplete, mMissionFailed;
      dtActors::TaskActorProxy *mFailedProxy;
      CEGUI::Window *mCompleteOrFail, *mFailReason;
      std::vector<CEGUI::Window*> mDebriefList;
      CEGUI::Window *mHUDOverlay;
      dtCore::RefPtr<HelpWindow> mHelpWindow;
};

endif


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-2780434-1"; urchinTracker(); </script>