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"; }; }
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(); }