niwa99/Tower-Defense

View on GitHub
app/src/main/java/de/dhbw/game/MusicPlayer.java

Summary

Maintainability
A
2 hrs
Test Coverage
package de.dhbw.game;

import android.app.Activity;
import android.media.MediaPlayer;
import android.widget.Button;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import de.dhbw.R;

public class MusicPlayer extends ATimerUsage{
    private MediaPlayer mediaPlayer;
    private Timer timer;
    private TimerTask timerTask;
    private boolean on;
    private boolean isStarted=false;
    private final int loopTime = 180000;

    public MusicPlayer(boolean on, Activity activity){
        this.on=on;
        startMusicPlayer(activity);
    }

    public void startMusicPlayer(Activity activity){
        this.isStarted=true;
        if(timer!=null){
            timer.cancel();
            timerTask.cancel();
        }
        timer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                Random rand = new Random();
                if(mediaPlayer!=null){
                    mediaPlayer.stop();
                }
                switch(rand.nextInt(4)){
                    case 0:
                        mediaPlayer = MediaPlayer.create(activity, R.raw.tower_defense_soundtrack_1);
                        break;
                    case 1:
                        mediaPlayer = MediaPlayer.create(activity, R.raw.tower_defense_soundtrack_3);
                        break;
                    case 2:
                        mediaPlayer = MediaPlayer.create(activity, R.raw.tower_defense_soundtrack_4);
                        break;
                    case 3:
                        mediaPlayer = MediaPlayer.create(activity, R.raw.tower_defense_soundtrack_5);
                        mediaPlayer.setVolume(80,80);
                        break;
                }
                if(on){
                    mediaPlayer.start();
                }
                lastTimeActionMillis = System.currentTimeMillis();
                setDelay(0);
            }
        };
        timer.scheduleAtFixedRate(timerTask, getDelay(), loopTime);
    }

    public void toggle(boolean on, Activity activity) {
        this.on=on;
        if(on && !mediaPlayer.isPlaying()){
            startMusicPlayer(activity);
        }
        if(on){
            mediaPlayer.start();
        }else {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
            timer.cancel();
            timerTask.cancel();
            calculateDelay(System.currentTimeMillis());
        }
    }

    public boolean isStarted(){
        return isStarted;
    }

    public void stop(){
        mediaPlayer.stop();
        timer.cancel();
        timerTask.cancel();
    }

    @Override
    public void calculateDelay(long time) {
        setDelay(loopTime - (time-lastTimeActionMillis));
    }
}