#include #include World::World(void){ line=NULL; lineCount=entCount=0; toLeft=toRight=behind=infront=NULL; } World::World(const float width,World *l,World *r){ unsigned int i; double f; lineCount=width/HLINE+11; if((line=(struct line_t *)calloc(lineCount,sizeof(struct line_t)))==NULL){ std::cout<<"Failed to allocate memory!"<toRight){ std::cout<<"There's already a world to the left!"<toRight=this; } } if(toRight){ if(toRight->toLeft){ std::cout<<"There's already a world to the right!"<toLeft=this; } } line[0].start=(grand()%100)/100.0f-0.8f; // lazy if(line[0].start>-0.5f)line[0].start=-0.7f; for(i=10;ibehind){ drawOffsetX+=(cur->getWidth()-cur->behind->getWidth())/2; drawOffsetY+=.3; //hline/=2; cur=cur->behind; goto LOOP; //behind->draw(); } LOOP2: glBegin(GL_QUADS); for(i=0;ilineCount-10;i++){ x=(hline*i)-1+drawOffsetX; y=cur->line[i].start+drawOffsetY; glColor3ub(0,200,0); glVertex2f(x ,y); glVertex2f(x+hline,y); y-=hline*2; glVertex2f(x+hline,y); glVertex2f(x ,y); glColor3ub(150,100,50); glVertex2f(x ,y); glVertex2f(x+hline,y); glVertex2f(x+hline,-1); glVertex2f(x ,-1); } glEnd(); if(root!=cur){ cur=cur->infront; drawOffsetX-=(cur->getWidth()-cur->behind->getWidth())/2; drawOffsetY-=.3; //hline*=2; goto LOOP2; }else{ drawOffsetX=drawOffsetY=0; for(i=0;idraw(); } } } void World::detect(vec2 *v,const float width){ unsigned int i; // hey // oh hai for(i=0;iyx>(HLINE*i)-1&&v->x<(HLINE*i)-1+HLINE){ v->y=line[i].start; return; }else if(v->x+width>(HLINE*i)-1&&v->x+width<(HLINE*i)-1+HLINE){ v->y=line[i].start; return; } }else if(v->y>line[i].start+HLINE/4){ v->y-=HLINE/8; } } } float World::getWidth(void){ return (lineCount-11)*HLINE; } void World::saveToFile(FILE *f,World *parent){ fwrite(&lineCount,sizeof(unsigned int) ,1 ,f); fwrite(&line ,sizeof(struct line_t),lineCount,f); if(toLeft!=NULL&&toLeft!=parent->toLeft){ toLeft->saveToFile(f,toLeft); } if(toRight!=NULL&&toRight!=parent->toRight){ toRight->saveToFile(f,toRight); } } void World::loadFromFile(FILE *f,World *parent){ fread(&lineCount,sizeof(unsigned int) ,1 ,f); line=(struct line_t *)malloc(lineCount*sizeof(struct line_t *)); fread(&line ,sizeof(struct line_t),lineCount,f); if(toLeft!=NULL&&toLeft!=parent->toLeft){ toLeft->loadFromFile(f,toLeft); } std::cout<toRight<toRight){ puts("A"); toRight->loadFromFile(f,toRight); } } void World::addLayer(const float width){ if(behind){ behind->addLayer(width); }else{ behind=new World(width,NULL,NULL); behind->infront=this; } } void World::addEntity(void *e){ entity[entCount++]=e; }