Exemplo n.º 1
0
 public GenerationContext(int recursiveCount, TypeStack typeStack, IGeneratorResolver resolver, FieldInfo fieldInfo)
 {
     RecursiveCount = recursiveCount;
     TypeStack      = typeStack;
     Resolver       = resolver;
     FieldInfo      = fieldInfo;
 }
Exemplo n.º 2
0
        public T[] CreateMany <T>(int length = 9, int recursiveCount = 3, IGeneratorResolver resolver = null)
        {
            resolver = resolver ?? defaultResolver;
            var xs        = new T[length];
            var generator = resolver.GetGenerator(typeof(T));
            var stack     = new TypeStack(new Stack <Type>());

            for (int i = 0; i < xs.Length; i++)
            {
                xs[i] = (T)generator.Generate(new GenerationContext(recursiveCount, stack, resolver, null));
            }
            return(xs);
        }
Exemplo n.º 3
0
        public ServerChunkGenerator(
            IChunkSizePolicy chunkSizePolicy, 
            IAssetManagerProvider assetManagerProvider, 
            IGeneratorResolver generatorResolver,
            IEdgePointCalculator edgePointCalculator,
            IChunkConverter chunkConverter,
            IChunkCompressor chunkCompressor)
        {
            this.m_ChunkSizePolicy = chunkSizePolicy;
            this.m_EdgePointCalculator = edgePointCalculator;
            this.m_AssetManager = assetManagerProvider.GetAssetManager();
            this.m_ChunkCompressor = chunkCompressor;
            this.m_ChunkConverter = chunkConverter;

            this.m_GeneratorPipeline = new ThreadedTaskPipeline<ChunkGenerationRequest>();
            this.m_ConverterPipeline = new ThreadedTaskPipeline<ChunkConversionRequest>(false);
            this.m_CompressorPipeline = new ThreadedTaskPipeline<ChunkCompressionRequest>(false);

            this.m_Generator = generatorResolver.GetGeneratorForGame();
            this.m_Generator.SetSeed(10000);

            new Thread(this.GeneratorRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();

            new Thread(this.ConverterRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();

            new Thread(this.CompressorRun)
            {
                IsBackground = true,
                Priority = ThreadPriority.Highest
            }.Start();
        }
 public ActualProceduralConfiguration(
     IGeneratorResolver generatorResolver)
 {
     this.m_GeneratorResolver = generatorResolver;
 }
Exemplo n.º 5
0
        public PregenerateWorld(
            IAssetManagerProvider assetManagerProvider,
            I2DRenderUtilities twodRenderUtilites,
            IChunkSizePolicy chunkSizePolicy,
            IGenerationPlanner generationPlanner,
            IGeneratorResolver generatorResolver,
            ILevel level)
        {
            this.m_AssetManager = assetManagerProvider.GetAssetManager();
            this.m_2DRenderUtilities = twodRenderUtilites;
            this.m_ChunkSizePolicy = chunkSizePolicy;
            this.m_GenerationPlanner = generationPlanner;

            this.m_DefaultFont = this.m_AssetManager.Get<FontAsset>("font.Default");
            this.m_Entities = new List<IEntity>();
            this.m_Status = "Generating world...";
            this.m_Level = level;

            // Create plan and execute in a seperate thread.
            var t = new Thread(() =>
            {
                var generator = generatorResolver.GetGeneratorForGame();
                generator.SetSeed(10000);
                var request = this.m_GenerationPlanner.CreateRequest(generator);

                this.m_Level.ScanChunks();
                for (var x = -1; x <= 1; x++)
                for (var y = -1; y <= 1; y++)
                for (var z = -1; z <= 1; z++)
                {
                    if (this.m_Level.HasChunk(
                        x * this.m_ChunkSizePolicy.ChunkCellWidth * this.m_ChunkSizePolicy.CellVoxelWidth,
                        y * this.m_ChunkSizePolicy.ChunkCellHeight * this.m_ChunkSizePolicy.CellVoxelHeight,
                        z * this.m_ChunkSizePolicy.ChunkCellDepth * this.m_ChunkSizePolicy.CellVoxelDepth))
                        continue;
                    request.AddRegion(
                        x * this.m_ChunkSizePolicy.ChunkCellWidth,
                        z * this.m_ChunkSizePolicy.ChunkCellDepth,
                        y * this.m_ChunkSizePolicy.ChunkCellHeight,
                        this.m_ChunkSizePolicy.ChunkCellWidth,
                        this.m_ChunkSizePolicy.ChunkCellDepth,
                        this.m_ChunkSizePolicy.ChunkCellHeight);
                }

                for (var x = -10; x <= 10; x++)
                for (var z = -10; z <= 10; z++)
                {
                    if (this.m_Level.HasChunk(
                        x * this.m_ChunkSizePolicy.ChunkCellWidth * this.m_ChunkSizePolicy.CellVoxelWidth,
                        0,
                        z * this.m_ChunkSizePolicy.ChunkCellDepth * this.m_ChunkSizePolicy.CellVoxelDepth))
                        continue;
                    request.AddRegion(
                        x * this.m_ChunkSizePolicy.ChunkCellWidth,
                        z * this.m_ChunkSizePolicy.ChunkCellDepth,
                        0,
                        this.m_ChunkSizePolicy.ChunkCellWidth,
                        this.m_ChunkSizePolicy.ChunkCellDepth,
                        1);
                }

                request.Progress += (sender, e) => this.m_Status = "Generating world... " + e.Progress + "%";
                request.RegionComplete += (sender, e) =>
                {
                    var cells = new Cell[this.m_ChunkSizePolicy.ChunkCellWidth,
                        this.m_ChunkSizePolicy.ChunkCellHeight,
                        this.m_ChunkSizePolicy.ChunkCellDepth];
                    for (var x = 0; x < e.Region.GeneratedData.GetLength(0); x++)
                    for (var y = 0; y < e.Region.GeneratedData.GetLength(1); y++)
                    for (var z = 0; z < e.Region.GeneratedData.GetLength(2); z++)
                        cells[x, y, z] = e.Region.GeneratedData[x, y, z];
                    this.m_Level.SaveChunk(
                        e.Region.X * this.m_ChunkSizePolicy.CellVoxelWidth,
                        e.Region.Y * this.m_ChunkSizePolicy.CellVoxelHeight,
                        e.Region.Z * this.m_ChunkSizePolicy.CellVoxelDepth,
                        cells);
                };
                this.m_GenerationPlanner.Execute(request);
            });
            t.IsBackground = true;
            t.Start();
        }
Exemplo n.º 6
0
 public static object[] CreateMany(Type type, int length = 9, int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     return(DefaultInstance.CreateMany(type, length, recursiveCount, resolver));
 }
Exemplo n.º 7
0
 public static T[] CreateMany <T>(int length = 9, int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     return(DefaultInstance.CreateMany <T>(length, recursiveCount, resolver));
 }
Exemplo n.º 8
0
        internal IGeneratorResolver defaultResolver; // can access from FixtureFactory

        public Fixture(IGeneratorResolver defaultResolver)
        {
            this.defaultResolver = defaultResolver;
        }
Exemplo n.º 9
0
 public static T Create <T>(int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     return(DefaultInstance.Create <T>(recursiveCount, resolver));
 }
Exemplo n.º 10
0
 public static object Create(Type type, int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     return(DefaultInstance.Create(type, recursiveCount, resolver));
 }
Exemplo n.º 11
0
 public T Create <T>(int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     return((T)Create(typeof(T), recursiveCount, resolver));
 }
Exemplo n.º 12
0
 public object Create(Type type, int recursiveCount = 3, IGeneratorResolver resolver = null)
 {
     resolver = resolver ?? defaultResolver;
     return(resolver.GetGenerator(type).Generate(new GenerationContext(recursiveCount, new TypeStack(new Stack <Type>()), resolver, null)));
 }