Exemplo n.º 1
0
        public static float[] OuterVertexHeights(BlendTile tile, int shift, int adj_height_l, int adj_height_r)
        {
            if (shift < 0 || shift >= 6)
            {
                throw new System.ArgumentOutOfRangeException("shift", "Arguments range is [0-5].");
            }
            float[] heights = new float[] { 0, 0, 0, 0, 0, 0 };
            //calculate height
            switch (tile)
            {
            case BlendTile.Single:
                heights[shift]          = adj_height_l;
                heights[HV.D[1, shift]] = adj_height_l;
                break;

            case BlendTile.Double:
                heights[shift]          = adj_height_l;
                heights[HV.D[1, shift]] = adj_height_l;
                heights[HV.D[2, shift]] = adj_height_l;
                break;

            case BlendTile.Triple:
                heights[shift]          = adj_height_l;
                heights[HV.D[1, shift]] = adj_height_l;
                heights[HV.D[2, shift]] = adj_height_r;
                heights[HV.D[3, shift]] = adj_height_r;
                break;
            }
            return(heights);
        }
 public void Init()
 {
     _tile            = default(BlendTile);
     _adj_options     = new AdjBlendOption[6];
     _raw_adj_options = new ushort[6];
     for (int d = 0; d < 6; d++)
     {
         this[d] = (AdjBlendOption)EditorPrefs.GetInt(PROP_KEY + d, 1);
     }
 }
Exemplo n.º 3
0
        private static int ClassifyAdjacentHeight(BlendTile tile)
        {
            int height = 0;

            if (tile != BlendTile.None)
            {
                height = 1;
            }
            return(height);
        }
Exemplo n.º 4
0
 public int BlendTileKeyIndex(BlendTile tile)
 {
     for (int k = 0; k < _blend_tiles.Length; k++)
     {
         if (_blend_tiles[k] == tile)
         {
             return(k);
         }
     }
     return(-1);
 }
Exemplo n.º 5
0
        public void GenerateMesh()
        {
            List <Vector3> vertices  = new List <Vector3>();
            List <int>     triangles = new List <int>();

            //add center hexagon
            int base_height  = 2;
            int adj_height_l = 0;
            int adj_height_r = 0;

            _tile  = BlendTile.None;
            _shift = 0;
            if (rule != null)
            {
                TileConfiguration config = rule.GetTileConfiguration(adj_tiles);
                _tile        = config.tile;
                _shift       = config.shift;
                adj_height_l = 1;
                adj_height_r = 1;
            }

            float[]   corners        = MeshGeneration.OuterVertexHeights(_tile, _shift, adj_height_l, adj_height_r);
            Vector3[] surface_vertex = MeshGeneration.CalculateSurfaceVertices(Vector3.zero, base_height, corners);
            Vector3[] base_vertex    = MeshGeneration.CalculateBaseVertices(Vector3.zero, 0);
            MeshGeneration.AddHexagon(surface_vertex, base_vertex, vertices, triangles);

            //add adjacent hexagons
            for (int d = 0; d < 6; d++)
            {
                BlendTile adj_tile   = ClassifyAdjacentTile(adj_tiles[d]);
                int       adj_shift  = CalculateAdjacentShift(adj_tile, adj_tiles[d], d);
                int       adj_height = ClassifyAdjacentHeight(adj_tile);
                int       height     = AdjacentHexagonHeight(adj_tiles[d]);
                corners = MeshGeneration.OuterVertexHeights(adj_tile, adj_shift, adj_height);
                Vector3 center = MeshGeneration.AdjCenters[d];
                surface_vertex = MeshGeneration.CalculateSurfaceVertices(center, base_height + height, corners);
                base_vertex    = MeshGeneration.CalculateBaseVertices(center, 0);
                MeshGeneration.AddHexagon(surface_vertex, base_vertex, vertices, triangles);
            }

            Mesh mesh = new Mesh();

            mesh.SetVertices(vertices);
            mesh.SetTriangles(triangles, 0);

            mesh.RecalculateBounds();
            mesh.RecalculateNormals();
            mesh.RecalculateTangents();
            mesh.UploadMeshData(false);

            SetMesh(mesh);
        }
 public void Init()
 {
     _shift     = 0;
     _tile      = default(BlendTile);
     _adj_tiles = new AdjBlendTile[] {
         AdjBlendTile.B, AdjBlendTile.B, AdjBlendTile.B,
         AdjBlendTile.B, AdjBlendTile.B, AdjBlendTile.B
     };
     for (int d = 0; d < 6; d++)
     {
         this[d] = (AdjBlendTile)EditorPrefs.GetInt(PROP_KEY + d, 1);
     }
 }
