Рефакторинг сцены главного меню.

1) Реогранизована иерархия
2) Удалены неиспользуемые элементы
3) Список уровней формируется в GameManagment списком элементов LevelModel
This commit is contained in:
Maxim-Godovikov 2021-10-20 17:31:01 +03:00
parent f18e8ffe51
commit 144aeada89
17 changed files with 474 additions and 1485 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ac12c3e8b1ced1d43829c4a9be9d1200
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9391feb4ca90a65468a8a388294bc5b1, type: 3}
m_Name: Level 1
m_EditorClassIdentifier:
SceneName: Level_1
Name: MATS
MenuSprite: {fileID: 21300000, guid: 426478b073313244bbe84d3ec1cafa64, type: 3}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d2b1e56b926cd5c47bf02a7b708b6290
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9391feb4ca90a65468a8a388294bc5b1, type: 3}
m_Name: Level 2
m_EditorClassIdentifier:
SceneName: Level_2
Name: EMIR
MenuSprite: {fileID: 21300000, guid: 29916103981328e438052adcf04f2737, type: 3}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6cef405d05be36f489f8d16e3df67868
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
using UnityEngine;
[CreateAssetMenu(fileName = "New Level", menuName = "Levels/New Level")]
public class LevelModel : ScriptableObject
{
public string SceneName;
public string Name;
public Sprite MenuSprite;
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9391feb4ca90a65468a8a388294bc5b1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9391feb4ca90a65468a8a388294bc5b1, type: 3}
m_Name: TestLevel
m_EditorClassIdentifier:
SceneName: TestLevel
Name: TEST
MenuSprite: {fileID: 21300000, guid: 65b81d2bb7d94e646a4a3ea517c9aea2, type: 3}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 245ed2714d05f1e4c95aedea30762644
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class ChooseLevelButtonsTasks : MonoBehaviour
{
[SerializeField] private Image menuLevelImg;
[SerializeField] private List<Sprite> menuSprites;
[SerializeField] private TextMeshProUGUI gameText;
[SerializeField] private GameObject btnNext, btnPrev;
private List<string> menuText = new List<string> { "MATS", "EMIR" };
private int levelsAmount = 2;
private void Start()
{
btnNext.SetActive(true);
btnPrev.SetActive(false);
}
public void OnPrevBtnClick()
{
GameData.currentChosenLevel--;
if (GameData.currentChosenLevel < 1)
{
GameData.currentChosenLevel = levelsAmount;
}
menuLevelImg.sprite = menuSprites[GameData.currentChosenLevel - 1];
gameText.text = menuText[GameData.currentChosenLevel - 1];
btnNext.SetActive(true);
btnPrev.SetActive(false);
}
public void OnNextBtnClick()
{
GameData.currentChosenLevel++;
if (GameData.currentChosenLevel > levelsAmount)
{
GameData.currentChosenLevel = 1;
}
menuLevelImg.sprite = menuSprites[GameData.currentChosenLevel - 1];
gameText.text = menuText[GameData.currentChosenLevel - 1];
btnNext.SetActive(false);
btnPrev.SetActive(true);
}
public void OnTestBtnClick()
{
SceneLoader.LoadScene(3);
}
}

View File

@ -0,0 +1,64 @@
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class LevelChooser : MonoBehaviour
{
[SerializeField] private List<LevelModel> _levels;
[SerializeField] private Image _levelImage;
[SerializeField] private TextMeshProUGUI _levelNameText;
[SerializeField] private GameObject _nextButton;
[SerializeField] private GameObject _prevButton;
public LevelModel CurrentLevel => _levels[_currentLevelIndex];
private int _currentLevelIndex;
private void Start()
{
_currentLevelIndex = 0;
UpdateUI();
}
public void ShowPreviousLevel()
{
_currentLevelIndex--;
if (_currentLevelIndex < 0)
{
_currentLevelIndex = 0;
}
UpdateUI();
}
public void ShowNextLevel()
{
_currentLevelIndex++;
if (_currentLevelIndex > _levels.Count - 1)
{
_currentLevelIndex = _levels.Count - 1;
}
UpdateUI();
}
private void UpdateUI()
{
_levelImage.sprite = CurrentLevel.MenuSprite;
_levelNameText.text = CurrentLevel.Name;
UpdateButtonsVisibility();
}
private void UpdateButtonsVisibility()
{
bool isFirstLevel = _currentLevelIndex == 0;
bool isLastLevel = _currentLevelIndex == _levels.Count - 1;
bool hasMultipleLevels = _levels.Count > 1;
_prevButton.SetActive(hasMultipleLevels && !isFirstLevel);
_nextButton.SetActive(hasMultipleLevels && !isLastLevel);
}
}

View File

@ -0,0 +1,17 @@
using UnityEngine;
[RequireComponent(typeof(LevelChooser))]
public class LevelLauncher : MonoBehaviour
{
private LevelChooser _levelChooser;
private void Start()
{
_levelChooser = GetComponent<LevelChooser>();
}
public void LaunchLevel()
{
SceneLoader.LoadScene(_levelChooser.CurrentLevel.SceneName);
}
}

View File

@ -1,23 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayBtnClick : MonoBehaviour
{
private Button btn;
private void Start()
{
btn = GetComponent<Button>();
btn.onClick.AddListener(BtnTask);
}
private void BtnTask()
{
//SceneLoader.LoadNextScene();
SceneLoader.LoadScene(GameData.currentChosenLevel);
}
}

View File

@ -19,4 +19,8 @@ public class SceneLoader : MonoBehaviour
{
SceneManager.LoadScene(sceneIndex);
}
public static void LoadScene(string sceneName)
{
SceneManager.LoadScene(sceneName);
}
}