zz
This commit is contained in:
174
GlobalShared/API/GlobalAPI.cs
Normal file
174
GlobalShared/API/GlobalAPI.cs
Normal file
@@ -0,0 +1,174 @@
|
||||
using System.Collections.Generic;
|
||||
using Global.Shared.OcTree;
|
||||
using Global.Shared.OcTree.Data;
|
||||
using Global.Shared.Plugin;
|
||||
using Sandbox.Game.Entities;
|
||||
using Sandbox.ModAPI;
|
||||
using VRageMath;
|
||||
|
||||
namespace Global.Shared.API
|
||||
{
|
||||
public static class GlobalAPI
|
||||
{
|
||||
private static OcTreeHandler OcTreeHandler => GlobalStatic.OcTreeHandler;
|
||||
|
||||
public static bool IsAwareOfGrid(long entityId)
|
||||
{
|
||||
return OcTreeHandler.GridTree.Contains(entityId);
|
||||
}
|
||||
|
||||
public static IGridData GetGridById(long entityId)
|
||||
{
|
||||
IGridData grid = OcTreeHandler.GridTree.Get(entityId);
|
||||
if (grid != null) return grid;
|
||||
var entity = MyAPIGateway.Entities.GetEntityById(entityId);
|
||||
if (!(entity is MyCubeGrid g))
|
||||
{
|
||||
var text = entity != null ? $"a {entity.GetType().Name}" : "non existent";
|
||||
GlobalInstance.Log.Error($"GetGridById: Entity is not a grid, it is a {text}");
|
||||
return null;
|
||||
}
|
||||
|
||||
grid = OcTreeHandler.AddGrid(g);
|
||||
|
||||
return grid;
|
||||
}
|
||||
|
||||
public static IEnumerable<IGridData> GetAllGrids()
|
||||
{
|
||||
return OcTreeHandler.GridTree.GetAll();
|
||||
}
|
||||
|
||||
#region Experimental Spatial Data API
|
||||
|
||||
public static IEnumerable<IGridData> LocateGridsExperimental(BoundingBoxD box)
|
||||
{
|
||||
return OcTreeHandler.GridTree.GetEnumerable(box);
|
||||
}
|
||||
|
||||
public static IEnumerable<IGridData> LocateGridsExperimental(BoundingSphereD sphere)
|
||||
{
|
||||
return OcTreeHandler.GridTree.GetEnumerable(sphere);
|
||||
}
|
||||
|
||||
public static IEnumerable<IGridData> LocateGridsExperimental(MyOrientedBoundingBoxD box)
|
||||
{
|
||||
return OcTreeHandler.GridTree.GetEnumerable(box);
|
||||
}
|
||||
|
||||
public static IEnumerable<IControllableEntityData> LocateCharactersExperimental(BoundingBoxD box)
|
||||
{
|
||||
return OcTreeHandler.CharacterTree.GetEnumerable(box);
|
||||
}
|
||||
|
||||
public static IEnumerable<IControllableEntityData> LocateCharactersExperimental(BoundingSphereD sphere)
|
||||
{
|
||||
return OcTreeHandler.CharacterTree.GetEnumerable(sphere);
|
||||
}
|
||||
|
||||
public static IEnumerable<IControllableEntityData> LocateCharactersExperimental(MyOrientedBoundingBoxD box)
|
||||
{
|
||||
return OcTreeHandler.CharacterTree.GetEnumerable(box);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Spatial Data API
|
||||
|
||||
public static void LocateGrids(List<IGridData> list, BoundingBoxD box, long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.GridTree.GetExact(list, box, flags);
|
||||
}
|
||||
|
||||
public static void LocateGrids(List<IGridData> list, BoundingSphereD sphere, long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.GridTree.GetExact(list, sphere, flags);
|
||||
}
|
||||
|
||||
public static void LocateGrids(List<IGridData> list, MyOrientedBoundingBoxD box, long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.GridTree.GetExact(list, box, flags);
|
||||
}
|
||||
|
||||
public static void LocateCharacters(List<IControllableEntityData> list, BoundingBoxD box, long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.CharacterTree.GetExact(list, box, flags);
|
||||
}
|
||||
|
||||
public static void LocateCharacters(List<IControllableEntityData> list, BoundingSphereD sphere,
|
||||
long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.CharacterTree.GetExact(list, sphere, flags);
|
||||
}
|
||||
|
||||
public static void LocateCharacters(List<IControllableEntityData> list, MyOrientedBoundingBoxD box,
|
||||
long flags = 0L)
|
||||
{
|
||||
OcTreeHandler.CharacterTree.GetExact(list, box, flags);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Extensions
|
||||
|
||||
private static readonly List<GridData> _internalGridList = new List<GridData>();
|
||||
|
||||
private static readonly List<ControllableEntityData>
|
||||
_internalCharacterList = new List<ControllableEntityData>();
|
||||
|
||||
private static void GetExact(this GenericOcTree<GridData> ocTree, List<IGridData> list, BoundingSphereD sphere,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalGridList.Clear();
|
||||
ocTree.GetExact(_internalGridList, sphere, flags);
|
||||
list.AddRange(_internalGridList);
|
||||
}
|
||||
|
||||
private static void GetExact(this GenericOcTree<GridData> ocTree, List<IGridData> list, BoundingBoxD box,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalGridList.Clear();
|
||||
ocTree.GetExact(_internalGridList, box, flags);
|
||||
list.AddRange(_internalGridList);
|
||||
}
|
||||
|
||||
private static void GetExact(this GenericOcTree<GridData> ocTree, List<IGridData> list,
|
||||
MyOrientedBoundingBoxD box,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalGridList.Clear();
|
||||
ocTree.GetExact(_internalGridList, box, flags);
|
||||
list.AddRange(_internalGridList);
|
||||
}
|
||||
|
||||
private static void GetExact(this GenericOcTree<ControllableEntityData> ocTree,
|
||||
List<IControllableEntityData> list, BoundingSphereD sphere,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalCharacterList.Clear();
|
||||
ocTree.GetExact(_internalCharacterList, sphere, flags);
|
||||
list.AddRange(_internalCharacterList);
|
||||
}
|
||||
|
||||
private static void GetExact(this GenericOcTree<ControllableEntityData> ocTree,
|
||||
List<IControllableEntityData> list, BoundingBoxD box,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalCharacterList.Clear();
|
||||
ocTree.GetExact(_internalCharacterList, box, flags);
|
||||
list.AddRange(_internalCharacterList);
|
||||
}
|
||||
|
||||
private static void GetExact(this GenericOcTree<ControllableEntityData> ocTree,
|
||||
List<IControllableEntityData> list,
|
||||
MyOrientedBoundingBoxD box,
|
||||
long flags = 0L)
|
||||
{
|
||||
_internalCharacterList.Clear();
|
||||
ocTree.GetExact(_internalCharacterList, box, flags);
|
||||
list.AddRange(_internalCharacterList);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user