From fb10f2081ebd509aeaba92b635282182ac5c180f Mon Sep 17 00:00:00 2001 From: Recrown Date: Mon, 19 Jun 2017 14:44:31 -0500 Subject: [PATCH] began map implementing --- core/src/zero1hd/polyjet/audio/AudioData.java | 8 ++++++- .../zero1hd/polyjet/audio/GamePlayMap.java | 21 +++++++++++++++++++ .../zero1hd/polyjet/audio/Mp3AudioData.java | 13 ++++++++++-- .../zero1hd/polyjet/audio/WavAudioData.java | 5 +++++ .../zero1hd/polyjet/screens/GameScreen.java | 6 ++++-- .../polyjet/ui/stages/GamePlayArea.java | 14 +++++++++---- 6 files changed, 58 insertions(+), 9 deletions(-) create mode 100755 core/src/zero1hd/polyjet/audio/GamePlayMap.java diff --git a/core/src/zero1hd/polyjet/audio/AudioData.java b/core/src/zero1hd/polyjet/audio/AudioData.java index fd8e5c0..4cafeb1 100755 --- a/core/src/zero1hd/polyjet/audio/AudioData.java +++ b/core/src/zero1hd/polyjet/audio/AudioData.java @@ -49,8 +49,14 @@ public interface AudioData extends Disposable { public AudioFormat getFormat(); /** - * Returns object containing basic audio data; + * returns sample count * @return */ public int getSampleCount(); + + /** + * returns duration of song in seconds + * @return + */ + public float getDuration(); } diff --git a/core/src/zero1hd/polyjet/audio/GamePlayMap.java b/core/src/zero1hd/polyjet/audio/GamePlayMap.java new file mode 100755 index 0000000..343d0ea --- /dev/null +++ b/core/src/zero1hd/polyjet/audio/GamePlayMap.java @@ -0,0 +1,21 @@ +package zero1hd.polyjet.audio; + +import com.badlogic.gdx.audio.Music; + +public class GamePlayMap { + private Music playableClip; + private float playTime; + + public GamePlayMap(AudioData audioData) { + playableClip = audioData.getPlaybackMusic(); + playTime = audioData.getDuration(); + } + + public Music getPlayableClip() { + return playableClip; + } + + public float getPlayTime() { + return playTime; + } +} diff --git a/core/src/zero1hd/polyjet/audio/Mp3AudioData.java b/core/src/zero1hd/polyjet/audio/Mp3AudioData.java index 90491de..9d2b271 100755 --- a/core/src/zero1hd/polyjet/audio/Mp3AudioData.java +++ b/core/src/zero1hd/polyjet/audio/Mp3AudioData.java @@ -31,13 +31,17 @@ public class Mp3AudioData implements AudioData { private int readIndex; private int sampleCount; - + private float durationInSeconds; + private AudioInputStream in; Decoder decoder = new Decoder(); public Mp3AudioData(FileHandle audioFile) { try { - sampleCount = (int) new MP3File(audioFile.file()).getMP3AudioHeader().getNumberOfFrames(); + MP3File mp3File = new MP3File(audioFile.file()); + + sampleCount = (int) mp3File.getMP3AudioHeader().getNumberOfFrames(); + durationInSeconds = mp3File.getMP3AudioHeader().getNumberOfFrames()/readWindowSize; } catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e1) { e1.printStackTrace(); } @@ -149,4 +153,9 @@ public class Mp3AudioData implements AudioData { } } + @Override + public float getDuration() { + return durationInSeconds; + } + } diff --git a/core/src/zero1hd/polyjet/audio/WavAudioData.java b/core/src/zero1hd/polyjet/audio/WavAudioData.java index 5bff0ae..37c2c74 100755 --- a/core/src/zero1hd/polyjet/audio/WavAudioData.java +++ b/core/src/zero1hd/polyjet/audio/WavAudioData.java @@ -80,4 +80,9 @@ public class WavAudioData implements AudioData { playbackMusic.dispose(); decoder.cleanAndClose(); } + + @Override + public float getDuration() { + return decoder.getDurationInSeconds(); + } } diff --git a/core/src/zero1hd/polyjet/screens/GameScreen.java b/core/src/zero1hd/polyjet/screens/GameScreen.java index 57e2440..d11ca5b 100755 --- a/core/src/zero1hd/polyjet/screens/GameScreen.java +++ b/core/src/zero1hd/polyjet/screens/GameScreen.java @@ -19,6 +19,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import zero1hd.polyjet.Polyjet; import zero1hd.polyjet.audio.AudioData; +import zero1hd.polyjet.audio.GamePlayMap; import zero1hd.polyjet.ui.stages.GamePlayArea; import zero1hd.polyjet.ui.windows.FPSWindow; @@ -37,7 +38,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor { private AudioData music; - public GameScreen(Polyjet polyJet) { + public GameScreen(Polyjet polyJet, GamePlayMap gpm) { core = polyJet; // Overlay stuff @@ -98,7 +99,8 @@ public class GameScreen extends ScreenAdapter implements InputProcessor { // Continue to add things to input multiplexer gameArea = new GamePlayArea(polyJet.getAssetManager(), core.getPrefs()); - + gameArea.setAudioMap(gpm); + inputs = new InputMultiplexer(); inputs.addProcessor(this); inputs.addProcessor(overlay); diff --git a/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java b/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java index d35b393..930bb33 100755 --- a/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java +++ b/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java @@ -6,10 +6,10 @@ import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.scenes.scene2d.Stage; -import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.viewport.FitViewport; import zero1hd.polyjet.Polyjet; +import zero1hd.polyjet.audio.GamePlayMap; import zero1hd.polyjet.controls.KeyMap; import zero1hd.polyjet.entity.CollisionDetector; import zero1hd.polyjet.entity.Entities; @@ -20,7 +20,7 @@ import zero1hd.polyjet.entity.ally.PolyJetEntity; public class GamePlayArea extends Stage { public PolyJetEntity polyjet; - + private GamePlayMap audioMap; public EntityController ec; private CollisionDetector collisionDetector; @@ -39,7 +39,6 @@ public class GamePlayArea extends Stage { public GamePlayArea(AssetManager assetManager, Preferences prefs) { super(new FitViewport(Polyjet.GAME_AREA_WIDTH, Polyjet.GAME_AREA_HEIGHT)); Gdx.app.debug("Game Area", "new area created"); - background = assetManager.get("star_bg.png"); polyjet = new PolyJetEntity(assetManager, 25f, 25f, "standard"); @@ -49,6 +48,11 @@ public class GamePlayArea extends Stage { addActor(polyjet); } + public void setAudioMap(GamePlayMap audioMap) { + time = 0; + this.audioMap = audioMap; + } + /** * needs to be called right after set (should be called in show method). * @param prefs @@ -108,7 +112,9 @@ public class GamePlayArea extends Stage { @Override public void act(float delta) { - time = TimeUtils.millis()/10f; + if (audioMap != null && time < audioMap.getPlayTime()) { + time += delta; + } collisionDetector.collisionCheck(); ec.deathClean();