Esempio n. 1
0
 // Crush block funtion
 override public void  BlockCrush(bool force)
 {
     if (destroying)
     {
         return;
     }
     if (eventCountBorn == SessionAssistant.main.eventCount && !force)
     {
         return;
     }
     eventCountBorn = SessionAssistant.main.eventCount;
     level--;
     if (level == 0)
     {
         slot.SetScore(1);
         slot.block = null;
         SlotGravity.Reshading();
         StartCoroutine(DestroyingRoutine());
         return;
     }
     if (level > 0)
     {
         anim.Play("BlockCrush");
         AudioAssistant.Shot("BlockHit");
         sr.sprite = sprites[level - 1];
     }
 }
Esempio n. 2
0
 // проигрыш в игре
 void ShowLoseGamePopup()
 {
     AudioAssistant.Shot("YouLose");
     isPlaying = false;
     GameCamera.main.HideField();
     UIAssistant.main.ShowPage("YouLoseGame");
 }
Esempio n. 3
0
    IEnumerator BaseSession() // базовая куротина, проверающая победу или порожение
    {
        while (!limitationRoutineIsOver && !targetRoutineIsOver)
        {
            yield return(0);
        }
        StartNavel.main.Fin_Activ(false);
        Debug.Log(limitationRoutineIsOver + "   " + targetRoutineIsOver);
        if (!reachedTheTarget)
        {
            yield return(StartCoroutine(GameCamera.main.HideFieldRoutine()));

            FieldAssistant.main.RemoveField();
            ShowLoseGamePopup();

            yield break;
        }
        iteraction = false;


        yield return(new WaitForSeconds(0.2f));

        UIAssistant.main.ShowPage("TargetIsReached");
        AudioAssistant.Shot("TargetIsReached");
        yield return(StartCoroutine(Utils.WaitFor(() => CPanel.uiAnimation == 0, 0.4f)));

        UIAssistant.main.ShowPage("Field");

        yield return(StartCoroutine(Utils.WaitFor(CanIWait, 1f)));

        yield return(StartCoroutine(GameCamera.main.HideFieldRoutine()));

        FieldAssistant.main.RemoveField();
        StartCoroutine(YouWin());
    }
Esempio n. 4
0
    void Awake()
    {
        main = this;

        AudioSource[] sources = GetComponents<AudioSource> ();
        music = sources[0];
        sfx = sources[1];

        // Filling the dictionary of sounds
        data.Clear ();
        data.Add ("ChipHit", chipHit);
        data.Add ("ChipCrush", chipCrush);
        data.Add ("BombCrush", bombCrush);
        data.Add ("CrossBombCrush", crossBombCrush);
        data.Add ("ColorBombCrush", colorBombCrush);
        data.Add ("SwapSuccess", swapSuccess);
        data.Add ("SwapFailed", swapFailed);
        data.Add ("CreateBomb", createBomb);
        data.Add ("CreateCrossBomb", createCrossBomb);
        data.Add ("CreateColorBomb", createColorBomb);
        data.Add ("TimeWarrning", timeWarrning);
        data.Add ("YouWin", youWin);
        data.Add ("YouLose", youLose);
        data.Add ("Buy", buy);

        StartCoroutine (MixBufferRoutine ());

        mute = PlayerPrefs.GetInt("Mute") == 1;
        FindObjectOfType<MuteIcon>().UpdateIcon();
    }
Esempio n. 5
0
    // программа, запускающая определённые действия при выигрыше в игре
    IEnumerator YouWin()
    {
        AudioAssistant.Shot("YouWin");
        SteamAchiments.main.TakeAchievement("WIN_GAME");
        PlayerPrefs.SetInt("FirstPass", 1);
        isPlaying = false;

        if (ProfileAssistant.main.local_profile.current_level == LevelProfile.main.level)
        {
            if (Level.all.ContainsKey(ProfileAssistant.main.local_profile.current_level + 1))
            {
                ProfileAssistant.main.local_profile.current_level++;
            }
        }
        ProfileAssistant.main.local_profile.SetScore(LevelProfile.main.level, score);
        GameCamera.main.HideField();
        yield return(0);

        while (CPanel.uiAnimation > 0)
        {
            yield return(0);
        }
        yield return(0);

        UIAssistant.main.ShowPage("YouWin");
        Debug.Log("YouWin");
        AnimationAssistant.main.Ferverk(1);
        UserProfileUtils.WriteProfileOnDevice(ProfileAssistant.main.local_profile);
    }
