コード例 #1
0
    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());
    }
コード例 #2
0
    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;
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
    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));
    }
コード例 #6
0
    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();
            }
        }
    }
コード例 #7
0
 private List <PLESpawn> GetWavePLESpawns(int waveIndex)
 {
     return(WorkingLevelData.GetPLESpawnsFromWave(waveIndex));
 }
コード例 #8
0
 public int GetMaxMinSpawnsAllowedCurrentInWave(PLESpawn spawn)
 {
     return
         (Mathf.Min(spawn.MaxPerWave - GetNumberSpawnsInNextWave(spawn),
                    WorkingLevelData.NumSpawns(spawn.spawnType, CurrentWaveIndex)));
 }
コード例 #9
0
 public int NumberSpawnsInWave(SpawnType type, int waveIndex)
 {
     waveIndex = Mathf.Clamp(waveIndex, 0, MaxWaveIndex);
     return(WorkingLevelData.NumSpawns(type, waveIndex));
 }