]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Game.h
A lot of clean up in MenuDraw.
[lugaru.git] / Source / Game.h
index 00dfb53dd47f280ed1705905f58300ec78805cca..431f3243e8f6622931416b17dae35a07ec4ba76b 100644 (file)
@@ -65,6 +65,93 @@ 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:
@@ -89,8 +176,6 @@ class Game
                int endx[100];
                int endy[100];
                float selectedlong[100];
-               float offsetx[100];
-               float offsety[100];
                int selected;
                int keyselect;
                int indemo;
@@ -135,22 +220,9 @@ class Game
 
                bool stealthloading;
 
-               int campaignnumlevels;
-               char campaignmapname[50][256];
-               char campaigndescription[50][256];
-               int campaignchoosenext[50];
-               int campaignnumnext[50]; // Set this to 0 on final level. As David said: he meant to add story branching, but he eventually hadn't. 
-               int campaignnextlevel[50][10];
-               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 minimap;
 
@@ -300,7 +372,7 @@ class Game
 
 //keeps track of which textures are loaded
 //TODO: delete them properly
-struct TextureInfo{
+struct TextureInfo {
     bool isLoaded;
     bool isSkin;
     const char* fileName;
@@ -310,7 +382,7 @@ struct TextureInfo{
     GLubyte* array;
     int* skinsize;
 
-    void load(){
+    void load() {
         if(isSkin)
             Game::LoadTextureSaveData(fileName,ptextureid,mipmap,array,skinsize,isLoaded);
         else