X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGame.h;h=cb08024bc41559667f6098fc148a6bfa43ad2b1f;hb=72621d52ae69fa4ecb4329437810d71860ae3ebc;hp=56b65c257773b5510c9ec39ad6f4db4a3300398b;hpb=f7f3989db89536a13751c11625168948a08e03e0;p=lugaru.git diff --git a/Source/Game.h b/Source/Game.h index 56b65c2..cb08024 100644 --- a/Source/Game.h +++ b/Source/Game.h @@ -59,15 +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 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> 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: - static std::vector textures; - GLuint terraintexture; GLuint terraintexture2; GLuint terraintexture3; @@ -87,15 +174,8 @@ class Game 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; @@ -138,24 +218,9 @@ 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 campaignlevels; int whichchoice; - - int numlevelspassed; - int levelorder[5000]; - int levelvisible[50]; - int levelhighlight[50]; + int actuallevel; bool minimap; @@ -217,19 +282,20 @@ class Game unsigned short crouchkey,jumpkey,forwardkey,chatkey,backkey,leftkey,rightkey,drawkey,throwkey,attackkey; 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 LoadTextureData(const char *fileName, GLuint *textureid,int mipmap, bool hasalpha); - static void LoadTextureSaveData(const char *fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize, bool reload); + 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, GLubyte *array); void InitGame(); void LoadScreenTexture(); void LoadStuff(); void LoadingScreen(); + void LoadCampaign(); + static std::vector ListCampaigns(); void FadeLoadingScreen(float howmuch); void Dispose(); int DrawGLScene(StereoSide side); + void DrawMenu(); void DrawGL(); //factored from Tick() -sf17k void MenuTick(); @@ -300,33 +366,6 @@ class Game Account* accountactive; }; -//keeps track of which textures are loaded -//TODO: delete them properly -struct TextureInfo{ - bool isLoaded; - bool isSkin; - const char* fileName; - GLuint* ptextureid; - int mipmap; - bool hasalpha; - GLubyte* array; - int* skinsize; - - void load(){ - if(isSkin) - Game::LoadTextureSaveData(fileName,ptextureid,mipmap,array,skinsize,isLoaded); - else - Game::LoadTextureData(fileName,ptextureid,mipmap,hasalpha); - isLoaded=true; - } - TextureInfo(const char *_fileName, GLuint *_ptextureid,int _mipmap, bool _hasalpha): - isLoaded(false), isSkin(false), array(NULL), skinsize(NULL), - fileName(_fileName), ptextureid(_ptextureid), mipmap(_mipmap), hasalpha(_hasalpha) { } - TextureInfo(const char *_fileName, GLuint *_ptextureid, int _mipmap, GLubyte *_array, int *_skinsize): - isLoaded(false), isSkin(true), hasalpha(false), - fileName(_fileName), ptextureid(_ptextureid), mipmap(_mipmap), array(_array), skinsize(_skinsize) { } -}; - #ifndef __forceinline # ifdef __GNUC__ # define __forceinline inline __attribute__((always_inline))