Exemple #1
0
        //-----StructureMethods-----//
        //Methods related to structures. Might move this later if a better spot is found.

        //A selection of blocks is saved as a prefab. This methods creates a structure based on that prefab.
        //Only works during runtime.
        public static Structure LoadStructure(string PrefabName)
        {
            //The RoomControl prefab, prefab that contains everything in the structure
            var RoomControl = (GameObject)Resources.Load(PrefabName, typeof(GameObject));

            //Gets structure  height and width set inside the prefab
            int StructureHeight = RoomControl.GetComponent <StructurePropertiesScript>().StructureHeight;
            int StructureWidth  = RoomControl.GetComponent <StructurePropertiesScript>().StructureWidth;

            //Create a new empty structure we will fill afterwards
            Structure Structure = new Structure(StructureHeight, StructureWidth);

            //All the scripts inside one SpawnerObject, see the for loop
            Component[] Scripts;

            //Goes through each child of RoomControl (Tiles, blocks, actors, etc.)
            foreach (Transform SpawnerObject in RoomControl.transform)
            {
                float x = SpawnerObject.position.x - 0.5f;
                float y = SpawnerObject.position.y - 0.5f;

                //Gets all CreateSpawnerScripts inside SpawnerObject, defined in StructurePropertiesScript
                //All CreateSpawnerScripts have a method CreateSpawner that adds a spawner to the sctructure
                Scripts = SpawnerObject.GetComponents(typeof(CreateSpawnerScript));

                //Loops through all the scripts to find the one we need.
                foreach (CreateSpawnerScript Script in Scripts)
                {
                    Script.CreateSpawner(Structure, x, y);
                    break;
                }
            }
            return(Structure);
        }
Exemple #2
0
 private void ClearAllEvents()
 {
     if (spawnManager)
     {
         if (spawnerObjects != null)
         {
             for (int i = 0; i < spawnerObjects.Count; i++)
             {
                 Spawner       spawner       = spawnManager.spawners[i].Prefab.GetComponent <Spawner>();
                 SpawnerObject spawnerObject = spawnerObjects[i];
                 for (int j = 0; j < spawnerObject.waveObjects.Count; j++)
                 {
                     Wave wave = spawner.waves[j];
                     wave.ClearEvents();
                     WaveObject waveObject = spawnerObject.waveObjects[j];
                     for (int k = 0; k < waveObject.levelUnitsList.Count; k++)
                     {
                         WaveObject.LevelObjectData levelUnitStruct = waveObject.levelUnitsList[k];
                         LevelUnit levelUnit = levelUnitStruct.levelUnit.GetComponent <LevelUnit>();
                         if (levelUnit)
                         {
                             levelUnit.ClearNamedStateEventsLists();
                         }
                     }
                 }
             }
         }
     }
     musicIntensityManager.ClearAll();
 }
Exemple #3
0
    private void GetLevelObjects()
    {
        int layer = LayerMask.NameToLayer(Strings.Layers.GROUND);

        levelObjects = new List <GameObject>();
        GameObject[] gameObjects = FindObjectsOfType <GameObject>();
        foreach (GameObject gameObject in gameObjects)
        {
            if (gameObject.layer == layer && gameObject.GetComponent <LevelUnit>())
            {
                levelObjects.Add(gameObject);
            }
        }

        for (int i = 0; i < spawnerObjects.Count; i++)
        {
            SpawnerObject spawnerObject = spawnerObjects[i];
            for (int j = 0; j < spawnerObject.waveObjects.Count; j++)
            {
                WaveObject waveObject = spawnerObject.waveObjects[j];
                waveObject.levelUnitsList = new List <WaveObject.LevelObjectData>(levelObjects.Count);
                string localEventName = eventName.Replace(spawnerNumberString, (i + 1).ToString()).Replace(waveNumberString, (j + 1).ToString());
                foreach (GameObject levelObject in levelObjects)
                {
                    LevelUnit levelUnit = levelObject.GetComponent <LevelUnit>();
                    WaveObject.LevelObjectData levelUnitStruct = new WaveObject.LevelObjectData();
                    levelUnitStruct.levelUnit = levelUnit;
                    bool eventExists = false;
                    if (levelUnit.CheckForEvent(localEventName, LevelUnitStates.Floor))
                    {
                        levelUnitStruct.state = LevelUnitStates.Floor;
                        eventExists           = true;
                    }
                    else if (levelUnit.CheckForEvent(localEventName, LevelUnitStates.Cover))
                    {
                        levelUnitStruct.state = LevelUnitStates.Cover;
                        eventExists           = true;
                    }
                    else if (levelUnit.CheckForEvent(localEventName, LevelUnitStates.Pit))
                    {
                        levelUnitStruct.state = LevelUnitStates.Pit;
                        eventExists           = true;
                    }

                    if (!eventExists)
                    {
                        levelUnitStruct.state = levelUnit.defaultState;
                    }
                    waveObject.levelUnitsList.Add(levelUnitStruct);
                }
            }
        }
    }
