EscapeShooter/My project/Assets/Project Files/Game/Scripts/Level System/WorldData.cs

72 lines
2.0 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace Watermelon.LevelSystem
{
[CreateAssetMenu(fileName = "World", menuName = "Data/New Level/World")]
public class WorldData : ScriptableObject
{
[SerializeField] Sprite previewSprite;
public Sprite PreviewSprite => previewSprite;
[SerializeField] AudioClip uniqueWorldMusicClip;
public AudioClip UniqueWorldMusicClip => uniqueWorldMusicClip;
[SerializeField] WorldType worldType;
public WorldType WorldType => worldType;
[SerializeField, LevelEditorSetting] LevelData[] levels;
public LevelData[] Levels => levels;
[SerializeField, LevelEditorSetting] LevelItem[] items;
public LevelItem[] Items => items;
[SerializeField, LevelEditorSetting] RoomEnvironmentPreset[] roomEnvPresets;
public RoomEnvironmentPreset[] RoomEnvPresets => roomEnvPresets;
[SerializeField, LevelEditorSetting] CustomObjectData[] worldCustomObjects;
public CustomObjectData[] WorldCustomObjects => worldCustomObjects;
private Dictionary<int, LevelItem> itemsDisctionary;
public void Init()
{
for (int i = 0; i < levels.Length; i++)
{
levels[i].Init(this);
}
itemsDisctionary = new Dictionary<int, LevelItem>();
for (int i = 0; i < items.Length; i++)
{
itemsDisctionary.Add(items[i].Hash, items[i]);
}
}
public void LoadWorld()
{
// creating items pools
for (int i = 0; i < items.Length; i++)
{
items[i].OnWorldLoaded();
}
}
public void UnloadWorld()
{
// releasing items pools
for (int i = 0; i < items.Length; i++)
{
items[i].OnWorldUnloaded();
}
}
public LevelItem GetLevelItem(int hash)
{
return itemsDisctionary[hash];
}
}
}