aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Belle-Isle <abelleisle@roadrunner.com>2015-09-16 11:55:17 -0400
committerAndy Belle-Isle <abelleisle@roadrunner.com>2015-09-16 11:55:17 -0400
commit76ae330e93cfdc09826beee41970772cbd0486ea (patch)
tree575136faa33e36f897f95c824df7a63993e802e9
parent82d5e77a3fa4f3f9cc3145969d99ba8326af9892 (diff)
parentd034b1e36b49336b9a927aee395930e446110de2 (diff)
hi
-rw-r--r--Makefile2
-rw-r--r--include/UIClass.h8
-rw-r--r--src/UIClass.cpp280
-rw-r--r--src/World.cpp9
-rw-r--r--src/entities.cpp3
-rw-r--r--src/main.cpp24
6 files changed, 173 insertions, 153 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 9bf301c..867044e 100644
--- a/include/UIClass.h
+++ b/include/UIClass.h
@@ -5,18 +5,14 @@
#include <cstdarg>
#include <cstdio>
-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;
- bool debug = false;
};
#endif // UICLASS_H
diff --git a/src/UIClass.cpp b/src/UIClass.cpp
index 0ee56ca..94aa09c 100644
--- a/src/UIClass.cpp
+++ b/src/UIClass.cpp
@@ -9,154 +9,166 @@ 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."<<std::endl;
- abort();
- }
- if(FT_New_Face(ftl,ttf,0,&ftf)){
- std::cout<<"Error! Couldn't open "<<ttf<<"."<<std::endl;
- abort();
- }
+namespace ui {
+ int mousex, mousey;
+ bool debug = false;
-}
-void UIClass::setFontSize(unsigned int fs){
- fontSize=fs;
- FT_Set_Pixel_Sizes(ftf,0,fontSize);
-}
-void UIClass::putString(const float x,const float y,const char *s){
- unsigned int i=0,j;
- float xo=x,yo=y,w,h;
- char *buf;
- do{
- 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);
+ void init(const char *ttf){
+ if(FT_Init_FreeType(&ftl)){
+ std::cout<<"Error! Couldn't initialize freetype."<<std::endl;
+ abort();
}
- }while(s[i++]);
-}
-void UIClass::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 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);
-}
+ if(FT_New_Face(ftl,ttf,0,&ftf)){
+ std::cout<<"Error! Couldn't open "<<ttf<<"."<<std::endl;
+ abort();
+ }
+ }
+ void setFontSize(unsigned int fs){
+ fontSize=fs;
+ FT_Set_Pixel_Sizes(ftf,0,fontSize);
+ }
+ void putString(const float x,const float y,const char *s){
+ unsigned int i=0,j;
+ float xo=x,yo=y,w,h;
+ char *buf;
+ do{
+ if(s[i]=='\n'){
+ xo=x;
+ yo-=fontSize*.0022;
+ }else{
+ if(FT_Load_Char(ftf,s[i],FT_LOAD_RENDER)){
+ std::cout<<"Error! Invalid character."<<std::endl;
+ return;
+ }
+ glActiveTexture(GL_TEXTURE0);
+ 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);
+ 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.x<thing-1+currentWorld->behind->getWidth()){
- player.loc.x-=thing;
+ 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->behind;
+ currentWorld=currentWorld->infront;
}
}
- }
- 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;
+ 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.x<thing-1+currentWorld->behind->getWidth()){
+ player.loc.x-=thing;
+ memset(&player.vel,0,sizeof(vec2));
+ currentWorld=currentWorld->behind;
+ }
+ }
}
}
if(e.key.keysym.sym == SDLK_F3){
debug = !debug;
}
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;
- }
+ 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 4237d42..49bdf0d 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -24,7 +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**));
+ 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!"<<std::endl;
@@ -101,7 +101,8 @@ LOOP2: // Should be in furthest back layer once this is first rea
}else{
drawOffsetX=drawOffsetY=0; // Reset for next draw() call
for(i=0;i<entCount;i++){ // Draw any bound entities
- ((Entity **)entity)[i]->draw();
+ if(entity[i])
+ ((Entity **)entity)[i]->draw();
}
}
}
@@ -135,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 ee909d8..7275af1 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 cad8fc9..3b525d5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -23,7 +23,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;
@@ -36,7 +35,7 @@ unsigned int millis(void){
return std::chrono::duration_cast<std::chrono::milliseconds>(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);
@@ -82,7 +81,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;
@@ -121,6 +120,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
@@ -179,14 +179,14 @@ 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, .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 ****
@@ -223,7 +223,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;
@@ -247,7 +248,7 @@ 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){
@@ -259,7 +260,16 @@ void logic(){
ui.putText(entnpc[i]->loc.x, entnpc[i]->loc.y - HLINE * 3, "HEY", NULL);
}
}
+
+ /*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]<<" "<<i<<" "<<entnpc<<" "<<eAmt(entnpc)<<std::endl;
+ entnpc[i]->wander(30, &entnpc[i]->vel);
+
}
}
+ */
+
tickCount++;
}