1 // ==============================================================
2 //	This file is part of Glest (www.glest.org)
3 //
4 //	Copyright (C) 2001-2008 Marti�o Figueroa
5 //
6 //	You can redistribute this code and/or modify it under
7 //	the terms of the GNU General Public License as published
8 //	by the Free Software Foundation; either version 2 of the
9 //	License, or (at your option) any later version
10 // ==============================================================
11 
12 #ifndef _GLEST_GAME_MAINMENU_H_
13 #define _GLEST_GAME_MAINMENU_H_
14 
15 #include "lang.h"
16 #include "console.h"
17 #include "vec.h"
18 #include "world.h"
19 #include "program.h"
20 #include "components.h"
21 #include "menu_background.h"
22 #include "game_settings.h"
23 
24 namespace Glest{ namespace Game{
25 
26 //misc consts
27 struct MapInfo{
28 	Vec2i size;
29 	int players;
30 	string desc;
31 };
32 
33 struct ScenarioInfo
34 {
35 	int difficulty;
36     ControlType factionControls[GameConstants::maxPlayers];
37     int teams[GameConstants::maxPlayers];
38     string factionTypeNames[GameConstants::maxPlayers];
39 
40     string mapName;
41     string tilesetName;
42     string techTreeName;
43 
44 	bool defaultUnits;
45 	bool defaultResources;
46 	bool defaultVictoryConditions;
47 
48     string desc;
49 };
50 
51 class MenuState;
52 
53 // =====================================================
54 // 	class MainMenu
55 //
56 ///	Main menu ProgramState
57 // =====================================================
58 
59 class MainMenu: public ProgramState{
60 private:
61 	//up
62 	Program *program;
63 
64 	//shared
65 	GameSettings gameSettings;
66 	MenuBackground menuBackground;
67 
68 	MenuState *state;
69 
70 	//shared
71     int mouseX, mouseY;
72     int mouse2dAnim;
73 	int fps, lastFps;
74 
75 public:
76 	MainMenu(Program *program);
77     ~MainMenu();
78 
getMenuBackground()79 	MenuBackground *getMenuBackground()	{return &menuBackground;}
80 
81     virtual void render();
82     virtual void update();
83 	virtual void tick();
84 	virtual void init();
85     virtual void mouseMove(int x, int y, const MouseState *mouseState);
86     virtual void mouseDownLeft(int x, int y);
87     virtual void mouseDownRight(int x, int y);
88 	virtual void keyDown(char key);
89 	virtual void keyPress(char key);
90 
91 	void setState(MenuState *state);
92 };
93 
94 
95 // ===============================
96 // 	class MenuState
97 // ===============================
98 
99 class MenuState{
100 protected:
101 	Program *program;
102 
103 	MainMenu *mainMenu;
104 	Camera camera;
105 
106 public:
107 	MenuState(Program *program, MainMenu *mainMenu, const string &stateName);
~MenuState()108 	virtual ~MenuState(){};
109 	virtual void mouseClick(int x, int y, MouseButton mouseButton)=0;
110 	virtual void mouseMove(int x, int y, const MouseState *mouseState)=0;
111 	virtual void render()=0;
update()112 	virtual void update(){};
keyDown(char key)113 	virtual void keyDown(char key){};
keyPress(char c)114 	virtual void keyPress(char c){};
115 
getCamera()116 	const Camera *getCamera() const			{return &camera;}
117 };
118 
119 }}//end namespace
120 
121 #endif
122