// Path: core/src/com/gdx/musicevents/effects/StartEffect.java
// public interface StartEffect extends Effect {
//     public void initialize(MusicState nextState, MusicState previousState);
//     public void beginStart();
//     public void endStart();
// }
// 
// Path: core/src/com/gdx/musicevents/effects/StopEffect.java
// public interface StopEffect extends Effect {
// 
//     public void initialize(MusicState nextState, MusicState previousState);
//     public void beginStop();
// 
//     public void endStop();
// }


import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import com.badlogic.gdx.utils.ObjectMap;
import com.gdx.musicevents.effects.StartEffect;
import com.gdx.musicevents.effects.StopEffect;
package com.gdx.musicevents;


public class MusicEventManager {

    /**
     * Container for serialization purposes.
     */
    private static class Container {
        
        transient String basePath = "./";
        Array<MusicState> states;

        public Container() {
        }

        private Container(Array<MusicState> states) {
            this.states = states;
        }
    }
    
    private Container container = new Container();

    /**
     * The events that the manager is able to respond to.
     */
    private final ObjectMap<String, MusicState> states = new ObjectMap<String, MusicState>();

    /**
     * The current event.
     */
    private MusicState currentState;

    /**
     * Listeners in the event tool.
     */
    private final Array<MusicEventListener> listeners = new Array<MusicEventListener>();

    /**
     * The transitions in progress.
     */
    private final Array<StartEffect> startTransitions = new Array<StartEffect>();
    
    private StartEffect currentStartEffect;
    

// Path: core/src/com/gdx/musicevents/effects/StartEffect.java
// public interface StartEffect extends Effect {
//     public void initialize(MusicState nextState, MusicState previousState);
//     public void beginStart();
//     public void endStart();
// }
// 
// Path: core/src/com/gdx/musicevents/effects/StopEffect.java
// public interface StopEffect extends Effect {
// 
//     public void initialize(MusicState nextState, MusicState previousState);
//     public void beginStop();
// 
//     public void endStop();
// }


// Path: core/src/com/gdx/musicevents/MusicEventManager.java
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonWriter;
import com.badlogic.gdx.utils.ObjectMap;
import com.gdx.musicevents.effects.StartEffect;
import com.gdx.musicevents.effects.StopEffect;

package com.gdx.musicevents;


public class MusicEventManager {

    /**
     * Container for serialization purposes.
     */
    private static class Container {
        
        transient String basePath = "./";
        Array<MusicState> states;

        public Container() {
        }

        private Container(Array<MusicState> states) {
            this.states = states;
        }
    }
    
    private Container container = new Container();

    /**
     * The events that the manager is able to respond to.
     */
    private final ObjectMap<String, MusicState> states = new ObjectMap<String, MusicState>();

    /**
     * The current event.
     */
    private MusicState currentState;

    /**
     * Listeners in the event tool.
     */
    private final Array<MusicEventListener> listeners = new Array<MusicEventListener>();

    /**
     * The transitions in progress.
     */
    private final Array<StartEffect> startTransitions = new Array<StartEffect>();
    
    private StartEffect currentStartEffect;
    

    private final Array<StopEffect> endTransitions = new Array<StopEffect>();