diff options
Diffstat (limited to 'src/world.cpp')
-rw-r--r-- | src/world.cpp | 101 |
1 files changed, 71 insertions, 30 deletions
diff --git a/src/world.cpp b/src/world.cpp index 1a7322f..ca070a8 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -529,7 +529,13 @@ draw( Player *p ) glActiveTexture( GL_TEXTURE0 ); bgTex->bindNext(); - std::unique_ptr<GLfloat[]> pointArrayBuf = std::make_unique<GLfloat[]> (2 * (light.size() + p->light)); + for(auto &l : light){ + if(l.belongsTo){ + l.loc.x = l.following->loc.x + SCREEN_WIDTH/2; + } + } + + std::unique_ptr<GLfloat[]> pointArrayBuf = std::make_unique<GLfloat[]> (2 * (light.size())); auto pointArray = pointArrayBuf.get(); for ( i = 0; i < (int)light.size(); i++ ) { @@ -544,16 +550,11 @@ draw( Player *p ) glUniform1i( glGetUniformLocation( shaderProgram, "sampler"), 0 ); glUniform1f( glGetUniformLocation( shaderProgram, "amb" ), shadeAmbient ); - if ( p->light ) { - pointArray[2 * (light.size() + 1) ] = (float)( p->loc.x + SCREEN_WIDTH / 2 ); - pointArray[2 * (light.size() + 1) + 1] = (float)( p->loc.y ); - } - - if ( light.size() + (int)p->light == 0) + if ( light.size() == 0) glUniform1i( glGetUniformLocation( shaderProgram, "numLight"), 0); else { - glUniform1i ( glGetUniformLocation( shaderProgram, "numLight" ), light.size() + (int)p->light ); - glUniform2fv( glGetUniformLocation( shaderProgram, "lightLocation"), light.size() + (int)p->light, pointArray ); + glUniform1i ( glGetUniformLocation( shaderProgram, "numLight" ), light.size()); + glUniform2fv( glGetUniformLocation( shaderProgram, "lightLocation"), light.size(), pointArray ); glUniform3f ( glGetUniformLocation( shaderProgram, "lightColor" ), 1.0f, 1.0f, 1.0f ); } @@ -1219,36 +1220,70 @@ void IndoorWorld::draw(Player *p){ * Draw the background. */ - glEnable(GL_TEXTURE_2D); + //glEnable(GL_TEXTURE_2D); - std::unique_ptr<GLfloat[]> pointArrayBuf = std::make_unique<GLfloat[]> (2 * (light.size() + p->light)); - auto pointArray = pointArrayBuf.get(); + std::cout << "Lights and shit" << std::endl; + for(auto &l : light){ + if(l.belongsTo){ + std::cout << "Is following" << std::endl; + l.loc.x = l.following->loc.x + SCREEN_WIDTH/2; + l.loc.y = l.following->loc.y; + } + if(l.flame){ + l.fireFlicker = .9+((rand()%2)/10.0f); + l.fireLoc.x = l.loc.x + (rand()%2-1)*3; + l.fireLoc.y = l.loc.y + (rand()%2-1)*3; + + std::cout << l.fireLoc.x << "," << l.fireLoc.y << std::endl; + std::cout << l.loc.x << "," << l.loc.y << std::endl << std::endl; + }else{ + l.fireFlicker = 1.0f; + } + } - for ( i = 0; i < light.size(); i++ ) { - pointArray[2 * i ] = light[i].loc.x - offset.x; - pointArray[2 * i + 1] = light[i].loc.y; + std::cout << "Making light arrays" << std::endl; + std::unique_ptr<GLfloat[]> pointArrayBuf = std::make_unique<GLfloat[]> (2 * (light.size())); + auto pointArray = pointArrayBuf.get(); + GLfloat flameArray[64]; + + std::cout << "Setting array locations" << std::endl; + for (i = 0; i < light.size(); i++) { + if(light[i].flame){ + pointArray[2 * i ] = light[i].fireLoc.x - offset.x; + pointArray[2 * i + 1] = light[i].fireLoc.y; + }else{ + pointArray[2 * i ] = light[i].loc.x - offset.x; + pointArray[2 * i + 1] = light[i].loc.y; + } } - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + std::cout << "Flame array" << std::endl; + for(i = 0; i < light.size(); i++){ + flameArray[i] = light[i].fireFlicker; + } - glUseProgram( shaderProgram ); - glUniform1i( glGetUniformLocation( shaderProgram, "sampler"), 0 ); - glUniform1f( glGetUniformLocation( shaderProgram, "amb" ), 0.3f ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - if ( p->light ) { - pointArray[2 * (light.size() + 1) ] = (float)( p->loc.x + SCREEN_WIDTH / 2 ); - pointArray[2 * (light.size() + 1) + 1] = (float)( p->loc.y ); - } + glUseProgram( shaderProgram ); + glUniform1i(glGetUniformLocation(shaderProgram, "sampler"), 0); + glUniform1f(glGetUniformLocation(shaderProgram, "amb" ), 0.02f + light.size()/50.0f); + glUniform1i(glGetUniformLocation(shaderProgram, "fire" ), 1); - if ( light.size() + (int)p->light == 0) - glUniform1i( glGetUniformLocation( shaderProgram, "numLight"), 0); + std::cout << "Uniform sending" << std::endl; + if ( light.size() == 0) + glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), 0); else { - glUniform1i ( glGetUniformLocation( shaderProgram, "numLight" ), light.size() + (int)p->light ); - glUniform2fv( glGetUniformLocation( shaderProgram, "lightLocation"), light.size() + (int)p->light, pointArray ); - glUniform3f ( glGetUniformLocation( shaderProgram, "lightColor" ), 1.0f, 1.0f, 1.0f ); + glUniform1i (glGetUniformLocation(shaderProgram, "numLight" ), light.size()); + glUniform2fv(glGetUniformLocation(shaderProgram, "lightLocation"), light.size(), pointArray); + glUniform3f (glGetUniformLocation(shaderProgram, "lightColor" ), 1.0f, 1.0f, 1.0f); + glUniform1fv(glGetUniformLocation(shaderProgram, "fireFlicker"), light.size(), flameArray); } + //delete[] flameArray; + + std::cout << "Done shading" << std::endl; + bgTex->bind(0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //for the s direction glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //for the t direction @@ -1262,7 +1297,9 @@ void IndoorWorld::draw(Player *p){ glEnd(); glUseProgram(0); - glDisable(GL_TEXTURE_2D); + //glDisable(GL_TEXTURE_2D); + + std::cout << "Faggot" << std::endl; /* * Calculate the starting and ending points to draw the ground from. @@ -1297,6 +1334,8 @@ void IndoorWorld::draw(Player *p){ glEnd(); glUseProgram(0); + std::cout << "Queer" << std::endl; + /* * Draw all entities. */ @@ -1308,6 +1347,8 @@ void IndoorWorld::draw(Player *p){ e->draw(); p->draw(); + + std::cout << "Cranmore Tubing park" << std::endl; } Arena::Arena(World *leave,Player *p,Mob *m){ |