Esempio n. 6
0
    IEnumerator PlayRoutine()
    {
        int last_swap        = SessionAssistant.main.swapEvent;
        int last_match_count = SessionAssistant.main.matchCount;


        while (true)
        {
            if (SessionAssistant.main.matchCount - last_match_count >= 3)
            {
                Feedback feedback = ProjectParameters.main.feedbacks.GetRandom();
                text.gameObject.SetActive(true);
                text.text = feedback.text;
                anim.Play();
                AudioAssistant.Shot(feedback.audioClipName);
                while (anim.isPlaying)
                {
                    yield return(0);
                }
            }
            text.gameObject.SetActive(false);

            while (SessionAssistant.main.swapEvent <= last_swap)
            {
                yield return(0);
            }

            last_match_count = SessionAssistant.main.matchCount;
            last_swap        = SessionAssistant.main.swapEvent;

            yield return(0);

            yield return(StartCoroutine(Utils.WaitFor(SessionAssistant.main.CanIWait, 0.5f)));
        }
    }
Esempio n. 7
0
 void  Awake()
 {
     chip          = GetComponent <Chip>();
     chip.chipType = "CrossBomb";
     birth         = SessionAssistant.main.eventCount;
     AudioAssistant.Shot("CreateCrossBomb");
 }
    void Awake()
    {
        main = this;


        AudioSource[] sources = GetComponents <AudioSource> ();
        music = sources[0];
        sfx   = sources[1];

        // Filling the dictionary of sounds
        data.Clear();
        data.Add("ChipHit", chipHit);
        data.Add("ChipCrush", chipCrush);
        data.Add("BombCrush", bombCrush);
        data.Add("CrossBombCrush", crossBombCrush);
        data.Add("ColorBombCrush", colorBombCrush);
        data.Add("SwapSuccess", swapSuccess);
        data.Add("SwapFailed", swapFailed);
        data.Add("CreateBomb", createBomb);
        data.Add("CreateCrossBomb", createCrossBomb);
        data.Add("CreateColorBomb", createColorBomb);
        data.Add("TimeWarrning", timeWarrning);
        data.Add("YouWin", youWin);
        data.Add("YouLose", youLose);
        data.Add("Buy", buy);

        StartCoroutine(MixBufferRoutine());

        mute = PlayerPrefs.GetInt("Mute") == 1;
        FindObjectOfType <MuteIcon>().UpdateIcon();
    }
Esempio n. 9
0
    // Coroutine destruction / activation
    IEnumerator DestroyChipFunction()
    {
        matching = true;
        AudioAssistant.Shot("ChipCrush");

        yield return(new WaitForSeconds(0.2f));

        matching = false;

        chip.ParentRemove();


        float   velocity = 0;
        Vector3 impuls   = new Vector3(Random.Range(-3f, 3f), Random.Range(1f, 5f), 0);

        impuls      += chip.impulse;
        chip.impulse = Vector3.zero;
        SpriteRenderer sprite = GetComponent <SpriteRenderer>();

        sprite.sortingLayerName = "Foreground";

        float rotationSpeed = Random.Range(-30f, 30f);
        float growSpeed     = Random.Range(0.2f, 0.8f);

        while (transform.position.y > -10)
        {
            velocity           += Time.deltaTime * 20;
            velocity            = Mathf.Min(velocity, 40);
            transform.position += impuls * Time.deltaTime * transform.localScale.x;
            transform.position -= Vector3.up * Time.deltaTime * velocity * transform.localScale.x;
            transform.Rotate(0, 0, rotationSpeed * Time.deltaTime);
            transform.localScale += Vector3.one * growSpeed * Time.deltaTime;
            yield return(0);
        }
    }
Esempio n. 10
0
 void Awake()
 {
     _chip            = GetComponent <Chip>();
     live             = true;
     chip.destroyable = false;
     AudioAssistant.Shot("SugarCreate");
 }
Esempio n. 11
0
 void  Awake()
 {
     _chip         = GetComponent <Chip>();
     chip.chipType = "SimpleBomb";
     birth         = MatchThree.main.eventCount;
     AudioAssistant.Shot("CreateBomb");
 }
