using System;
using System.Collections;
using System.Collections.Generic;
using Quadtree;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
namespace BITKit.OpenWorld
{
///
/// 这个应该载入后就销毁,托管给纯class
///
public sealed class ColliderChunkObject : MonoBehaviour
{
[SerializeField] private Collider[] colliders;
[SerializeField] private ChunkBehaviour chunkBehaviour;
[SerializeField] private bool getCollidersOnStart;
private void Start()
{
try
{
if (getCollidersOnStart)
{
GetCollidersInChildren();
}
chunkBehaviour.OnLodChangedEvent += OnLodChanged;
if(colliders is {Length:0})colliders = GetComponentsInChildren();
}
catch (Exception e)
{
BIT4Log.Warning(gameObject.name);
BIT4Log.LogException(e);
}
}
private void OnLodChanged(int arg1, int arg2)
{
var enabledCollider = arg2 is 0;
foreach (var x in colliders)
{
try
{
x.enabled = enabledCollider;
}
catch (UnassignedReferenceException)
{
GetCollidersInChildren();
OnLodChanged(arg1, arg2);
return;
}
catch (Exception e)
{
BIT4Log.Warning(gameObject.name);
BIT4Log.LogException(e);
}
}
}
[BIT]
private void GetCollidersInChildren()
{
colliders = GetComponentsInChildren();
#if UNITY_EDITOR
EditorUtility.SetDirty(this);
#endif
}
}
}