Beispiel #1
0
    public IEnumerator EventProcess()
    {
        transform.collider2D.enabled = false;

        if (setCheckpoint == true)
        {
            mainScript.checkpointPos = /*transform.position.x*/ checkpointPosition;
        }

        if (setMusic == true)
        {
            StartCoroutine(mainScript.MusicPlay(music, musicLoop, musicWaitForClipEnd, musicDelay));
        }

        else         // if (setMusic == false)

        if (stopMusic == true)
        {
            StartCoroutine(mainScript.MusicStop(musicFadeOut));
        }


        if (setText == true)
        {
            uiTextMesh.text = text;
            uiTextGO.transform.localPosition = new Vector3(textPosition.x, textPosition.y, uiTextGO.transform.localPosition.z);
            uiTextMesh.characterSize         = textSize;
            uiTextMesh.color = textColor;

            // (Text duration : if set to 0, text duration is null and text will stay displayed)

            if (textDuration > 0)
            {
                yield return(new WaitForSeconds(textDuration));

                uiTextMesh.text = "";
            }
        }

        if (setLevel == true)
        {
            if (setCheckpoint == true)
            {
                PlayerPrefs.SetFloat("Spawn position", checkpointPosition);
            }

            mainScript.level = levelValue;             // Change level value in "MainScript"

            StartCoroutine(mainScript.SetLevel());
        }

        if (setUpgrade == true)
        {
            GameObject upgradeClone = upgradePool.Spawn();
            upgradeClone.transform.position = new Vector3(transform.position.x + upgradePosition.x, transform.position.y + upgradePosition.y, upgradeClone.transform.localPosition.z);
        }
    }
    public IEnumerator ApplyDamage(int damage)
    {
        // Ensure that object receiving damage is not sleeping (and therefore out of screen)
        if (asleep == true)
        {
            yield break;                        //return null; // FIX CS 13 01 2015 VERIFIER !!
        }
        hp = hp - 1;

        if (hp > 0)
        {
            StartCoroutine(DamageBlink());
            audio.clip = armorSound;
            audio.Play();

            // Raise the difficulty for our boss fight !

            if (hp < 20)
            {
                actionDelayMax = shootDelayMax = 60.0f;
            }

            if (hp < 10)
            {
                actionDelayMax = shootDelayMax = 35.0f;
            }
        }

        else
        {
            audio.Play();
            myTr.collider2D.enabled = false;
            yield return(null);

            asleep = true;

            // Stop all coroutines relative to the audio in "MainScript"
            mainScript.StopCoroutine("MusicPlay");
            mainScript.StopCoroutine("MusicStop");
            yield return(null);

            mainScript.audio.Stop();

            StartCoroutine(mainScript.MusicPlay(victorySound, false, false, 0.0f));             // music, musicLoop, musicWaitForClipEnd, musicDelay

            playerScript.UpdateScore(scoreValue);

            //REGULAR METHOD : INSTANTIATE (unoptimised)
            //explosionClone = Instantiate(explosion, Vector3 (myTr.position.x, myTr.position.y, myTr.position.z), Quaternion.identity);

            // Pooling Method : grab object from "ObjectPooler"'s gameObjects list
            // Create a big explosion !
            for (int i = 0; i < 20; i++)
            {
                explosionClone = explosionPool.Spawn();
                float randomXPos = UnityEngine.Random.Range(-0.08f, 0.08f);
                float randomYPos = UnityEngine.Random.Range(-0.08f, 0.08f);

                explosionClone.transform.position = new Vector3(myTr.position.x + randomXPos, myTr.position.y + randomYPos, explosionClone.transform.position.z);

                audio.clip = deathSound;
                audio.Play();
                yield return(new WaitForSeconds(audio.clip.length));
            }

            var tmpColor = mySpriteRdr.color;
            tmpColor.a        = 0.0f;
            mySpriteRdr.color = tmpColor;

            // search for "GiveCoins" value in player preferences
            if (PlayerPrefs.HasKey("Give coins") == false || PlayerPrefs.GetInt("Give coins") == 1)
            {
                giveCoins = false;                                                                                                 // we use the value 2 for true, and one for false
            }
            else if (PlayerPrefs.GetInt("Give coins") == 2)
            {
                giveCoins = true;
            }

            if (giveCoins == true)
            {
                coinPos = myTr.position;
                for (i = 0; i < scoreValue * 0.1f; i++)
                {
                    //REGULAR METHOD : INSTANTIATE (unoptimised)
                    //coinClone = Instantiate(coin, coinPos, Quaternion.identity);

                    // Pooling Method : grab object from "ObjectPooler"'s gameObjects list
                    coinClone = coinPool.Spawn();
                    coinClone.transform.position = coinPos;

                    yield return(null);
                }
            }

            yield return(new WaitForSeconds(2.0f));

            StartCoroutine(DestroyObject());
        }
    }