Esempio n. 1
0
        public void Check(TilePropagator propagator)
        {
            var topology = propagator.Topology;

            foreach (var i in topology.Indicies)
            {
                topology.GetCoord(i, out var x, out var y, out var z);
                var x2 = topology.Width - 1 - x;

                foreach (var tile in propagator.TileModel.Tiles)
                {
                    if (TileRotation.Rotate(tile, reflectX, out var tile2))
                    {
                        if (propagator.IsBanned(x, y, z, tile) && !propagator.IsBanned(x2, y, z, tile2))
                        {
                            propagator.Ban(x2, y, z, tile2);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public void Check(TilePropagator propagator)
        {
            var topology = propagator.Topology;

            foreach (var i in changeTracker.GetChangedIndices())
            {
                if (TryMapIndex(propagator, i, out var i2))
                {
                    topology.GetCoord(i, out var x, out var y, out var z);
                    topology.GetCoord(i2, out var x2, out var y2, out var z2);

                    foreach (var tile in propagator.TileModel.Tiles)
                    {
                        if (TryMapTile(tile, out var tile2))
                        {
                            if (propagator.IsBanned(x, y, z, tile) && !propagator.IsBanned(x2, y, z, tile2))
                            {
                                propagator.Ban(x2, y, z, tile2);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        public Point GetRandomPoint(TilePropagator propagator)
        {
            var topology = propagator.Topology;

            var points = new List <Point>();

            for (var z = 0; z < topology.Depth; z++)
            {
                for (var y = 0; y < topology.Height; y++)
                {
                    for (var x = 0; x < topology.Width; x++)
                    {
                        if (topology.Mask != null)
                        {
                            var index = topology.GetIndex(x, y, z);
                            if (!topology.Mask[index])
                            {
                                continue;
                            }
                        }

                        if (propagator.IsBanned(x, y, z, Tile))
                        {
                            continue;
                        }

                        points.Add(new Point(x, y, z));
                    }
                }
            }

            // Choose a random point to select
            if (points.Count == 0)
            {
                throw new System.Exception($"No legal placement of {Tile}");
            }

            var i = (int)(propagator.Random.NextDouble() * points.Count);

            return(points[i]);
        }