]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Game.h
major refactor of menu system, part 1
[lugaru.git] / Source / Game.h
index 63bb0a6468bfcbf60863b6055005c8ab0a90edd4..bc7ac539fc62b39b1c5fb650cdc489c1dd7a4e72 100644 (file)
@@ -59,16 +59,102 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "Account.h"
 #include "Sounds.h"
 
+#define NB_CAMPAIGN_MENU_ITEM 7
+
 extern GLuint rabbittexture;
 
+struct TextureInfo;
+
+class CampaignLevel
+{
+private:
+       int width;
+       struct Position
+       {
+               int x;
+               int y;
+       };
+public: 
+       std::string mapname;
+       std::string description;
+       int choosenext;
+               /*      
+               0 = Immediately load next level at the end of this one.
+               1 = Go back to the world map.
+               2 = Don't bring up the Fiery loading screen. Maybe other things, I've not investigated.
+               */
+       //int numnext; // 0 on final level. As David said: he meant to add story branching, but he eventually hadn't. 
+       std::vector<int> nextlevel;
+       Position location;
+       
+       CampaignLevel() : width(10) {
+               choosenext = 1;
+               location.x = 0;
+               location.y = 0;
+       }
+       
+       int getStartX() {
+               return 30+120+location.x*400/512;
+       }
+       
+       int getStartY() {
+               return 30+30+(512-location.y)*400/512;
+       }
+       
+       int getEndX() {
+               return getStartX()+width;
+       }
+       
+       int getEndY() {
+               return getStartY()+width;
+       }
+       
+       XYZ getCenter() {
+               XYZ center;
+               center.x=getStartX()+width/2;
+               center.y=getStartY()+width/2;
+               return center;
+       }
+       
+       int getWidth() {
+               return width;
+       }
+       
+       istream& operator<< (istream& is) {
+               is.ignore(256,':');
+               is.ignore(256,':');
+               is.ignore(256,' ');
+               is >> mapname;
+               is.ignore(256,':');
+               is >> description;
+               for(int pos = description.find('_');pos!=string::npos;pos = description.find('_',pos)) {
+                       description.replace(pos,1,1,' ');
+               }
+               is.ignore(256,':');
+               is >> choosenext;
+               is.ignore(256,':');
+               int numnext,next;
+               is >> numnext;
+               for(int j=0;j<numnext;j++) {
+                       is.ignore(256,':');
+                       is >> next;
+                       nextlevel.push_back(next-1);
+               }
+               is.ignore(256,':');
+               is >> location.x;
+               is.ignore(256,':');
+               is >> location.y;
+               return is;
+       }
+       
+       friend istream& operator>> (istream& is, CampaignLevel& cl) {
+               return cl << is;
+       }
+};
+
 class Game
 {
        public:
-               typedef std::map<std::string, GLuint> TextureList;
-               typedef std::map<GLuint, std::string> GLTextureList;
-               typedef TextureList::iterator TexIter;
-               static TextureList textures;
-
                GLuint terraintexture;
                GLuint terraintexture2;
                GLuint terraintexture3;
@@ -82,21 +168,8 @@ class Game
                GLuint cursortexture;
                GLuint Mainmenuitems[10];
 
-               int nummenuitems;
-               int startx[100];
-               int starty[100];
-               int endx[100];
-               int endy[100];
-               float selectedlong[100];
-               float offsetx[100];
-               float offsety[100];
-               float movex[100];
-               float movey[100];
-               float transition;
-               int anim;
                int selected;
                int keyselect;
-               int loaddistrib;
                int indemo;
 
                bool won;
@@ -118,13 +191,8 @@ class Game
                float rotation,rotation2;
                SkyBox skybox;
                bool cameramode;
-               bool cameratogglekeydown;
-               bool chattogglekeydown;
                int olddrawmode;
                int drawmode;
-               bool drawmodetogglekeydown;
-               bool explodetogglekeydown;
-               bool detailtogglekeydown;
                bool firstload;
                bool oldbutton;
 
@@ -144,24 +212,11 @@ class Game
 
                bool stealthloading;
 
-               int campaignnumlevels;
-               char campaignmapname[50][256];
-               char campaigndescription[50][256];
-               int campaignchoosenext[50];
-               int campaignnumnext[50];
-               int campaignnextlevel[50][10];
-               int campaignchoicesmade;
-               int campaignchoices[5000];
-               int campaignlocationx[50];
-               int campaignlocationy[50];
-               int campaignchoicenum;
-               int campaignchoicewhich[10];
+               std::vector<CampaignLevel> campaignlevels;
                int whichchoice;
-
-               int numlevelspassed;
-               int levelorder[5000];
-               int levelvisible[50];
-               int levelhighlight[50];
+               int actuallevel;
+               bool winhotspot;
+               bool windialogue;
 
                bool minimap;
 
@@ -180,10 +235,6 @@ class Game
                XYZ cameraloc;
                float cameradist;
 
-               bool envtogglekeydown;
-               bool slomotogglekeydown;
-               bool texturesizetogglekeydown;
-               bool freezetogglekeydown;
                int drawtoggle;
 
                bool editorenabled;
@@ -219,28 +270,40 @@ class Game
                bool displayblink;
                int displayselected;
                bool consolekeydown;
-               bool consoletogglekeydown;
                float consoleblinkdelay;
                bool consoleblink;
                int consoleselected;
-               //int togglekey[140];
-               //float togglekeydelay[140];
                bool autocam;
 
                unsigned short crouchkey,jumpkey,forwardkey,chatkey,backkey,leftkey,rightkey,drawkey,throwkey,attackkey;
+               unsigned short consolekey;
                bool oldattackkey;
 
-               static void LoadTexture(const char *fileName, GLuint *textureid,int mipmap, bool hasalpha);
-               static void LoadTextureSave(const char *fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize);
+               static void LoadTexture(const string fileName, GLuint *textureid,int mipmap, bool hasalpha);
+               static void LoadTextureSave(const string fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize);
                void LoadSave(const char *fileName, GLuint *textureid,bool mipmap,GLubyte *array, int *skinsize);
-               bool AddClothes(const char *fileName, GLuint *textureid,bool mipmap,GLubyte *array, int *skinsize);
+        bool AddClothes(const char *fileName, GLubyte *array);
                void InitGame();
+               void LoadScreenTexture();
                void LoadStuff();
                void LoadingScreen();
+               void LoadCampaign();
+               static std::vector<std::string> ListCampaigns();
                void FadeLoadingScreen(float howmuch);
                void Dispose();
                int DrawGLScene(StereoSide side);
+               void DrawMenu();
                void DrawGL();
+        //factored from Tick() -sf17k
+               void MenuTick();
+        void doTutorial();
+        void doDebugKeys();
+               void doJumpReversals();
+               void doAerialAcrobatics();
+               void doAttacks();
+               void doPlayerCollisions();
+               void doAI(int i);
+        //end factored
                void Tick();
                void TickOnce();
                void TickOnceAfter();
@@ -296,7 +359,6 @@ class Game
                void inputText(char* str, int* charselected, int* nb_chars);
                void flash();
                bool waiting;
-               bool mainmenutogglekeydown;
                //int mainmenu;
                Account* accountactive;
 };