Implemented dungeon selector

This commit is contained in:
Max 2025-03-03 16:22:19 +01:00
parent 514d985ddb
commit aeeb15cb12
46 changed files with 26355 additions and 32 deletions

View file

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

View file

@ -0,0 +1,13 @@
using UnityEngine;
using UnityEngine.SceneManagement;
namespace DungeonSelection
{
[CreateAssetMenu(fileName = "New Dungeon", menuName = "Dungeon")]
public class DungeonData : ScriptableObject
{
public string DungeonName;
public Sprite Thumbnail;
public string SceneName;
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6b94e2e73105498fac9021dca1250c4b
timeCreated: 1740990047

View file

@ -0,0 +1,25 @@
using System;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace DungeonSelection
{
public class DungeonLoader : MonoBehaviour
{
private void OnEnable()
{
GameEvents.LoadDungeon += LoadDungeon;
}
private void OnDisable()
{
GameEvents.LoadDungeon -= LoadDungeon;
}
public static void LoadDungeon(DungeonData dungeonData)
{
SceneManager.LoadScene(dungeonData.SceneName);
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9f74d58a6b5f48d4a1f6ef179fb11a76
timeCreated: 1740995037

View file

@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
namespace DungeonSelection
{
public class DungeonSelector : MonoBehaviour
{
[SerializeField] private DungeonData[] dungeons;
private DungeonData _currentlySelectedDungeonData;
private int _currentlySelectedDungeonIndex = 0;
private void OnEnable()
{
UIEvents.NextDungeonClicked += SelectNextDungeon;
UIEvents.PreviousDungeonClicked += SelectPreviousDungeon;
UIEvents.EnterDungeonClicked += LoadDungeon;
}
private void OnDisable()
{
UIEvents.NextDungeonClicked -= SelectNextDungeon;
UIEvents.PreviousDungeonClicked -= SelectPreviousDungeon;
UIEvents.EnterDungeonClicked -= LoadDungeon;
}
private void Start()
{
GameEvents.DungeonSelectionStarted?.Invoke();
_currentlySelectedDungeonData = dungeons[_currentlySelectedDungeonIndex];
GameEvents.ShowingDungeon?.Invoke(_currentlySelectedDungeonData);
if (_currentlySelectedDungeonIndex == 0)
{
GameEvents.ShowingFirstDugeon?.Invoke();
}
}
private void LoadDungeon(DungeonData dungeon)
{
GameEvents.LoadDungeon?.Invoke(dungeon);
}
private void SelectNextDungeon()
{
if (_currentlySelectedDungeonIndex + 1 >= dungeons.Length) return;
_currentlySelectedDungeonIndex++;
_currentlySelectedDungeonData = dungeons[_currentlySelectedDungeonIndex];
GameEvents.ShowingDungeon?.Invoke(_currentlySelectedDungeonData);
if (_currentlySelectedDungeonIndex == dungeons.Length - 1)
{
GameEvents.ShowingLastDungeon?.Invoke();
}
}
private void SelectPreviousDungeon()
{
if (_currentlySelectedDungeonIndex - 1 < 0) return;
_currentlySelectedDungeonIndex--;
_currentlySelectedDungeonData = dungeons[_currentlySelectedDungeonIndex];
GameEvents.ShowingDungeon?.Invoke(_currentlySelectedDungeonData);
if (_currentlySelectedDungeonIndex == 0)
{
GameEvents.ShowingFirstDugeon?.Invoke();
}
}
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c4e78bf105514ac45bd51d639ef9da5c

View file

@ -0,0 +1,14 @@
using System;
namespace DungeonSelection
{
// Announcing in game events
public static class GameEvents
{
public static Action DungeonSelectionStarted;
public static Action ShowingLastDungeon;
public static Action ShowingFirstDugeon;
public static Action<DungeonData> ShowingDungeon;
public static Action<DungeonData> LoadDungeon;
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d50ab8728586475daa8f20f953be31dd
timeCreated: 1740991637

View file

@ -0,0 +1,13 @@
using System;
namespace DungeonSelection
{
// Announcing actions taken in UI
public static class UIEvents
{
public static Action NextDungeonClicked;
public static Action PreviousDungeonClicked;
public static Action<DungeonData> EnterDungeonClicked;
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a3f1145923464a0ba0209796e00263d2
timeCreated: 1740991548

View file

@ -0,0 +1,81 @@
using System;
using DungeonSelection;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UIElements;
public class DungeonSelectMenuController : MonoBehaviour
{
private Button _next;
private Button _previous;
private Button _start;
private Image _thumbnailImage;
private Label _dungeonName;
private VisualElement _dungeonThumbnail;
private DungeonData _currentlyShowingDungeon;
private void OnEnable()
{
VisualElement root = GetComponent<UIDocument>().rootVisualElement;
_dungeonThumbnail = root.Q<VisualElement>("DungeonThumbnail");
_next = root.Q<Button>("Next");
_next.clicked += NextClicked;
_previous = root.Q<Button>("Previous");
_previous.clicked += PreviousClicked;
_start = root.Q<Button>("Start");
_start.clicked += StartClicked;
_dungeonName = root.Q<Label>("DungeonName");
GameEvents.ShowingDungeon += ShowDungeon;
GameEvents.ShowingFirstDugeon += () => SetPreviousButtonEnabled(false);
GameEvents.ShowingLastDungeon += () => SetNextButtonEnabled(false);
}
private void ShowDungeon(DungeonData dungeon)
{
_currentlyShowingDungeon = dungeon;
_dungeonName.text = _currentlyShowingDungeon.DungeonName;
if (_thumbnailImage == null)
{
_thumbnailImage = new Image();
_thumbnailImage.scaleMode = ScaleMode.ScaleAndCrop;
_dungeonThumbnail.Add(_thumbnailImage);
}
_thumbnailImage.image = _currentlyShowingDungeon.Thumbnail.texture;
}
private void SetPreviousButtonEnabled(bool enabled)
{
_previous.SetEnabled(enabled);
}
private void SetNextButtonEnabled(bool enabled)
{
_next.SetEnabled(enabled);
}
private void NextClicked()
{
SetPreviousButtonEnabled(true);
SetNextButtonEnabled(true);
UIEvents.NextDungeonClicked?.Invoke();
}
private void PreviousClicked()
{
SetPreviousButtonEnabled(true);
SetNextButtonEnabled(true);
UIEvents.PreviousDungeonClicked?.Invoke();
}
private void StartClicked()
{
UIEvents.EnterDungeonClicked?.Invoke(_currentlyShowingDungeon);
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1c6d26f9a8f2855469ad6ac0874795b1

View file

@ -53,7 +53,7 @@ namespace UI
private Label diamondCount;
public void OnEnable()
private void OnEnable()
{
VisualElement root = GetComponent<UIDocument>().rootVisualElement;