This commit is contained in:
CortexCore
2024-05-31 01:23:15 +08:00
parent c798b224be
commit 299082fe27
164 changed files with 3604 additions and 2018 deletions

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using BITKit.SceneManagement;
using Cysharp.Threading.Tasks;
using Quadtree;
@@ -56,7 +57,6 @@ namespace BITKit.OpenWorld
await UniTask.NextFrame();
}
}
protected virtual void Dispose()
{
sceneService?.UnRegisterLoadTaskAsync(LoadTask);
@@ -64,6 +64,7 @@ namespace BITKit.OpenWorld
_registerQueue.Clear();
_unregisterQueue.Clear();
}
protected virtual int CalculateLod(IWorldChunkObject value,Vector3 cameraPosition,int lod)=>lod;
protected virtual async void OnTick(float deltaTime)
{
if (!enabled) return;
@@ -88,7 +89,8 @@ namespace BITKit.OpenWorld
var cycle = 0;
await UniTask.SwitchToThreadPool();
var items = _quadtree.Find(new Bounds(cameraPosition, Vector3.one * (lodDistances[^1] + lodDistances[0])));
foreach (var chunkObject in _quadtree.Find(new Bounds(cameraPosition, Vector3.one * (lodDistances[^1]+lodDistances[0]))))
{
if (cycle++ > 64)
@@ -100,17 +102,25 @@ namespace BITKit.OpenWorld
var distance = Vector3.Distance(cameraPosition, chunkObject.GetBounds().center);
//var distance = Vector3.Distance(cameraPosition, chunkObject.GetBounds().ClosestPoint(cameraPosition));
if (cacheList.Contains(chunkObject.Id)) continue;
cacheList.Add(chunkObject.Id);
if (!cacheList.Add(chunkObject.Id)) continue;
var lod = -1;
for (var i = 0; i < lodDistances.Length; i++)
if (chunkObject.GetBounds().Contains(cameraPosition))
{
if (!(distance < lodDistances[i])) continue;
lod = i;
break;
lod = 0;
}
else
{
for (var i = 0; i < lodDistances.Length; i++)
{
if (!(distance < lodDistances[i])) continue;
lod = i;
break;
}
}
lod = CalculateLod(chunkObject,cameraPosition,lod);
if(chunkObject.Lod==lod)continue;
//chunkObject.Lod = lod;