aboutsummaryrefslogtreecommitdiffstats
path: root/src/world.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp101
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){