Beispiel #1
0
    //情况1:level<0,开始当前关,即重新开始。
    //情况2:level==0,开始下一关。
    //情况3:level>0,level只能事levelId,表示开始levelId表示的关。
    public void StartLevel(int level = -1)
    {
        int lid;

        if (level < 0)
        {
            lid = m_LevelId;
        }
        else if (level == 0)
        {
            lid = Profile.Instance.Level + 1;
        }
        else
        {
            lid = level;
        }
        m_IsLevelChanged = lid != m_LevelId;
        m_LevelId        = lid;
        m_LevelData      = Resources.Load <ScriptableLevel>("Levels/level-" + lid.ToString());

        m_UI.OnData();
        m_Car.OnData();
        m_Level.OnData();

        m_IsLevelChanged = false;
    }
Beispiel #2
0
    private void OnEnable()
    {
        currentLevel = GameManager.Instance.CurrentLevel;
        CreateEnemies();

        LevelManager.OnRoundBegun  += OnRoundBegun;
        GameOverManager.OnGameOver += OnGameOver;
    }
Beispiel #3
0
    private void OnEnable()
    {
        currentLevel = GameManager.Instance.CurrentLevel;

        EnemyManager.OnEnemyDefeated += OnEnemyDefeated;
        GameOverManager.OnRevive     += OnRevive;
        UpgradeDisplay.OnUpgradeEnd  += BeginRound;
    }
    public override void OnJoinedRoom()
    {
        _Players.text = PhotonNetwork.CurrentRoom.PlayerCount + " / " +
                        PhotonNetwork.CurrentRoom.MaxPlayers;
        _roomName.text = PhotonNetwork.CurrentRoom.Name;
        ScriptableLevel level = gl._levels[(int)PhotonNetwork.CurrentRoom.CustomProperties["level"]];

        _levelName.text      = level._name;
        _levelPreview.sprite = level._levelBanner;
    }
    public override void OnRoomPropertiesUpdate(ExitGames.Client.Photon.Hashtable propertiesThatChanged)
    {
        GameState state = (GameState)propertiesThatChanged["GameState"];

        _state.text = ProcessState(state.ToString());
        ScriptableLevel level = gl._levels[(int)PhotonNetwork.CurrentRoom.CustomProperties["level"]];

        _levelName.text      = level._name;
        _levelPreview.sprite = level._levelBanner;
    }
Beispiel #6
0
 private void SaveLevel(ScriptableLevel levelToSave)
 {
     AssetDatabase.Refresh();
     EditorUtility.SetDirty(levelToSave);
     if (LevelManager.Instance.currentLevel)
     {
         EditorUtility.SetDirty(LevelManager.Instance.currentLevel);
     }
     EditorUtility.SetDirty(LevelManager.Instance);
     AssetDatabase.SaveAssets();
 }
    private void UpdateLevelSelectionDisplay(ScriptableLevel level)
    {
        var playable = GameManager.Instance.HighestLevel >= level.ID;

        playButton.interactable = stageImageButton.interactable = playable;

        stageImage.sprite = level.Sprite;

        stageNameText.text = playable ? $"World {level.ID}" : $"Complete World {level.ID - 1} to unlock";

        previousStageButton.gameObject.SetActive(level.ID != 1);
        nextStageButton.gameObject.SetActive(level.ID != GameManager.Instance.AvailableLevels.Count);
    }
Beispiel #8
0
    private void DrawLevelUnit(ScriptableLevel levelToDraw, int index)
    {
        GUILayout.BeginHorizontal();

        GUILayout.Label(levelToDraw.name);

        if (GUILayout.Button("^"))
        {
            if (index > 0)
            {
                currentCampagne.MoveDownLevel(index);
            }
        }

        if (GUILayout.Button("ˇ"))
        {
            if (index < currentLevel.listSections.Count)
            {
                currentCampagne.MoveUpLevel(index);
            }
        }

        if (GUILayout.Button("Charger", optionsButton))
        {
            if (currentLevel)
            {
                SaveLevel(currentLevel);
            }
            LevelManager.Instance.UnfoldLevel(levelToDraw);
            currentLevel = levelToDraw;
        }
        if (GUILayout.Button("Supprimer", optionsButton))
        {
            if (EditorUtility.DisplayDialog("Supprimer Nivo", "T'es sûr de vouloir supprimer ce nivo ?", "Ouai ouai !", "Oups non..."))
            {
                if (levelToDraw == currentLevel)
                {
                    LevelManager.Instance.DeleteCurrentLevel();
                }
                levelsToDelet.Add(levelToDraw);
            }
        }

        GUILayout.EndHorizontal();
    }
