From d7efa99f03f9d0eb5d84ed42249f227f13471079 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 16 Sep 2015 11:33:02 -0400 Subject: shitty bug fixes --- Makefile | 2 +- include/UIClass.h | 9 +- include/World.h | 2 +- src/UIClass.cpp | 282 ++++++++++++++++++++++++++++-------------------------- src/World.cpp | 8 +- src/entities.cpp | 3 +- src/main.cpp | 39 ++++---- 7 files changed, 179 insertions(+), 166 deletions(-) diff --git a/Makefile b/Makefile index 7b8b834..66b1c7f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ FLAGS_LINUX = -lGL -lSDL2_image -lfreetype FLAGS_WIN32 = -lopengl32 -lmingw32 -lSDL2_Image -lfreetype -FLAGS = -m32 -std=c++11 -Iinclude -Iinclude/freetype2 -Wall -Werror -lSDL2main -lSDL2 +FLAGS = -m32 -std=c++11 -Iinclude -Iinclude/freetype2 -Wall -Werror -Wextra -lSDL2main -lSDL2 all: @g++ src/*.cpp -o main $(FLAGS_LINUX) $(FLAGS) diff --git a/include/UIClass.h b/include/UIClass.h index e6f4825..745dec3 100644 --- a/include/UIClass.h +++ b/include/UIClass.h @@ -5,17 +5,14 @@ #include #include -class UIClass { -private: - unsigned int fontSize; -public: +namespace ui { + extern int mousex,mousey; void init(const char *ttf); void setFontSize(unsigned int fs); void putText(const float x,const float y,const char *s,...); void putString(const float x,const float y,const char *s); void msgBox(const char *str,...); void handleEvents(); - int mousex, mousey; -}; +} #endif // UICLASS_H diff --git a/include/World.h b/include/World.h index fca108d..f6ddbfe 100644 --- a/include/World.h +++ b/include/World.h @@ -18,7 +18,7 @@ private: } __attribute__ ((packed)) *line; unsigned int lineCount; // Size of line array, calculated in the constructor unsigned int entCount; // Count of currently bound entities - void *entity[MAX_ENTITIES]; + void **entity; public: World *behind,*infront; // As in layers World *toLeft,*toRight; // 'new' worlds (off screen) diff --git a/src/UIClass.cpp b/src/UIClass.cpp index 0497575..86a7be6 100644 --- a/src/UIClass.cpp +++ b/src/UIClass.cpp @@ -9,151 +9,159 @@ extern World *currentWorld; static FT_Library ftl; static FT_Face ftf; static GLuint ftex; +static unsigned int fontSize; -void UIClass::init(const char *ttf){ - if(FT_Init_FreeType(&ftl)){ - std::cout<<"Error! Couldn't initialize freetype."<glyph->bitmap.width*ftf->glyph->bitmap.rows*4); - for(j=0;jglyph->bitmap.width*ftf->glyph->bitmap.rows;j++){ - buf[j*4]=255; - buf[j*4+1]=255; - buf[j*4+2]=255; - buf[j*4+3]=ftf->glyph->bitmap.buffer[j]?255:0; - } - glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,ftf->glyph->bitmap.width,ftf->glyph->bitmap.rows,0,GL_RGBA,GL_UNSIGNED_BYTE,buf); - w=ftf->glyph->bitmap.width*(2.0/SCREEN_WIDTH); - h=ftf->glyph->bitmap.rows *(2.0/SCREEN_HEIGHT); - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D,ftex); - if(s[i]=='\''|| - s[i]=='\"'|| - s[i]=='-'|| - s[i]=='*'){ - yo+=fontSize*.001; - } - glBegin(GL_QUADS); - glColor3ub(255,255,255); - glTexCoord2f(0,1);glVertex2f(xo,yo); - glTexCoord2f(1,1);glVertex2f(xo+w,yo); - glTexCoord2f(1,0);glVertex2f(xo+w,yo+h); - glTexCoord2f(0,0);glVertex2f(xo,yo+h); - glEnd(); - if(s[i]=='\''|| - s[i]=='\"'|| - s[i]=='-'|| - s[i]=='*'){ - yo-=fontSize*.001; - } - glDisable(GL_TEXTURE_2D); - xo+=w+(fontSize*.0002); - free(buf); + void init(const char *ttf){ + if(FT_Init_FreeType(&ftl)){ + std::cout<<"Error! Couldn't initialize freetype."<glyph->bitmap.width*ftf->glyph->bitmap.rows*4); + for(j=0;jglyph->bitmap.width*ftf->glyph->bitmap.rows;j++){ + buf[j*4]=255; + buf[j*4+1]=255; + buf[j*4+2]=255; + buf[j*4+3]=ftf->glyph->bitmap.buffer[j]?255:0; + } + glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,ftf->glyph->bitmap.width,ftf->glyph->bitmap.rows,0,GL_RGBA,GL_UNSIGNED_BYTE,buf); + w=ftf->glyph->bitmap.width*(2.0/SCREEN_WIDTH); + h=ftf->glyph->bitmap.rows *(2.0/SCREEN_HEIGHT); + if(s[i]=='\''|| + s[i]=='\"'|| + s[i]=='-'|| + s[i]=='*'){ + yo+=fontSize*.001; + } + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,ftex); + glBegin(GL_QUADS); + glColor3ub(255,255,255); + glTexCoord2f(0,1);glVertex2f(xo,yo); + glTexCoord2f(1,1);glVertex2f(xo+w,yo); + glTexCoord2f(1,0);glVertex2f(xo+w,yo+h); + glTexCoord2f(0,0);glVertex2f(xo,yo+h); + glEnd(); + glDisable(GL_TEXTURE_2D); + if(s[i]=='\''|| + s[i]=='\"'|| + s[i]=='-'|| + s[i]=='*'){ + yo-=fontSize*.001; + } + xo+=w+(fontSize*.0002); + free(buf); + } + }while(s[i++]); + } + void putText(const float x,const float y,const char *str,...){ + va_list args; + char *buf; + buf=(char *)calloc(128,sizeof(char)); + va_start(args,str); + vsnprintf(buf,128,str,args); + va_end(args); + putString(x,y,buf); + free(buf); + } + void msgBox(const char *str,...){ + va_list args; + va_start(args,str); + glColor3ub(0,0,0); + glRectf(-1,.6,1,1); + setFontSize(24); + putText(-1,1-24*.0022,str,args); + va_end(args); + } -void UIClass::handleEvents(){ - static bool space=false; - float thing; - SDL_Event e; - while(SDL_PollEvent(&e)){ - switch(e.type){ - case SDL_MOUSEMOTION: - mousex=e.motion.x; - mousey=e.motion.y; - break; - case SDL_WINDOWEVENT: - switch(e.window.event){ - case SDL_WINDOWEVENT_CLOSE: - gameRunning = false; + void handleEvents(){ + static bool space=false; + float thing; + SDL_Event e; + while(SDL_PollEvent(&e)){ + switch(e.type){ + case SDL_MOUSEMOTION: + mousex=e.motion.x; + mousey=e.motion.y; break; - } - case SDL_KEYDOWN: - if(e.key.keysym.sym == SDLK_d) player.right = true; - if(e.key.keysym.sym == SDLK_a) player.left = true; - if(e.key.keysym.sym == SDLK_LSHIFT) player.speed = 3; - if(e.key.keysym.sym == SDLK_SPACE){ - if(!space&&player.vel.y<=0){ - space=true; - player.loc.y += HLINE*1.2; - player.vel.y += .003; + case SDL_WINDOWEVENT: + switch(e.window.event){ + case SDL_WINDOWEVENT_CLOSE: + gameRunning = false; + break; } - } - if(e.key.keysym.sym == SDLK_i){ - if(currentWorld->behind){ - thing=(currentWorld->getWidth()-currentWorld->behind->getWidth())/2; - if(player.loc.x>thing-1&& - player.loc.xbehind->getWidth()){ - player.loc.x-=thing; - memset(&player.vel,0,sizeof(vec2)); - currentWorld=currentWorld->behind; + case SDL_KEYDOWN: + if(e.key.keysym.sym == SDLK_d) player.right = true; + if(e.key.keysym.sym == SDLK_a) player.left = true; + if(e.key.keysym.sym == SDLK_LSHIFT) player.speed = 3; + if(e.key.keysym.sym == SDLK_SPACE){ + if(!space&&player.vel.y<=0){ + space=true; + player.loc.y += HLINE*1.2; + player.vel.y += .003; } } - } - if(e.key.keysym.sym == SDLK_k){ - if(currentWorld->infront){ - player.loc.x+=(currentWorld->infront->getWidth()-currentWorld->getWidth())/2; - memset(&player.vel,0,sizeof(vec2)); - currentWorld=currentWorld->infront; + if(e.key.keysym.sym == SDLK_i){ + if(currentWorld->behind){ + thing=(currentWorld->getWidth()-currentWorld->behind->getWidth())/2; + if(player.loc.x>thing-1&& + player.loc.xbehind->getWidth()){ + player.loc.x-=thing; + memset(&player.vel,0,sizeof(vec2)); + currentWorld=currentWorld->behind; + } + } } - } - break; - case SDL_KEYUP: - if(e.key.keysym.sym == SDLK_d) player.right = false; - if(e.key.keysym.sym == SDLK_a) player.left = false; - if(e.key.keysym.sym == SDLK_LSHIFT) player.speed = 1.0; - if(e.key.keysym.sym == SDLK_SPACE) - if(player.vel.y<=.001)space=false; - - if(e.key.keysym.sym == SDLK_ESCAPE) gameRunning = false; - break; - } + if(e.key.keysym.sym == SDLK_k){ + if(currentWorld->infront){ + player.loc.x+=(currentWorld->infront->getWidth()-currentWorld->getWidth())/2; + memset(&player.vel,0,sizeof(vec2)); + currentWorld=currentWorld->infront; + } + } + break; + case SDL_KEYUP: + if(e.key.keysym.sym == SDLK_d) player.right = false; + if(e.key.keysym.sym == SDLK_a) player.left = false; + if(e.key.keysym.sym == SDLK_LSHIFT) player.speed = 1.0; + if(e.key.keysym.sym == SDLK_SPACE) + if(player.vel.y<=.001)space=false; + + if(e.key.keysym.sym == SDLK_ESCAPE) gameRunning = false; + break; + } + } } } diff --git a/src/World.cpp b/src/World.cpp index bde35de..49bdf0d 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -24,6 +24,7 @@ World::World(const float width,World *l,World *r){ toRight=r; behind=infront=NULL; entCount=0; + entity=(void **)calloc(MAX_ENTITIES,sizeof(void *)); if(toLeft){ // Make sure linked worlds link back if(toLeft->toRight){ std::cout<<"There's already a world to the left!"<draw(); + if(entity[i]) + ((Entity **)entity)[i]->draw(); } } } @@ -134,6 +136,6 @@ void World::addLayer(const float width){ behind->infront=this; } } -void World::addEntity(void *e){ - entity[entCount++]=e; // duh +void World::addEntity(void *addr){ + entity[entCount++]=addr; } diff --git a/src/entities.cpp b/src/entities.cpp index b418534..896e02d 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -17,10 +17,11 @@ void Entity::draw(void){ } void Entity::wander(int timeRun, vec2 *v){ + static int hey; if(ticksToUse == 0){ ticksToUse = timeRun; v->x = .00010; - int hey = (grand() % 3 - 1); + hey = (grand() % 3 - 1); v->x *= hey; } ticksToUse--; diff --git a/src/main.cpp b/src/main.cpp index 3ae4206..eab1201 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ #include #define TICKS_PER_SEC 20 -#define MSEC_PER_TICK 500//(1000/TICKS_PER_SEC) +#define MSEC_PER_TICK (1000/TICKS_PER_SEC) SDL_Window *window = NULL; SDL_Surface *renderSurface = NULL; @@ -22,7 +22,6 @@ Entity *entnpc[32]; //The NPC base Player player; //The actual player object NPC npc[32]; Structures build; -UIClass ui; //Yep World *currentWorld;//u-huh World *spawn; @@ -32,10 +31,10 @@ void render(); unsigned int millis(void){ std::chrono::system_clock::time_point now=std::chrono::system_clock::now(); - return std::chrono::duration_cast(now.time_since_epoch()).count(); + return std::chrono::duration_cast(now.time_since_epoch()).count(); } -int main(int argc,char **argv){ +int main(/*int argc,char **argv*/){ //runs start-up procedures if(!SDL_Init(SDL_INIT_VIDEO)){ atexit(SDL_Quit); @@ -77,7 +76,7 @@ int main(int argc,char **argv){ **** GAMELOOP **** **************************/ - ui.init("ttf/VCR_OSD_MONO_1.001.ttf"); + ui::init("ttf/VCR_OSD_MONO_1.001.ttf"); irand(time(NULL)); entPlay = &player; @@ -116,6 +115,7 @@ int main(int argc,char **argv){ npc[i].loc.x += npc[i].vel.x * deltaTime; } } + render(); if(prevTime + MSEC_PER_TICK >= millis()){ //the logic loop to run at a dedicated time @@ -170,15 +170,15 @@ void render(){ glRectf(build.loc.x, build.loc.y, build.loc.x + build.width, build.loc.y + build.height); ///BWAHHHHHHHHHHHH - ui.setFontSize(16); + ui::setFontSize(16); if(++div==20){ div=0; d=deltaTime; fps=(1000/d); } - ui.putText(-.98 + player.loc.x, .94, "FPS: %1.0f\nDT: %1.0f",fps); + ui::putText(-.98 + player.loc.x, .94, "FPS: %1.0f\nDT: %1.0f",fps,d); //ui.putText(-.98 + player.loc.x, .88, "DT: %1.0f",d); - ui.putText(player.loc.x,player.loc.y-(HLINE*10),"(%+1.3f,%+1.3f)",player.loc.x,player.loc.y); + ui::putText(player.loc.x,player.loc.y-(HLINE*10),"(%+1.3f,%+1.3f)",player.loc.x,player.loc.y); /************************** **** CLOSE THE LOOP **** @@ -186,8 +186,8 @@ void render(){ //DRAW MOUSE HERE!!!!!W glColor3ub(255,0,0); - mx=(ui.mousex/(float)SCREEN_WIDTH)*2.0f-1.0f; - my=((SCREEN_HEIGHT-ui.mousey)/(float)SCREEN_HEIGHT)*2.0f-1.0f; + mx=(ui::mousex/(float)SCREEN_WIDTH)*2.0f-1.0f; + my=((SCREEN_HEIGHT-ui::mousey)/(float)SCREEN_HEIGHT)*2.0f-1.0f; if(player.loc.x-1>-1)mx+=player.loc.x; glRectf(mx,my,mx+HLINE*4,my+HLINE*4); @@ -197,7 +197,8 @@ void render(){ void logic(){ float gw; - ui.handleEvents(); // Handle events + + ui::handleEvents(); // Handle events if(player.right)player.vel.x=.00075; else if(player.left)player.vel.x=-.00075; @@ -221,13 +222,17 @@ void logic(){ player.loc.x=-1+HLINE; } } - + currentWorld->detect(&build.loc,&build.vel,build.width); - for(int i = 0; i < eAmt(entnpc); i++){ - if(npc[i].alive == true){ - currentWorld->detect(&npc[i].loc,&npc[i].vel,npc[i].width); - entnpc[i]->wander((grand()%181 + 1), &npc[i].vel); + /*for(int i = 0; i < 32; i++){ + if(entnpc[i]->alive){ + currentWorld->detect(&entnpc[i]->loc,&entnpc[i]->vel,entnpc[i]->width); + std::cout<<(void *)entnpc[i]<<" "<wander(30, &entnpc[i]->vel); } - } + }*/ + ////////////////////// + std::cout<<"shit"; + tickCount++; } -- cgit v1.2.3