예제 #1
0
 public RoomExitGenerator(IAreaPercentileSelector areaPercentileSelector, AreaGenerator hallGenerator, AreaGenerator doorGenerator, IPercentileSelector percentileSelector)
 {
     this.areaPercentileSelector = areaPercentileSelector;
     this.hallGenerator = hallGenerator;
     this.doorGenerator = doorGenerator;
     this.percentileSelector = percentileSelector;
 }
예제 #2
0
 public ChamberGenerator(IAreaPercentileSelector areaPercentileSelector, AreaGenerator specialAreaGenerator, ExitGenerator exitGenerator, ContentsGenerator contentsGenerator)
 {
     this.areaPercentileSelector = areaPercentileSelector;
     this.specialAreaGenerator = specialAreaGenerator;
     this.exitGenerator = exitGenerator;
     this.contentsGenerator = contentsGenerator;
 }
예제 #3
0
 public SpecialAreaGenerator(IAreaPercentileSelector areaPercentileSelector, IPercentileSelector percentileSelector, PoolGenerator poolGenerator, AreaGenerator caveGenerator)
 {
     this.areaPercentileSelector = areaPercentileSelector;
     this.percentileSelector = percentileSelector;
     this.poolGenerator = poolGenerator;
     this.caveGenerator = caveGenerator;
 }
    // Use this for initialization
    void Start()
    {
        enemyGenerator = FindObjectOfType<EnemyGenerator>();
        areaGenerator = FindObjectOfType<AreaGenerator>();
        backgroundGenerator = FindObjectOfType<ParallaxController>();
        player = FindObjectOfType<PlayerController>();

        Load(levels[defaultLevelNo]);
    }
예제 #5
0
 public DungeonGenerator(IAreaPercentileSelector areaPercentileSelector, IAreaGeneratorFactory areaGeneratorFactory, IEncounterGenerator encounterGenerator, ITrapGenerator trapGenerator, IPercentileSelector percentileSelector, AreaGenerator hallGenerator)
 {
     this.areaGeneratorFactory = areaGeneratorFactory;
     this.areaPercentileSelector = areaPercentileSelector;
     this.encounterGenerator = encounterGenerator;
     this.trapGenerator = trapGenerator;
     this.percentileSelector = percentileSelector;
     this.hallGenerator = hallGenerator;
 }
예제 #6
0
 public AreaGeneratorFactory(AreaGenerator chamberGenerator, AreaGenerator doorGenerator, AreaGenerator roomGenerator, AreaGenerator sidePassageGenerator, AreaGenerator stairsGenerator, AreaGenerator turnGenerator, AreaGenerator parallelPassageGenerator)
 {
     areaGenerators = new Dictionary<string, AreaGenerator>();
     areaGenerators[AreaTypeConstants.Chamber] = chamberGenerator;
     areaGenerators[AreaTypeConstants.Door] = doorGenerator;
     areaGenerators[AreaTypeConstants.Room] = roomGenerator;
     areaGenerators[AreaTypeConstants.SidePassage] = sidePassageGenerator;
     areaGenerators[AreaTypeConstants.Stairs] = stairsGenerator;
     areaGenerators[AreaTypeConstants.Turn] = turnGenerator;
     areaGenerators[SidePassageConstants.ParallelPassage] = parallelPassageGenerator;
 }
예제 #7
0
        /// <summary>
        /// Initializes the noise manager
        /// </summary>
        /// <param name="seed">The random seed to use</param>
        /// <param name="width">The width of the generated results</param>
        /// <param name="height">The height of the generated results</param>
        /// <param name="depth">The depth of the generated results</param>
        public NoiseManager(int seed, int width, int height, int depth)
        {
            // World theme generators (theme per area)
            World = new WorldGenerator(seed, 3, 3);

            // Area generators
            Areas = new AreaGenerator(seed, width, height);

            AreaResources = new AreaResourceGenerator(seed, width, height, depth);
            AreaResources.Generators[NoiseAreaResourceType.Default].SetOutputSize(width, height, depth);
            AreaResources.Generators[NoiseAreaResourceType.Grainy].SetOutputSize(width, height, depth);
        }
 public void Setup()
 {
     mockHallGenerator = new Mock<AreaGenerator>();
     mockPercentileSelector = new Mock<IPercentileSelector>();
     sidePassageGenerator = new SidePassageGenerator(mockPercentileSelector.Object, mockHallGenerator.Object);
 }