Esempio n. 12
0
    void Awake()
    {
        main = this;

        AudioSource[] sources = GetComponents <AudioSource> ();
        music = sources[0];
        sfx   = sources[1];

        data.Clear();
        data.Add("ChipHit", chipHit);
        data.Add("ChipCrush", chipCrush);
        data.Add("BombCrush", bombCrush);
        data.Add("CrossBombCrush", crossBombCrush);
        data.Add("ColorBombCrush", colorBombCrush);
        data.Add("SwapSuccess", swapSuccess);
        data.Add("SwapFailed", swapFailed);
        data.Add("CreateBomb", createBomb);
        data.Add("CreateCrossBomb", createCrossBomb);
        data.Add("CreateColorBomb", createColorBomb);
        data.Add("TimeWarrning", timeWarrning);
        data.Add("YouWin", youWin);
        data.Add("YouLose", youLose);
        data.Add("Buy", buy);
        StartCoroutine(MixBufferRoutine());
    }
Esempio n. 13
0
    IEnumerator CrossMixRoutine(Chip secondary)
    {
        chip.busy        = true;
        chip.destroyable = false;
        SessionAssistant.main.EventCounter();

        Transform effect = ContentAssistant.main.GetItem("CrossMixEffect").transform;

        effect.SetParent(Slot.folder);
        effect.position = transform.position;
        effect.GetComponent <Animation>().Play();
        AudioAssistant.Shot("CrossBombCrush");

        chip.Minimize();

        FieldAssistant.main.BlockCrush(chip.slot.coord, false);
        FieldAssistant.main.JellyCrush(chip.slot.coord);

        int count = 8;

        for (int path = 1; count > 0; path++)
        {
            count = 0;
            foreach (Side side in Utils.allSides)
            {
                if (Freez(chip.slot.coord + Utils.SideOffset(side) * path))
                {
                    count++;
                }
            }
        }

        if (chip.slot.jam)
        {
            chip.jamType = chip.slot.jam.type;
        }

        count = 8;
        for (int path = 1; count > 0; path++)
        {
            count = 0;
            yield return(new WaitForSeconds(0.05f));

            foreach (Side side in Utils.allSides)
            {
                if (Crush(chip.slot.coord + Utils.SideOffset(side) * path, chip.jamType))
                {
                    count++;
                }
            }
        }

        chip.ParentRemove();

        yield return(new WaitForSeconds(0.1f));

        chip.busy = false;
        chip.HideChip(false);
    }
Esempio n. 14
0
 // Showing lose popup
 void ShowLosePopup()
 {
     AudioAssistant.Shot("YouLose");
     AudioAssistant.main.PlayMusic("Menu");
     isPlaying = false;
     FindObjectOfType <FieldCamera>().HideField();
     UIServer.main.ShowPage("YouLose");
 }
Esempio n. 15
0
 // Play of successfully purchased sound
 void onMarketPurchase(PurchasableVirtualItem item, string payload, Dictionary <string, string> extra)
 {
     if (payload != developerPayload)
     {
         return;
     }
     AudioAssistant.Shot("Buy");
 }
Esempio n. 16
0
    IEnumerator MoneyMinusAnim()
    {
        AudioAssistant.Shot("Coin");
        MoneyAnim.SetBool("Minus", true);
        yield return(new WaitForSeconds(0.2f));

        MoneyAnim.SetBool("Minus", false);
    }
Esempio n. 17
0
    IEnumerator MoneyAddAnim()
    {
        SteamAchiments.main.TakeAchievement("FIRST_MONEY");
        AudioAssistant.Shot("AddMoney");
        MoneyAnim.SetBool("Add", true);
        yield return(new WaitForSeconds(0.1f));

        MoneyAnim.SetBool("Add", false);
    }
Esempio n. 18
0
 void onItemPurchased(PurchasableVirtualItem item, string payload)
 {
     if (payload != developerPayload)
     {
         return;
     }
     AudioAssistant.Shot("Buy");
     BerryStorePurchaser.Succeed(item.ItemId);
 }
