示例#1
0
    private void OnReceive(NetworkPacket pack, string id)
    {
        switch (pack.Header)
        {
        case PacketType.BarrelPositionPack:
            lock (barrelLock)
                barrelPositions.Enqueue(pack as BarrelPositionPack);
            break;

        case PacketType.WaveSpawnPack:
            this.waveStartPack = (WaveStartPack)pack;
            break;
        }
    }
示例#2
0
    void Update()
    {
        while (toReactivate.Count > 0)
        {
            toReactivate.Dequeue().SetActive(true);
        }

        if (waveStartPack != null)
        {
            waveStartPack = null;
            waveaction();
        }

        if (barrelPositions.Count > 0)
        {
            lock (barrelLock)
            {
                while (barrelPositions.Count > 0)
                {
                    Vector3 position = barrelPositions.Dequeue().position;

                    var newObject = (GameObject)Instantiate(exploding_barrel, position,
                                                            Quaternion.identity);

                    newObject.transform.position = position;
                    newObject.tag = "barrel";
                }
            }
        }

        if (wavenum == 21)           //you win if wave 20 is cleared
        {
            SceneManager.LoadScene("win");
        }

        if (howmanyinwave != 0) //fill up the wave bar with how many enemies are to be cleared
        {
            rate_orks          = (float)numorks / howmanyinwave;
            wavebar.fillAmount = Mathf.Lerp(wavebar.fillAmount, (float)numorks / howmanyinwave, Time.deltaTime * 2f);
        }
        orksonscreen = GameObject.FindGameObjectsWithTag("Ork");
        numorks      = orksonscreen.Length;                                         //HOW MANY ENEMIES CURRENTLY IN GAME

        if (Network.IsHost)
        {
            if (numorks > 0 && numorks < howmanyinwave && (System.DateTime.Now - lastCheck).TotalSeconds >= 30)
            {
                if (numorks == numorksLastCheck)
                {
                    foreach (var obj in orksonscreen)
                    {
                        Root rt = obj.GetComponent <Root>();

                        rt.TakeDamege(2 * (int)rt.HP);
                    }

                    numorks = 0;
                }
                else
                {
                    lastCheck        = System.DateTime.Now;
                    numorksLastCheck = howmanyinwave;
                }
            }
        }

        players   = GameObject.FindGameObjectsWithTag("Player");
        playernum = players.Length;

        if (wavenum < 2) //only one spawn point active
        {
            currentspawnpts.Add(sh1); sh1.SetActive(true); sh2.SetActive(false); sh3.SetActive(false); sh4.SetActive(false);


            if (spawnflash)
            {
                sh1.GetComponent <CanvasGroup>().alpha = 1;
            }
            else
            {
                sh1.GetComponent <CanvasGroup>().alpha -= 0.1f;
            }
        }
        else if (wavenum > 1 && wavenum < 7) //only two spawn points active
        {
            currentspawnpts.Add(sh2); sh1.SetActive(true); sh2.SetActive(true); sh3.SetActive(false); sh4.SetActive(false);
            if (spawnflash)
            {
                sh1.GetComponent <CanvasGroup>().alpha = 1;
                sh2.GetComponent <CanvasGroup>().alpha = 1;
            }
            else
            {
                sh1.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh2.GetComponent <CanvasGroup>().alpha -= 0.1f;
            }
        }
        else if (wavenum > 6 && wavenum < 11) //three spawn points active
        {
            currentspawnpts.Add(sh3); sh1.SetActive(true); sh2.SetActive(true); sh3.SetActive(true); sh4.SetActive(false);
            if (spawnflash)
            {
                sh1.GetComponent <CanvasGroup>().alpha = 1;
                sh2.GetComponent <CanvasGroup>().alpha = 1;
                sh3.GetComponent <CanvasGroup>().alpha = 1;
            }
            else
            {
                sh1.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh2.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh3.GetComponent <CanvasGroup>().alpha -= 0.1f;
            }
        }
        else //all four spawn points active
        {
            currentspawnpts.Add(sh4); sh1.SetActive(true); sh2.SetActive(true); sh3.SetActive(true); sh4.SetActive(true);
            if (spawnflash)
            {
                sh1.GetComponent <CanvasGroup>().alpha = 1;
                sh2.GetComponent <CanvasGroup>().alpha = 1;
                sh3.GetComponent <CanvasGroup>().alpha = 1;
                sh4.GetComponent <CanvasGroup>().alpha = 1;
            }
            else
            {
                sh1.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh2.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh3.GetComponent <CanvasGroup>().alpha -= 0.1f;
                sh4.GetComponent <CanvasGroup>().alpha -= 0.1f;
            }
        }


        if (numorks < 1)           //you've cleared the wave
        {
            wavebreak();
            keepaddingme += 1;
            wave_finished();
            breakover = true;

            if (!isCoroutineExecuting && wavenum < 21)
            {
                StartCoroutine(MyDelayMethod(12f));               //THIS IS HOW LONG THE BREAK LASTS BETWEEN WAVES
            }
        }
        else
        {
            keepaddingme = 0;
        }


        if (wavenum > 1 && wavenum % 2 != 0 && wavenum % 5 != 0 && !saidwagh) //orks yell wagh
        {
            StartCoroutine(wagh(8f));
        }

        if (wavenum > 3 && wavenum % 5 != 0 && !saidinsult) //orks yell insult
        {
            float randtime = Random.Range(14, 24);
            StartCoroutine(insult(randtime));
        }
        else if (wavenum == 2 && !saidinsult) //orks yell insult
        {
            StartCoroutine(insult(4f));
        }
    }