Ejemplo n.º 1
0
	private BaseTileScript bts;          // Pointer to this Tile's BaseTileScript for access to public methods.

	void Start(){
		bts = (BaseTileScript) this.gameObject.GetComponentInParent (typeof(BaseTileScript));
		// If this is the starting tile, then on startup of the game, we need to tell Mama what her valid moves are.
		// We do this by effectivelly "triggering" as if Mama had just walked onto us.
		if (amStartingTileFor != null) {
			OnTriggerEnter(amStartingTileFor.GetComponent<Collider>());
		}
	}
Ejemplo n.º 2
0
    public Tile CreateTile(Vector3 center, List <MeshTriangle> adjacentTris)
    {
        GameObject tileObj = new GameObject("Tile");
        Mesh       submesh = new Mesh();

        tileObj.AddComponent <MeshFilter>();
        tileObj.AddComponent <MeshRenderer>();

        tileObj.transform.parent        = this.transform;
        tileObj.transform.localPosition = center;

        Vector3        barycenter = Vector3.zero;
        List <Vector3> verts      = new List <Vector3>();
        List <Vector2> uvs        = new List <Vector2>();

        // Calculate the barycenter of the tile face
        foreach (MeshTriangle tri in adjacentTris)
        {
            Vector3 incenter = tri.GetIncenter();
            barycenter += incenter;
            verts.Add(incenter);
        }

        // Orient tile transform
        Vector3 norm = barycenter - transform.position;

        barycenter /= adjacentTris.Count;
        tileObj.transform.localPosition = barycenter;
        //tileObj.transform.up = Invert ? -norm : norm;
        Vector3 toFirstVert = verts[0] - barycenter;

        tileObj.transform.rotation = Quaternion.LookRotation(toFirstVert, Invert ? -norm : norm);

        // Convert all vertices into the local space of the tile
        for (int i = 0; i < verts.Count; i++)
        {
            verts[i] = tileObj.transform.InverseTransformPoint(verts[i]);
        }

        // Sort verts clockwise
        Vector3[] vertArray = verts.ToArray();
        Array.Sort(vertArray, new ClockwiseComparer(Vector3.zero));

        // Generate UVs
        float startAngle = 90f;

        for (int i = 0; i < vertArray.Length; i++)
        {
            float angle = 360f * ((float)i / vertArray.Length) * Mathf.Deg2Rad + startAngle * Mathf.Deg2Rad;
            float x     = Mathf.Cos(angle);
            float y     = Mathf.Sin(angle);

            Vector2 uv = new Vector2(x, y) / 2f + new Vector2(0.5f, 0.5f);
            uvs.Add(uv);
        }

        uvs.Reverse();

        // Generate Triangles
        List <int> subIndices = new List <int>();

        for (int t = 1; t < verts.Count - 1; t++)
        {
            subIndices.Add(0);
            subIndices.Add(t);
            subIndices.Add(t + 1);
        }

        // Build Mesh
        submesh.vertices  = vertArray;
        submesh.triangles = subIndices.ToArray();
        submesh.uv        = uvs.ToArray();
        submesh.RecalculateBounds();
        submesh.RecalculateNormals();

        // Setup tile
        tileObj.GetComponent <MeshFilter>().sharedMesh = submesh;
        BaseTileScript tile = tileObj.AddComponent <BaseTileScript>();

        tile.isHexagon = verts.Count == 6;
        //tile.GetComponent<Renderer>().sharedMaterial = verts.Count == 6 ? hexMat : pentMat;

        if (GenerateTileColliders)
        {
            switch (TileColliderType)
            {
            case TileColliderType.Box:
                tileObj.AddComponent <BoxCollider>();
                break;

            case TileColliderType.Mesh:
                tileObj.AddComponent <MeshCollider>();
                break;

            case TileColliderType.Sphere:
                tileObj.AddComponent <SphereCollider>();
                break;
            }
        }

        verts.Clear();
        subIndices.Clear();

        tile.IsInverted   = Invert;
        tile.parentPlanet = this;
        tile.Initialize();
        tile.SetGroupId(0);

        return(tile);
    }
Ejemplo n.º 3
0
	private BaseTileScript myBTS;  // Accessor to the BaseTileScript of the parent.

	// Use this for initialization
	void Start () {
		this.myBTS = (BaseTileScript)this.transform.GetComponentInParent (typeof(BaseTileScript));
		this.amt = 0;
	}