diff options
-rw-r--r-- | include/World.h | 16 | ||||
-rw-r--r-- | src/World.cpp | 57 | ||||
-rw-r--r-- | src/main.cpp | 8 |
3 files changed, 35 insertions, 46 deletions
diff --git a/include/World.h b/include/World.h index 4a097a6..212fe38 100644 --- a/include/World.h +++ b/include/World.h @@ -2,21 +2,19 @@ #define WORLD_H #include <common.h> -#include <cstring> -#define LAYER0_Y (-0.8f) -#define TEX_SIZE ( 0.2f) +#define HLINE (2.0f/ 200 ) class World { private: - struct layer_t { - unsigned int tex; - float offset; - } layer[4]; + struct line_t { + // x = 2.0 (window width) / HLINES + float start; // Where to change to dirt, going down (y) + } *line; + unsigned int lineCount; public: - World(const char *l1,const char *l2,const char *l3,const char *bg); + World(float width); void draw(void); - void update(int player_accel); }; #endif // WORLD_H diff --git a/src/World.cpp b/src/World.cpp index feeeb1f..3d8cfb7 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -1,38 +1,31 @@ #include <World.h> -World::World(const char *l1,const char *l2,const char *l3,const char *bg){ - unsigned char i=0; - SDL_Surface *l; - const char *f[4]={l1,l2,l3,bg}; - memset(layer,0,sizeof(struct layer_t)*4); - for(;i<4;i++){ - l=IMG_Load(f[i]); - if(l!=NULL){ - glGenTextures(1,&layer[i].tex); - glBindTexture(GL_TEXTURE_2D,layer[i].tex); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); - glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,l->w,l->h,0,GL_RGB,GL_UNSIGNED_BYTE,l->pixels); - SDL_FreeSurface(l); - } +World::World(float width){ + unsigned int i; + lineCount=width/HLINE; + if((line=(struct line_t *)calloc(lineCount,sizeof(struct line_t)))==NULL){ + std::cout<<"Failed to allocate memory!"<<std::endl; + abort(); + } + line[0].start=(rand()%100)/100.0f-1; // lazy + for(i=1;i<lineCount;i++){ + line[i].start=line[i-1].start+(float)((rand()%20)-10)/1000.0f; } } void World::draw(void){ - int i; - float x; - glEnable(GL_TEXTURE_2D); - for(i=2;i>=0;i--){ - glBindTexture(GL_TEXTURE_2D,layer[i].tex); - glBegin(GL_QUADS); - for(x=-1;x<=1;x+=(TEX_SIZE/(float)(i+1))){ - glTexCoord2d(1,1);glVertex2f(x ,LAYER0_Y-TEX_SIZE+(i*.2)); - glTexCoord2d(0,1);glVertex2f(x+TEX_SIZE,LAYER0_Y-TEX_SIZE+(i*.2)); - glTexCoord2d(0,0);glVertex2f(x+TEX_SIZE,LAYER0_Y +(i*.2)); - glTexCoord2d(1,0);glVertex2f(x ,LAYER0_Y +(i*.2)); - } - glEnd(); - } - glDisable(GL_TEXTURE_2D); + unsigned int i; + glBegin(GL_QUADS); + for(i=0;i<lineCount;i++){ + glColor3ub(0,255,0); + glVertex2f((HLINE*i)-1 ,line[i].start); + glVertex2f((HLINE*i)-1+HLINE,line[i].start); + glVertex2f((HLINE*i)-1+HLINE,line[i].start-0.02); + glVertex2f((HLINE*i)-1 ,line[i].start-0.02); + glColor3ub(150,100,50); + glVertex2f((HLINE*i)-1 ,line[i].start-0.02); + glVertex2f((HLINE*i)-1+HLINE,line[i].start-0.02); + glVertex2f((HLINE*i)-1+HLINE,-1); + glVertex2f((HLINE*i)-1 ,-1); + } + glEnd(); } diff --git a/src/main.cpp b/src/main.cpp index 61920e7..cb93ff4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ #include <common.h> +#include <ctime> SDL_Window *window = NULL; SDL_Surface *renderSurface = NULL; @@ -39,7 +40,7 @@ int main(int argc,char **argv){ std::cout << "SDL was not able to initialize! Error: " << SDL_GetError() << std::endl; return -1; } - + srand(time(NULL)); glClearColor(.3,.5,.8,0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); @@ -48,10 +49,7 @@ int main(int argc,char **argv){ **** GAMELOOP **** **************************/ - World *w=new World("res/dirt.jpg", - "res/dirt.jpg", - "res/dirt.jpg", - "res/dirt.jpg"); + World *w=new World(2); while(gameRunning){ ui.handleEvents(); // Handle events |