Exemplo n.º 7
0
 private void Reset()
 {
     //Create component
     _tile     = BlendTile.None;
     _shift    = 0;
     adj_tiles = new AdjBlendTile[] {
         AdjBlendTile.B,
         AdjBlendTile.B,
         AdjBlendTile.B,
         AdjBlendTile.B,
         AdjBlendTile.B,
         AdjBlendTile.B
     };
     GenerateMesh();
 }
Exemplo n.º 8
0
        private void ReadBlendTiles()
        {
            Map.Tiles.BlendTiles = new List <BlendTile>(Map.Tiles.NumberOfBlendTiles);

            //Start at 1! NumberOfBlendTiles is always 1 more than the actual number (?).
            for (int i = 1; i < Map.Tiles.NumberOfBlendTiles; i++)
            {
                var blendTile = new BlendTile();
                blendTile.TileIndex = reader.ReadInt16();
                blendTile.BlendType = (BlendType)reader.ReadInt64();
                long blendData = reader.ReadInt64();
                Assert(blendData == BlendTile.BlendData);

                Map.Tiles.BlendTiles.Add(blendTile);
            }
        }
        public static int UpperSides(this BlendTile tile)
        {
            switch (tile)
            {
            case BlendTile.Single:
                return(1);

            case BlendTile.Double:
                return(2);

            case BlendTile.Triple:
                return(3);

            default:
                return(0);
            }
        }
Exemplo n.º 10
0
        private static BlendTile ClassifyAdjacentTile(AdjBlendTile adj_tile)
        {
            BlendTile tile = BlendTile.None;

            switch (adj_tile)
            {
            case AdjBlendTile.BC:
                tile = BlendTile.Triple;
                break;

            case AdjBlendTile.bc:
            case AdjBlendTile.LC:
            case AdjBlendTile.lc:
                tile = BlendTile.Single;
                break;
            }
            return(tile);
        }
Exemplo n.º 11
0
        public void Init()
        {
            _default_tile = default(BlendTile);

            BlendTile[] tiles = (BlendTile[])System.Enum.GetValues(typeof(BlendTile));
            int         index = 0;
            int         count = Mathf.Max(tiles.Length - 1);

            _rule_lists  = new BlendRuleList[count];
            _blend_tiles = new BlendTile[count];
            for (int k = 0; k < tiles.Length; k++)
            {
                if (tiles[k] != _default_tile)
                {
                    _blend_tiles[index] = tiles[k];
                    _rule_lists[index]  = new BlendRuleList();
                    index += 1;
                }
            }
        }
        public static bool IsHighPoint(this BlendTile tile, int index)
        {
            if (index < 0 || index > 5)
            {
                return(false);
            }
            switch (tile)
            {
            case BlendTile.Single:
                return(index < 2);

            case BlendTile.Double:
                return(index < 3);

            case BlendTile.Triple:
                return(index < 4);

            default:
                return(false);
            }
        }
Exemplo n.º 13
0
 private static int CalculateAdjacentShift(BlendTile tile, AdjBlendTile adj_tile, int d)
 {
     if (tile == BlendTile.Triple)
     {
         return(MeshGeneration.D[5, d]);
     }
     else if (tile == BlendTile.Single)
     {
         if (adj_tile == AdjBlendTile.bc || adj_tile == AdjBlendTile.lc)
         {
             return(MeshGeneration.D[4, d]);
         }
         else
         {
             return(MeshGeneration.D[3, d]);
         }
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 14
0
 public static float[] OuterVertexHeights(BlendTile tile, int shift, int adj_height)
 {
     return(OuterVertexHeights(tile, shift, adj_height, adj_height));
 }