/// <summary> /// Gets the point. /// </summary> /// <returns>The point.</returns> /// <param name="currentRectTransform">Current rect transform.</param> /// <param name="position">Position.</param> protected Vector3 GetPoint(RectTransform currentRectTransform, ConnectorPosition position) { var rect = (!canvas || !canvas.pixelPerfect) ? currentRectTransform.rect : RectTransformUtility.PixelAdjustRect(currentRectTransform, canvas); Vector3 delta; if (RootCanvas.renderMode == RenderMode.ScreenSpaceCamera) { delta = RootCanvas.worldCamera.WorldToScreenPoint(rectTransform.position) - RootCanvas.worldCamera.WorldToScreenPoint(currentRectTransform.position); } else { delta = rectTransform.position - currentRectTransform.position; } rect.x -= delta.x; rect.y -= delta.y; switch (position) { case ConnectorPosition.Left: rect.y += rect.height / 2f; break; case ConnectorPosition.Right: rect.x += rect.width; rect.y += rect.height / 2f; break; case ConnectorPosition.Top: rect.x += rect.width / 2f; rect.y += rect.height; break; case ConnectorPosition.Bottom: rect.x += rect.width / 2f; break; case ConnectorPosition.Center: rect.x += rect.width / 2f; rect.y += rect.height / 2f; break; } return(new Vector3(rect.x, rect.y, 0)); }
/// <summary> /// Gets the point. /// </summary> /// <returns>The point.</returns> /// <param name="currentRectTransform">Current rect transform.</param> /// <param name="position">Position.</param> protected Vector3 GetPoint(RectTransform currentRectTransform, ConnectorPosition position) { var rect = (!canvas || !canvas.pixelPerfect) ? currentRectTransform.rect : RectTransformUtility.PixelAdjustRect(currentRectTransform, canvas); var delta = rectTransform.position - currentRectTransform.position; rect.x -= delta.x; rect.y -= delta.y; switch (position) { case ConnectorPosition.Left: rect.y += rect.height / 2f; break; case ConnectorPosition.Right: rect.x += rect.width; rect.y += rect.height / 2f; break; case ConnectorPosition.Top: rect.x += rect.width / 2f; rect.y += rect.height; break; case ConnectorPosition.Bottom: rect.x += rect.width / 2f; break; case ConnectorPosition.Center: rect.x += rect.width / 2f; rect.y += rect.height / 2f; break; } return(new Vector3(rect.x, rect.y)); }
/// <summary> /// Sets a connecting line position used to connect an annotation with its icon on the side bar /// </summary> /// <param name="position">One of the allowed position values</param> /// <returns>An instance of the widget object</returns> public AnnotationWidget ConnectorPos(ConnectorPosition position = ConnectorPosition.Middle) { _options.ConnectorPos = position; return(this); }
/// <summary> /// Sets a connecting line position used to connect an annotation with its icon on the side bar /// </summary> /// <param name="position">One of the allowed position values</param> /// <returns>An instance of the widget object</returns> public AnnotationWidget ConnectorPos(ConnectorPosition position = ConnectorPosition.Middle) { _options.ConnectorPos = position; return this; }
private static TransitionNoduleUIInfo CreateTransitionUIInfo(ConversationNode node, ConnectorPosition position, int i, int count) { Func <RectangleF, RectangleF> top = (area) => { float per = area.Width / (float)count; float y = area.Top - 10; return(new RectangleF(area.Left + (int)(per * (i + 0.5f)) - 5, y, 10, 10)); }; Func <RectangleF, RectangleF> bottom = (area) => { float per = area.Width / (float)count; float y = area.Bottom; return(new RectangleF(area.Left + (int)(per * (i + 0.5f)) - 5, y, 10, 10)); }; Func <RectangleF, RectangleF> left = (area) => { float per = area.Height / (float)count; float x = area.Left - 10; return(new RectangleF(x, area.Top + (int)(per * (i + 0.5f)) - 5, 10, 10)); }; Func <RectangleF, RectangleF> right = (area) => { float per = area.Height / (float)count; float x = area.Right; return(new RectangleF(x, area.Top + (int)(per * (i + 0.5f)) - 5, 10, 10)); }; var result = new TransitionNoduleUIInfo(position.ForPosition(() => top(node.Renderer.Area), () => bottom(node.Renderer.Area), () => left(node.Renderer.Area), () => right(node.Renderer.Area))); Action <Changed <RectangleF> > areaChanged = c => { result.Area.Value = position.ForPosition(() => top(node.Renderer.Area), () => bottom(node.Renderer.Area), () => left(node.Renderer.Area), () => right(node.Renderer.Area)); }; node.Renderer.AreaChanged += areaChanged; node.RendererChanging += () => node.Renderer.AreaChanged -= areaChanged; node.RendererChanged += () => node.Renderer.AreaChanged += areaChanged; return(result); }