implemented all sounds and music

This commit is contained in:
=
2018-01-19 17:41:05 +01:00
parent 53b9b6bb14
commit 2c19e3dcb5
52 changed files with 686 additions and 379 deletions

View File

@@ -435,5 +435,18 @@
</stars>
<energy x="18.570074" y="0.46666658"/>
</level>
<level packId="2" id="7" goalX="3.0" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="0.0" width="6.0"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="0.0" width="6.0"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList"/>
<stars class="java.util.ArrayList">
<positionData x="0.3066666" y="-0.37999997"/>
</stars>
<energy x="1.9466664" y="-0.3933333"/>
</level>
</levels>
</levelPack>

View File

@@ -8,28 +8,46 @@ import de.frajul.endlessroll.entities.collision.geometry.Geometry;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.main.game.Timer;
import de.frajul.endlessroll.sounds.SoundManager;
import de.frajul.endlessroll.sounds.SoundStream;
/**
* Created by Julian on 11.02.2016.
*/
public class Magnet extends Tool {
private SoundManager soundManager;
private ParticleSource particleSource;
private SoundStream soundStream;
public Magnet(Vector position, ParticleSystem particleSystem) {
public Magnet(Vector position, ParticleSystem particleSystem, SoundManager soundManager) {
super(ToolType.MAGNET, position, .24f, .24f, false, false);
this.soundManager = soundManager;
animation.setRequiredDelta(300);
animation.setIndexSequence(new int[]{1, 1, 0});
animation.setLooping(true);
super.setFloating(true);
particleSource = new ParticleSource(new Vector(position), particleSystem.magnet);
particleSource.start();
soundStream = soundManager.playSound(soundManager.magnetSound);
}
@Override
public void destroy(DestroyEffect destroyEffect) {
super.destroy(destroyEffect);
particleSource.kill();
soundManager.stopSound(soundStream);
}
public void updateSoundVolume(Player player) {
float distanceToPlayer = super.getPosition().vectorTo(player.getPosition()).length();
float factor = 1.0f / (distanceToPlayer * distanceToPlayer);
if (distanceToPlayer > 2 && player.getPosition().getX() > super.getPosition().getX()) {
soundManager.stopSound(soundStream);
return;
}
soundStream.setCurrentVolumeModifier(factor);
soundManager.onStreamVolumeChanged(soundStream);
}
@Override

View File

@@ -5,6 +5,8 @@ import de.frajul.endlessroll.entities.DestroyEffect;
import de.frajul.endlessroll.entities.Player;
import de.frajul.endlessroll.entities.collision.geometry.Geometry;
import de.frajul.endlessroll.main.game.Timer;
import de.frajul.endlessroll.sounds.Sound;
import de.frajul.endlessroll.sounds.SoundManager;
/**
* Created by Julian on 02.10.2017.
@@ -12,14 +14,18 @@ import de.frajul.endlessroll.main.game.Timer;
public class PowerMushroom extends Tool {
public PowerMushroom(Vector position) {
private SoundManager soundManager;
public PowerMushroom(Vector position, SoundManager soundManager) {
super(ToolType.POWER_MUSHROOM, position, .35f, .3f, true, true);
animation.disable();
this.soundManager = soundManager;
}
@Override
public void onPlayerCollision(Player player, Timer timer) {
player.startSuperPower((long) ToolType.POWER_MUSHROOM.getCurrentUpgradeValue(ToolUpgradeType.DURATION));
soundManager.playSound(soundManager.mushroomSound);
super.destroy(DestroyEffect.ENERGY_COLLECT);
}

View File

@@ -5,6 +5,7 @@ import de.frajul.endlessroll.entities.Player;
import de.frajul.endlessroll.entities.collision.geometry.Geometry;
import de.frajul.endlessroll.entities.collision.geometry.Quad;
import de.frajul.endlessroll.main.game.Timer;
import de.frajul.endlessroll.sounds.SoundManager;
/**
* Created by Julian on 04.01.2016.
@@ -12,11 +13,13 @@ import de.frajul.endlessroll.main.game.Timer;
public class Spring extends Tool {
private boolean hasYetCollided = false;
private SoundManager soundManager;
public Spring(Vector position) {
public Spring(Vector position, SoundManager soundManager) {
super(ToolType.SPRING, position, .3f, .35f, true, true);
animation.setIndexSequence(new int[]{1, 0, 0, 3, 3, 3, 1});
animation.setRequiredDelta(80);
this.soundManager = soundManager;
}
@Override
@@ -29,6 +32,7 @@ public class Spring extends Tool {
public void onPlayerCollision(Player player, Timer timer) {
if (!hasYetCollided) {
hasYetCollided = true;
soundManager.playSound(soundManager.springSound);
player.clearAllForces();
player.getMovement().setY(0);

View File

@@ -6,25 +6,30 @@ import de.frajul.endlessroll.entities.Player;
import de.frajul.endlessroll.entities.collision.geometry.Geometry;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.main.game.GameScene;
import de.frajul.endlessroll.main.game.Timer;
import de.frajul.endlessroll.sounds.SoundManager;
import de.frajul.endlessroll.sounds.SoundStream;
/**
* Created by Julian on 11.02.2016.
*/
public class Stasis extends Tool {
private SoundManager soundManager;
private ParticleSource particleSource;
private boolean firstCollision = true;
private final static float Y_SLOW_FACTOR = .4f; //Final .2f
private final static float X_SLOW_FACTOR = .9f; //Final .8f
private float forceValue;
public Stasis(Vector position, ParticleSystem particleSystem) {
private SoundStream soundStream;
public Stasis(Vector position, ParticleSystem particleSystem, SoundManager soundManager) {
super(ToolType.STASIS, position,
.7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100,
.7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100, false,
false);
this.soundManager = soundManager;
animation.setLooping(true);
animation.setRequiredDelta(300);
animation.setIndexSequence(new int[]{1, 1, 2, 3, 2, 4, 4, 3, 2, 2, 3, 3});
@@ -33,12 +38,31 @@ public class Stasis extends Tool {
particleSource.setSpawnSize(new Vector(super.width, super.height));
particleSource.start();
forceValue = ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.FORCE);
soundStream = soundManager.playSound(soundManager.stasisSound);
}
public void updateSoundVolume(Player player) {
float distanceToPlayer = super.getPosition().getX() - player.getPosition().getX();
boolean playerInXRange = (player.getRightEdge() >= super.getLeftEdge() && player
.getRightEdge() <= super.getRightEdge()) || (player.getLeftEdge() >= super
.getLeftEdge() && player.getLeftEdge() <= super.getRightEdge());
float factor = 1.0f;
if (!playerInXRange) {
factor = 1.0f / (distanceToPlayer * distanceToPlayer);
if (distanceToPlayer < -2) {
soundManager.stopSound(soundStream);
return;
}
}
soundStream.setCurrentVolumeModifier(factor);
soundManager.onStreamVolumeChanged(soundStream);
}
@Override
public void destroy(DestroyEffect destroyEffect) {
super.destroy(destroyEffect);
particleSource.kill();
soundManager.stopSound(soundStream);
}
@Override

View File

@@ -11,32 +11,33 @@ import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.entities.textures.Texture;
import de.frajul.endlessroll.entities.textures.TexturePack;
import de.frajul.endlessroll.sounds.Sound;
import de.frajul.endlessroll.sounds.SoundManager;
public enum ToolType {
//Check newInstance when new Tool is added!
RAMP(R.string.tool_name_ramp, R.string.tool_description_ramp, R.drawable.tools_ramp,
R.drawable.tools_ramp_button, R.raw.ramp, 0, 1, 5,
R.drawable.tools_ramp_button, 0, 1, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 3000, 1000)),
SPRING(R.string.tool_name_spring, R.string.tool_description_spring, R.drawable.tools_spring,
R.drawable.tools_spring_button, R.raw.ramp, 5, 2, 5,
R.drawable.tools_spring_button, 5, 2, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 4000, 2000)),
BOMB(R.string.tool_name_bomb, R.string.tool_description_bomb, R.drawable.tools_bomb,
R.drawable.tools_bomb_button, R.raw.ramp, 12, 4, 5,
R.drawable.tools_bomb_button, 12, 4, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000),
new ToolUpgrade(ToolUpgradeType.DURATION, 1200, 400),
new ToolUpgrade(ToolUpgradeType.RANGE, 100, 200)),
MAGNET(R.string.tool_name_magnet, R.string.tool_description_magnet, R.drawable.tools_magnet,
R.drawable.tools_magnet_button, R.raw.ramp, 10, 2, 5,
R.drawable.tools_magnet_button, 10, 2, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 5000, 3000),
new ToolUpgrade(ToolUpgradeType.FORCE, 100, 500)),
POWER_MUSHROOM(R.string.tool_name_power_mushroom, R.string.tool_description_power_mushroom,
R.drawable.tools_power_mushroom, R.drawable.tools_power_mushroom_button, R.raw.ramp, 5,
R.drawable.tools_power_mushroom, R.drawable.tools_power_mushroom_button, 5,
5, 7, new ToolUpgrade(ToolUpgradeType.COOLDOWN, 15000, 11000),
new ToolUpgrade(ToolUpgradeType.DURATION, 5000, 10000)),
STASIS(R.string.tool_name_stasis, R.string.tool_description_stasis, R.drawable.tools_stasis,
R.drawable.tools_stasis_button, R.raw.ramp, 15, 4, 6,
R.drawable.tools_stasis_button, 15, 4, 6,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000),
new ToolUpgrade(ToolUpgradeType.FORCE, 1, 2),
new ToolUpgrade(ToolUpgradeType.SIZE, 100, 200));
@@ -47,23 +48,20 @@ public enum ToolType {
private final int description;
private final int toolTextureId;
private final int buttonDrawable;
private final int placingSoundId;
private final int buyPrice;
private final int upgradePrice;
private final int maxUpgradeLevel;
private final List<ToolUpgrade> upgrades;
private Texture toolTexture = null;
private int placingSound = -1;
private boolean bought;
private int currentUpgradeLevel = 1;
ToolType(@StringRes int name, @StringRes int description, int toolTextureId, int buttonDrawable, int placingSoundId, int buyPrice, int upgradePrice, int maxUpgradeLevel, ToolUpgrade... upgrades) {
ToolType(@StringRes int name, @StringRes int description, int toolTextureId, int buttonDrawable, int buyPrice, int upgradePrice, int maxUpgradeLevel, ToolUpgrade... upgrades) {
this.name = name;
this.description = description;
this.toolTextureId = toolTextureId;
this.buttonDrawable = buttonDrawable;
this.placingSoundId = placingSoundId;
this.buyPrice = buyPrice;
this.upgradePrice = upgradePrice;
this.maxUpgradeLevel = maxUpgradeLevel;
@@ -71,26 +69,26 @@ public enum ToolType {
}
@Nullable
public Tool newInstance(Vector position, ParticleSystem particleSystem) {
public Tool newInstance(Vector position, ParticleSystem particleSystem, SoundManager soundManager) {
Tool tool = null;
switch (this) {
case RAMP:
tool = new Ramp(position);
break;
case SPRING:
tool = new Spring(position);
tool = new Spring(position, soundManager);
break;
case MAGNET:
tool = new Magnet(position, particleSystem);
tool = new Magnet(position, particleSystem, soundManager);
break;
case BOMB:
tool = new Bomb(position);
break;
case POWER_MUSHROOM:
tool = new PowerMushroom(position);
tool = new PowerMushroom(position, soundManager);
break;
case STASIS:
tool = new Stasis(position,particleSystem);
tool = new Stasis(position, particleSystem, soundManager);
break;
}
if (tool != null && tool.isPlacedByRightEdge())
@@ -98,22 +96,11 @@ public enum ToolType {
return tool;
}
public static void loadAllPlacingSounds(SoundManager soundManager) {
for (ToolType type : values())
type.loadPlacingSound(soundManager);
}
public static void loadAllToolTextures(TexturePack texturePack) {
for (ToolType type : values())
type.loadToolTexture(texturePack);
}
private void loadPlacingSound(SoundManager soundManager) {
if (placingSoundId == -1)
return;
placingSound = soundManager.loadSound(placingSoundId);
}
private void loadToolTexture(TexturePack texturePack) {
if (toolTextureId == -1)
return;
@@ -131,10 +118,6 @@ public enum ToolType {
return buttonDrawable;
}
public int getPlacingSound() {
return placingSound;
}
@StringRes
public int getName() {
return name;

View File

@@ -16,7 +16,8 @@ import de.frajul.endlessroll.user.User;
public class DataStorageHandler {
private final String PREFERENCES_NAME = "GamePreferences";
private final String SOUND_ON = "Sound";
private final String SOUNDS_MUTED = "SoundsMuted";
private final String MUSIC_MUTED = "MusicMuted";
private final String USER_EP = "EP";
private final String USER_LEVEL = "Level";
private final String USER_STARS = "Stars";
@@ -37,13 +38,23 @@ public class DataStorageHandler {
database = new MyDatabase(activity);
}
public boolean readIsSoundOn() {
return preferences.getBoolean(SOUND_ON, false);
public boolean readIsSoundsMuted() {
return preferences.getBoolean(SOUNDS_MUTED, false);
}
public void writeSoundOn(boolean soundOn) {
public void writeSoundsMuted(boolean soundsMuted) {
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(SOUND_ON, soundOn);
editor.putBoolean(SOUNDS_MUTED, soundsMuted);
editor.apply();
}
public boolean readIsMusicMuted() {
return preferences.getBoolean(MUSIC_MUTED, false);
}
public void writeMusicMuted(boolean musicMuted) {
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(MUSIC_MUTED, musicMuted);
editor.apply();
}

View File

@@ -91,7 +91,8 @@ public class GameActivity extends Activity implements ExceptionHandler, User.LvU
user = dataStorageHandler.readUserData(this);
soundManager = new SoundManager(this);
soundManager.setSoundOn(dataStorageHandler.readIsSoundOn());
soundManager.setSoundsMuted(dataStorageHandler.readIsSoundsMuted());
soundManager.setMusicMuted(dataStorageHandler.readIsMusicMuted());
levelManager = new LevelManager(this, dataStorageHandler);
tutorialManager = new TutorialManager(this);
@@ -138,7 +139,7 @@ public class GameActivity extends Activity implements ExceptionHandler, User.LvU
}
public void flipToScreen(final Screen.ScreenType screen) {
if (screen != Screen.ScreenType.NONE) {
if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) {
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -271,7 +272,7 @@ public class GameActivity extends Activity implements ExceptionHandler, User.LvU
glSurfaceView.onPause();
if (flipper.getCurrentScreen() == gameScreen)
gameScreen.onPause();
soundManager.pause();
soundManager.activityPause();
super.onPause();
}
@@ -279,7 +280,7 @@ public class GameActivity extends Activity implements ExceptionHandler, User.LvU
protected void onResume() {
GameLog.d("OnResume");
glSurfaceView.onResume();
soundManager.resume();
soundManager.activityResume();
super.onResume();
}
@@ -288,7 +289,6 @@ public class GameActivity extends Activity implements ExceptionHandler, User.LvU
GameLog.d("OnDestroy");
soundManager.destroy();
dataStorageHandler.writeSoundOn(soundManager.isSoundOn());
super.onDestroy();
}

View File

@@ -68,7 +68,7 @@ public class Game extends Rendering<GameScene> {
this.timer = timer;
try {
if (isFirstTime) {
scene = new GameScene(texturePack, particleSystem);
scene = new GameScene(gameActivity, texturePack, particleSystem);
firework = new Firework(particleSystem.firework, scene.getCamera());
if (level != null)
startGame(levelPack, level);
@@ -88,6 +88,7 @@ public class Game extends Rendering<GameScene> {
this.level = level;
this.levelPack = levelPack;
if (scene != null) {
gameActivity.getSoundManager().gameMusic.reset();
gameState = GameState.COUNTDOWN;
gameActivity.getTutorialManager().resetGameTutorials();
collectedStars.clear();
@@ -106,8 +107,8 @@ public class Game extends Rendering<GameScene> {
}
public void countdownFinished() {
GameLog.i("Start music");
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().gameMusic);
gameActivity.getSoundManager().resumeAllSounds();
gameActivity.getSoundManager().gameMusic.start();
gameState = GameState.RUNNING;
}
@@ -205,6 +206,7 @@ public class Game extends Rendering<GameScene> {
public void tryToPause() {
if (gameState == GameState.GAME_OVER || gameState == GameState.LEVEL_FINISHED || gameState == GameState.PAUSED)
return;
gameActivity.getSoundManager().pauseAllSounds();
gameActivity.getSoundManager().gameMusic.pause();
viewManager.showShortMenu();
if (gameState == GameState.COUNTDOWN)
@@ -222,7 +224,7 @@ public class Game extends Rendering<GameScene> {
private void addTool(float x, float y) {
try {
gameActivity.getSoundManager().playSound(currentTool.getPlacingSound());
gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().placeToolSound);
scene.addTool(currentTool, x, y, physics);
} catch (Exception e) {
onException(e);
@@ -230,8 +232,9 @@ public class Game extends Rendering<GameScene> {
}
public void onGameOver(boolean playerExplode) {
gameActivity.getSoundManager().gameMusic.pause();
//TODO: Die sound
gameActivity.getSoundManager().gameMusic.stop();
gameActivity.getSoundManager().stopAllSounds();
gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().dieSound);
if (playerExplode) {
scene.getUncategorizedEntities().remove(player);
DestroyEffect.EXPLOSION.createEffect(particleSystem, player.getPosition(),
@@ -242,8 +245,9 @@ public class Game extends Rendering<GameScene> {
}
private void onGoalReached() {
gameActivity.getSoundManager().gameMusic.pause();
//TODO: Goal + firework sound
gameActivity.getSoundManager().gameMusic.stop();
gameActivity.getSoundManager().stopAllSounds();
gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().goalSound);
gameState = GameState.LEVEL_FINISHED;
if (!level.isFinished())
@@ -263,6 +267,7 @@ public class Game extends Rendering<GameScene> {
}
firework.start();
gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().fireworkSound);
//viewManager.showGameOverMessage(levelPack.isLastLevel(level), MessageType.WIN);
//TODO: fadeInWithDelay something
@@ -290,13 +295,21 @@ public class Game extends Rendering<GameScene> {
}
public void onStarCollision(Star star) {
scene.onStarCollision(star);
collectedStars.add(star.getIndex());
if (!star.isDestroyed()) {
scene.onStarCollision(star);
gameActivity.getSoundManager()
.playSound(gameActivity.getSoundManager().collectStarSound);
collectedStars.add(star.getIndex());
}
}
public void onEnergyCollision(Energy energy) {
scene.onEnergyCollision(energy);
energyCollected = true;
if (!energy.isDestroyed()) {
scene.onEnergyCollision(energy);
gameActivity.getSoundManager()
.playSound(gameActivity.getSoundManager().collectEnergySound);
energyCollected = true;
}
}
@Override

View File

@@ -12,12 +12,14 @@ 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.entities.tools.Bomb;
import de.frajul.endlessroll.entities.tools.Magnet;
import de.frajul.endlessroll.entities.tools.Stasis;
import de.frajul.endlessroll.entities.tools.Tool;
import de.frajul.endlessroll.entities.tools.ToolType;
import de.frajul.endlessroll.levels.Level;
import de.frajul.endlessroll.levels.ObstacleData;
import de.frajul.endlessroll.levels.worlds.World;
import de.frajul.endlessroll.main.GameActivity;
import de.frajul.endlessroll.main.GameLog;
import de.frajul.endlessroll.main.physics.Physics;
@@ -26,13 +28,15 @@ import de.frajul.endlessroll.main.physics.Physics;
*/
public class GameScene extends Scene {
private GameActivity gameActivity;
private World currentWorld;
private CollisionDetector collisionDetector;
private Goal goal;
private float goalX;
public GameScene(TexturePack texturePack, ParticleSystem particleSystem) throws Exception {
super(texturePack, particleSystem);
public GameScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) throws Exception {
super(gameActivity, texturePack, particleSystem);
this.gameActivity = gameActivity;
collisionDetector = new CollisionDetector();
goal = new Goal(textures.goal);
@@ -45,8 +49,8 @@ public class GameScene extends Scene {
terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles());
ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles());
uncategorizedEntities.add(goal);
player.init(playerShape, terrain.getEdge(), level.getStartSpeed(),
level.getEndSpeed(), particleSystem);
player.init(playerShape, terrain.getEdge(), level.getStartSpeed(), level.getEndSpeed(),
particleSystem);
uncategorizedEntities.add(player);
collectables.init(level, textures);
for (ObstacleData data : level.getObstacles())
@@ -55,10 +59,10 @@ public class GameScene extends Scene {
goalX = level.getGoalX();
goal.setGoalX(goalX);
if(world == World.ICY_MOUNTAINS){
if (world == World.ICY_MOUNTAINS) {
enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow);
enviromentParticles.start();
}else if(enviromentParticles != null){
} else if (enviromentParticles != null) {
enviromentParticles.kill();
}
GameLog.d("Level " + level.getId() + " successfully loaded");
@@ -79,7 +83,7 @@ public class GameScene extends Scene {
public void addTool(ToolType type, float screenX, float screenY, Physics physics) throws Exception {
Vector position = calcWorldFromScreenCoords(screenX, screenY);
Tool tool = type.newInstance(position, particleSystem);
Tool tool = type.newInstance(position, particleSystem, gameActivity.getSoundManager());
physics.checkSingleToolCollision(tool, this);
if (tool == null)
@@ -123,6 +127,13 @@ public class GameScene extends Scene {
if (bomb.isExploding())
bomb.explode(obstacles, collisionDetector);
}
else if (tool instanceof Stasis) {
Stasis stasis = (Stasis) tool;
stasis.updateSoundVolume(player);
} else if(tool instanceof Magnet){
Magnet magnet = (Magnet) tool;
magnet.updateSoundVolume(player);
}
}
}

View File

@@ -8,6 +8,7 @@ import java.util.List;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.AnimatedEntity;
import de.frajul.endlessroll.entities.Background;
import de.frajul.endlessroll.entities.DestroyEffect;
import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.entities.Obstacle;
import de.frajul.endlessroll.entities.Player;
@@ -19,6 +20,7 @@ import de.frajul.endlessroll.entities.tileLists.Ceiling;
import de.frajul.endlessroll.entities.tileLists.Terrain;
import de.frajul.endlessroll.entities.tools.Tool;
import de.frajul.endlessroll.levels.worlds.World;
import de.frajul.endlessroll.main.GameActivity;
/**
* Created by Julian on 20.07.2016.
@@ -28,6 +30,8 @@ public abstract class Scene {
//Not sure if needed, this why set on very high value
private final float MAX_Y_MOVEMENT = -1f;
private GameActivity gameActivity;
protected Camera camera;
private Vector screenSize;
private Entity playerArrow;
@@ -46,7 +50,8 @@ public abstract class Scene {
protected List<Tool> tools = Collections.synchronizedList(new ArrayList<Tool>());
protected Collectables collectables = new Collectables();
public Scene(TexturePack texturePack, ParticleSystem particleSystem) {
public Scene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) {
this.gameActivity = gameActivity;
this.particleSystem = particleSystem;
setTexturePack(texturePack);
camera = new Camera();
@@ -120,9 +125,14 @@ public abstract class Scene {
moveEnviroment(finalMovement.x);
}
if (entity.isDestroyed() && entity.getDestroyEffect() != null)
if (entity.isDestroyed() && entity.getDestroyEffect() != null) {
if (entity.getDestroyEffect() == DestroyEffect.EXPLOSION) {
gameActivity.getSoundManager()
.playSound(gameActivity.getSoundManager().explosionSound);
}
entity.getDestroyEffect().createEffect(particleSystem, new Vector(entity.getPosition()),
new Vector(entity.getWidth(), entity.getHeight())).start();
}
if (entity.getRightEdge() - camera.getX() < -3f || entity.isDestroyed()) {
return true;
}

View File

@@ -8,6 +8,7 @@ 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.worlds.World;
import de.frajul.endlessroll.main.GameActivity;
public class StartScene extends Scene {
@@ -15,8 +16,8 @@ public class StartScene extends Scene {
private Random random;
private World currentWorld = World.GRASSLANDS;
public StartScene(TexturePack texturePack, ParticleSystem particleSystem) {
super(texturePack, particleSystem);
public StartScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) {
super(gameActivity, texturePack, particleSystem);
player.init(PlayerShape.BALL, TERRAIN_EDGE, 0.5f, 0.5f, null);
uncategorizedEntities.add(player);

View File

@@ -10,11 +10,12 @@ import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.entities.textures.TexturePack;
import de.frajul.endlessroll.levels.ObstacleData;
import de.frajul.endlessroll.levels.worlds.World;
import de.frajul.endlessroll.main.GameActivity;
public class TestScreenScene extends Scene {
public TestScreenScene(TexturePack texturePack, ParticleSystem particleSystem) {
super(texturePack, particleSystem);
public TestScreenScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) {
super(gameActivity, texturePack, particleSystem);
terrain.createEndless(World.ICY_MOUNTAINS, -1.0f);
background.changeTexture(World.ICY_MOUNTAINS.getBackgroundTexture());
new ParticleSource(new Vector(0, 0.0f), particleSystem.colorChange).start();

View File

@@ -24,7 +24,7 @@ public class GLTestScreen extends GLScreen<RelativeLayout> {
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
glView.setCurrentRendering(rendering);
}

View File

@@ -29,8 +29,7 @@ public class GameScreen extends GLScreen<RelativeLayout> {
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(null);
gameActivity.getSoundManager().menuMusic.reset();
gameActivity.getSoundManager().menuMusic.stop();
glView.setCurrentRendering(game);
game.getViewManager().prepareToBeShown();

View File

@@ -62,7 +62,7 @@ public class LevelsScreen extends Screen<LinearLayout> implements LevelButtonOnC
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
topBar.update();
build();

View File

@@ -63,7 +63,7 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
createViews();
topBar.update();

View File

@@ -19,6 +19,7 @@ public class SettingsScreen extends Screen<LinearLayout> implements View.OnClick
private final int CALL_ID_CONFIRM_RESET = 1;
private TopBar topBar;
private ToggleButton musicToggle;
private ToggleButton soundToggle;
private Button resetButton;
private boolean resetPressed = false;
@@ -28,6 +29,8 @@ public class SettingsScreen extends Screen<LinearLayout> implements View.OnClick
public SettingsScreen(GameActivity gameActivity) {
super(ScreenType.SETTINGS, gameActivity, R.layout.settings);
topBar = super.createTopBar(R.id.settings_topbar);
musicToggle = (ToggleButton) layout.findViewById(R.id.settings_musictoggle);
musicToggle.setOnClickListener(this);
soundToggle = (ToggleButton) layout.findViewById(R.id.settings_soundtoggle);
soundToggle.setOnClickListener(this);
resetButton = (Button) layout.findViewById(R.id.settings_reset);
@@ -38,16 +41,21 @@ public class SettingsScreen extends Screen<LinearLayout> implements View.OnClick
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
topBar.update();
soundToggle.setChecked(gameActivity.getSoundManager().isSoundOn());
musicToggle.setChecked(!gameActivity.getSoundManager().isMusicMuted());
soundToggle.setChecked(!gameActivity.getSoundManager().isSoundsMuted());
resetButton.setEnabled(super.caller != ScreenType.GAME);
resetPressed = false;
}
@Override
public void onBackKeyDown() {
gameActivity.getDataStorageHandler()
.writeSoundsMuted(gameActivity.getSoundManager().isSoundsMuted());
gameActivity.getDataStorageHandler()
.writeMusicMuted(gameActivity.getSoundManager().isMusicMuted());
//ResetButton is disabled if caller is GAME, because shortMenu or GoalMessage would still be visible on next level start
if (resetPressed && (super.caller == ScreenType.LEVELS || super.caller == ScreenType.GAME)) {
super.caller = ScreenType.WORLDS;
@@ -57,8 +65,10 @@ public class SettingsScreen extends Screen<LinearLayout> implements View.OnClick
@Override
public void onClick(View v) {
if (v.equals(soundToggle)) {
gameActivity.getSoundManager().setSoundOn(soundToggle.isChecked());
if (v.equals(musicToggle)) {
gameActivity.getSoundManager().setMusicMuted(!musicToggle.isChecked());
} else if (v.equals(soundToggle)) {
gameActivity.getSoundManager().setSoundsMuted(!soundToggle.isChecked());
} else if (v.equals(resetButton)) {
resetConfirmDialog.show(CALL_ID_CONFIRM_RESET, R.string.confirm_dialog_reset);
}

View File

@@ -61,7 +61,7 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
glView.setCurrentRendering(rendering);
((StartScene) rendering.getScene()).randomizeWorld();

View File

@@ -16,11 +16,13 @@ import de.frajul.endlessroll.rendering.Rendering;
*/
public class StartScreenRendering extends Rendering<StartScene> {
private GameActivity gameActivity;
private Timer timer;
private ParticleSystem particleSystem;
public StartScreenRendering(GameActivity gameActivity) throws Exception {
super(gameActivity);
this.gameActivity = gameActivity;
this.particleSystem = new ParticleSystem(gameActivity);
}
@@ -29,7 +31,7 @@ public class StartScreenRendering extends Rendering<StartScene> {
GameLog.d("init Start Screen Rendering");
this.timer = timer;
if (isFirstTime)
scene = new StartScene(texturePack, particleSystem);
scene = new StartScene(gameActivity, texturePack, particleSystem);
else {
scene.setTexturePack(texturePack);
}

View File

@@ -17,11 +17,13 @@ import de.frajul.endlessroll.rendering.Rendering;
*/
public class TestScreenRendering extends Rendering<TestScreenScene> {
private GameActivity gameActivity;
private Timer timer;
private ParticleSystem particleSystem;
public TestScreenRendering(GameActivity gameActivity) throws Exception{
super(gameActivity);
this.gameActivity = gameActivity;
particleSystem = new ParticleSystem(gameActivity);
}
@@ -30,7 +32,7 @@ public class TestScreenRendering extends Rendering<TestScreenScene> {
this.timer = timer;
try {
if (isFirstTime)
scene = new TestScreenScene(texturePack, particleSystem);
scene = new TestScreenScene(gameActivity, texturePack, particleSystem);
else
scene.setTexturePack(texturePack);
}catch (Exception e){

View File

@@ -87,7 +87,7 @@ public class ToolShopScreen extends Screen<RelativeLayout> implements View.OnCli
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
topBar.update();
slotSettings.unlockSlotsIfLevelReached(gameActivity.getUser().getLevelUpBounties());

View File

@@ -42,7 +42,7 @@ public class WorldsScreen extends Screen<RelativeLayout> implements WorldButtonO
@Override
public void prepareToBeShown() {
gameActivity.getSoundManager().setCurrentMusic(gameActivity.getSoundManager().menuMusic);
gameActivity.getSoundManager().menuMusic.start();
topBar.update();
for (WorldButton button : worldButtons)

View File

@@ -12,64 +12,57 @@ public class Music {
private ExceptionHandler handler;
private MediaPlayer player;
private boolean mute;
private boolean paused = true;
private int pausedPosition;
private boolean started;
private boolean muted;
private boolean paused;
private boolean activityPaused;
public Music(ExceptionHandler handler, Context context, int id) {
this.handler = handler;
player = MediaPlayer.create(context, id);
}
public void setMute(boolean mute) {
this.mute = mute;
if (mute && !paused) {
stop();
paused = false;
}
if (!mute && !paused)
start();
}
public void pause() {
try {
if (!paused) {
player.pause();
paused = true;
pausedPosition = player.getCurrentPosition();
}
} catch (Exception e) {
handler.onException(e);
}
}
public void start() {
try {
if (!mute)
player.start();
paused = false;
} catch (Exception e) {
handler.onException(e);
}
started = true;
paused = false;
onStateChanged();
}
public void stop() {
try {
if (!paused)
player.pause();
player.seekTo(0);
paused = true;
} catch (Exception e) {
handler.onException(e);
}
started = false;
onStateChanged();
reset();
}
public void setMuted(boolean muted) {
this.muted = muted;
onStateChanged();
}
public void resume() {
public void pause() {
paused = true;
onStateChanged();
}
public void activityPause() {
activityPaused = true;
onStateChanged();
}
public void activityResume() {
activityPaused = false;
onStateChanged();
}
private void onStateChanged() {
try {
if (paused) {
player.seekTo(pausedPosition);
start();
boolean newState = started && !muted && !paused && !activityPaused;
if (player.isPlaying()) {
if (!newState)
player.pause();
} else {
if (newState)
player.start();
}
} catch (Exception e) {
handler.onException(e);

View File

@@ -0,0 +1,55 @@
package de.frajul.endlessroll.sounds;
/**
* Created by Julian on 17.01.2018.
*/
public class Sound {
private int soundId;
private float volume;
private boolean looping;
public Sound(int soundId) {
this(soundId, 1.0f);
}
public Sound(int soundId, float volume) {
this(soundId, volume, false);
}
public Sound(int soundId, boolean looping) {
this(soundId, 1.0f, looping);
}
public Sound(int soundId, float volume, boolean looping) {
this.soundId = soundId;
this.volume = volume;
this.looping = looping;
}
public int getSoundId() {
return soundId;
}
public void setSoundId(int soundId) {
this.soundId = soundId;
}
public float getVolume() {
return volume;
}
public void setVolume(float volume) {
this.volume = volume;
}
public boolean isLooping() {
return looping;
}
public void setLooping(boolean looping) {
this.looping = looping;
}
}

View File

@@ -4,8 +4,10 @@ import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import java.util.ArrayList;
import java.util.List;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.entities.tools.ToolType;
import de.frajul.endlessroll.main.GameActivity;
import de.frajul.endlessroll.main.GameLog;
@@ -16,52 +18,93 @@ public class SoundManager {
private Context context;
private SoundPool soundPool;
private boolean soundOn;
private boolean soundsMuted;
private boolean musicMuted;
public final Music menuMusic;
public final Music gameMusic;
private Music currentMusic;
public final Sound goalSound;
public final Sound dieSound;
public final Sound collectStarSound;
public final Sound collectEnergySound;
public final Sound countdownSound;
public final Sound explosionSound;
public final Sound fireworkSound;
public final Sound stasisSound;
public final Sound mushroomSound;
public final Sound springSound;
public final Sound placeToolSound;
public final Sound magnetSound;
private List<SoundStream> allStartedStreams = new ArrayList<>();
public SoundManager(GameActivity activity) {
this.context = activity;
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
menuMusic = new Music(activity, activity, R.raw.music_menu);
menuMusic.getPlayer().setLooping(true);
gameMusic = new Music(activity, context, R.raw.music_game);
gameMusic.getPlayer().setLooping(true);
ToolType.loadAllPlacingSounds(this);
goalSound = new Sound(loadSound(R.raw.sound_goal));
dieSound = new Sound(loadSound(R.raw.sound_die));
collectStarSound = new Sound(loadSound(R.raw.sound_collect_star), .7f);
collectEnergySound = new Sound(loadSound(R.raw.sound_collect_energy));
countdownSound = new Sound(loadSound(R.raw.sound_countdown));
explosionSound = new Sound(loadSound(R.raw.sound_explosion), 2);
fireworkSound = new Sound(loadSound(R.raw.sound_firework));
stasisSound = new Sound(loadSound(R.raw.sound_stasis), 1.3f, true);
mushroomSound = new Sound(loadSound(R.raw.sound_mushroom));
springSound = new Sound(loadSound(R.raw.sound_spring), 1.5f);
placeToolSound = new Sound(loadSound(R.raw.sound_place_tool), 1.5f);
magnetSound = new Sound(loadSound(R.raw.sound_magnet), 1.2f, true);
}
public void setCurrentMusic(Music music) {
if (currentMusic != null && !currentMusic.equals(music)) {
currentMusic.pause();
public void setSoundsMuted(boolean soundsMuted) {
this.soundsMuted = soundsMuted;
for (SoundStream stream : allStartedStreams) {
float systemVolume = getSystemVolume();
soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(),
systemVolume * stream.getModifiedVolume());
}
this.currentMusic = music;
if (music != null)
currentMusic.start();
}
public void setSoundOn(boolean on) {
this.soundOn = on;
menuMusic.setMute(!on);
gameMusic.setMute(!on);
public void setMusicMuted(boolean musicMuted) {
this.musicMuted = musicMuted;
menuMusic.setMuted(musicMuted);
gameMusic.setMuted(musicMuted);
}
public boolean isSoundOn() {
return soundOn;
public boolean isSoundsMuted() {
return soundsMuted;
}
public void pause() {
public boolean isMusicMuted() {
return musicMuted;
}
public void activityPause() {
soundPool.autoPause();
if (currentMusic != null)
currentMusic.pause();
gameMusic.activityPause();
menuMusic.activityPause();
}
public void resume() {
public void activityResume() {
soundPool.autoResume();
if (currentMusic != null)
currentMusic.resume();
gameMusic.activityResume();
menuMusic.activityResume();
}
public void pauseAllSounds() {
for (SoundStream stream : allStartedStreams)
soundPool.pause(stream.getId());
}
public void resumeAllSounds() {
for (SoundStream stream : allStartedStreams)
soundPool.resume(stream.getId());
}
public void destroy() {
@@ -75,21 +118,43 @@ public class SoundManager {
return sound;
}
public void playSound(int id) {
float volume = getVolume();
int feedback = soundPool.play(id, volume, volume, 1, 0, 1);
if (feedback == 0)
GameLog.e("SoundId: " + id + " cannot be played");
public SoundStream playSound(Sound sound) {
float systemVolume = getSystemVolume();
int streamId = soundPool.play(sound.getSoundId(), systemVolume * sound.getVolume(),
systemVolume * sound.getVolume(), 1, sound.isLooping() ? -1 : 0, 1);
if (streamId == 0)
GameLog.e("SoundId: " + sound.getSoundId() + " cannot be played");
SoundStream soundStream = new SoundStream(streamId, sound.getVolume());
allStartedStreams.add(soundStream);
return soundStream;
}
private float getVolume() {
if (soundOn) {
AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
float volume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
return volume / maxVolume;
public void onStreamVolumeChanged(SoundStream stream) {
if (!soundsMuted) {
float systemVolume = getSystemVolume();
soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(),
systemVolume * stream.getModifiedVolume());
}
return 0;
}
public void stopSound(SoundStream stream) {
allStartedStreams.remove(stream);
soundPool.stop(stream.getId());
}
public void stopAllSounds() {
for (SoundStream stream : allStartedStreams)
soundPool.stop(stream.getId());
allStartedStreams.clear();
}
private float getSystemVolume() {
if (soundsMuted)
return 0;
AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
float volume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
return volume / maxVolume;
}
}

View File

@@ -0,0 +1,37 @@
package de.frajul.endlessroll.sounds;
/**
* Created by Julian on 19.01.2018.
*/
public class SoundStream {
private int id;
private float soundVolume;
private float currentVolumeModifier;
public SoundStream(int id, float soundVolume) {
this.id = id;
this.soundVolume = soundVolume;
}
public float getModifiedVolume() {
return soundVolume * currentVolumeModifier;
}
public int getId() {
return id;
}
public float getSoundVolume() {
return soundVolume;
}
public float getCurrentVolumeModifier() {
return currentVolumeModifier;
}
public void setCurrentVolumeModifier(float currentVolumeModifier) {
this.currentVolumeModifier = currentVolumeModifier;
}
}

View File

@@ -1,7 +1,6 @@
package de.frajul.endlessroll.views;
import android.graphics.Typeface;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
@@ -9,6 +8,8 @@ import android.widget.TextView;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.main.game.Game;
import de.frajul.endlessroll.sounds.SoundManager;
import de.frajul.endlessroll.sounds.SoundStream;
/**
* Created by Julian on 31.07.2016.
@@ -18,26 +19,35 @@ public class Countdown implements Animation.AnimationListener {
private Game game;
private AnimationSet animations;
private TextView textView;
private SoundManager soundManager;
private SoundStream soundStream;
private boolean firstHalfRepeated = true;
private int repeatCount = 0;
public Countdown(Game game, Typeface typeface, TextView textView) {
public Countdown(Game game, SoundManager soundManager, Typeface typeface, TextView textView) {
this.game = game;
this.soundManager = soundManager;
this.textView = textView;
this.textView.setTypeface(typeface);
animations = (AnimationSet) AnimationUtils.loadAnimation(game.getContext(), R.anim.countdown);
animations = (AnimationSet) AnimationUtils
.loadAnimation(game.getContext(), R.anim.countdown);
for (Animation animation : animations.getAnimations())
animation.setAnimationListener(this);
}
public void start() {
reset();
textView.startAnimation(animations);
if (textView.getAnimation() == null || !textView.getAnimation().isInitialized()) {
reset();
textView.startAnimation(animations);
soundStream = soundManager.playSound(soundManager.countdownSound);
}
}
public void stop() {
textView.clearAnimation();
if (soundStream != null)
soundManager.stopSound(soundStream);
}
private void reset() {
@@ -59,6 +69,7 @@ public class Countdown implements Animation.AnimationListener {
public void onAnimationRepeat(Animation animation) {
if (!firstHalfRepeated)
repeatCount++;
firstHalfRepeated = !firstHalfRepeated;
textView.setText((3 - repeatCount) + "");
if (repeatCount == 1) {

View File

@@ -18,6 +18,7 @@ import de.frajul.endlessroll.main.screens.Screen;
public class GameOverMessage implements View.OnClickListener {
private Animation fadeIn;
private GameActivity gameActivity;
private Game game;
private View layout;
@@ -27,6 +28,7 @@ public class GameOverMessage implements View.OnClickListener {
public GameOverMessage(Game game, GameActivity gameActivity, View layout) {
this.game = game;
this.gameActivity = gameActivity;
this.layout = layout;
layout.setVisibility(View.GONE);
Typeface typeface = gameActivity.getTypeface();
@@ -61,6 +63,7 @@ public class GameOverMessage implements View.OnClickListener {
private void hide() {
layout.clearAnimation();
layout.setVisibility(View.GONE);
gameActivity.getSoundManager().stopAllSounds();
}
@Override

View File

@@ -87,6 +87,7 @@ public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.
private void hide() {
layout.clearAnimation();
layout.setVisibility(View.GONE);
gameActivity.getSoundManager().stopAllSounds();
}
@Override

View File

@@ -51,7 +51,7 @@ public class ViewManager implements View.OnClickListener {
gameOverMessage = new GameOverMessage(game, gameActivity,
layout.findViewById(R.id.game_game_over_message));
goalMessage = new GoalMessage(game, gameActivity, layout.findViewById(R.id.game_goal_message));
countdown = new Countdown(game, gameActivity.getTypeface(),
countdown = new Countdown(game, gameActivity.getSoundManager(), gameActivity.getTypeface(),
(TextView) layout.findViewById(R.id.game_countdown));
}
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@drawable/guis_music_off" />
<item android:state_checked="true"
android:drawable="@drawable/guis_music_on" />
</selector>

View File

@@ -13,14 +13,23 @@
<RelativeLayout
android:layout_width="match_parent"
android:background="@drawable/backgrounds_menu_grasslands"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="@drawable/backgrounds_menu_grasslands">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:layout_marginLeft="20dp">
android:layout_marginLeft="20dp"
android:orientation="vertical">
<ToggleButton
android:id="@+id/settings_musictoggle"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/xml_selector_music"
android:textOff=""
android:textOn=""/>
<ToggleButton
android:id="@+id/settings_soundtoggle"
@@ -32,10 +41,10 @@
<Button
android:id="@+id/settings_reset"
style="@style/GameButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
style="@style/GameButton"
android:text="@string/settings_reset"/>
</LinearLayout>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.