implemented all sounds and music
This commit is contained in:
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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){
|
||||
|
@ -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());
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
55
app/src/main/java/de/frajul/endlessroll/sounds/Sound.java
Normal file
55
app/src/main/java/de/frajul/endlessroll/sounds/Sound.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -87,6 +87,7 @@ public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.
|
||||
private void hide() {
|
||||
layout.clearAnimation();
|
||||
layout.setVisibility(View.GONE);
|
||||
gameActivity.getSoundManager().stopAllSounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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));
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user