//-----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); }
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(); }
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); } } } }
private void SpawnerDeathCallback(GameObject spawner) { SpawnerObject spawnerObject = spawner.GetComponent <SpawnerObject>(); if (spawnerObject.spawnPoint != null) { spawnerObject.spawnPoint.available = true; spawnerObject.spawnPoint = null; } spawners.Remove(spawner); }
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; } } }