Esempio n. 19
0
    // Coroutine of special control mode
    public override IEnumerator Logic()
    {
        finger.gameObject.SetActive(false);
        yield return(StartCoroutine(Utils.WaitFor(SessionAssistant.main.CanIWait, 0.1f)));

        Slot target = null;

        while (true)
        {
            if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended))
            {
                target = ControlAssistant.main.GetSlotFromTouch();
            }
            if (target && target.chip && target.chip.chipType == "SimpleChip")
            {
                AudioAssistant.Shot("MagicFinger");

                finger.gameObject.SetActive(true);
                finger.transform.position = target.transform.position;
                finger.Play();

                yield return(new WaitForSeconds(2));

                ProfileAssistant.main.local_profile["finger"]--;

                float prob = Random.value;
                if (prob < 0.35f)
                {
                    FieldAssistant.main.AddPowerup(target.coord, "SimpleBomb");
                }
                else if (prob < 0.7f)
                {
                    FieldAssistant.main.AddPowerup(target.coord, "CrossBomb");
                }
                else if (prob < 0.9f)
                {
                    FieldAssistant.main.AddPowerup(target.coord, "ColorBomb");
                }
                else
                {
                    FieldAssistant.main.AddPowerup(target.coord, "RainbowHeart");
                }
                SessionAssistant.main.EventCounter();
                break;
            }
            yield return(0);
        }

        while (finger.isPlaying)
        {
            yield return(0);
        }

        finger.gameObject.SetActive(false);

        UIAssistant.main.ShowPage("Field");
    }
    // Effect logic
    IEnumerator MixEffect()
    {
        yield return(0);

        Chip chip = GetChip();

        while (chip.parentSlot == null)
        {
            yield return(0);
        }
        transform.position = chip.parentSlot.transform.position;

        while (!SessionAssistant.main.CanIMatch())
        {
            yield return(0);
        }

        SessionAssistant.main.matching++;
        SessionAssistant.main.EventCounter();

        GetComponent <Animation>().Play();
        AudioAssistant.Shot("CrossBombCrush");

        sx = chip.parentSlot.slot.x;
        sy = chip.parentSlot.slot.y;

        yield return(new WaitForSeconds(0.3f));

        FieldAssistant.main.JellyCrush(sx, sy);

        for (int i = 1; i < 12; i++)
        {
            Crush(sx + i, sy + i);
            Crush(sx + i, sy);
            Crush(sx + i, sy - i);
            Crush(sx, sy + i);
            Crush(sx, sy - i);
            Crush(sx - i, sy + i);
            Crush(sx - i, sy);
            Crush(sx - i, sy - i);
            yield return(new WaitForSeconds(0.05f));
        }

        yield return(new WaitForSeconds(0.2f));

        SessionAssistant.main.matching--;

        while (GetComponent <Animation>().isPlaying)
        {
            yield return(0);
        }
        FieldAssistant.main.BlockCrush(sx, sy, false);

        destroingLock = false;
        DestroyChipFunction();
    }
Esempio n. 21
0
    void Start()
    {
        SpriteRenderer sr = GetComponent <SpriteRenderer>();

        if (type == "Jam A")
        {
            sr.sprite = jamAsprite;
        }
        AudioAssistant.Shot("WeedCreate");
    }
Esempio n. 22
0
    IEnumerator MixEffect()
    {
        yield return(0);

        Chip chip = GetChip();

        while (chip.parentSlot == null)
        {
            yield return(0);
        }
        transform.position = chip.parentSlot.transform.position;

        while (!SessionAssistant.main.CanIMatch())
        {
            yield return(0);
        }

        SessionAssistant.main.matching++;

        GetComponent <Animation>().Play();
        AudioAssistant.Shot("BombCrush");

        sx = chip.parentSlot.slot.x;
        sy = chip.parentSlot.slot.y;

        int width  = FieldAssistant.main.field.width;
        int height = FieldAssistant.main.field.height;

//		FieldAssistant.main.JellyCrush(sx, sy);

        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                Crush(x, y);
            }
        }

        AnimationAssistant.main.Explode(transform.position, 5, 30);

        yield return(new WaitForSeconds(0.6f));

        SessionAssistant.main.matching--;

        while (GetComponent <Animation>().isPlaying)
        {
            yield return(0);
        }

        FieldAssistant.main.BlockCrush(sx, sy, false);

        destroingLock = false;
        DestroyChipFunction();
    }
Esempio n. 23
0
    void Awake()
    {
        main = this;

        AudioSource[] sources = GetComponents<AudioSource>();
        music = sources[0];
        sfx = sources[1];

        StartCoroutine(MixBufferRoutine());

        mute = PlayerPrefs.GetInt("Mute") == 1;
    }
