61 lines
1.4 KiB
C#
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);
|
|
}
|
|
} |