NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Scene/NLDSceneManager.cs

61 lines
1.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
using UnityEngine.Serialization;
public class NLDSceneManager : MonoBehaviour
{
[FormerlySerializedAs("_sceneObjects")]
[ReadOnly]
[HideInInspector]
[SerializeField]
public List<SceneObject> sceneObjects = new();
private Dictionary<ESceneObjectType, List<SceneObject>> _sceneObjTypeDic = new();
public void Refresh()
{
_sceneObjTypeDic.Clear();
foreach (var sObj in sceneObjects)
{
var type = sObj.Type;
if (_sceneObjTypeDic.TryGetValue(type, out var list))
{
list.Add(sObj);
}
else
{
list = new();
list.Add(sObj);
_sceneObjTypeDic.Add(type, list);
}
}
}
private void Awake()
{
Refresh();
}
public List<SceneObject> GetSceneObjectsByType(ESceneObjectType type)
{
return _sceneObjTypeDic.GetValueOrDefault(type);
}
public void AddSceneObject(SceneObject so)
{
if (sceneObjects.Contains(so))
return;
sceneObjects.Add(so);
}
public void RemoveSceneObject(SceneObject so)
{
var index = sceneObjects.FindIndex(obj => obj == so);
if (index < 0)
return;
sceneObjects.RemoveAt(index);
}
}