/// <summary> /// Create a new RouteNode. /// </summary> /// <param name="route">Route to own the node.</param> public static RouteNode CreateNewNode(Route route, int index) { var go = new GameObject(); RouteNode prevNode = null; if (route.Nodes.Count > 0) { prevNode = route.Nodes.Last(); } go.transform.position = GenerateNewNodePosition(prevNode); go.transform.SetParent(route.transform); go.transform.SetSiblingIndex(index); go.name = GenerateNewNodeName(route.gameObject.name, route.Nodes.Count); var node = go.AddComponent <RouteNode>(); node.EdgeEvent.Type = route.GetComponentInParent <RouteSet>().DefaultEdgeEventType; route.Nodes.Insert(index, node); UnitySceneUtils.Select(go); SceneView.lastActiveSceneView.FrameSelected(); return(node); }
/// <summary> /// Generate a position for a new node. /// </summary> /// <remarks>Once 2018.1 is out, change this to be in the center of the scene view.</remarks> /// <param name="previousNode">Previous node in the Route, or null if none.</param> /// <returns>The new node position.</returns> private static Vector3 GenerateNewNodePosition(RouteNode previousNode) { if (previousNode == null) { return(Vector3.zero); } return(previousNode.transform.position); }
/// <summary> /// Create a new RouteNodeEvent. /// </summary> /// <param name="parent">GameObject parent to own the event.</param> public static RouteNodeEvent CreateNewNodeEvent(RouteNode parent, RouteNodeEventType type) { var go = new GameObject(); go.transform.position = parent.transform.position; go.transform.SetParent(parent.transform); UnitySceneUtils.Select(go); SceneView.lastActiveSceneView.FrameSelected(); var routeEvent = go.AddComponent <RouteNodeEvent>(); routeEvent.Type = type; go.name = GenerateEventName(EventTypeToString(routeEvent.Type), parent.Events.Count); return(routeEvent); }
/// <summary> /// Draw the Route's gizmos in the scene view. /// </summary> void OnDrawGizmos() { var isRouteSelected = IsRouteSelected(); Gizmos.color = RouteBuilderPreferences.Instance.EdgeColor; RouteNode previousNode = null; for (int i = 0; i < this.Nodes.Count; i++) { var node = this.Nodes[i]; Gizmos.color = RouteBuilderPreferences.Instance.NodeColor; if (isRouteSelected) { Gizmos.DrawIcon(node.transform.position, "Route Builder/routebuilder_gizmo_node.png", true); } else { Gizmos.color = new Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, Gizmos.color.a * 0.1f); } if (previousNode == null) { previousNode = node; continue; } Gizmos.color = RouteBuilderPreferences.Instance.EdgeColor; if (!isRouteSelected) { Gizmos.color = new Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, Gizmos.color.a * 0.1f); } Gizmos.DrawLine(previousNode.transform.position, node.transform.position); previousNode = node; } // Connect first and last nodes. if (!this.Closed) { return; } if (this.Nodes.Count > 2) { Gizmos.DrawLine(this.Nodes[this.Nodes.Count - 1].transform.position, this.Nodes[0].transform.position); } }