88 lines
3.6 KiB
C#
88 lines
3.6 KiB
C#
#if UNITY_EDITOR && FISHNET_THREADED_COLLIDER_ROLLBACK
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using static FishNet.Component.ColliderRollback.ColliderRollback;
|
|
|
|
namespace FishNet.Component.ColliderRollback
|
|
{
|
|
[CustomEditor(typeof(ColliderRollback), true)]
|
|
[CanEditMultipleObjects]
|
|
public class ColliderRollbackEditor : Editor
|
|
{
|
|
private SerializedProperty _boundingBox;
|
|
private SerializedProperty _physicsType;
|
|
private SerializedProperty _boundingBoxSize;
|
|
private SerializedProperty _boundingBoxCenter;
|
|
private SerializedProperty _boundingBoxLocalRotation;
|
|
private SerializedProperty _colliderParents;
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
_boundingBox = serializedObject.FindProperty(nameof(_boundingBox));
|
|
_physicsType = serializedObject.FindProperty(nameof(_physicsType));
|
|
_boundingBoxSize = serializedObject.FindProperty(nameof(_boundingBoxSize));
|
|
_boundingBoxCenter = serializedObject.FindProperty(nameof(_boundingBoxCenter));
|
|
_boundingBoxLocalRotation = serializedObject.FindProperty(nameof(_boundingBoxLocalRotation));
|
|
_colliderParents = serializedObject.FindProperty(nameof(_colliderParents));
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
serializedObject.Update();
|
|
ColliderRollback nob = (ColliderRollback)target;
|
|
|
|
GUI.enabled = false;
|
|
EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour(nob), typeof(ColliderRollback), false);
|
|
GUI.enabled = true;
|
|
|
|
EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel);
|
|
EditorGUI.indentLevel++;
|
|
|
|
EditorGUILayout.PropertyField(_boundingBox);
|
|
if ((RollbackManager.BoundingBoxType)_boundingBox.intValue != RollbackManager.BoundingBoxType.Disabled)
|
|
{
|
|
EditorGUI.indentLevel++;
|
|
EditorGUILayout.PropertyField(_physicsType);
|
|
EditorGUILayout.PropertyField(_boundingBoxSize);
|
|
EditorGUILayout.PropertyField(_boundingBoxCenter);
|
|
EditorGUILayout.PropertyField(_boundingBoxLocalRotation);
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
EditorGUILayout.PropertyField(_colliderParents);
|
|
|
|
EditorGUI.indentLevel--;
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
private void OnSceneGUI()
|
|
{
|
|
ColliderRollback cr = (ColliderRollback)target;
|
|
RollbackManager.BoundingBoxData bb = cr.GetBoundingBoxData();
|
|
if (bb.boundingBoxType == RollbackManager.BoundingBoxType.Disabled)
|
|
return;
|
|
|
|
Transform tr = cr.transform;
|
|
Vector3 centerWS = tr.TransformPoint(bb.center);
|
|
Quaternion rotWS = tr.rotation * bb.localRotation;
|
|
Vector3 lossy = tr.lossyScale;
|
|
Vector3 absScale = new Vector3(Mathf.Abs(lossy.x), Mathf.Abs(lossy.y), Mathf.Abs(lossy.z));
|
|
Vector3 sizeWS = Vector3.Scale((bb.extends * 2f), absScale);
|
|
|
|
Matrix4x4 prevMatrix = Handles.matrix;
|
|
Color prevColor = Handles.color;
|
|
|
|
Handles.matrix = Matrix4x4.TRS(centerWS, rotWS, Vector3.one);
|
|
Handles.color = Color.green;
|
|
Handles.DrawWireCube(Vector3.zero, sizeWS);
|
|
|
|
Handles.color = new Color(1f, 0.6f, 0f, 1f);
|
|
Handles.SphereHandleCap(0, Vector3.zero, Quaternion.identity, 0.03f * Mathf.Max(sizeWS.x, sizeWS.y, sizeWS.z), EventType.Repaint);
|
|
|
|
Handles.color = prevColor;
|
|
Handles.matrix = prevMatrix;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif |