예제 #1
0
 public void InstantiateSwitchTiles(LevelDataSO level)
 {
     foreach (SwitchTileData switchTileData in level.switchTileDataList)
     {
         InstantiateSwitchTile(switchTileData);
     }
 }
예제 #2
0
    public void Load(LevelDataSO toLoad)
    {
        if (toLoad)
        {
            _board.settings = toLoad.boardSettings;

            LevelGoal oldGoal, goal;
            oldGoal = _gameManager.GetComponent <LevelGoal>();

            if (toLoad.timedEnabled)
            {
                goal = _gameManager.gameObject.AddComponent <LevelGoalTimed>() as LevelGoal;
                goal.Load(toLoad.timedGoal);
            }
            else if (toLoad.collectedEnabled)
            {
                goal = _gameManager.gameObject.AddComponent <LevelGoalCollected>() as LevelGoal;
                goal.Load(toLoad.collectedGoal);
            }
            else
            {
                goal = _gameManager.gameObject.AddComponent <LevelGoalScored>() as LevelGoal;
                goal.Load(toLoad.scoreGoal);
            }

            DestroyImmediate(oldGoal);
        }
    }
예제 #3
0
    public void Save(string fileName)
    {
        LevelGoalData goalData = _gameManager.GetComponent <LevelGoal>().ForSave();
        LevelDataSO   data     = CreateAsset <LevelDataSO>(fileName);

        data.boardSettings = _board.settings;

        if (goalData.GetType() == typeof(CollectedGoalData))
        {
            data.collectedGoal    = (CollectedGoalData)goalData;
            data.collectedEnabled = true;
        }
        else if (goalData.GetType() == typeof(TimedGoalData))
        {
            data.timedGoal    = (TimedGoalData)goalData;
            data.timedEnabled = true;
        }
        else
        {
            data.scoreGoal    = goalData;
            data.scoreEnabled = true;
        }

        EditorUtility.SetDirty(data);
    }
예제 #4
0
    public void LevelLoadData()
    {
        foreach (LevelDataSO SO in levelDatas)
        {
            string saveString = SaveManager.Loading(SO.iD);

            Debug.Log(saveString);
            if (saveString != null) //CHECKS IF FILE EXISTS
            {
                //LevelDataRecorder SavedData = JsonUtility.FromJson<LevelDataRecorder>(saveString); CANT USE FROMJSON WITH SOs
                LevelDataSO SavedData = new LevelDataSO();
                JsonUtility.FromJsonOverwrite(saveString, SavedData);
                levelDatas[int.Parse(SO.iD) - 1].isCompleted   = SavedData.isCompleted;
                levelDatas[int.Parse(SO.iD) - 1].iD            = SavedData.iD;
                levelDatas[int.Parse(SO.iD) - 1].minutes       = SavedData.minutes;
                levelDatas[int.Parse(SO.iD) - 1].seconds       = SavedData.seconds;
                levelDatas[int.Parse(SO.iD) - 1].totalEnemies  = SavedData.totalEnemies;
                levelDatas[int.Parse(SO.iD) - 1].enemiesKilled = SavedData.enemiesKilled;
                levelDatas[int.Parse(SO.iD) - 1].deaths        = SavedData.deaths; // Put .whaetver thats on the SO like .deaths, .kills, etc.



                //https://www.youtube.com/watch?v=6uMFEM-napE&t=64s Go to 6:00 Min, make multiple files per scriptable saved object
            }
        }
    }
예제 #5
0
 public void InstantiateWaves(LevelDataSO level)
 {
     //Layer 0
     IntantiateLayerWave(level.layer0WaveDataList, layer0WavePrefab);
     //Layer 1
     IntantiateLayerWave(level.layer1WaveDataList, layer1WavePrefab);
     //Layer 2
     if (layer2WavePrefab != null)
     {
         IntantiateLayerWave(level.layer2WaveDataList, layer2WavePrefab);
     }
 }
예제 #6
0
 public void InstantiateSpawners(LevelDataSO level)
 {
     //Layer 0
     InstantiateLayerSpanwers(level.layer0SpawnerDataList, layer0SpawnerPrefab);
     //Layer 1
     InstantiateLayerSpanwers(level.layer1SpawnerDataList, layer1SpawnerPrefab);
     //Layer 2
     if (layer2SpawnerPrefab != null)
     {
         InstantiateLayerSpanwers(level.layer2SpawnerDataList, layer2SpawnerPrefab);
     }
 }
예제 #7
0
    // After LevelData SO was loaded, the method checks the data is not null, and than init level parameters and start spawning.
    private void OnLoadDone(AsyncOperationHandle <LevelDataSO> obj)
    {
        if (obj.Result == null)
        {
            Debug.LogError("[Addressables] Load result is null.");
            return;
        }

        levelData = obj.Result;
        OnLevelDataLoadedEvent.Invoke();

        currentScore  = levelData.StartScore;
        maxLevelScore = currentScore;

        OnScoreChangesEvent.Invoke(currentScore);

        targets = levelData.Targets;

        StartCoroutine(SpawnTarget());
    }
