diff --git a/app/build/intermediates/assets/debug/levelpacks/Grasslands.xml b/app/build/intermediates/assets/debug/levelpacks/Grasslands.xml
index 2d8eccb..28d5836 100644
--- a/app/build/intermediates/assets/debug/levelpacks/Grasslands.xml
+++ b/app/build/intermediates/assets/debug/levelpacks/Grasslands.xml
@@ -29,7 +29,6 @@
-
@@ -247,7 +246,6 @@
-
diff --git a/app/build/intermediates/assets/debug/shader/terrainVertexShader.glsl b/app/build/intermediates/assets/debug/shader/terrainVertexShader.glsl
deleted file mode 100644
index 3c39444..0000000
--- a/app/build/intermediates/assets/debug/shader/terrainVertexShader.glsl
+++ /dev/null
@@ -1,18 +0,0 @@
-uniform mat4 mvpMatrix;
-uniform mat4 transformationMatrix;
-
-attribute vec4 position;
-attribute vec2 texCoords;
-
-varying vec2 pass_TexCoords;
-
-void main() {
-
- vec4 transformatedPosition = transformationMatrix * position;
- gl_Position = mvpMatrix * transformatedPosition;
-
- pass_TexCoords = (transformationMatrix * vec4(texCoords, 0.0, 0.0)).xy;
- pass_TexCoords *= vec2(3.0, 3.0);
- pass_TexCoords.y = clamp(pass_TexCoords.y, 0.0, 1.0) + 0.01;
-
-}
\ No newline at end of file
diff --git a/app/build/intermediates/incremental/mergeDebugAssets/merger.xml b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
index 231eed2..a01fd28 100644
--- a/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
+++ b/app/build/intermediates/incremental/mergeDebugAssets/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/assets/levelpacks/Grasslands.xml b/app/src/main/assets/levelpacks/Grasslands.xml
index 2d8eccb..28d5836 100644
--- a/app/src/main/assets/levelpacks/Grasslands.xml
+++ b/app/src/main/assets/levelpacks/Grasslands.xml
@@ -29,7 +29,6 @@
-
@@ -247,7 +246,6 @@
-
diff --git a/app/src/main/assets/levelpacks/Icy Mountains.xml b/app/src/main/assets/levelpacks/Icy Mountains.xml
index 2d114e8..855aef0 100644
--- a/app/src/main/assets/levelpacks/Icy Mountains.xml
+++ b/app/src/main/assets/levelpacks/Icy Mountains.xml
@@ -7,12 +7,10 @@
-
-
+
-
@@ -167,7 +165,6 @@
-
@@ -435,5 +432,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/shader/terrainFragmentShader.glsl b/app/src/main/assets/shader/terrainFragmentShader.glsl
new file mode 100644
index 0000000..8685a32
--- /dev/null
+++ b/app/src/main/assets/shader/terrainFragmentShader.glsl
@@ -0,0 +1,46 @@
+precision mediump float;
+
+uniform sampler2D texture;
+uniform float gridColumnCount;
+uniform float isEndlessTileList;
+
+varying vec2 pass_TexCoords;
+
+const float texAtlasWidth = 3.0;
+
+float getAtlasIndex();
+vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex);
+
+void main() {
+
+ float atlasIndex = getAtlasIndex();
+ vec2 texCoordsInGrid = pass_TexCoords;
+ texCoordsInGrid.x *= gridColumnCount;
+ texCoordsInGrid.x = mod(texCoordsInGrid.x, 1.0);
+ vec2 texCoordsInAtlas = getTexCoordsInAtlas(texCoordsInGrid, atlasIndex);
+
+ gl_FragColor = texture2D(texture, texCoordsInAtlas);
+ gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a;
+}
+
+float getAtlasIndex(){
+
+ if(isEndlessTileList == 1.0)
+ return 1.0;
+
+ if(pass_TexCoords.x < 1.0 / gridColumnCount)
+ return 0.0;
+ if(pass_TexCoords.x > 1.0 - 1.0 / gridColumnCount)
+ return 2.0;
+ return 1.0;
+
+}
+
+vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex){
+
+ vec2 texAtlasCoords = vec2(0.0, texCoordsInGrid.y);
+ texAtlasCoords.x = texCoordsInGrid.x / texAtlasWidth;
+ texAtlasCoords.x += mod(atlasIndex, texAtlasWidth) / texAtlasWidth;
+ return texAtlasCoords;
+
+}
\ No newline at end of file
diff --git a/app/src/main/assets/shader/terrainVertexShader.glsl b/app/src/main/assets/shader/terrainVertexShader.glsl
deleted file mode 100644
index 3c39444..0000000
--- a/app/src/main/assets/shader/terrainVertexShader.glsl
+++ /dev/null
@@ -1,18 +0,0 @@
-uniform mat4 mvpMatrix;
-uniform mat4 transformationMatrix;
-
-attribute vec4 position;
-attribute vec2 texCoords;
-
-varying vec2 pass_TexCoords;
-
-void main() {
-
- vec4 transformatedPosition = transformationMatrix * position;
- gl_Position = mvpMatrix * transformatedPosition;
-
- pass_TexCoords = (transformationMatrix * vec4(texCoords, 0.0, 0.0)).xy;
- pass_TexCoords *= vec2(3.0, 3.0);
- pass_TexCoords.y = clamp(pass_TexCoords.y, 0.0, 1.0) + 0.01;
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java
index 8311d16..d237a5e 100644
--- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java
+++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java
@@ -11,6 +11,8 @@ import de.frajul.endlessroll.levels.TileData;
public class Tile extends Entity {
+ private int gridColumnCount;
+
public Tile(TileList.Type type, Texture texture, float edge, TileData data) {
this(type, texture, edge, data.getX(), data.getWidth());
}
@@ -27,6 +29,11 @@ public class Tile extends Entity {
super.position.y = edge + super.height / 2;
break;
}
+ gridColumnCount = (int) (width / height);
+ gridColumnCount = Math.max(gridColumnCount, 3);
}
+ public int getGridColumnCount() {
+ return gridColumnCount;
+ }
}
diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java
index ba47f49..ef4831a 100644
--- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java
+++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java
@@ -1,24 +1,30 @@
package de.frajul.endlessroll.entities.tileLists;
+import java.util.ArrayList;
+import java.util.List;
+
import de.frajul.endlessroll.data.SynchronizedArrayList;
import de.frajul.endlessroll.entities.textures.Texture;
import de.frajul.endlessroll.levels.TileData;
import de.frajul.endlessroll.levels.worlds.World;
-
-import java.util.ArrayList;
-import java.util.List;
+import de.frajul.endlessroll.main.GameLog;
@SuppressWarnings("serial")
public class TileList extends SynchronizedArrayList {
public enum Type {
- TERRAIN, CEILING;
+ TERRAIN,
+ CEILING;
public float calculateTileHeightFromEdge(float edge) {
switch (this) {
case TERRAIN:
+ if (edge <= -0.6f)
+ return 0.4f;
return 1 + edge;
case CEILING:
+ if (edge >= 0.6f)
+ return 0.4f;
return 1 - edge;
}
return 0;
@@ -42,13 +48,24 @@ public class TileList extends SynchronizedArrayList {
this.texture = world.getCeilingTexture();
this.endless = false;
super.clear();
- for (TileData data : tileData)
+ float lastRightEdge = -10;
+ for (TileData data : tileData) {
+ float leftEdge = data.getX() - data.getWidth() / 2;
+ float rightEdge = data.getX() + data.getWidth() / 2;
+ if (Math.abs(lastRightEdge - leftEdge) < 0.1f)
+ GameLog.i("!!! Too small gap found !!! " + toMeters(lastRightEdge) + "m; " + lastRightEdge + "-"+leftEdge+"; iRight="+tileData.indexOf(data));
+ lastRightEdge = rightEdge;
super.add(new Tile(type, texture, edge, data));
+ }
this.edge = edge;
if (edge >= 1 || edge <= -1)
super.clear();
}
+ private float toMeters(float value) {
+ return ((int) (value * 20)) / 10f;
+ }
+
public void createEndless(World world, float edge) {
loadData(world, edge, new ArrayList());
super.add(createEndlessTile(0));
@@ -76,4 +93,7 @@ public class TileList extends SynchronizedArrayList {
return edge;
}
+ public boolean isEndless() {
+ return endless;
+ }
}
diff --git a/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java b/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java
index cd223a0..81a887c 100644
--- a/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java
+++ b/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java
@@ -12,8 +12,8 @@ import de.frajul.endlessroll.entities.textures.TexturePack;
public enum World {
- GRASSLANDS("Grasslands", R.drawable.world_previews_grasslands, R.drawable.backgrounds_game_grass, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass),
- ICY_MOUNTAINS("Icy Mountains", R.drawable.world_previews_icymountains, R.drawable.backgrounds_game_snow, R.drawable.terrain_t_ice, R.drawable.terrain_c_ice, R.drawable.obstacles_snow);
+ GRASSLANDS(R.drawable.world_previews_grasslands, R.drawable.backgrounds_game_grass, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass),
+ ICY_MOUNTAINS(R.drawable.world_previews_icymountains, R.drawable.backgrounds_game_snow, R.drawable.terrain_t_ice, R.drawable.terrain_c_ice, R.drawable.obstacles_snow);
private String name;
@DrawableRes
@@ -32,8 +32,7 @@ public enum World {
private Texture ceiling;
private Texture obstacle;
- World(String name, @DrawableRes int previewId, @DrawableRes int backgroundId, @DrawableRes int terrainId, @DrawableRes int ceilingId, @DrawableRes int obstacleId) {
- this.name = name;
+ World(@DrawableRes int previewId, @DrawableRes int backgroundId, @DrawableRes int terrainId, @DrawableRes int ceilingId, @DrawableRes int obstacleId) {
this.previewId = previewId;
this.backgroundId = backgroundId;
this.terrainId = terrainId;
@@ -53,10 +52,6 @@ public enum World {
obstacle = texturePack.loadAtlas(obstacleId, 8, 8);
}
- public String getName() {
- return name;
- }
-
public int getPreviewId() {
return previewId;
}
diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java b/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java
index 97f150a..56220b1 100644
--- a/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java
+++ b/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java
@@ -7,6 +7,7 @@ import de.frajul.endlessroll.entities.particles.Firework;
import de.frajul.endlessroll.entities.particles.ParticleEffect;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
+import de.frajul.endlessroll.entities.shapes.PlayerShape;
import de.frajul.endlessroll.entities.textures.TexturePack;
import de.frajul.endlessroll.levels.ObstacleData;
import de.frajul.endlessroll.levels.worlds.World;
@@ -16,9 +17,10 @@ public class TestScreenScene extends Scene {
public TestScreenScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) {
super(gameActivity, texturePack, particleSystem);
- terrain.createEndless(World.ICY_MOUNTAINS, -1.0f);
+ terrain.createEndless(World.GRASSLANDS, 0.6f);
background.changeTexture(World.ICY_MOUNTAINS.getBackgroundTexture());
- new ParticleSource(new Vector(0, 0.0f), particleSystem.colorChange).start();
- }
+ player.init(PlayerShape.BALL, 0.6f, 0.5f, 0.5f, particleSystem);
+ uncategorizedEntities.add(player);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java
index 8c1555e..1a75038 100644
--- a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java
+++ b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java
@@ -189,11 +189,13 @@ public class GameRenderer implements GLSurfaceView.Renderer {
private void renderTileList(GL10 gl, TileList tileList, Scene scene) {
terrainShader.start();
terrainShader.loadMVPMatrix(matrixCreator, scene.getCamera());
+ terrainShader.loadIsEndlessTileList(tileList.isEndless());
synchronized (tileList) {
for (Tile tile : tileList) {
gl.glActiveTexture(GL10.GL_TEXTURE0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, tile.getTexture().getId());
terrainShader.loadTransformationMatrix(matrixCreator, tile);
+ terrainShader.loadGridColumnCount(tile.getGridColumnCount());
quad.draw();
}
}
diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java
index 07c527e..f56b001 100644
--- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java
+++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java
@@ -14,15 +14,27 @@ public class TerrainShader extends ShaderProgram {
private int location_mvpMatrix;
private int location_transformationMatrix;
+ private int location_gridColumnCount;
+ private int location_isEndlessTileList;
public TerrainShader(Context context) throws Exception {
- super(context, "shader/terrainVertexShader.glsl", "shader/simpleFragmentShader.glsl");
+ super(context, "shader/entityVertexShader.glsl", "shader/terrainFragmentShader.glsl");
}
@Override
protected void loadUniformLocations() {
location_mvpMatrix = super.getUniformLocation("mvpMatrix");
location_transformationMatrix = super.getUniformLocation("transformationMatrix");
+ location_gridColumnCount = super.getUniformLocation("gridColumnCount");
+ location_isEndlessTileList = super.getUniformLocation("isEndlessTileList");
+ }
+
+ public void loadGridColumnCount(int gridColumnCount) {
+ GLES20.glUniform1f(location_gridColumnCount, gridColumnCount);
+ }
+
+ public void loadIsEndlessTileList(boolean endless) {
+ GLES20.glUniform1f(location_isEndlessTileList, endless ? 1f : 0f);
}
public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) {
diff --git a/app/src/main/res/drawable/terrain_c_grass.png b/app/src/main/res/drawable/terrain_c_grass.png
index e24dc20..cb2c936 100644
Binary files a/app/src/main/res/drawable/terrain_c_grass.png and b/app/src/main/res/drawable/terrain_c_grass.png differ
diff --git a/app/src/main/res/drawable/terrain_c_ice.png b/app/src/main/res/drawable/terrain_c_ice.png
index 5e4c04d..f27657c 100644
Binary files a/app/src/main/res/drawable/terrain_c_ice.png and b/app/src/main/res/drawable/terrain_c_ice.png differ
diff --git a/app/src/main/res/drawable/terrain_t_grass.png b/app/src/main/res/drawable/terrain_t_grass.png
index 069be8f..d2f462f 100644
Binary files a/app/src/main/res/drawable/terrain_t_grass.png and b/app/src/main/res/drawable/terrain_t_grass.png differ
diff --git a/app/src/main/res/drawable/terrain_t_ice.png b/app/src/main/res/drawable/terrain_t_ice.png
index 5955f61..334981d 100644
Binary files a/app/src/main/res/drawable/terrain_t_ice.png and b/app/src/main/res/drawable/terrain_t_ice.png differ