Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 /// <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);
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
            }
        }