private void SavePicture() { Texture2D snapshot = new Texture2D((int)Camera.main.pixelRect.width, (int)Camera.main.pixelRect.height); Rect snapRect = Camera.main.pixelRect; snapshot.ReadPixels(snapRect, 0, 0); TextureScale.Bilinear(snapshot, (int)LevelData.fixedSize.x, (int)LevelData.fixedSize.y); snapshot.Apply(); WorkingLevelData.SetPicture(snapshot.EncodeToPNG()); }
private void Reset(params object[] parameters) { List <PLESpawn> currentWaveSpawners = WorkingLevelData.GetPLESpawnsFromWave(CurrentWaveIndex); for (int i = 0; i < currentWaveSpawners.Count; i++) { PLESpawn spawn = currentWaveSpawners[i]; spawn.SetOnCriticalEnemiesDead(null); } FindObjectsOfType <EnemyBase>().ToList().ForEach(enemy => { enemy.OnDeath(); }); CurrentWaveIndex = 0; infiniteWaveIndex = 0; hasCycledLevel = false; }
private void CallWave(int waveIndex) { CurrentWaveIndex = waveIndex; editorInstance.EnableCurrentWaveSpawnParents(waveIndex); List <PLESpawn> currentWaveSpawners = WorkingLevelData.GetPLESpawnsFromWave(waveIndex); for (int i = 0; i < currentWaveSpawners.Count; i++) { PLESpawn spawn = currentWaveSpawners[i]; spawn.SetOnCriticalEnemiesDead(OnCriticalSpawnsInSpawnerDead); spawn.StartSpawning(); } EventSystem.Instance.TriggerEvent(Strings.Events.PLE_CALL_WAVE, waveIndex); EventSystem.Instance.TriggerEvent(Strings.Events.WAVE_COMPLETE, infiniteWaveIndex); }
public int GetNumberSpawnsInNextWave(PLESpawn spawn) { int numSpawnsInNextWave = 0; int currentIndex = CurrentWaveIndex; int nextIndex = currentIndex + 1; if (nextIndex > MaxWaveIndex && InfiniteWavesEnabled) { nextIndex = 0; } if (nextIndex <= MaxWaveIndex) { numSpawnsInNextWave = WorkingLevelData.NumSpawns(spawn.spawnType, nextIndex); } return(numSpawnsInNextWave); }
public int GetMaxSpawnsAllowedInWave(PLESpawn spawn, int waveIndex) { waveIndex = Mathf.Clamp(waveIndex, 0, MaxWaveIndex); int previousWaveIndex = waveIndex - 1; int previousWaveMinSpawnCount = 0; if (previousWaveIndex < 0 && InfiniteWavesEnabled) { previousWaveIndex = MaxWaveIndex; } if (previousWaveIndex >= 0) { previousWaveMinSpawnCount = WorkingLevelData.MinNumSpawns(spawn.spawnType, previousWaveIndex); } int max = spawn.MaxPerWave - previousWaveMinSpawnCount; return(Mathf.Clamp(max, 0, spawn.MaxPerWave)); }
private void OnCriticalSpawnsInSpawnerDead() { //check if all spawners in given wave are marked as completed List <PLESpawn> currentWaveSpawners = WorkingLevelData.GetPLESpawnsFromWave(CurrentWaveIndex); bool lastWaveIsComplete = true; if (CurrentWaveIndex > 0 || (CurrentWaveIndex == 0 && InfiniteWavesEnabled && hasCycledLevel)) { int lastWaveIndex = CurrentWaveIndex - 1; if (lastWaveIndex < 0) { lastWaveIndex = MaxWaveIndex; } List <PLESpawn> lastWaveSpawners = WorkingLevelData.GetPLESpawnsFromWave(lastWaveIndex); lastWaveIsComplete = lastWaveSpawners.All(spawner => { return(spawner.AllEnemiesDead); }); } bool currentWaveMinEnemiesAreDead = currentWaveSpawners.All(spawner => { return(spawner.MinEnemiesDead); }); if (lastWaveIsComplete && currentWaveMinEnemiesAreDead) { if (CurrentWaveIndex >= WorkingLevelData.WaveCount - 1 && !InfiniteWavesEnabled) { EventSystem.Instance.TriggerEvent( Strings.Events.LEVEL_COMPLETED, SceneTracker.CurrentSceneName, ScoreManager.Instance.GetScore(), ModManager.leftArmOnLoad.ToString(), ModManager.rightArmOnLoad.ToString()); } else if (CurrentWaveIndex >= WorkingLevelData.WaveCount - 1 && InfiniteWavesEnabled) { hasCycledLevel = true; infiniteWaveIndex++; CallWave(0); } else { CallNextWave(); } } }
private List <PLESpawn> GetWavePLESpawns(int waveIndex) { return(WorkingLevelData.GetPLESpawnsFromWave(waveIndex)); }
public int GetMaxMinSpawnsAllowedCurrentInWave(PLESpawn spawn) { return (Mathf.Min(spawn.MaxPerWave - GetNumberSpawnsInNextWave(spawn), WorkingLevelData.NumSpawns(spawn.spawnType, CurrentWaveIndex))); }
public int NumberSpawnsInWave(SpawnType type, int waveIndex) { waveIndex = Mathf.Clamp(waveIndex, 0, MaxWaveIndex); return(WorkingLevelData.NumSpawns(type, waveIndex)); }