Example #1
0
        private void generateIslandMeshes()
        {
            var islandGenerator         = new CachedIslandGenerator(new IslandGenerator(), new OBJExporter());
            var realtimeIslandGenerator = new IslandGenerator();

            Console.WriteLine("Generating island bases");
            level.Islands.ForEach(i =>
            {
                var desc          = i.Descriptor;
                desc.BaseElements = islandGenerator.GetIslandBase(i.Descriptor.seed);

                IMesh temp;
                List <IBuildingElement> navMesh;
                List <IBuildingElement> buildmesh;
                List <IBuildingElement> bordermesh;
                realtimeIslandGenerator.GetIslandParts(desc.BaseElements, desc.seed, false, out temp, out navMesh, out buildmesh, out bordermesh);

                i.SpaceAllocator.BuildAreaMeshes = buildmesh;
                desc.BuildMesh = buildmesh;
                desc.NavMesh   = navMesh;

                i.Descriptor = desc;
            });

            Console.WriteLine("Generating island meshes");
            level.Islands.ForEach(i =>
            {
                var desc     = i.Descriptor;
                var mesh     = islandGenerator.GetIslandMesh(desc.BaseElements, desc.seed);
                i.Mesh       = mesh;
                i.Descriptor = desc;
            });
        }
        public void TestIslandBuildArea()
        {
            const int seed        = 1;
            var       generator   = new IslandGenerator();
            var       startShapes = generator.GetIslandBase(seed);
            IMesh     islandMesh;
            List <IBuildingElement> navMesh;
            List <IBuildingElement> buildMesh;
            List <IBuildingElement> borderMesh;

            generator.GetIslandParts(startShapes, seed, false, out islandMesh, out navMesh, out buildMesh, out borderMesh);

            //buildMesh = buildMesh.Where(e => ((Face)e).GetBoundingBox().Maximum.Y < 1f).ToList();

            var spaceManager = new IslandSpaceAllocator {
                BuildAreaMeshes = buildMesh
            };

            var nbBoxes     = 10;
            var rnd         = new Random(0);
            var placedBoxes = generateBuildPlots(rnd, spaceManager, nbBoxes, 1f, 10f);

            DX11Game game        = TW.Graphics;
            var      infoDisplay = new Textarea();

            infoDisplay.Size    = new Vector2(500, 50);
            game.GameLoopEvent += delegate
            {
                if (game.Keyboard.IsKeyPressed(Key.F))
                {
                    spaceManager.ClearBuildingSpotReservations();
                    placedBoxes = generateBuildPlots(rnd, spaceManager, nbBoxes, 1f, 10f);
                }

                foreach (var el in buildMesh)
                {
                    TW.Graphics.LineManager3D.AddBox(el.GetBoundingBox(), new Color4(1, 1, 1));
                }
                foreach (var box in placedBoxes)
                {
                    TW.Graphics.LineManager3D.AddBox(box, new Color4(1, 0, 0));
                }
                infoDisplay.Text = "Press F to regenerate";
            };
        }
Example #3
0
        public void TestIslandParts()
        {
            var seed = 1;

            #region init
            hideAxes = true;
            initializeTW();
            throw new NotImplementedException();
            TWRenderWrapper renderer = null;// = new TWRenderWrapper(deferredRenderer, game);
            renderer.DrawFaceUnitAxes = false;
            rnd.Reset(seed);
            #endregion init

            var   generator   = new IslandGenerator();
            var   startShapes = generator.GetIslandBase(seed);
            IMesh islandMesh;
            List <IBuildingElement> navMesh;
            List <IBuildingElement> buildMesh;
            List <IBuildingElement> borderMesh;
            generator.GetIslandParts(startShapes, seed, true, out islandMesh, out navMesh, out buildMesh, out borderMesh);

            var allFaces = navMesh.Select(element => ((Face)element).ExtraTransform(Matrix.Translation(0, 0, 0.25f), "nav")).ToList();
            allFaces.AddRange(buildMesh.Select(element => ((Face)element).ExtraTransform(Matrix.Translation(0, 0, 4), "build")));
            allFaces.AddRange(borderMesh.Select(element => ((Face)element).ExtraTransform(Matrix.Translation(0, 0, 8), "border")));

            var builder = new Builder(renderer);
            builder.Build(allFaces, new RuleBase(), seed);
            deferredRenderer.CreateMeshElement(islandMesh);

            game.GameLoopEvent += delegate
            {
                if (game.Keyboard.IsKeyPressed(Key.L))
                {
                    extraLight.LightPosition = camera.GetCameraPosition();
                }
                renderer.Update();
                update();
                cameraLight.LightPosition = new Vector3(10, 15, 5);
            };

            game.Run();
        }