Exemple #1
0
        private void MouseDown()
        {
            Debug.Log("mousedown detected");
            lastSelected.Add(this);
            if (lastSelected.Count > 2)
            {
                lastSelected.RemoveAt(0);
            }
            if (lastSelected.Count == 2)
            {
                //DrawPathBasedOnHistory();
            }
            var myPosition = hexMember.PositionInTileMap;
            var mapManager = hexMember.MapManager;

            var cells = HexTileMapManager.GetPositionsWithinJumpDistance(myPosition, (int)5)
                        .Select(position => new { position, distance = myPosition.DistanceTo(position) })
                        .Where(info => info.distance % 2 == 0)
                        .SelectMany(info =>
            {
                return(mapManager
                       .GetMembersAtLocation <HexMember>(info.position, member => member.GetComponent <SingleHexCell>() != null)
                       ?.Select(hexMember => hexMember.GetComponent <SingleHexCell>()));
            });

            ToggleCells(cells);
        }
Exemple #2
0
        // Start is called before the first frame update
        void Start()
        {
            Mesh mesh = new Mesh();

            mapManager = GetComponent <HexTileMapManager>();

            // this mesh can get pretty big, so we need the extra size
            mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
            SetupMesh(mesh, hexTile, mapManager);
            GetComponent <MeshFilter>().mesh = mesh;
        }
Exemple #3
0
        private IEnumerable <OffsetCoordinate> GetTilesInRectangle(HexTileMapManager tilemapManager)
        {
            var totalCells = new Vector2Int(tilemapManager.hexWidth, tilemapManager.hexHeight);//new Vector2Int(10, 10);
            var min        = tilemapManager.tileMapMin.ToAxial();

            for (var verticalIndex = 0; verticalIndex < totalCells.y; verticalIndex++)
            {
                for (var horizontalIndex = 0; horizontalIndex < totalCells.x; horizontalIndex++)
                {
                    var newPos = new OffsetCoordinate(horizontalIndex, verticalIndex);
                    yield return((newPos.ToAxial() + min).ToOffset());
                }
            }
        }
Exemple #4
0
        private void SetupMesh(Mesh target, Mesh source, HexTileMapManager mapManager)
        {
            var offsets         = GetTilesInRectangle(mapManager);
            var targetSubmeshes = defaultSubmeshCopies.Length + extraTerrainRegions.Length;

            //offsets = new[]
            //{
            //    new Vector3(2, 0, 2),
            //    new Vector3(0, 0, 2),
            //    new Vector3(2, 0, 0),
            //    new Vector3(0, 0, 0),
            //};

            var copier = new MeshCopier(
                source, 2,
                target, targetSubmeshes);

            foreach (var offset in offsets)
            {
                var planeLocation = mapManager.TileMapPositionToPositionInPlane(offset.ToAxial());
                var realOffset    = new Vector3(planeLocation.x, 0, planeLocation.y);
                var vertexColor   = GetColorForTerrainAtPoint(offset);
                copier.NextCopy(realOffset, vertexColor);

                foreach (var submesh in defaultSubmeshCopies)
                {
                    copier.CopySubmeshTrianglesToOffsetIndex(submesh, submesh);
                }

                if (extraTerrainRegions.Length > 0)
                {
                    var extraSubmeshMapping = GetSubmeshForTerrainAtPoint(realOffset);
                    copier.CopySubmeshTrianglesToOffsetIndex(extraSubmeshMapping.sourceSubmesh, extraSubmeshMapping.destinationSubmesh);
                }
            }

            meshEditor = copier.FinalizeCopy();
        }
        public static void CalculateServiceRanges(HexTileMapManager manager)
        {
            //foreach (var market in allMarkets)
            //{
            //    var marketMember = market.GetComponentInParent<HexMember>();

            //    var myHexPosition = marketMember.PositionInTileMap;
            //    var effectiveRange = HexTileMapManager
            //        .GetPositionsWithinJumpDistance(myHexPosition, 2);
            //    market.myServiceRange = effectiveRange.ToArray();
            //}

            var allMarkets = manager.GetAllOfType <MarketBehavior>().ToList();

            Debug.Log($"Initializing {allMarkets.Count} markets");
            var marketPositions = allMarkets
                                  .Select(x => x.GetComponentInParent <HexMember>())
                                  .Select(x => x.PositionInTileMap)
                                  .ToList();

            var minimum      = manager.tileMapMin;
            var minimumAxial = minimum.ToAxial();
            var maximum      = manager.tileMapMax;

            var voroniData = VoroniTilingMapper.SetupVoroniMap(marketPositions, minimum, maximum);

            for (var row = 0; row < voroniData.Length; row++)
            {
                for (var col = 0; col < voroniData[row].Length; col++)
                {
                    var index      = voroniData[row][col];
                    var coordinate = new OffsetCoordinate(col, row).ToAxial() + minimumAxial;
                    allMarkets[index].myServiceRange.Add(coordinate.ToOffset());
                }
            }
        }