Files
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

65 lines
1.7 KiB
C#

using Sandbox.Engine.Resources;
using Sandbox.Volumes;
namespace Sandbox.Navigation;
internal abstract class NavMeshSpatialAuxiliaryData
{
// Either scale, position, rotation or something else changed
public bool HasChanged;
public bool IsPendingRemoval = false;
public bool IsBlocked = false;
public NavMeshAreaDefinition AreaDefinition;
public IEnumerable<Vector2Int> CurrentOverlappingTiles => currentOverlappingTiles;
private HashSet<Vector2Int> currentOverlappingTiles = new();
public IEnumerable<Vector2Int> PreviousOverlappingTiles => previousOverlappingTiles;
private HashSet<Vector2Int> previousOverlappingTiles = new();
protected abstract RectInt CalculateCurrentOverlappingTiles( NavMesh navMesh );
internal void UpdateOverlappingTiles( NavMesh navMesh )
{
previousOverlappingTiles.Clear();
foreach ( var tile in currentOverlappingTiles )
{
previousOverlappingTiles.Add( tile );
}
currentOverlappingTiles.Clear();
var minMaxTileCoord = CalculateCurrentOverlappingTiles( navMesh );
for ( int x = minMaxTileCoord.Left; x <= minMaxTileCoord.Right; x++ )
{
for ( int y = minMaxTileCoord.Top; y <= minMaxTileCoord.Bottom; y++ )
{
currentOverlappingTiles.Add( new Vector2Int( x, y ) );
}
}
}
}
internal class NavMeshAreaData : NavMeshSpatialAuxiliaryData
{
public BBox WorldBounds;
public BBox LocalBounds;
public Transform Transform;
public SceneVolume Volume;
protected override RectInt CalculateCurrentOverlappingTiles( NavMesh navMesh )
{
if ( Volume.Type == SceneVolume.VolumeTypes.Infinite ) return navMesh.CalculateMinMaxTileCoords( navMesh.WorldBounds );
return navMesh.CalculateMinMaxTileCoords( WorldBounds );
}
}