cvr-props/Assets/ABI.CCK/Scripts/Editor/CVRHapticAreaChestEditor.cs

98 lines
3.3 KiB
C#
Raw Permalink Normal View History

2023-01-22 16:38:23 +01:00
using System;
using ABI.CCK.Components;
using UnityEditor;
using UnityEngine;
#pragma warning disable
[CustomEditor(typeof(CVRHapticAreaChest))]
public class CVRHapticAreaChestEditor : UnityEditor.Editor
{
private CVRHapticAreaChest _hapticsChest;
private void OnEnable()
{
_hapticsChest = (CVRHapticAreaChest) target;
}
private void OnSceneGUI()
{
if (_hapticsChest.gameObject.activeInHierarchy)
{
Event e = Event.current;
int controlId = GUIUtility.GetControlID(GetHashCode(), FocusType.Passive);
var wasMouseDown = false;
var preventControls = false;
if (Event.current.type == EventType.MouseUp && Event.current.button == 0)
{
preventControls = true;
}
if(Event.current.type == EventType.MouseDown && Event.current.button == 0) {
preventControls = true;
}
if (Event.current.button == 0)
{
preventControls = true;
}
var hapticsTransform = _hapticsChest.transform;
var scale = hapticsTransform.localScale;
var inverseScale = new Vector3(1 / scale.x, 1 / scale.y, 1 / scale.z);
var i = 0;
var selected = false;
foreach (var point in _hapticsChest.HapticPoints40)
{
var localPoint = point;
localPoint.Scale(_hapticsChest.chestAreaSize * 0.5f);
if (i == _hapticsChest.selectedPoint)
{
Handles.color = Color.cyan;
Vector3 pos = hapticsTransform.TransformPoint(Vector3.Scale(_hapticsChest.HapticPoints40[i], inverseScale));
EditorGUI.BeginChangeCheck();
Vector3 pointPosition = Handles.PositionHandle(pos, _hapticsChest.transform.rotation);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(_hapticsChest, "CVR Haptic Chest Point Change");
var newLocalPoint = _hapticsChest.transform.InverseTransformPoint(pointPosition);
newLocalPoint.Scale(_hapticsChest.transform.lossyScale);
Debug.Log(newLocalPoint);
//_hapticsChest.HapticPoints40[i].z = newLocalPoint.z;
}
}
else
{
Handles.color = Color.yellow;
}
/*if (Handles.Button(_hapticsChest.transform.TransformPoint(localPoint), _hapticsChest.transform.rotation, 0.01f, 0.01f,
Handles.CubeHandleCap))
{
if (_hapticsChest.selectedPoint == i)
{
_hapticsChest.selectedPoint = -1;
}
else
{
_hapticsChest.selectedPoint = i;
}
selected = true;
}*/
i++;
}
if (e.type == EventType.Layout && preventControls && selected)
{
HandleUtility.AddDefaultControl(controlId);
}
}
}
}