Skip to content

Commit

Permalink
Lift Cell.BoundsMap to a namespace-level class
Browse files Browse the repository at this point in the history
  • Loading branch information
Majiir committed Sep 1, 2014
1 parent 7fe32bf commit 3423d46
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 65 deletions.
69 changes: 69 additions & 0 deletions Plugin/GeodesicGrid/BoundsMap.cs
@@ -0,0 +1,69 @@
using System;
using System.Linq;
using Mathf = UnityEngine.Mathf;

namespace Kethane.GeodesicGrid
{
public class BoundsMap
{
private readonly float[][] minVals;
private readonly float[][] maxVals;

public BoundsMap(Func<Cell, float> heightAt, int level)
{
minVals = new float[level + 1][];
maxVals = new float[level + 1][];

for (var i = 0; i <= level; i++)
{
var count = Cell.Triangle.CountAtLevel(i);
minVals[i] = new float[count];
maxVals[i] = new float[count];
}

var mins = minVals[level];
var maxs = maxVals[level];

foreach (var triangle in Cell.Triangle.AtLevel(level))
{
maxs[triangle.Index] = triangle.GetVertices(level).Max(heightAt);

var min = Mathf.Sqrt(triangle.GetVertices(level).AdjacentPairs().Min(e => (e.First.Position * heightAt(e.First) + e.Second.Position * heightAt(e.Second)).sqrMagnitude)) / 2;
mins[triangle.Index] = Math.Min(min, triangle.GetVertices(level).Min(heightAt));
}

for (int i = level - 1; i >= 0; i--)
{
var childMins = mins;
var childMaxs = maxs;
mins = minVals[i];
maxs = maxVals[i];

foreach (var triangle in Cell.Triangle.AtLevel(i))
{
var min = float.PositiveInfinity;
var max = 0f;

foreach (var child in triangle.GetChildren(i + 1))
{
min = Math.Min(min, childMins[child.Index]);
max = Math.Max(max, childMaxs[child.Index]);
}

mins[triangle.Index] = min;
maxs[triangle.Index] = max;
}
}
}

public float GetMin(Cell.Triangle triangle, int level)
{
return minVals[level][triangle.Index];
}

public float GetMax(Cell.Triangle triangle, int level)
{
return maxVals[level][triangle.Index];
}
}
}
63 changes: 0 additions & 63 deletions Plugin/GeodesicGrid/Cell.cs
Expand Up @@ -115,69 +115,6 @@ public Vector3 Position

#region Raycast

public class BoundsMap
{
private readonly float[][] minVals;
private readonly float[][] maxVals;

public BoundsMap(Func<Cell, float> heightAt, int level)
{
minVals = new float[level + 1][];
maxVals = new float[level + 1][];

for (var i = 0; i <= level; i++)
{
var count = Triangle.CountAtLevel(i);
minVals[i] = new float[count];
maxVals[i] = new float[count];
}

var mins = minVals[level];
var maxs = maxVals[level];

foreach (var triangle in Triangle.AtLevel(level))
{
maxs[triangle.Index] = triangle.GetVertices(level).Max(heightAt);

var min = Mathf.Sqrt(triangle.GetVertices(level).AdjacentPairs().Min(e => (e.First.Position * heightAt(e.First) + e.Second.Position * heightAt(e.Second)).sqrMagnitude)) / 2;
mins[triangle.Index] = Math.Min(min, triangle.GetVertices(level).Min(heightAt));
}

for (int i = level - 1; i >= 0; i--)
{
var childMins = mins;
var childMaxs = maxs;
mins = minVals[i];
maxs = maxVals[i];

foreach (var triangle in Triangle.AtLevel(i))
{
var min = float.PositiveInfinity;
var max = 0f;

foreach (var child in triangle.GetChildren(i + 1))
{
min = Math.Min(min, childMins[child.Index]);
max = Math.Max(max, childMaxs[child.Index]);
}

mins[triangle.Index] = min;
maxs[triangle.Index] = max;
}
}
}

public float GetMin(Triangle triangle, int level)
{
return minVals[level][triangle.Index];
}

public float GetMax(Triangle triangle, int level)
{
return maxVals[level][triangle.Index];
}
}

public static Cell? Raycast(Ray ray, int level, BoundsMap bounds, Func<Cell, float> heightAt, Transform gridTransform = null)
{
var hit = Triangle.Raycast(ray, level, bounds, heightAt, gridTransform);
Expand Down
1 change: 1 addition & 0 deletions Plugin/Kethane.csproj
Expand Up @@ -46,6 +46,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="GeodesicGrid\BoundsMap.cs" />
<Compile Include="GeodesicGrid\Cell.cs" />
<Compile Include="CellularResourceGenerator.cs" />
<Compile Include="CompatibilityChecker.cs" />
Expand Down
4 changes: 2 additions & 2 deletions Plugin/MapOverlay.cs
Expand Up @@ -24,7 +24,7 @@ public class MapOverlay : MonoBehaviour
private Cell? hoverCell;
private ResourceDefinition resource;
private Func<Cell, float> heightAt;
private Cell.BoundsMap bounds;
private BoundsMap bounds;

private static RenderingManager renderingManager;
private static GUIStyle centeredStyle = null;
Expand Down Expand Up @@ -645,7 +645,7 @@ private void refreshMesh()

private void refreshCollider()
{
bounds = new Cell.BoundsMap(heightAt, MapOverlay.GridLevel);
bounds = new BoundsMap(heightAt, MapOverlay.GridLevel);
}
}
}

0 comments on commit 3423d46

Please sign in to comment.