/// <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); }
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)); }