Exemple #4
0
    private void SpawnerDeathCallback(GameObject spawner)
    {
        SpawnerObject spawnerObject = spawner.GetComponent <SpawnerObject>();

        if (spawnerObject.spawnPoint != null)
        {
            spawnerObject.spawnPoint.available = true;
            spawnerObject.spawnPoint           = null;
        }

        spawners.Remove(spawner);
    }
Exemple #5
0
 private bool ReadWaveData()
 {
     spawnManager          = FindObjectOfType <SpawnManager>();
     musicIntensityManager = FindObjectOfType <MusicIntensityManager>();
     if (spawnManager && musicIntensityManager)
     {
         spawnerButtonNames = new List <string>(spawnManager.spawners.Count);
         spawnerObjects     = new List <SpawnerObject>(spawnManager.spawners.Count);
         for (int i = 0; i < spawnManager.spawners.Count; i++)
         {
             Spawner spawner = spawnManager.spawners[i].Prefab.GetComponent <Spawner>();
             if (spawner)
             {
                 spawnerButtonNames.Add("Spawner " + (i + 1));
                 SpawnerObject spawnerObject = new SpawnerObject();
                 spawnerObject.waveButtonNames = new List <string>(spawner.waves.Count);
                 spawnerObject.waveObjects     = new List <WaveObject>(spawner.waves.Count);
                 for (int j = 0; j < spawner.waves.Count; j++)
                 {
                     Wave wave = spawner.waves[j];
                     spawnerObject.waveButtonNames.Add("Wave " + (j + 1));
                     WaveObject waveObject     = new WaveObject();
                     string     musicEventName = "Music_" + eventName.Replace(spawnerNumberString, (i + 1).ToString()).Replace(waveNumberString, (j + 1).ToString());
                     waveObject.audioClip = musicIntensityManager.GetAudioClipByEventName(musicEventName);
                     spawnerObject.waveObjects.Add(waveObject);
                 }
                 spawnerObjects.Add(spawnerObject);
             }
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
    void SpawnerShooting(SpawnerObject spawner)
    {
        bool fired = false;

        if (spawner.burstRateCount > spawner.burstRate)
        {
            if (spawner.burstStopCount == 0 && spawner.rotateOnBurst && spawner.burstRate != 0)
            {
                if (spawner.lockOn)
                {
                    Vector2 dir = (playerTransform.position - (transform.position + spawner.position)).normalized;
                    Debug.Log("Locked on");
                    spawner.currentRotation = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
                }
                else
                {
                    spawner.currentRotation += spawner.currentSpinSpeed;
                }
            }

            for (int i = 0; i < spawner.totalSpreads; i++)
            {
                for (int j = 0; j < spawner.individualTotalAngles; j++)
                {
                    if (spawner.fireRateCount > spawner.fireRate)
                    {
                        fired = true;

                        int bulletLoopCount = 0;
                        while (bulletObjectPool[currentSpawner][spawner.nextBullet].thisBulletScript.bulletEnabled)
                        {
                            bulletLoopCount++;
                            if (bulletLoopCount > spawner.bulletCount)
                            {
                                bulletObjectPool[currentSpawner][poolDisableIndex[currentSpawner]].thisBulletScript.DisableBullet();
                                spawner.nextBullet = poolDisableIndex[currentSpawner];
                                poolDisableIndex[currentSpawner]++;
                                poolDisableIndex[currentSpawner] %= spawner.bulletCount;
                            }
                            else
                            {
                                spawner.nextBullet++;
                                spawner.nextBullet %= spawner.bulletCount;
                            }
                        }
                        float rotation = 0;

                        int tempIndividual = (int)spawner.individualTotalAngles - 1;
                        if (spawner.individualTotalAngles - 1 == 0)
                        {
                            tempIndividual = (int)spawner.individualTotalAngles;
                        }

                        int tempTotal = (int)spawner.totalSpreads - 1;
                        if (spawner.totalSpreads - 1 == 0)
                        {
                            tempTotal = (int)spawner.totalSpreads;
                        }

                        if (spawner.lockOn && !spawner.rotateOnBurst)
                        {
                            Vector2 dir = (playerTransform.position - (transform.position + spawner.position)).normalized;

                            rotation = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
                        }
                        else
                        {
                            rotation = spawner.currentRotation;
                        }

                        rotation += ((spawner.individualSpreadAngle / (tempIndividual)) * j) + ((spawner.totalBulletSpread / (tempTotal)) * i);
                        if (spawner.lockOn)
                        {
                            if (spawner.totalSpreads > 1)
                            {
                                rotation -= ((spawner.totalBulletSpread / 2));
                            }
                            else if (spawner.individualTotalAngles > 1)
                            {
                                rotation -= ((spawner.individualSpreadAngle / 2));
                            }
                        }


                        bulletObjectPool[currentSpawner][spawner.nextBullet].thisBulletScript.SetRotation(rotation);
                        bulletObjectPool[currentSpawner][spawner.nextBullet].bulletTransform.position = spawnerList[currentSpawner].isPositionChildOfOwner ? transform.position + spawnerList[currentSpawner].position : spawnerList[currentSpawner].position;
                        bulletObjectPool[currentSpawner][spawner.nextBullet].thisBulletScript.DisableBullet();
                        bulletObjectPool[currentSpawner][spawner.nextBullet].thisBulletScript.EnableBullet();
                    }
                }
            }

            spawner.fireRateCount += Time.deltaTime;
            if (fired)
            {
                spawner.fireRateCount = 0;
                if (!spawner.rotateOnBurst)
                {
                    spawner.currentRotation += spawner.currentSpinSpeed;
                }
                spawner.burstStopCount++;
            }

            if (spawner.spinSpeedChangeRate != 0 && Mathf.Abs(spawner.currentSpinSpeed) <= Mathf.Abs(spawner.maxSpinSpeed))
            {
                if (!spawner.reversing)
                {
                    spawner.currentSpinSpeed += spawner.spinSpeedChangeRate;
                }
                else
                {
                    spawner.currentSpinSpeed -= spawner.spinSpeedChangeRate;
                }
            }
            else if (spawner.spinReverse)
            {
                if (spawner.reversing)
                {
                    spawner.currentSpinSpeed += spawner.spinSpeedChangeRate;
                }
                else
                {
                    spawner.currentSpinSpeed -= spawner.spinSpeedChangeRate;
                }
                spawner.reversing = !spawner.reversing;
            }
        }


        spawner.burstRateCount += Time.deltaTime;
        if (spawner.burstRate > 0 && spawner.burstStopCount > spawner.burstStop)
        {
            spawner.burstStopCount = 0;
            spawner.burstRateCount = 0;


            if (spawner.burstReturnAngle)
            {
                if (!spawner.rotateOnBurst)
                {
                    spawner.currentRotation = spawner.angle;
                }
                spawner.currentSpinSpeed = spawner.spinSpeed;
                spawner.reversing        = false;
            }
        }
    }