Esempio n. 24
0
    IEnumerator BaseSession()
    {
        DebugPanel.Log("Status (Base)", "Session", "Began.");
        while (!limitationRoutineIsOver && !targetRoutineIsOver)
        {
            yield return(0);
        }

        DebugPanel.Log("Status (Base)", "Session", "Waiting is over.");

        // Checking the condition of losing
        if (!reachedTheTarget)
        {
            DebugPanel.Log("Status (Base)", "Session", "Session failed. Clearing.");
            yield return(StartCoroutine(GameCamera.main.HideFieldRoutine()));

            FieldAssistant.main.RemoveField();
            ShowLosePopup();
            DebugPanel.Log("Status (Base)", "Session", "Session failed. End.");
            yield break;
        }

        iteraction = false;

        DebugPanel.Log("Status (Base)", "Session", "Session completed. Target is reached.");

        yield return(new WaitForSeconds(0.2f));

        UIAssistant.main.ShowPage("TargetIsReached");
        AudioAssistant.Shot("TargetIsReached");
        yield return(StartCoroutine(Utils.WaitFor(() => CPanel.uiAnimation == 0, 0.4f)));

        UIAssistant.main.ShowPage("Field");


        DebugPanel.Log("Status (Base)", "Session", "Session completed. Bonus matching.");

        // Conversion of the remaining moves into bombs and activating them
        yield return(StartCoroutine(BurnLastMovesToPowerups()));

        yield return(StartCoroutine(Utils.WaitFor(CanIWait, 1f)));

        DebugPanel.Log("Status (Base)", "Session", "Session completed. Clearing.");

        // Ending the session, showing win popup
        yield return(StartCoroutine(GameCamera.main.HideFieldRoutine()));

        FieldAssistant.main.RemoveField();
        StartCoroutine(YouWin());

        DebugPanel.Log("Status (Base)", "Session", "Session completed. End.");
    }
