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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/photo_mode_panel.xml b/app/src/main/res/layout/photo_mode_panel.xml
new file mode 100644
index 0000000..08a20f7
--- /dev/null
+++ b/app/src/main/res/layout/photo_mode_panel.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/short_menu.xml b/app/src/main/res/layout/short_menu.xml
index a8dae3b..b9e7675 100644
--- a/app/src/main/res/layout/short_menu.xml
+++ b/app/src/main/res/layout/short_menu.xml
@@ -1,5 +1,4 @@
-
-