diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2015-09-15 21:59:56 -0400 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2015-09-15 21:59:56 -0400 |
commit | ba4b5bd76ae9b1fa3e3c862d8672e35b02e1664c (patch) | |
tree | 16c0772118602287e6687107a92fec52183e13da /src | |
parent | 84cb048b978d235efd1dcc4750325ff751d82c7d (diff) |
mouse
Diffstat (limited to 'src')
-rw-r--r-- | src/UIClass.cpp | 90 | ||||
-rw-r--r-- | src/main.cpp | 121 |
2 files changed, 121 insertions, 90 deletions
diff --git a/src/UIClass.cpp b/src/UIClass.cpp index 68654c7..0497575 100644 --- a/src/UIClass.cpp +++ b/src/UIClass.cpp @@ -30,36 +30,53 @@ void UIClass::putString(const float x,const float y,const char *s){ float xo=x,yo=y,w,h; char *buf; do{ - FT_Load_Char(ftf,s[i],FT_LOAD_RENDER); - glGenTextures(1,&ftex); - glBindTexture(GL_TEXTURE_2D,ftex); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - buf=(char *)malloc(ftf->glyph->bitmap.width*ftf->glyph->bitmap.rows*4); - for(j=0;j<ftf->glyph->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; + if(s[i]=='\n'){ + xo=x; + yo-=fontSize*.0022; + }else{ + FT_Load_Char(ftf,s[i],FT_LOAD_RENDER); + glGenTextures(1,&ftex); + glBindTexture(GL_TEXTURE_2D,ftex); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + buf=(char *)malloc(ftf->glyph->bitmap.width*ftf->glyph->bitmap.rows*4); + for(j=0;j<ftf->glyph->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); } - 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); - 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); - xo+=w+(fontSize*.0001); - free(buf); }while(s[i++]); } void UIClass::putText(const float x,const float y,const char *str,...){ @@ -72,6 +89,15 @@ void UIClass::putText(const float x,const float y,const char *str,...){ putString(x,y,buf); free(buf); } +void UIClass::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; @@ -79,6 +105,10 @@ void UIClass::handleEvents(){ 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: @@ -93,7 +123,7 @@ void UIClass::handleEvents(){ if(!space&&player.vel.y<=0){ space=true; player.loc.y += HLINE*1.2; - player.vel.y += .004; + player.vel.y += .003; } } if(e.key.keysym.sym == SDLK_i){ diff --git a/src/main.cpp b/src/main.cpp index e07e258..3ae4206 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,7 +32,7 @@ void render(); unsigned int millis(void){ std::chrono::system_clock::time_point now=std::chrono::system_clock::now(); - return std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count(); + return std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count(); } int main(int argc,char **argv){ @@ -108,13 +108,7 @@ int main(int argc,char **argv){ currentTime = millis(); deltaTime = currentTime - prevTime; - if(prevTime + MSEC_PER_TICK >= millis()){ //the logic loop to run at a dedicated time - logic(); - prevTime = millis(); - } - player.loc.x += (player.vel.x * player.speed) * deltaTime; //update the player's x based on - //printf("%lf * %u\n",player.vel.y,deltaTime); player.loc.y += player.vel.y * deltaTime; for(int i = 0; i < eAmt(entnpc); i++){ if(npc[i].alive == true){ @@ -122,10 +116,12 @@ int main(int argc,char **argv){ npc[i].loc.x += npc[i].vel.x * deltaTime; } } - - SDL_GetMouseState((int*)(&ui.mousex), (int*)(&ui.mousey)); - ui.mousey = SCREEN_HEIGHT - ui.mousey; render(); + + if(prevTime + MSEC_PER_TICK >= millis()){ //the logic loop to run at a dedicated time + logic(); + prevTime = millis(); + } } /************************** @@ -139,59 +135,64 @@ int main(int argc,char **argv){ } void render(){ - //a matrix is a blank canvas for the computer to draw on, the matrices are stored in a "stack" - //GL_PROJECTION has 2 matrices - //GL_MODELVIEW has 32 matrices - glMatrixMode(GL_PROJECTION); //set the matrix mode as projection so we can set the ortho size and the camera settings later on - glPushMatrix(); //push the matrix to the top of the matrix stack - glLoadIdentity(); //replace the entire matrix stack with the updated GL_PROJECTION mode - //set the the size of the screen - if(player.loc.x-1<-1){ - glOrtho(-1,1, -1,1, -1,1); - }else if(player.loc.x+1>-1+currentWorld->getWidth()){ - glOrtho(-3+currentWorld->getWidth(),-1+currentWorld->getWidth(),-1,1,-1,1); - }else{ - glOrtho(-1 + player.loc.x, 1 + player.loc.x , -1, 1, -1,1); - } - glMatrixMode(GL_MODELVIEW); //set the matrix to modelview so we can draw objects - glPushMatrix(); //push the matrix to the top of the matrix stack - glLoadIdentity(); //replace the entire matrix stack with the updated GL_MODELVIEW mode - glPushMatrix(); //basically here we put a blank canvas (new matrix) on the screen to draw on - glClear(GL_COLOR_BUFFER_BIT); //clear the matrix on the top of the stack - - /************************** - **** RENDER STUFF HERE **** - **************************/ - currentWorld->draw(); // layers dont scale x correctly... - glColor3ub(120,30,30); //render the player - glRectf(player.loc.x, player.loc.y, player.loc.x + player.width, player.loc.y + player.height); + static float mx,my; + static float d,fps; + static unsigned int div=0; + //a matrix is a blank canvas for the computer to draw on, the matrices are stored in a "stack" + //GL_PROJECTION has 2 matrices + //GL_MODELVIEW has 32 matrices + glMatrixMode(GL_PROJECTION); //set the matrix mode as projection so we can set the ortho size and the camera settings later on + glPushMatrix(); //push the matrix to the top of the matrix stack + glLoadIdentity(); //replace the entire matrix stack with the updated GL_PROJECTION mode + //set the the size of the screen + if(player.loc.x-1<-1){ + glOrtho(-1,1, -1,1, -1,1); + }else if(player.loc.x+1>-1+currentWorld->getWidth()){ + glOrtho(-3+currentWorld->getWidth(),-1+currentWorld->getWidth(),-1,1,-1,1); + }else{ + glOrtho(-1 + player.loc.x, 1 + player.loc.x , -1, 1, -1,1); + } + glMatrixMode(GL_MODELVIEW); //set the matrix to modelview so we can draw objects + glPushMatrix(); //push the matrix to the top of the matrix stack + glLoadIdentity(); //replace the entire matrix stack with the updated GL_MODELVIEW mode + glPushMatrix(); //basically here we put a blank canvas (new matrix) on the screen to draw on + glClear(GL_COLOR_BUFFER_BIT); //clear the matrix on the top of the stack - - glColor3ub(255,0,0); - glRectf(build.loc.x, build.loc.y, build.loc.x + build.width, build.loc.y + build.height); - ///BWAHHHHHHHHHHHH - - static float d,fps; - static unsigned int div=0; - - ui.setFontSize(16); - if(++div==20){ - div=0; - d=deltaTime; - fps=(1000/d); - } - ui.putText(-.98 + player.loc.x, .94, "FPS: %1.0f",fps); - 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); - - /************************** - **** CLOSE THE LOOP **** - **************************/ + /************************** + **** RENDER STUFF HERE **** + **************************/ + currentWorld->draw(); // layers dont scale x correctly... + glColor3ub(120,30,30); //render the player + glRectf(player.loc.x, player.loc.y, player.loc.x + player.width, player.loc.y + player.height); + + + glColor3ub(255,0,0); + glRectf(build.loc.x, build.loc.y, build.loc.x + build.width, build.loc.y + build.height); + ///BWAHHHHHHHHHHHH + + 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, .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); + + /************************** + **** CLOSE THE LOOP **** + **************************/ - //DRAW MOUSE HERE!!!!!W + //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; + if(player.loc.x-1>-1)mx+=player.loc.x; + glRectf(mx,my,mx+HLINE*4,my+HLINE*4); - glPopMatrix(); //take the matrix(s) off the stack to pass them to the renderer - SDL_GL_SwapWindow(window); //give the stack to SDL to render it + glPopMatrix(); //take the matrix(s) off the stack to pass them to the renderer + SDL_GL_SwapWindow(window); //give the stack to SDL to render it } void logic(){ |