aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.cpp4
-rw-r--r--src/world.cpp44
2 files changed, 46 insertions, 2 deletions
diff --git a/main.cpp b/main.cpp
index 1076903..4d14190 100644
--- a/main.cpp
+++ b/main.cpp
@@ -320,9 +320,11 @@ void render() {
if (ui::debug) {
auto pos = game::engine.getSystem<PlayerSystem>()->getPosition();
ui::putText(offset.x-SCREEN_WIDTH/2, (offset.y+SCREEN_HEIGHT/2)-ui::fontSize,
- "loc: (%+.2f, %+.2f)\nticks: %u\nxml: %s",
+ "loc: (%+.2f, %+.2f)\noffset: (%+.2f, %+.2f)\nticks: %u\nxml: %s",
pos.x,
pos.y,
+ offset.x,
+ offset.y,
game::time::getTickCount(),
game::engine.getSystem<WorldSystem>()->getXMLFile().c_str()
);
diff --git a/src/world.cpp b/src/world.cpp
index 02db9cf..62e4f69 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -955,8 +955,50 @@ void WorldSystem::render(void)
glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0, &grasst[0]);
glDrawArrays(GL_TRIANGLES, 0 , c.size());
- Render::worldShader.disable();
+ // the starting pixel of the world
+ float s = -(static_cast<float>(SCREEN_WIDTH)/2.0f);
+ // the ending pixel of the world
+ float e = (static_cast<float>(SCREEN_WIDTH)/2.0f);
+
+ if (offset.x + world.startX > s) {
+
+ glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0,0,0)));
+ glUniform1f(Render::worldShader.uniform[WU_light_impact], 0.0f);
+
+ GLfloat blackBarLeft[] = {s, 0.0f, -3.0f, 0.0f, 0.0f,
+ world.startX, 0.0f, -3.0f, 1.0f, 0.0f,
+ world.startX, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f,
+
+ world.startX, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f,
+ s, static_cast<float>(SCREEN_HEIGHT), -3.0f, 0.0f, 1.0f,
+ s, 0.0f, -3.0f, 0.0f, 0.0f};
+
+ glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarLeft[0]);
+ glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarLeft[3]);
+ glDrawArrays(GL_TRIANGLES, 0 , 6);
+ }
+
+ if (offset.x - world.startX < e) {
+
+ glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0,0,0)));
+ glUniform1f(Render::worldShader.uniform[WU_light_impact], 0.0f);
+
+ GLfloat blackBarRight[] = {grassc[grassc.size()-3], 0.0f, -3.0f, 0.0f, 0.0f,
+ e, 0.0f, -3.0f, 1.0f, 0.0f,
+ e, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f,
+
+ e, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f,
+ grassc[grassc.size()-3], static_cast<float>(SCREEN_HEIGHT), -3.0f, 0.0f, 1.0f,
+ grassc[grassc.size()-3], 0.0f, -3.0f, 0.0f, 0.0f};
+
+ glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarRight[0]);
+ glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarRight[3]);
+ glDrawArrays(GL_TRIANGLES, 0 , 6);
+ }
+
+ Render::worldShader.disable();
Render::worldShader.unuse();
+
} else {
Render::useShader(&Render::worldShader);
Render::worldShader.use();