예제 #1
0
 // Start method
 void Start()
 {
     terrain      = FindObjectOfType <Terrain>();
     show_node    = true;
     width        = 4;
     min_length   = 5;
     nodeColStart = NodeColliderType.OnTerrain;
     nodeColEnd   = NodeColliderType.OnTerrain;
 }
예제 #2
0
        // Use this for initialization
        void Start()
        {
            this.terrain = FindObjectOfType <Terrain>();
            node_list    = new NodeList();
            node_prefab  = Resources.Load("Prefabs/Streets/Node");
            NodeParent   = new GameObject("Road System") as GameObject;

            node_origin_collider = NodeColliderType.OnTerrain;
            node_end_collider    = NodeColliderType.OnTerrain;
        }
예제 #3
0
        // update
        void Update()
        {
            // On mouse button down
            if (Input.GetMouseButtonDown(0))
            {
                prefab_node = Resources.Load(node_path) as GameObject;                 // load node prefab

                // defines the start of the street and node
                Vector3 street_start;
                // If we hit something
                if (clickLocation(out street_start))
                {
                    node_start = Instantiate(prefab_node, street_start, Quaternion.identity) as GameObject;
                    // Set last node as current one
                    node_start.GetComponent <NodeClick>().ground = this;
                    nodeColStart = NodeColliderType.OnTerrain;
                }
            }

            // On Mouse Button up
            if (Input.GetMouseButtonUp(0))
            {
                // defines the end of the street and node
                Vector3 street_end;
                // If mouse up location is on terrain
                if (node_start != null && clickLocation(out street_end))
                {
                    node_end = Instantiate(prefab_node, street_end, Quaternion.identity) as GameObject;
                    // Set last node as current one
                    node_end.GetComponent <NodeClick>().ground = this;

                    nodeColEnd = NodeColliderType.OnTerrain;

                    // if street wasnt created
                    if (!createStreet(node_start.transform.position, node_end.transform.position))
                    {
                        destroyNodes();
                    }
                }
                // else if mouse up location is on node
                else if (node_start != null && clickLocationNode(out street_end))
                {
                    if (!createStreet(node_start.transform.position, street_end))
                    {
                        destroyNodes();
                    }
                }

                showNode();                 // Inspector mode only
                node_start = null;
            }
        }
예제 #4
0
        void Awake()
        {
            /*  MeshFilter mf = road.GetComponent<MeshFilter>();
             * if (mf == null)
             * {
             *    CreateRoad();
             *    return;
             * }
             * if (mf.mesh == null)
             * {
             *    Destroy(road.GetComponent<MeshRenderer>());
             *    Destroy(mf);
             *    CreateRoad();
             * }*/


            terrain      = FindObjectOfType <Terrain>();
            show_node    = true;
            width        = 1;
            min_length   = 5;
            nodeColStart = NodeColliderType.OnTerrain;
            nodeColEnd   = NodeColliderType.OnTerrain;
        }
예제 #5
0
 // Set the start node
 public void setNodeStart(GameObject node)
 {
     node_start   = node;
     nodeColStart = NodeColliderType.OnNode;
 }
예제 #6
0
        // Update is called once per frame
        void Update()
        {
            // Mouse Button Down
            if (Input.GetMouseButtonDown(0))
            {
                // hit terrain
                if (TerrainRayCast(out node_start_pos, out node_start_normal))
                {
                    node_obj_origin = Instantiate(node_prefab, node_start_pos, Quaternion.Euler(Vector3.zero)) as GameObject;
                    node_obj_origin.transform.parent = NodeParent.transform;

                    // Set last node clicked as current one
                    node_obj_origin.GetComponent <NodeClick>().straightRoad = this;
                    //if(node_obj_origin.GetComponent<Node>().connected_roads.Count <= 0)
                    //	node_list.add2(node_obj_origin);
                    //else
                    node_list.add(node_obj_origin);

                    node_origin_collider = NodeColliderType.OnTerrain;
                    Debug.Log("Node Count: " + node_list.countIt(node_list.list));
                }
            }

            // Mouse up
            if (Input.GetMouseButtonUp(0))
            {
                if (node_obj_origin != null)
                {
                    GameObject nodeHit;
                    // MouseUp hit terrain
                    if (TerrainRayCast(out node_end_pos, out node_end_normal))
                    {
                        node_obj_end = Instantiate(node_prefab, node_end_pos, Quaternion.Euler(Vector3.zero)) as GameObject;
                        node_obj_end.transform.parent = NodeParent.transform;

                        // Set last node clicked as current one
                        node_obj_end.GetComponent <NodeClick>().straightRoad = this;
                        node_end_collider = NodeColliderType.OnTerrain;

                        // if road was not created delete nodes
                        if (!createRoad(node_obj_origin.transform.position, node_obj_end.transform.position))
                        {
                            destroyNodes();
                        }
                        else
                        {
                            // add node to list and register road to node
                            if (node_obj_origin.GetComponent <Node>().connected_roads.Count <= 0)
                            {
                                node_list.add(node_obj_end);
                            }
                            else
                            {
                                node_list.insert(node_obj_origin, node_obj_end);
                            }

                            node_obj_origin.GetComponent <Node>().connected_roads.Add(this.road);
                            node_obj_end.GetComponent <Node>().connected_roads.Add(this.road);
                        }

                        Debug.Log("Node Count: " + node_list.countIt(node_list.list));
                    }

                    // MouseUp hit node
                    else if (NodeRayCast(out nodeHit))
                    {
                        node_obj_end      = nodeHit.collider.transform.parent.gameObject;
                        node_end_collider = NodeColliderType.OnNode;
                        if (!createRoad(node_obj_origin.transform.position, node_obj_end.transform.position))
                        {
                            destroyNodes();
                        }

                        else
                        {
                            // register road to node
                            node_obj_origin.GetComponent <Node>().connected_roads.Add(this.road);
                            node_obj_end.GetComponent <Node>().connected_roads.Add(this.road);
                        }
                        Debug.Log("Node Count: " + node_list.countIt(node_list.list));
                    }
                }
            }
        }
예제 #7
0
 // Set the start node
 public void setNodeStart(GameObject node)
 {
     node_obj_origin      = node;
     node_origin_collider = NodeColliderType.OnNode;
 }