Beispiel #9
0
    private void DrawAddLevelInterface()
    {
        GUILayout.Label("Ajouter Nivo");

        levelName = GUILayout.TextField(levelName);

        if (GUILayout.Button(" + ", optionsButton))
        {
            ScriptableLevel newLevel = ScriptableLevel.CreateInstance <ScriptableLevel>();
            newLevel.name = levelName;
            newLevel.path = "Assets/Campagne/Levels/" + levelName + ".asset";

            while (AssetDatabase.LoadAssetAtPath(newLevel.path, typeof(ScriptableLevel)))
            {
                newLevel.name += "Otre";
                newLevel.path  = "Assets/Campagne/Levels/" + newLevel.name + ".asset";
            }
            AssetDatabase.CreateAsset(newLevel, newLevel.path);
            AssetDatabase.SaveAssets();
            levelName = "NvNivo";

            currentCampagne.AddLevel(newLevel);
        }
    }
Beispiel #10
0
    static void CreateRegion(LevelConfig master, LevelConfig level)
    {
        var lmin = level.LevelMin;
        var lmax = level.LevelMax;

        var assetPathAbsulote = string.Empty;
        var fileName          = string.Empty;
        var assetPath         = string.Empty;

        for (var lvl = lmin; lvl <= lmax; lvl++)
        {
            fileName          = "level-" + lvl.ToString() + ".asset";
            assetPathAbsulote = RootAssetFullPath + fileName;
            assetPath         = RootAssetPath + fileName;

            ScriptableLevel data = File.Exists(assetPathAbsulote) ?
                                   AssetDatabase.LoadAssetAtPath <ScriptableLevel>(assetPath) :
                                   ScriptableObject.CreateInstance <ScriptableLevel>();

            data.Id         = lvl;
            data.CarSpeed   = UseParent(level.SpeedGrowth) ? master.CalcSpeed(lvl) : level.CalcSpeed(lvl);
            data.PlayTime   = UseParent(level.TimeGrowth) ? master.CalcTime(lvl) : level.CalcTime(lvl);
            data.Reward     = UseParent(level.RewardGrowth) ? master.CalcReward(lvl) : level.CalcReward(lvl);
            data.ToolClean  = UseParent(level.ToolCleanGrowth) ? master.CalcToolClean(lvl) : level.CalcToolClean(lvl);
            data.ToolDouble = UseParent(level.ToolDoubleGrowth) ? master.CalcToolDouble(lvl) : level.CalcToolDouble(lvl);

            var items      = data.Items;
            var trashCount = level.CalcTrashCount(lvl);
            int coinCount  = 1;
            int itemCount  = trashCount + coinCount;
            var index      = 0;
            for (; index < itemCount; index++)
            {
                var item = new ScriptableLevelItem();
                item.Id   = index + 1;
                item.Type = 0;
                items.Add(item);
            }

            //垃圾出现位置生成
            float min  = 0.05f;
            float len  = 1f - min;
            float unit = len / (float)itemCount;
            for (int i = 0; i < itemCount; i++)
            {
                float left  = min + i * unit;
                float right = left + unit;
                float rand  = Random.Range(left, right);
                items[i].Position = rand;
            }

            //垃圾积分生成
            int     totalScro = level.CalcTrashTotalScore(lvl);
            float   average   = 1f / (float)trashCount;
            float[] points    = new float[trashCount];
            for (int i = 0; i < trashCount; i++)
            {
                float left  = average * i;
                float right = average * (i + 1);
                points[i] = Random.Range(left, right);
            }
            float lastValue = 0;
            for (int i = 0; i < trashCount; i++)
            {
                float c1    = lastValue * (float)totalScro;
                float c2    = points[i] * (float)totalScro;
                int   score = Mathf.RoundToInt(c2 - c1);
                items[i].Score = score;
                items[i].Hurt  = score;
                lastValue      = points[i];
            }

            data.HP = Mathf.RoundToInt(totalScro * 0.1f);

            //金币生成
            var coinItem = items[trashCount];
            coinItem.Id   = index + 1;
            coinItem.Type = 1;
            coinItem.Coin = level.CalcCoinTotal(lvl);

            AssetDatabase.CreateAsset(data, assetPath);
        }
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
Beispiel #11
0
 private void OnCurrentLevelChanged(ScriptableLevel level)
 {
     ChangeColor(level.BackgroundColor);
 }