public void OnSceneDrag(SceneView sceneView)
{
GameObject target = base.target as GameObject;
switch (PrefabUtility.GetPrefabType(target))
{
case PrefabType.Prefab:
case PrefabType.ModelPrefab:
{
Event current = Event.current;
EventType type = current.type;
if (type != EventType.DragUpdated)
{
if (type == EventType.DragPerform)
{
string uniqueNameForSibling = GameObjectUtility.GetUniqueNameForSibling(null, dragObject.name);
dragObject.hideFlags = HideFlags.None;
Undo.RegisterCreatedObjectUndo(dragObject, "Place " + dragObject.name);
EditorUtility.SetDirty(dragObject);
DragAndDrop.AcceptDrag();
Selection.activeObject = dragObject;
HandleUtility.ignoreRaySnapObjects = null;
EditorWindow.mouseOverWindow.Focus();
dragObject.name = uniqueNameForSibling;
dragObject = null;
current.Use();
break;
}
if (type == EventType.DragExited)
{
if (dragObject != null)
{
UnityEngine.Object.DestroyImmediate(dragObject, false);
HandleUtility.ignoreRaySnapObjects = null;
dragObject = null;
current.Use();
}
break;
}
}
else
{
if (dragObject == null)
{
dragObject = (GameObject)PrefabUtility.InstantiatePrefab(PrefabUtility.FindPrefabRoot(target));
dragObject.hideFlags = HideFlags.HideInHierarchy;
dragObject.name = target.name;
}
if (HandleUtility.ignoreRaySnapObjects == null)
{
HandleUtility.ignoreRaySnapObjects = dragObject.GetComponentsInChildren <Transform>();
}
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
object obj3 = HandleUtility.RaySnap(HandleUtility.GUIPointToWorldRay(current.mousePosition));
if (obj3 != null)
{
RaycastHit hit = (RaycastHit)obj3;
float num = 0f;
if (Tools.pivotMode == PivotMode.Center)
{
float num2 = HandleUtility.CalcRayPlaceOffset(HandleUtility.ignoreRaySnapObjects, hit.normal);
if (num2 != float.PositiveInfinity)
{
num = Vector3.Dot(dragObject.transform.position, hit.normal) - num2;
}
}
dragObject.transform.position = Matrix4x4.identity.MultiplyPoint(hit.point + ((Vector3)(hit.normal * num)));
}
else
{
dragObject.transform.position = HandleUtility.GUIPointToWorldRay(current.mousePosition).GetPoint(10f);
}
if (sceneView.in2DMode)
{
Vector3 position = dragObject.transform.position;
position.z = PrefabUtility.FindPrefabRoot(target).transform.position.z;
dragObject.transform.position = position;
}
current.Use();
}
break;
}
}
}