Esempio n. 25
0
 public bool ChekLoseGame()
 {
     if (MatchThree.main.eat <= 0 || MatchThree.main.energy <= 0 || MatchThree.main.hygiene <= 0 || MatchThree.main.coffee <= 0)
     {
         AudioAssistant.Shot("YouLose");
         UIAssistant.main.ShowPage("YouLoseGame");
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 26
0
 // Function item purchase
 public void Purchase(int seedsCount, string goodId, int goodCount)
 {
     if (ProfileAssistant.main.local_profile["seed"] < seedsCount)
     {
         UIAssistant.main.ShowPage("Store");
         return;
     }
     ProfileAssistant.main.local_profile["seed"] -= seedsCount;
     ProfileAssistant.main.local_profile[goodId] += goodCount;
     ProfileAssistant.main.SaveUserInventory();
     ItemCounter.RefreshAll();
     AudioAssistant.Shot("Buy");
 }
Esempio n. 27
0
 // Crush block funtion
 public void JellyCrush()
 {
     if (level == 1)
     {
         AudioAssistant.Shot("JellyCrush");
         StartCoroutine(DestroyingRoutine());
         return;
     }
     level--;
     anim.Play("JellyCrush");
     AudioAssistant.Shot("JellyrHit");
     sr.sprite = sprites[level - 1];
 }
Esempio n. 28
0
    IEnumerator  DestroyChipFunction(string powerup)
    {
        if (birth == SessionAssistant.main.eventCount)
        {
            chip.destroying = false;
            yield break;
        }

        if (!chip.destroying)
        {
            yield break;
        }

        chip.busy    = true;
        chip.gravity = false;

        chip.Play("Match");
        AudioAssistant.Shot("RainbowHeartCrush");
        SessionAssistant.main.EventCounter();

        FieldAssistant.main.JellyCrush(chip.slot.coord);

        chips.Add(chip);
        branchCount = GetBranchCount();

        if (chip.slot.jam)
        {
            chip.jamType = chip.slot.jam.type;
        }
        for (int i = 0; i < branchCount; i++)
        {
            StartCoroutine(LightningBranch(powerup));
        }

        while (branchCount != -1)
        {
            yield return(0);
        }

        chip.ParentRemove();
        chip.busy    = false;
        chip.gravity = true;

        chip.Play("Destroying");
        while (chip.IsPlaying("Destroying"))
        {
            yield return(0);
        }

        Destroy(gameObject);
    }
    // Showing lose popup
    void ShowLosePopup()
    {
        int result = RatingAssistant.main.CheckRatingDate();

        AudioAssistant.Shot("YouLose");
        AudioAssistant.main.PlayMusic("Menu");
        isPlaying = false;
        FindObjectOfType <FieldCamera>().HideField();
        if (result == 2 && !RatingAssistant.main.wasRated)
        {
            RatingAssistant.main.ShowLikePopUp(false);
        }
        UIServer.main.ShowPage("YouLose");
    }
Esempio n. 30
0
    IEnumerator TimerRoutine()
    {
        yield return(0);

        while (SessionAssistant.main.timeLeft > 10)
        {
            yield return(new WaitForSeconds(0.1f));
        }
        while (SessionAssistant.main.timeLeft > 0)
        {
            AudioAssistant.Shot("TimeWarrning");
            yield return(new WaitForSeconds(1f));
        }
    }
    public override void OnInspectorGUI()
    {
        main = (AudioAssistant) target;
        Undo.RecordObject (main, "");

        main.musicVolume = EditorGUILayout.Slider("Music Volume", main.musicVolume, 0f, 1f);

        if (main.tracks == null)
            main.tracks = new List<AudioAssistant.MusicTrack>();

        if (main.sounds == null)
            main.sounds = new List<AudioAssistant.Sound>();

        #region Music Tracks
        tracksFade.target = GUILayout.Toggle(tracksFade.target, "Music Tracks", EditorStyles.foldout);

        if (EditorGUILayout.BeginFadeGroup(tracksFade.faded)) {

            EditorGUILayout.BeginHorizontal();

            GUILayout.Space(20);
            GUILayout.Label("Name", GUILayout.Width(100));
            GUILayout.Label("Audio Clip", GUILayout.ExpandWidth(true));

            EditorGUILayout.EndHorizontal();

            foreach (AudioAssistant.MusicTrack track in main.tracks) {
                EditorGUILayout.BeginHorizontal();

                if (GUILayout.Button("X", GUILayout.Width(20))) {
                    main.tracks.Remove(track);
                    break;
                }
                track.name = EditorGUILayout.TextField(track.name, GUILayout.Width(100));
                track.track = (AudioClip) EditorGUILayout.ObjectField(track.track, typeof(AudioClip), false, GUILayout.ExpandWidth(true));

                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Add", GUILayout.Width(60)))
                main.tracks.Add(new AudioAssistant.MusicTrack());

            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndFadeGroup();
        #endregion

        #region Sounds
        iapsFade.target = GUILayout.Toggle(iapsFade.target, "Sounds", EditorStyles.foldout);

        if (EditorGUILayout.BeginFadeGroup(iapsFade.faded)) {

            EditorGUILayout.BeginHorizontal();

            GUILayout.Space(20);
            GUILayout.Space(40);
            GUILayout.Label("Name", GUILayout.Width(120));
            GUILayout.Label("Audio Clips", GUILayout.ExpandWidth(true));

            EditorGUILayout.EndHorizontal();

            foreach (AudioAssistant.Sound sound in main.sounds) {
                EditorGUILayout.BeginHorizontal();

                if (GUILayout.Button("X", GUILayout.Width(20))) {
                    main.sounds.Remove(sound);
                    break;
                }
                if (GUILayout.Button("Edit", GUILayout.Width(40))) {
                    if (edit == sound)
                        edit = null;
                    else
                        edit = sound;
                }

                sound.name = EditorGUILayout.TextField(sound.name, GUILayout.Width(120));

                if (edit == sound || sound.clips.Count == 0) {
                    EditorGUILayout.BeginVertical();
                    for (int i = 0; i < sound.clips.Count; i++) {
                        sound.clips[i] = (AudioClip) EditorGUILayout.ObjectField(sound.clips[i], typeof(AudioClip), false, GUILayout.ExpandWidth(true));
                        if (sound.clips[i] == null) {
                            sound.clips.RemoveAt(i);
                           break;
                        }
                    }
                    AudioClip new_clip = (AudioClip) EditorGUILayout.ObjectField(null, typeof(AudioClip), false, GUILayout.Width(150));
                    if (new_clip)
                        sound.clips.Add(new_clip);
                    EditorGUILayout.EndVertical();
                } else {
                    GUILayout.Label(sound.clips.Count.ToString() + " audio clip(s)", EditorStyles.miniBoldLabel);
                }

                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Add", GUILayout.Width(60))) {
                main.sounds.Add(new AudioAssistant.Sound());
                edit = main.sounds[main.sounds.Count - 1];
            }
            if (GUILayout.Button("Sort", GUILayout.Width(60))) {
                main.sounds.Sort((AudioAssistant.Sound a, AudioAssistant.Sound b) => {
                    return string.Compare(a.name, b.name);
                });
                foreach (AudioAssistant.Sound sound in main.sounds)
                    sound.clips.Sort((AudioClip a, AudioClip b) => {
                        return string.Compare(a.ToString(), b.ToString());
                    });
            }

            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndFadeGroup();
        #endregion
    }