Example #1
0
    private static void SceneGui(SceneView sceneView)
    {
        if (!EditableItem || !EditableState)
        {
            return;
        }

        Handles.color = CubeColor;
        Handles.DrawWireCube(
            EditableState.transform.position + EditableItem.orientation * Vector3.forward,
            Vector3.one * 0.2f
            );

        if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
        {
            GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive);
            Event.current.Use();

            SphereCollider collider = EditableState.GetComponent <SphereCollider>();
            Ray            ray      = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);

            //if ((state.transform.position - ray.origin).magnitude <= collider.radius * collider.radius)
            ray.origin -= ray.direction * collider.radius * 4;

            if (collider.Raycast(ray, out RaycastHit hit, 100.0f))
            {
                var toCenterDirection = EditableState.transform.position - hit.point;
                var rightDirection    = Vector3.Cross(toCenterDirection, ray.direction);
                var normal            = Vector3.Cross(rightDirection, ray.direction);
                var hitPosition       = EditableState.transform.position + StateEditorWindow.ReflectDirection(toCenterDirection, normal);

                Undo.RecordObject(EditableItem, "Undo orientation change");

                EditableItem.orientation = Quaternion.FromToRotation(Vector3.forward,
                                                                     hitPosition - EditableState.transform.position);
            }
        }
    }
Example #2
0
 protected void InitializeState()
 {
     AssignId id = this.GetComponent<AssignId>();
     this.state = new EditableState(id.Id);
 }