chore: initial commit
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace PathBerserker2d
|
||||
{
|
||||
internal static class NavGraphDrawer
|
||||
{
|
||||
public static void Draw(NavGraph graph)
|
||||
{
|
||||
Matrix4x4 oldMatrix = Gizmos.matrix;
|
||||
Gizmos.matrix = Matrix4x4.identity;
|
||||
|
||||
SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_SegmentSizeId, 0.08f);
|
||||
SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_PauseSizeId, 0.08f * (PathBerserker2dSettings.NavTags.Length - 2));
|
||||
|
||||
// draw segments
|
||||
foreach (var pair in graph.segmentTrees)
|
||||
{
|
||||
foreach (var cluster in pair.Value.Clusters)
|
||||
{
|
||||
DrawCluster(cluster, pair.Value.WorldToLocal.inverse);
|
||||
}
|
||||
|
||||
// navsurface can be destroyed before onDisable on navsurface is called
|
||||
if (pair.Key != null)
|
||||
NavSurfaceDrawer.DrawNavSurface(pair.Key);
|
||||
}
|
||||
Gizmos.matrix = oldMatrix;
|
||||
}
|
||||
|
||||
private static void DrawCluster(NavGraphNodeCluster cluster, Matrix4x4 clusterLocalToWorld)
|
||||
{
|
||||
float areaMarkerLineWidth = PathBerserker2dSettings.NavAreaMarkerLineWidth;
|
||||
foreach (var mod in cluster.modifiers)
|
||||
{
|
||||
Vector2 a = cluster.GetPositionAlongSegment(mod.T);
|
||||
Vector2 b = cluster.GetPositionAlongSegment(mod.T + mod.Length);
|
||||
Vector2 tangent = b - a;
|
||||
Quaternion rot = Quaternion.Euler(0, 0, Vector2.SignedAngle(Vector2.right, tangent));
|
||||
SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_XOffsetId, 0.08f * mod.NavTag);
|
||||
SharedMaterials.UnlitStripped.SetColor(SharedMaterials.UnlitStripped_ColorId, PathBerserker2dSettings.GetNavTagColor(mod.NavTag));
|
||||
SharedMaterials.UnlitStripped.SetPass(0);
|
||||
Graphics.DrawMeshNow(PrimitiveMesh.Quad, clusterLocalToWorld * Matrix4x4.TRS(a, rot, new Vector3(tangent.magnitude, areaMarkerLineWidth)));
|
||||
}
|
||||
|
||||
for (int iNode = 0; iNode < cluster.nodes.Count; iNode++)
|
||||
{
|
||||
var node = cluster.nodes[iNode];
|
||||
var link = node.link;
|
||||
|
||||
if (link.LinkType > 0)
|
||||
NavLinkInstanceDrawer.Draw(link, cluster.owner.LocalToWorld.MultiplyPoint3x4(cluster.GetPositionAlongSegment(node.t)),
|
||||
node.LinkTarget.owner.LocalToWorld.MultiplyPoint3x4(node.LinkTarget.GetPositionAlongSegment(node.LinkTargetT)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user