Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#ifndef __GAMEAPP_H__
#define __GAMEAPP_H__

//////////////////////////////////////////////////////////////////////////
//                                                      GameApp.h
//
//      This is what drives the whole game. In here, you derive your class
//      from SexyAppBase and implement common game tasks, such as
//      responding to widgets (covered later), initializing and loading
//      resources, setting up the various game screens, etc.
//      All applications at minimum must have a class that derives from
//      SexyAppBase.
//
//      The GameApp class is used to do such things as create the main
//      menu screen, create the main game class (where all drawing/updating/
//      interaction takes place), etc.
//
//      IMPORTANT: Comments for topics covered in the previous demos will
//      be kept to a minimum and removed in most cases. You should read through
//      the previous demos to familiarize yourself with anything you don't
//      understand. All functions, variables, and concepts are explained
//      either in this demo, or in previous ones if they've already been covered.
//////////////////////////////////////////////////////////////////////////

#include "SexyAppFramework/SexyAppBase.h"


namespace Sexy
{

        class Board;
        class TitleScreen;

class GameApp : public SexyAppBase
{

        private:

                Board*                  mBoard;
                TitleScreen*    mTitleScreen;

                // Because it's annoying to hear the sound of the planets hitting a wall too many
                // times in a second, we'll limit how many can occur.
                int                             mLastPlanetHitSoundTime;

        public:

                GameApp();
                virtual ~GameApp();

                //////////////////////////////////////////////////////////////////////////
                //      Function: Init
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Initializes the application. Sets the resolution, overrides
                //      any default settings, and if there is a loader/intro screen (not in this demo)
                //      creates it and displays it. The framework will then automatically
                //      call the LoadingThreadProc() method after this method returns.
                //////////////////////////////////////////////////////////////////////////             
                virtual void    Init();

                //////////////////////////////////////////////////////////////////////////
                //      Function: LoadingThreadProc
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Loads all resources in a separate thread. If there is a
                //      loader/intro screen (not in this demo), would also update the
                //      loader progress indicator. When the function returns, the
                //      LoadingThreadCompleted() method is automatically called.
                //////////////////////////////////////////////////////////////////////////             
                virtual void    LoadingThreadProc();

                //////////////////////////////////////////////////////////////////////////
                //      Function: LoadingThreadCompleted
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Called when LoadingThreadProc is complete and all resources
                //      have been loaded. It is in this function that you would then set up
                //      your main menu or similar screen. For this particular demo however,
                //      we will go straight to the main game class, "Board".
                //////////////////////////////////////////////////////////////////////////             
                virtual void    LoadingThreadCompleted();              

                //////////////////////////////////////////////////////////////////////////
                //      Function: TitleScreenIsFinished
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Called by the TitleScreen widget when it is about to close
                //      down, this indicates that we should now add the board widget and
                //      start the game.
                //////////////////////////////////////////////////////////////////////////
                void    TitleScreenIsFinished();

                //////////////////////////////////////////////////////////////////////////
                //      Function: NewDialog
                //      Parameters:
                //              theDialogId             - Unique ID to give this dialog box
                //              isModal                 - If true, only itself and widgets above it receive
                //                                                      input events.
                //              theDialogHeader - String to display in the header part of the dialog box
                //              theDialogLines  - String to use for the body of the dialog. May use
                //                                                      \n characters to indicate new lines.
                //              theDialogFooter - If the button mode is BUTTONS_FOOTER, this is the text
                //                                                      to use for the button, otherwise ignored.
                //              theButtonMode   - One of 3 settings: Dialog::BUTTONS_YES_NO creates two
                //                                                      "Yes" "No" buttons, Dialog::BUTTONS_OK_CANCEL creates two
                //                                                      "OK" "Cancel" buttons, Dialog::BUTTONS_FOOTER creates one
                //                                                      button with the text from theDialogFooter.
                //
                //      Returns: A new dialog pointer for use by SexyAppBase's DoDialog method.
                //
                //      Purpose: SexyAppBase contains a convenience function, DoDialog, that relies on
                //      this overriden function. DoDialog calls NewDialog which instructs it how to make
                //      a dialog box. You should use DoDialog to create and add your dialog boxes.
                //      The reason for this function is to allow for customized dialog boxes and to avoid
                //  having to have a gigantic function with every possible parameter to pass to the Dialog's
                //      constructor.
                //////////////////////////////////////////////////////////////////////////                             
                virtual Dialog* NewDialog(int theDialogId, bool isModal, const std::string& theDialogHeader,
                        const std::string& theDialogLines, const std::string& theDialogFooter, int theButtonMode);

                //////////////////////////////////////////////////////////////////////////
                //      Function: LostFocus
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Called when the game itself loses focus, such as the user switch
                //      to another application.
                //////////////////////////////////////////////////////////////////////////             
                virtual void LostFocus(void);

                //////////////////////////////////////////////////////////////////////////
                //      Function: GotFocus
                //      Parameters: none
                //      Returns: none
                //
                //      Purpose: Called when the app regains focus after losing it.
                //////////////////////////////////////////////////////////////////////////             
                virtual void GotFocus(void);

                //////////////////////////////////////////////////////////////////////////
                //      Function: ButtonPress:
                //      Parameters:
                //              theId   - ID of the button pressed
                //
                //      Returns: none
                //
                //      Purpose: Called when the button is pressed, but before the mouse is
                //      released (which would instead generate a ButtonDepress event).
                //////////////////////////////////////////////////////////////////////////             
                virtual void ButtonPress(int theId);

                //////////////////////////////////////////////////////////////////////////
                //      Function: PlaySample
                //      Parameters:
                //              theSoundNum     - The sound ID to play
                //      Returns: none
                //
                //      Purpose: Plays the sample at normal pitch with no panning.
                //////////////////////////////////////////////////////////////////////////             
                virtual void PlaySample(int theSoundNum);
};

}


#endif  // __GAMEAPP_H__