diff --git a/.gitignore b/.gitignore index 556b32b..367f50f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .gradle -/app/*.apk +*.apk +output.json /local.properties /.idea/workspace.xml /.idea/libraries diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index a420bfc..493155b 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/src/main/assets/levelpacks/Underwater.xml b/app/src/main/assets/levelpacks/Underwater.xml new file mode 100644 index 0000000..7426de1 --- /dev/null +++ b/app/src/main/assets/levelpacks/Underwater.xml @@ -0,0 +1,999 @@ + + + + UNDERWATER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/shader/entityFragmentShader.glsl b/app/src/main/assets/shader/entityFragmentShader.glsl index 8aa6426..bddc330 100644 --- a/app/src/main/assets/shader/entityFragmentShader.glsl +++ b/app/src/main/assets/shader/entityFragmentShader.glsl @@ -4,6 +4,8 @@ uniform sampler2D texture; uniform float alpha; uniform vec2 texAtlasSize; uniform float texAtlasIndex; +uniform float hasColor; +uniform vec3 color; const float clampBorder = 0.005; @@ -20,7 +22,11 @@ void main() { vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex); gl_FragColor = texture2D(texture, texAtlasCoords); gl_FragColor.a = min(gl_FragColor.a, alpha); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + if(hasColor == 1.0){ + gl_FragColor.rgb = color; + } else { + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + } } diff --git a/app/src/main/assets/shader/guiFragmentShader.glsl b/app/src/main/assets/shader/guiFragmentShader.glsl index d2253e2..40e8b48 100644 --- a/app/src/main/assets/shader/guiFragmentShader.glsl +++ b/app/src/main/assets/shader/guiFragmentShader.glsl @@ -2,7 +2,7 @@ precision mediump float; uniform sampler2D texture; uniform float useCustomColor; -uniform vec4 color; +uniform vec3 color; uniform float alpha; uniform float roundValue; uniform float visibleAmount; @@ -16,11 +16,12 @@ void main() { if(isInRoundedRange() == 1.0 && isInVisiblePart() == 1.0){ if(useCustomColor == 1.0){ - gl_FragColor = color; + gl_FragColor.rgb = color; + gl_FragColor.a = alpha; } else { gl_FragColor = texture2D(texture, pass_TexCoords); + gl_FragColor.a = min(gl_FragColor.a, alpha); } - gl_FragColor.a = min(gl_FragColor.a, alpha); gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; } else { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Entity.java b/app/src/main/java/de/frajul/endlessroll/entities/Entity.java index 5670a4c..51385a6 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Entity.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Entity.java @@ -7,6 +7,7 @@ package de.frajul.endlessroll.entities; +import de.frajul.endlessroll.data.Color3f; import de.frajul.endlessroll.data.Vector; import de.frajul.endlessroll.entities.collision.geometry.Quad; import de.frajul.endlessroll.entities.textures.Texture; @@ -25,6 +26,7 @@ public class Entity extends Quad { private DestroyEffect destroyEffect; private Vector maxTexSize; private boolean visible = true; + private Color3f color = null; public Entity(Texture texture, Vector position, float width, float height) { super(position, width, height); @@ -125,4 +127,12 @@ public class Entity extends Quad { public boolean isVisible() { return visible; } + + public void setColor(Color3f color) { + this.color = color; + } + + public Color3f getColor() { + return color; + } } diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java index 6c15014..dfda139 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java @@ -15,7 +15,6 @@ import de.frajul.endlessroll.entities.textures.Texture; public class Gui extends Entity { protected float roundValue = 0; - protected Color4f color = null; public Gui(Texture texture, Vector position, float width, float height) { super(texture, position, width, height); @@ -29,12 +28,4 @@ public class Gui extends Entity { this.roundValue = roundValue; } - public Color4f getColor() { - return color; - } - - public void setColor(Color4f color) { - this.color = color; - } - } diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java index fb06f3a..3622f15 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java @@ -9,6 +9,7 @@ package de.frajul.endlessroll.entities.guis; import java.util.concurrent.atomic.AtomicBoolean; +import de.frajul.endlessroll.data.Color3f; import de.frajul.endlessroll.data.Color4f; import de.frajul.endlessroll.data.Vector; import de.frajul.endlessroll.entities.textures.Texture; @@ -20,11 +21,11 @@ import de.frajul.endlessroll.main.game.Game; public class ToolButton { - private final Color4f LOCKED = new Color4f(0.29f, 0.29f, 0.29f, 0.9f); - private final Color4f ACTIVE_READY = new Color4f(0.25f, 0.89f, 0.17f, 0.9f); - private final Color4f ACTIVE_NOT_READY = new Color4f(0.86f, 0.08f, 0.13f, 0.9f); - private final Color4f INACTIVE_READY = new Color4f(1.0f, 0.95f, 0.0f, 0.9f); - private final Color4f INACTIVE_NOT_READY = new Color4f(0.57f, 0.11f, 0.06f, 0.9f); + private final Color3f LOCKED = new Color3f(0.29f, 0.29f, 0.29f); + private final Color3f ACTIVE_READY = new Color3f(0.25f, 0.89f, 0.17f); + private final Color3f ACTIVE_NOT_READY = new Color3f(0.86f, 0.08f, 0.13f); + private final Color3f INACTIVE_READY = new Color3f(1.0f, 0.95f, 0.0f); + private final Color3f INACTIVE_NOT_READY = new Color3f(0.57f, 0.11f, 0.06f); private Gui border; private Gui background; @@ -46,9 +47,11 @@ public class ToolButton { border = new Gui(texturePack.white, position, width, height); border.setRoundValue(0.3f); + border.setAlpha(0.9f); background = new Gui(null, position, height, height); progressbar = new Progressbar(texturePack.white, position, height, height, 0); - progressbar.setColor(new Color4f(0.4f, 0.4f, 0.4f, 0.6f)); + progressbar.setColor(new Color3f(0.4f, 0.4f, 0.4f)); + progressbar.setAlpha(0.6f); progressbar.setRoundValue(1); progressbar.setProgress(0.6f); animationLayer = new ToolButtonAnimationLayer(toolButtonLockedTexture, position, height, @@ -117,6 +120,13 @@ public class ToolButton { } } + public void setVisible(boolean visible){ + border.setVisible(visible); + background.setVisible(visible); + progressbar.setVisible(visible); + animationLayer.setVisible(visible); + } + public void setActive(boolean active) { this.active.set(active); } diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java index 680ba9a..01a929f 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java @@ -89,6 +89,12 @@ public class ToolButtonBar { return list; } + public void setVisible(boolean visible) { + for (ToolButton button : toolButtons) { + button.setVisible(visible); + } + } + public List getToolButtons() { return toolButtons; } diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java index ef3f006..ef88ba2 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java @@ -37,7 +37,8 @@ public enum PlayerShape { BLUE(R.string.playershape_name_blue, R.string.playershape_description_blue, R.drawable.playershapes_blue, false, new CollectEnergyTask(20)), SUN(R.string.playershape_name_sun, R.string.playershape_description_sun, - R.drawable.playershapes_sun, false, new CollectEnergyTask(30)); + R.drawable.playershapes_sun, false, new CollectEnergyTask(30)), + RAINBOW(R.string.playershape_name_rainbow, R.string.playershape_description_rainbow, R.drawable.playershapes_rainbow, true, new EmptyTask()); @StringRes private int nameId; 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 bf4fd4c..78123ce 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 @@ -27,7 +27,8 @@ public enum World { R.drawable.terrain_c_grass, R.drawable.obstacles_grass, R.drawable.backgrounds_game_grass), ICY_MOUNTAINS(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice, - R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow); + R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow), + UNDERWATER(R.drawable.world_previews_comingsoon, R.drawable.terrain_t_underwater, R.drawable.terrain_c_underwater, R.drawable.obstacles_underwater, R.drawable.backgrounds_game_underwater, R.drawable.background_game_underwater_2, R.drawable.background_game_underwater_3); // TEST_WORLD_GRASS(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass, // R.drawable.terrain_c_grass, R.drawable.juri_obstacles_grass, // R.drawable.backgrounds_game_grass, R.drawable.juri_background_game_grass_2, R.drawable.juri_background_game_grass_3), diff --git a/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java b/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java index b5817b6..8734110 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java +++ b/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java @@ -55,6 +55,8 @@ import de.frajul.endlessroll.views.TaskCompletedMessage; */ public class GameActivity extends Activity implements ExceptionHandler, User.LvUpListener { + public final static boolean IS_DEVELOPER = false; + private DataStorageHandler dataStorageHandler; private LevelManager levelManager; private SoundManager soundManager; diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Game.java b/app/src/main/java/de/frajul/endlessroll/main/game/Game.java index d900ebf..eddaa38 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Game.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Game.java @@ -7,6 +7,8 @@ package de.frajul.endlessroll.main.game; +import android.view.View; + import java.util.ArrayList; import java.util.List; @@ -65,6 +67,7 @@ public class Game extends Rendering { private Level level; private List collectedStars = new ArrayList<>(); private boolean energyCollected; + private boolean inPhotoMode = false; public Game(GameHandler handler, GameScreen gameScreen, GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { super(gameActivity, gameRenderer); @@ -215,6 +218,28 @@ public class Game extends Rendering { } } + public void startPhotoMode(boolean showToolBar){ + if(!showToolBar) + toolButtonBar.setVisible(false); + viewManager.setShowFps(false); + viewManager.getPlayerProgressView().setVisibility(View.INVISIBLE); + viewManager.getPauseButton().setVisibility(View.INVISIBLE); + inPhotoMode = true; + } + + public void endPhotoMode(){ + toolButtonBar.setVisible(true); + viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); + viewManager.getPlayerProgressView().setVisibility(View.VISIBLE); + viewManager.getPauseButton().setVisibility(View.VISIBLE); + inPhotoMode = false; + viewManager.endShortMenuPhotoMode(); + } + + public boolean isInPhotoMode() { + return inPhotoMode; + } + public void resetViews() { viewManager.resetViews(); toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings()); diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java b/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java index 41ef501..618df6e 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java @@ -7,8 +7,10 @@ package de.frajul.endlessroll.main.game; +import de.frajul.endlessroll.data.Color3f; import de.frajul.endlessroll.data.Vector; import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Entity; import de.frajul.endlessroll.entities.Goal; import de.frajul.endlessroll.entities.Obstacle; import de.frajul.endlessroll.entities.collectables.Energy; @@ -72,6 +74,12 @@ public class GameScene extends Scene { } else if (enviromentParticles != null) { enviromentParticles.kill(); } + + if(world == World.UNDERWATER){ +// colorFilter = new Entity(textures.white, new Vector(),4,3); +// colorFilter.setColor(new Color3f(0, 0, 1)); +// colorFilter.setAlpha(0.3f); + } GameLog.d("Level " + level.getId() + " successfully loaded"); } diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java b/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java index c479d1c..bad7e1d 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java @@ -61,6 +61,7 @@ public abstract class Scene { protected final List tools = Collections.synchronizedList(new ArrayList()); protected Collectables collectables = new Collectables(); protected final List guis = Collections.synchronizedList(new ArrayList()); + protected Entity colorFilter = null; public Scene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { this.gameActivity = gameActivity; @@ -212,6 +213,10 @@ public abstract class Scene { return textures; } + public Entity getColorFilter() { + return colorFilter; + } + public ParticleSystem getParticleSystem() { return particleSystem; } diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java index 7e17222..e5edd04 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java @@ -64,6 +64,8 @@ public class GameScreen extends GLScreen { @Override public void onBackKeyDown() { + if(game.isInPhotoMode()) + game.endPhotoMode(); game.tryToPause(); if (isLevelFinished()) game.onGoalMessageKeyBack(); diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java index e202619..3cf0dd6 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java @@ -21,6 +21,7 @@ import de.frajul.endlessroll.main.MyGlSurfaceView; import de.frajul.endlessroll.main.game.StartScene; import de.frajul.endlessroll.sqlDatabase.MyDatabase; import de.frajul.endlessroll.views.ConfirmDialog; +import de.frajul.endlessroll.views.DevToolsDialog; /** * Created by Julian on 07.07.2016. @@ -28,16 +29,11 @@ import de.frajul.endlessroll.views.ConfirmDialog; public class StartScreen extends GLScreen implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener { private final int CALL_ID_CONFIRM_EXIT = 1; - private final int CALL_ID_CONFIRM_FINISH_WORLD = 2; private StartScreenRendering rendering; - private Button play; - private Button unlockLevels; - private Button gain90EP; - private Button finishFirstWorld; - private Button toGlTestScreen; - + private Button showDevToolsDialog; + private DevToolsDialog devToolsDialog; private ConfirmDialog confirmDialog; public StartScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception { @@ -48,11 +44,10 @@ public class StartScreen extends GLScreen implements View.OnClic title.setTypeface(typeface); play = createButton(R.id.startscreen_play, typeface); play.startAnimation(AnimationUtils.loadAnimation(gameActivity, R.anim.rotate)); - unlockLevels = createButton(R.id.startscreen_unlock_levels, typeface); - gain90EP = createButton(R.id.startscreen_gain_90_ep, typeface); - finishFirstWorld = createButton(R.id.startscreen_finish_world_1, typeface); - toGlTestScreen = createButton(R.id.startscreen_to_gl_test_screen, typeface); + showDevToolsDialog = createButton(R.id.startscreen_show_dev_tools_dialog, typeface); + showDevToolsDialog.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); + devToolsDialog = new DevToolsDialog(gameActivity); confirmDialog = new ConfirmDialog(gameActivity, this); rendering = new StartScreenRendering(gameActivity, gameRenderer); @@ -84,20 +79,9 @@ public class StartScreen extends GLScreen implements View.OnClic if (v.equals(play)) { gameActivity.flipToScreen(ScreenType.WORLDS); gameRenderer.setCurrentRendering(null); - } else if (v.equals(gain90EP)) { - gameActivity.getUser().gainEp(90, true); - } else if (v.equals(unlockLevels)) { - gameActivity.getLevelManager().unlockAllLevels(); - gameActivity.getLevelManager().unlockAllPacks(); - MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); - database.open(); - database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); - database.close(); - } else if (v.equals(finishFirstWorld)) { - confirmDialog - .show(CALL_ID_CONFIRM_FINISH_WORLD, R.string.confirm_dialog_finish_world_1); - } else if (v.equals(toGlTestScreen)) - gameActivity.flipToScreen(ScreenType.GL_TEST); + } if(v.equals(showDevToolsDialog)){ + devToolsDialog.show(); + } } @@ -105,19 +89,6 @@ public class StartScreen extends GLScreen implements View.OnClic public void onConfirmed(int callId) { if (callId == CALL_ID_CONFIRM_EXIT) { gameActivity.exitGame(); - } else if (callId == CALL_ID_CONFIRM_FINISH_WORLD) { - gameActivity.resetData(); - gameActivity.getUser().gainEp(320, false); - gameActivity.getLevelManager().finishFirstPack(); - gameActivity.showNewFinishedPlayerShapeTasks(); - gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true); - - gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); - gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); - MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); - database.open(); - database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); - database.close(); } } } 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 6149d62..95703bb 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 @@ -143,6 +143,14 @@ public class GameRenderer implements GLSurfaceView.Renderer { renderFbo(gl); + //TODO: change mvp matrix for non moving entites / change type of these entities (colorFilter, background) + if(currentRendering.getScene().getColorFilter() != null) { + entityShader.start(); + entityShader.loadMVPMatrix(matrixCreator, new Camera()); + renderEntity(gl, currentRendering.getScene().getColorFilter()); + entityShader.stop(); + } + renderGuis(gl, scene.getGuis()); } } @@ -234,6 +242,7 @@ public class GameRenderer implements GLSurfaceView.Renderer { gl.glActiveTexture(GL10.GL_TEXTURE0); gl.glBindTexture(GL10.GL_TEXTURE_2D, entity.getTexture().getId()); entityShader.loadTransformationMatrix(matrixCreator, entity); + entityShader.loadColor(entity.getColor()); entityShader.loadAlpha(entity.getAlpha()); entityShader.loadTextureAtlasInfos(entity.getTexture(), entity.getTextureAtlasIndex()); entityShader.loadTexCoordScaling(entity.calcTexScaleX(), entity.calcTexScaleY()); diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java index 00d24ae..ee14d42 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java @@ -10,6 +10,8 @@ package de.frajul.endlessroll.rendering.shader; import android.content.Context; import android.opengl.GLES20; +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Vector; import de.frajul.endlessroll.entities.Entity; import de.frajul.endlessroll.entities.textures.Texture; import de.frajul.endlessroll.main.game.Camera; @@ -26,6 +28,8 @@ public class EntityShader extends ShaderProgram { private int location_texAtlasSize; private int location_texAtlasIndex; private int location_texCoordScaling; + private int location_hasColor; + private int location_color; public EntityShader(Context context) throws Exception { super(context, "shader/entityVertexShader.glsl", "shader/entityFragmentShader.glsl"); @@ -39,6 +43,8 @@ public class EntityShader extends ShaderProgram { location_texAtlasSize = super.getUniformLocation("texAtlasSize"); location_texAtlasIndex = super.getUniformLocation("texAtlasIndex"); location_texCoordScaling = super.getUniformLocation("texCoordScaling"); + location_hasColor = super.getUniformLocation("hasColor"); + location_color = super.getUniformLocation("color"); } public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) { @@ -64,4 +70,10 @@ public class EntityShader extends ShaderProgram { GLES20.glUniform2f(location_texCoordScaling, scalingX, scalingY); } + public void loadColor(Color3f color){ + GLES20.glUniform1f(location_hasColor, color == null ? 0 : 1); + if(color != null) + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); + } + } diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java index 8c5af57..e3ae322 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java @@ -10,6 +10,7 @@ package de.frajul.endlessroll.rendering.shader; import android.content.Context; import android.opengl.GLES20; +import de.frajul.endlessroll.data.Color3f; import de.frajul.endlessroll.data.Color4f; import de.frajul.endlessroll.entities.Entity; import de.frajul.endlessroll.rendering.MatrixCreator; @@ -52,11 +53,10 @@ public class GuiShader extends ShaderProgram { GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0); } - public void loadCustomColor(Color4f color) { + public void loadCustomColor(Color3f color) { GLES20.glUniform1f(location_useCustomColor, color == null ? 0 : 1); if (color != null) - GLES20.glUniform4f(location_color, color.getR(), color.getG(), color.getB(), - color.getA()); + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); } public void loadAlpha(float alpha) { diff --git a/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java b/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java new file mode 100644 index 0000000..86b65b4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java @@ -0,0 +1,106 @@ +/* + * Created by Julian Mutter on 9/7/18 12:36 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:58 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.animation.ObjectAnimator; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ScrollView; +import android.widget.TextView; + +import java.util.concurrent.locks.ReentrantLock; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; + +/** + * Created by Julian on 31.10.2017. + */ + +public class DevToolsDialog extends Dialog implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener{ + + private GameActivity gameActivity; + + private Button unlockLevels; + private Button gain90EP; + private Button finishFirstWorld; + private Button toGlTestScreen; + + private ConfirmDialog confirmDialog; + + public DevToolsDialog(GameActivity gameActivity) { + super(gameActivity); + this.gameActivity = gameActivity; + confirmDialog = new ConfirmDialog(gameActivity, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.dev_tools_dialog); + + unlockLevels = findViewById(R.id.startscreen_unlock_levels); + unlockLevels.setOnClickListener(this); + gain90EP = findViewById(R.id.startscreen_gain_90_ep); + gain90EP.setOnClickListener(this); + finishFirstWorld = findViewById(R.id.startscreen_finish_world_1); + finishFirstWorld.setOnClickListener(this); + toGlTestScreen = findViewById(R.id.startscreen_to_gl_test_screen); + toGlTestScreen.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + if (view.equals(gain90EP)) { + gameActivity.getUser().gainEp(90, true); + } else if (view.equals(unlockLevels)) { + gameActivity.getLevelManager().unlockAllLevels(); + gameActivity.getLevelManager().unlockAllPacks(); + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); + database.close(); + } else if (view.equals(finishFirstWorld)) { + confirmDialog + .show(1, R.string.confirm_dialog_finish_world_1); + } else if (view.equals(toGlTestScreen)) { + super.cancel(); + gameActivity.flipToScreen(Screen.ScreenType.GL_TEST); + } + } + + @Override + public void onConfirmed(int callId) { + gameActivity.resetData(); + gameActivity.getUser().gainEp(320, false); + gameActivity.getLevelManager().finishFirstPack(); + gameActivity.showNewFinishedPlayerShapeTasks(); + gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true); + + gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); + gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); + database.close(); + + super.cancel(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java index cd069e4..ee30de3 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java @@ -12,6 +12,9 @@ import android.graphics.Typeface; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.LinearLayout; import android.widget.TextView; import java.util.Random; @@ -38,6 +41,10 @@ public class ShortMenu implements View.OnClickListener { private TextView restartView; private TextView exitView; + private LinearLayout photoModeLayout; + private CheckBox photoModeShowToolbar; + private Button photoModeActivate; + public ShortMenu(final Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { this.game = game; this.layout = layout; @@ -54,6 +61,12 @@ public class ShortMenu implements View.OnClickListener { exitView.setTypeface(typeface); exitView.setOnClickListener(this); + photoModeLayout = layout.findViewById(R.id.shortmenu_photo_mode_panel); + photoModeShowToolbar = photoModeLayout.findViewById(R.id.photo_mode_panel_show_toolbar); + photoModeActivate = photoModeLayout.findViewById(R.id.photo_mode_panel_activate); + photoModeActivate.setOnClickListener(this); + photoModeLayout.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); + random = new Random(); Context context = game.getContext(); slideLeft = AnimationUtils.loadAnimation(context, R.anim.slide_in_left); @@ -90,6 +103,10 @@ public class ShortMenu implements View.OnClickListener { view.startAnimation(slideLeft); } + public void deactivatePhotoMode(){ + layout.setVisibility(View.VISIBLE); + } + @Override public void onClick(View v) { if (v.equals(continueView)) { @@ -101,6 +118,10 @@ public class ShortMenu implements View.OnClickListener { } else if (v.equals(exitView)) { setVisible(false); game.toLevelsScreen(); + } else if(v.equals(photoModeActivate)){ + boolean showToolBar = photoModeShowToolbar.isChecked(); + layout.setVisibility(View.INVISIBLE); + game.startPhotoMode(showToolBar); } } } diff --git a/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java index 2c2c0ea..60d35ef 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java @@ -8,6 +8,7 @@ package de.frajul.endlessroll.views; import android.view.View; +import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -39,6 +40,8 @@ public class ViewManager implements View.OnClickListener { private GoalMessage goalMessage; public ShortMenu shortMenu; + private ImageView pauseButton; + private boolean showFps = false; private List bombErrorMessages = new ArrayList<>(); @@ -62,7 +65,7 @@ public class ViewManager implements View.OnClickListener { layout.findViewById(R.id.game_goal_message)); } }); - ImageView pauseButton = layout.findViewById(R.id.game_pausebutton); + pauseButton = layout.findViewById(R.id.game_pausebutton); pauseButton.setOnClickListener(this); playerProgressView = layout.findViewById(R.id.game_playerprogress); playerProgressView.setTypeface(gameActivity.getTypeface()); @@ -136,6 +139,10 @@ public class ViewManager implements View.OnClickListener { shortMenu.setVisible(true); } + public void endShortMenuPhotoMode(){ + shortMenu.deactivatePhotoMode(); + } + public void hideShortMenu() { shortMenu.setVisible(false); } @@ -162,4 +169,11 @@ public class ViewManager implements View.OnClickListener { this.showFps = showFps; } + public TextView getPlayerProgressView() { + return playerProgressView; + } + + public ImageView getPauseButton() { + return pauseButton; + } } diff --git a/app/src/main/res/drawable/background_game_underwater_2.png b/app/src/main/res/drawable/background_game_underwater_2.png new file mode 100644 index 0000000..856a955 Binary files /dev/null and b/app/src/main/res/drawable/background_game_underwater_2.png differ diff --git a/app/src/main/res/drawable/background_game_underwater_3.png b/app/src/main/res/drawable/background_game_underwater_3.png new file mode 100644 index 0000000..c68abfb Binary files /dev/null and b/app/src/main/res/drawable/background_game_underwater_3.png differ diff --git a/app/src/main/res/drawable/backgrounds_game_underwater.png b/app/src/main/res/drawable/backgrounds_game_underwater.png new file mode 100644 index 0000000..a089b55 Binary files /dev/null and b/app/src/main/res/drawable/backgrounds_game_underwater.png differ diff --git a/app/src/main/res/drawable/obstacles_underwater.png b/app/src/main/res/drawable/obstacles_underwater.png new file mode 100644 index 0000000..2c84dfe Binary files /dev/null and b/app/src/main/res/drawable/obstacles_underwater.png differ diff --git a/app/src/main/res/drawable/playershapes_rainbow.png b/app/src/main/res/drawable/playershapes_rainbow.png new file mode 100644 index 0000000..7068074 Binary files /dev/null and b/app/src/main/res/drawable/playershapes_rainbow.png differ diff --git a/app/src/main/res/drawable/terrain_c_underwater.png b/app/src/main/res/drawable/terrain_c_underwater.png new file mode 100644 index 0000000..cf69f92 Binary files /dev/null and b/app/src/main/res/drawable/terrain_c_underwater.png differ diff --git a/app/src/main/res/drawable/terrain_t_underwater.png b/app/src/main/res/drawable/terrain_t_underwater.png new file mode 100644 index 0000000..25b7a08 Binary files /dev/null and b/app/src/main/res/drawable/terrain_t_underwater.png differ diff --git a/app/src/main/res/layout/dev_tools_dialog.xml b/app/src/main/res/layout/dev_tools_dialog.xml new file mode 100644 index 0000000..bc71c81 --- /dev/null +++ b/app/src/main/res/layout/dev_tools_dialog.xml @@ -0,0 +1,62 @@ + + + + + + + + +