00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <list>
00031 #include <stack>
00032 #include "aedGUI/include/aedGui.h"
00033 #include <SDL/SDL_image.h>
00034 #include "State.h"
00035 #include "MWTheme.h"
00036 #include "aedOverlay.h"
00037
00038
00039 #define O_SET 10
00040
00041 class MainMenuState : public State
00042 {
00043 protected:
00044 int window_x, window_y;
00045
00046 std::stack<class GuiMenu*> menu_stack;
00047 std::list<class GuiMenu*> menu_list;
00048
00049 SDL_Surface *bg;
00050
00051 SDL_Surface *menuTex;
00052 uint menuTexId;
00053 class GuiMenu *currentMenu;
00054
00055 static bool exit_menu_state;
00056
00057 std::vector<std::string> mission_names;
00058 std::vector<aedButton*> mission_buttons;
00059 int currentMission;
00060 int missionColumns;
00061 int missionRows;
00062 int missionStartColumn;
00063
00064 public:
00065 MainMenuState(StateID state);
00066 virtual ~MainMenuState();
00067 virtual void paint();
00068 virtual void doKey(int key, int x, int y, bool special,
00069 bool down, unsigned int modifiers);
00070 class GuiMenu *getCurrentMenu(void) {return currentMenu;}
00071 void SwitchGuiMenu(void *caller, void *dummy);
00072 void SwitchBackGuiMenu(void *caller, void *dummy);
00073 void StartGame(void *caller, void *dummy);
00074 class GuiMenu *OptionUnsupported(void);
00075 void AddMenu(class GuiMenu* menu){menu_list.push_back(menu);}
00076 void setResolution(int width, int height);
00077 void updateMissionMenu(void);
00078 void shiftMissionMenu(bool up);
00079 void selectMission(aedButton *caller);
00080 void autoStart();
00081 void autoStartCheck();
00082 std::string getMissionName(void) {return mission_names[currentMission];}
00083 };
00084
00085 class GuiMenu
00086 {
00087 public:
00088 char *title;
00089 aedOverlay *olay;
00090 aedWidget *menu_bottom;
00091 aedButton *back_button;
00092 aedWidget *frame;
00093 static int MenuMaxX, MenuMaxY;
00094
00095 GuiMenu(char *title_, int width, int height, MainMenuState *state);
00096 ~GuiMenu();
00097 aedWidget *GetBottom(void){return menu_bottom;}
00098 void ConnectGuiMenu(aedButton *invoker,
00099 class GuiMenu *from,
00100 bool connect_back_button = true);
00101
00102 };
00103
00104
00105
00106 void SwitchGuiMenuHook(void *caller, void *dummy);
00107 void SwitchBackGuiMenuHook(void *caller, void *dummy);
00108 void StartGameHook(void *caller, void *dummy);
00109 void StartNetworkHook(void *caller, void *dummy);
00110 void StartHostHook(void *caller, void *dummy);
00111 void vidModeChanged(void *caller, void *data);
00112 void toggleFullScreen(void *caller, void *data);
00113 int FindMissions(std::vector<std::string> &dirents);
00114 void ShiftMissionMenuUpHook(void *caller, void *dummy);
00115 void ShiftMissionMenuDownHook(void *caller, void *dummy);
00116 void SelectMissionHook(void *caller, void *dummy);
00117 void SetTextureCompressionPref(void *caller, void *dummy);
00118 void SetVertexBufferPref(void *caller, void *dummy);