Exemplo n.º 1
0
    public void GenerateEdges(Transform parent)
    {
        //GameObject parentObject = GameObject.FindGameObjectWithTag ("Edges");
        Edge         currentEdge;
        Intersection i1, i2;

        foreach (var tile in tilesDictionary)
        {
            List <Intersection> intersectionsOfTile = IntersectionsOfTile(tile.Value);

            for (int i = 1; i <= intersectionsOfTile.Count; i++)
            {
                i1 = IntersectionOfTileAtCorner(tile.Value, i % intersectionsOfTile.Count);
                i2 = IntersectionOfTileAtCorner(tile.Value, (i - 1) % intersectionsOfTile.Count);

                TupleInt tuple        = new TupleInt(i1.id, i2.id);
                TupleInt reverseTuple = new TupleInt(i2.id, i1.id);

                if (!edgesDictionary.ContainsKey(tuple) && !edgesDictionary.ContainsKey(reverseTuple))
                {
                    Vector3 midPoint = (i1.transform.position + i2.transform.position) / 2;
                    float   angle    = Intersection.AngleOfCorner((i - 1) % intersectionsOfTile.Count, hexOrientation);

                    GameObject instantiation;
                    if (online)
                    {
                        instantiation = (GameObject)PhotonNetwork.Instantiate("Edge", midPoint, Quaternion.Euler(new Vector3(0.0f, angle, 0.0f)), 0);
                    }
                    else
                    {
                        instantiation = (GameObject)Instantiate(edgePrefab, midPoint, Quaternion.Euler(new Vector3(0.0f, angle, 0.0f)), this.transform);
                    }

                    instantiation.transform.localScale = new Vector3(instantiation.transform.localScale.x * hexRadius, instantiation.transform.localScale.y, instantiation.transform.localScale.z);
                    instantiation.name = "Edge " + edgeID;

                    currentEdge = instantiation.GetComponent <Edge> ();
                    currentEdge.transform.parent = parent.transform;
                    currentEdge.setID(edgeID++);

                    edgesDictionary.Add(tuple, currentEdge);
                    edgesByIdDictionary.Add(currentEdge.getID(), currentEdge);
                    edgesList.Add(currentEdge);

                    List <GameTile> neighbors = getCommonTilesOfTwoIntersections(i1, i2);
                    foreach (GameTile gameTile in neighbors)
                    {
                        currentEdge.addTile(gameTile);
                        gameTile.addEdge(currentEdge);
                    }

                    currentEdge.addIntersection(i1);
                    currentEdge.addIntersection(i2);
                    i1.addLinkedEdge(currentEdge);
                    i2.addLinkedEdge(currentEdge);

                    i1.addNeighborIntersection(i2);
                    i2.addNeighborIntersection(i1);
                }
            }
        }

        //storeEdgeInformation ();
    }