Example #1
0
        /// <summary>
        /// Produces a copy of this XoRoRNG instance, such that next generated numbers by the returned instance is
        /// same as the current instance's next generated numbers. This just copies the states to the new instance
        /// and, usually, produce new value with the same exact states.
        /// </summary>
        /// <returns></returns>
        public XoRoRNG Copy()
        {
            XoRoRNG next = new XoRoRNG(State0);

            next.State0 = State0;
            next.State1 = State1;
            return(next);
        }
Example #2
0
        internal TesseraGeneratorHelper CreateTesseraGeneratorHelper(TesseraGenerateOptions options = null)
        {
            options = options ?? new TesseraGenerateOptions();
            var progress = options.progress;

            var seed = options.seed == 0 ? UnityEngine.Random.Range(int.MinValue, int.MaxValue) : options.seed;

            var xororng = new XoRoRNG(seed);

            Validate();

            TesseraGeneratorHelper.SetupModelFromTiles(tiles, out var allTiles, out var internalAdjacencies, out var tilesByFaceDir);

            var model = new AdjacentModel(DirectionSet.Cartesian3d);

            foreach (var(tile, frequency) in allTiles)
            {
                model.SetFrequency(tile, frequency);
            }

            foreach (var(tile1, tile2, d) in internalAdjacencies)
            {
                model.AddAdjacency(tile1, tile2, d);
            }

            // Generate adjacencies
            AddAdjacency(palette, model, Direction.XPlus, tilesByFaceDir[FaceDir.Right], tilesByFaceDir[FaceDir.Left]);
            AddAdjacency(palette, model, Direction.YPlus, tilesByFaceDir[FaceDir.Up], tilesByFaceDir[FaceDir.Down]);
            AddAdjacency(palette, model, Direction.ZPlus, tilesByFaceDir[FaceDir.Forward], tilesByFaceDir[FaceDir.Back]);

            var initialConstraints = searchInitialConstraints ? GetInitialConstraints() : this.initialConstraints;

            var constraints = GetTileConstraints(model);

            var actualSkyBox = skyBox == null ? null : new TesseraInitialConstraint
            {
                faceDetails = skyBox.faceDetails,
                offsets     = skyBox.offsets,
            };

            return(new TesseraGeneratorHelper(
                       palette,
                       model,
                       allTiles,
                       initialConstraints,
                       constraints,
                       tilesByFaceDir,
                       size,
                       backtrack,
                       actualSkyBox,
                       progress,
                       null,
                       xororng,
                       options.cancellationToken));
        }