예제 #9
0
        private void GenerateNavMesh()
        {
            Console.WriteLine("Generating NavMesh");

            Stopwatch sw = new Stopwatch();

            sw.Start();
            long prevMs = 0;

            try
            {
                //level.SetBoundingBoxOffset(new Vector3(settings.CellSize * 0.5f, settings.CellHeight * 0.5f, settings.CellSize * 0.5f));

                var   levelTris     = _level.Triangles().ToArray();
                var   triEnumerable = TriangleEnumerable.FromTriangle(levelTris, 0, levelTris.Length);
                BBox3 bounds        = triEnumerable.GetBoundingBox();

                heightfield = new Heightfield(bounds, settings);

                Console.WriteLine("Heightfield");
                Console.WriteLine(" + Ctor\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                Area[] areas = AreaGenerator.From(triEnumerable, Area.Default)
                               .MarkAboveHeight(areaSettings.MaxLevelHeight, Area.Null)
                               .MarkBelowHeight(areaSettings.MinLevelHeight, Area.Null)
                               .MarkBelowSlope(areaSettings.MaxTriSlope, Area.Null)
                               .ToArray();
                heightfield.RasterizeTrianglesWithAreas(levelTris, areas);
                //heightfield.RasterizeTriangles(levelTris, Area.Default);

                Console.WriteLine(" + Rasterization\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                Console.WriteLine(" + Filtering");
                prevMs = sw.ElapsedMilliseconds;

                heightfield.FilterLedgeSpans(settings.VoxelAgentHeight, settings.VoxelMaxClimb);

                Console.WriteLine("   + Ledge Spans\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                heightfield.FilterLowHangingWalkableObstacles(settings.VoxelMaxClimb);

                Console.WriteLine("   + Low Hanging Obstacles\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                heightfield.FilterWalkableLowHeightSpans(settings.VoxelAgentHeight);

                Console.WriteLine("   + Low Height Spans\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                compactHeightfield = new CompactHeightfield(heightfield, settings);

                Console.WriteLine("CompactHeightfield");
                Console.WriteLine(" + Ctor\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                compactHeightfield.Erode(settings.VoxelAgentRadius);

                Console.WriteLine(" + Erosion\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                compactHeightfield.BuildDistanceField();

                Console.WriteLine(" + Distance Field\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                compactHeightfield.BuildRegions(0, settings.MinRegionSize, settings.MergedRegionSize);

                Console.WriteLine(" + Regions\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                Random r = new Random();
                regionColors    = new Color4[compactHeightfield.MaxRegions];
                regionColors[0] = Color4.Black;
                for (int i = 1; i < regionColors.Length; i++)
                {
                    regionColors[i] = new Color4((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255), 255);
                }

                Console.WriteLine(" + Colors\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                contourSet = compactHeightfield.BuildContourSet(settings);

                Console.WriteLine("ContourSet");
                Console.WriteLine(" + Ctor\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                polyMesh = new PolyMesh(contourSet, settings);

                Console.WriteLine("PolyMesh");
                Console.WriteLine(" + Ctor\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                polyMeshDetail = new PolyMeshDetail(polyMesh, compactHeightfield, settings);

                Console.WriteLine("PolyMeshDetail");
                Console.WriteLine(" + Ctor\t\t\t\t" + (sw.ElapsedMilliseconds - prevMs).ToString("D3") + " ms");
                prevMs = sw.ElapsedMilliseconds;

                hasGenerated = true;
            }
            catch (Exception e)
            {
                if (!interceptExceptions)
                {
                    throw;
                }
                else
                {
                    Console.WriteLine("Navmesh generation failed with exception:" + Environment.NewLine + e.ToString());
                }
            }
            finally
            {
                sw.Stop();
            }

            if (hasGenerated)
            {
                try
                {
                    GeneratePathfinding();

                    //Pathfinding with multiple units
                    GenerateCrowd();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Pathfinding generation failed with exception" + Environment.NewLine + e.ToString());
                }

                Label l = (Label)statusBar.FindChildByName("GenTime");
                l.Text = "Generation Time: " + sw.ElapsedMilliseconds + "ms";

                Console.WriteLine("Navmesh generated successfully in " + sw.ElapsedMilliseconds + "ms.");
                Console.WriteLine("Rasterized " + _level.TriangleCount + " triangles.");
                Console.WriteLine("Generated " + contourSet.Count + " regions.");
                Console.WriteLine("PolyMesh contains " + polyMesh.VertCount + " vertices in " + polyMesh.PolyCount + " polys.");
                Console.WriteLine("PolyMeshDetail contains " + polyMeshDetail.VertCount + " vertices and " + polyMeshDetail.TrisCount + " tris in " + polyMeshDetail.MeshCount + " meshes.");
            }
        }
예제 #10
0
 public void Setup()
 {
     mockPercentileSelector = new Mock<IPercentileSelector>();
     turnGenerator = new TurnGenerator(mockPercentileSelector.Object);
 }
예제 #11
0
 public void Setup()
 {
     mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
     mockPercentileSelector = new Mock<IPercentileSelector>();
     mockDice = new Mock<Dice>();
     hallGenerator = new HallGenerator(mockAreaPercentileSelector.Object, mockPercentileSelector.Object, mockDice.Object);
 }
예제 #12
0
 public SidePassageGenerator(IPercentileSelector percentileSelector, AreaGenerator hallGenerator)
 {
     this.percentileSelector = percentileSelector;
     this.hallGenerator = hallGenerator;
 }
예제 #13
0
        public void Setup()
        {
            mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
            mockDice = new Mock<Dice>();
            mockChamberGenerator = new Mock<AreaGenerator>();
            stairsGenerator = new StairsGenerator(mockAreaPercentileSelector.Object, mockDice.Object, mockChamberGenerator.Object);
            selectedStairs = new Area();

            mockAreaPercentileSelector.Setup(s => s.SelectFrom(TableNameConstants.Stairs)).Returns(selectedStairs);
            mockDice.Setup(d => d.Roll(1).IndividualRolls(100)).Returns(new[] { 1 });
        }
 public void Setup()
 {
     mockHallGenerator = new Mock<AreaGenerator>();
     parallelPassageGenerator = new ParallelPassageGenerator(mockHallGenerator.Object);
 }
예제 #15
0
 public StairsGenerator(IAreaPercentileSelector areaPercentileSelector, Dice dice, AreaGenerator chamberGenerator)
 {
     this.areaPercentileSelector = areaPercentileSelector;
     this.dice = dice;
     this.chamberGenerator = chamberGenerator;
 }
예제 #16
0
 public ParallelPassageGenerator(AreaGenerator hallGenerator)
 {
     this.hallGenerator = hallGenerator;
 }
예제 #17
0
 public void Setup()
 {
     mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
     mockPercentileSelector = new Mock<IPercentileSelector>();
     mockPoolGenerator = new Mock<PoolGenerator>();
     mockCaveGenerator = new Mock<AreaGenerator>();
     specialAreaGenerator = new SpecialAreaGenerator(mockAreaPercentileSelector.Object, mockPercentileSelector.Object, mockPoolGenerator.Object, mockCaveGenerator.Object);
 }
예제 #18
0
        public void Setup()
        {
            mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
            mockPoolGenerator = new Mock<PoolGenerator>();
            mockPercentileSelector = new Mock<IPercentileSelector>();
            mockEncounterGenerator = new Mock<IEncounterGenerator>();
            caveGenerator = new CaveGenerator(mockAreaPercentileSelector.Object, mockPoolGenerator.Object, mockPercentileSelector.Object, mockEncounterGenerator.Object);
            selectedCave = new Area();

            mockAreaPercentileSelector.Setup(s => s.SelectFrom(TableNameConstants.Caves)).Returns(selectedCave);
        }
예제 #19
0
        public void Setup()
        {
            mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
            mockSpecialAreaGenerator = new Mock<AreaGenerator>();
            mockExitGenerator = new Mock<ExitGenerator>();
            mockContentsGenerator = new Mock<ContentsGenerator>();
            chamberGenerator = new ChamberGenerator(mockAreaPercentileSelector.Object, mockSpecialAreaGenerator.Object, mockExitGenerator.Object, mockContentsGenerator.Object);

            selectedChamber = new Area();
            selectedChamber.Length = 9266;
            selectedChamber.Width = 90210;

            mockAreaPercentileSelector.Setup(s => s.SelectFrom(TableNameConstants.Chambers)).Returns(selectedChamber);
            mockContentsGenerator.Setup(g => g.Generate(It.IsAny<int>())).Returns(() => new Contents());
        }
예제 #20
0
        public void Setup()
        {
            mockAreaPercentileSelector = new Mock<IAreaPercentileSelector>();
            doorGenerator = new DoorGenerator(mockAreaPercentileSelector.Object);

            selectedDoor = new Area();
            selectedDoor.Type = "door type";
            selectedDoor.Descriptions = new[] { "complicated", DescriptionConstants.Wooden };

            mockAreaPercentileSelector.Setup(s => s.SelectFrom(TableNameConstants.DoorTypes)).Returns(selectedDoor);
        }