예제 #8
0
    private void LoadLevel(int index)
    {
        LevelDataSO level = FindLevel(index);

        //Set player position
        playerController.initPositionData = level.playerSpawnPosition;
        playerController.ResetPosition();

        //Instantiate switch tiles
        currentLevelTileList.Clear();
        InstantiateSwitchTiles(level);

        //Set graphical stuff (background & level name sprites)
        if (level.backgroundSpriteData != null)
        {
            backgroundSpriteRenderer.spriteData = level.backgroundSpriteData;
            backgroundSpriteRenderer.Init();
        }
        if (level.levelIndicatorSpriteData != null)
        {
            levelNameSpriteRenderer.spriteData = level.levelIndicatorSpriteData;
            levelNameSpriteRenderer.Init();
        }

        //Instantiate spawners
        currentLevelSpawnerList.Clear();
        InstantiateSpawners(level);


        //Instantiate waves (aka spawner generator)
        currentLevelWaveList.Clear();
        InstantiateWaves(level);

        //End level firework
        if (level.isEndLevel)
        {
            endFireWork = Instantiate(endFireworkPrefab);
            endFireWork.transform.parent = transform;
            endFireWork.name             = "Firework";
        }
    }
예제 #9
0
    void Update()
    {
        if (level == null)
        {
            level = levelManager.GetCurrentLevelData();
            UpdateSceneSwitchTileList();
            UpdateSceneSpawnerList();
            UpdateSceneWaveList();
        }
        else
        {
            level = levelManager.GetCurrentLevelData();
            //If switch tile are added or removed from the level scriptable object, update the scene accordingly
            int levelAllSwitchTileCount = level.switchTileDataList.Length;
            if (levelAllSwitchTileCount != sceneSwitchTileDataList.Count)
            {
                levelManager.DestroySwitchTiles();
                levelManager.InstantiateSwitchTiles(level);
            }
            UpdateSceneSwitchTileList();

            //If spawners are added or removed from the level scriptable object, update the scene accordingly
            int levelAllSpawnerCount = level.layer0SpawnerDataList.Length + level.layer1SpawnerDataList.Length + level.layer2SpawnerDataList.Length;
            if (levelAllSpawnerCount != sceneSpawnerDataList.Count)
            {
                levelManager.DestroySpawners();
                levelManager.InstantiateSpawners(level);
            }
            UpdateSceneSpawnerList();

            //If waves are added or removed from the level scriptable object, update the scene accordingly
            int levelAllWaveCount = level.layer0WaveDataList.Length + level.layer1WaveDataList.Length + level.layer2WaveDataList.Length;
            if (levelAllWaveCount != sceneWaveDataList.Count)
            {
                levelManager.DestroyWaves();
                levelManager.InstantiateWaves(level);
            }
            UpdateSceneWaveList();
        }
    }
예제 #10
0
    private LevelDataSO FindLevel(int levelIndex)
    {
        LevelDataSO res   = null;
        int         i     = 0;
        bool        found = false;

        while (!found && i < levelDataSOList.Length)
        {
            if (levelDataSOList[i].levelIndex == levelIndex)
            {
                found = true;
                res   = levelDataSOList[i];
            }
            i++;
        }

        if (res == null)
        {
            Debug.LogError("Error: Could not find level " + levelIndex);
        }
        return(res);
    }
예제 #11
0
    override public void OnInspectorGUI()
    {
// Save
        EditorGUILayout.BeginHorizontal();
        fName = EditorGUILayout.TextField("Save As", fName);

        EditorGUI.BeginDisabledGroup(fName.Length == 0);
        if (GUILayout.Button("Save"))
        {
            lvlLoader.Save(fName);
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();
// Load
        EditorGUILayout.BeginHorizontal();
        toLoad = EditorGUILayout.ObjectField("Level Data SO", toLoad, typeof(LevelDataSO), false) as LevelDataSO;
        EditorGUI.BeginDisabledGroup(toLoad == null);
        if (GUILayout.Button("Load"))
        {
            lvlLoader.Load(toLoad);
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();
    }
예제 #12
0
 private void OnEnable()
 {
     _selectedLevelEvent = (LevelDataSO)target;
     PrepareSceneList();
 }
예제 #13
0
 private void OnLevelButtonClicked(LevelDataSO levelData)
 {
     levelData.Execute(((SceneLoaderManager)_sceneLoaderManagerSO.Manager));
 }
예제 #14
0
 public void OnEnable()
 {
     data = target as LevelDataSO;
 }