75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
|
/* This file is part of the "NavMesh Extension" project by Rebound Games.
|
|||
|
* You are only allowed to use these resources if you've bought them directly or indirectly
|
|||
|
* from Rebound Games. You shall not license, sublicense, sell, resell, transfer, assign,
|
|||
|
* distribute or otherwise make available to any third party the Service or the Content.
|
|||
|
*/
|
|||
|
|
|||
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
|
|||
|
namespace NavMeshExtension
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Portal Object Editor for moving portals and drawing connections between them.
|
|||
|
/// <summary>
|
|||
|
[CustomEditor(typeof(PortalObject))]
|
|||
|
public class PortalObjectEditor : Editor
|
|||
|
{
|
|||
|
//portal object reference
|
|||
|
private PortalObject script;
|
|||
|
|
|||
|
|
|||
|
void OnEnable()
|
|||
|
{
|
|||
|
script = (PortalObject)target;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Custom inspector override for portal properties.
|
|||
|
/// </summary>
|
|||
|
public override void OnInspectorGUI()
|
|||
|
{
|
|||
|
//color field for portal gizmos and connections
|
|||
|
script.color = EditorGUILayout.ColorField("Color", script.color);
|
|||
|
SceneView.RepaintAll();
|
|||
|
|
|||
|
//sum up and display distance between portals
|
|||
|
int childs = script.transform.childCount;
|
|||
|
float dist = 0f;
|
|||
|
for (int i = 0; i < childs - 1; i++)
|
|||
|
dist += Vector3.Distance(script.transform.GetChild(i).position,
|
|||
|
script.transform.GetChild(i + 1).position);
|
|||
|
EditorGUILayout.FloatField("Distance", dist);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Draw Scene GUI PositionHandles for child portals.
|
|||
|
/// <summary>
|
|||
|
public void OnSceneGUI()
|
|||
|
{
|
|||
|
//get child count
|
|||
|
int childs = script.transform.childCount;
|
|||
|
Handles.color = script.color;
|
|||
|
|
|||
|
//loop over childs and draw handle at their position
|
|||
|
for (int i = 0; i < childs; i++)
|
|||
|
{
|
|||
|
Transform child = script.transform.GetChild(i);
|
|||
|
Vector3 pos = child.position;
|
|||
|
Handles.DrawWireDisc(pos, Vector3.up,
|
|||
|
HandleUtility.GetHandleSize(pos) * 0.2f);
|
|||
|
|
|||
|
child.position = Handles.PositionHandle(pos, Quaternion.identity);
|
|||
|
}
|
|||
|
|
|||
|
//draw connections with lines
|
|||
|
Handles.DrawLine(script.transform.GetChild(0).position,
|
|||
|
script.transform.GetChild(1).position);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|