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