private void Start() { //BENCHMARK************************************************************************ var watch = Stopwatch.StartNew(); var testMap = GenerateAreaDrunkardWalk(); watch.Stop(); UnityEngine.Debug.Log("Time creating C# test map: " + watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); testMap = Procedural2DHelper.CreateDrunkardWalkArea(1000, 1000, 0, 0, 100000); watch.Stop(); UnityEngine.Debug.Log("Time creating C++ test map: " + watch.ElapsedMilliseconds); //Actual map creation*************************************************************** watch.Reset(); watch.Start(); var map = Procedural2DHelper.CreateBSPDungeonArea(100, 100, 0, 0, 10, 100, 1, 1); watch.Stop(); UnityEngine.Debug.Log("Time elapsed creating map: " + watch.ElapsedMilliseconds); watch.Reset(); watch.Start(); MapDrawer.DrawMapWithTileMap(map); watch.Stop(); UnityEngine.Debug.Log("Time creating tile map: " + watch.ElapsedMilliseconds); watch.Reset(); }
public void OnEnable() { #region Initialization if (data == null) { data = Resources.Load <ProceduralDataObject>("data"); } // Each editor window contains a root VisualElement object VisualElement root = rootVisualElement; // Import UXML var visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Procedural++/Editor/MapCreatorWindow.uxml"); VisualElement uxml = visualTree.CloneTree(); //Import Stylesheet var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/Procedural++/Editor/MapCreatorWindow.uss"); uxml.styleSheets.Add(styleSheet); root.Add(uxml); #endregion #region Buttons Button createButton = root.Query <Button>("createMap"); createButton.clickable.clicked += () => { switch ((MapType)enumFieldMap.value) { case MapType.RandomNoise: previousArea = Procedural2DHelper.CreateRandomNoiseArea((int)sliderX.value, (int)sliderY.value, 0, 0); break; case MapType.Drunkard: previousArea = Procedural2DHelper.CreateDrunkardWalkArea((int)sliderX.value, (int)sliderY.value, 0, 0, iterationsDrunkard); break; case MapType.BSPDungeon: previousArea = Procedural2DHelper.CreateBSPDungeonArea((int)sliderX.value, (int)sliderY.value, 0, 0, minRooms, maxRooms, minWidth, minHeight); break; case MapType.SimpleDungeon: previousArea = Procedural2DHelper.CreateSimpleDungeonArea((int)sliderX.value, (int)sliderY.value, 0, 0, tryRooms, extraCorridors, minWidthS, maxWidth, minHeightS, maxHeight); break; case MapType.CellularAutomata: previousArea = Procedural2DHelper.CreateCellularAutomataArea((int)sliderX.value, (int)sliderY.value, cellularConfiguration.probabilities.ToArray(), 0, 0, cellularConfiguration.iterations, cellularConfiguration.numberOfTIles); break; } MapDrawer.DrawMapWithTileMap(previousArea); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); }; Button clearButton = root.Query <Button>("clearMap"); clearButton.clickable.clicked += () => { MapDrawer.ClearTileMap(); }; Button saveButton = root.Query <Button>("saveMap"); saveButton.clickable.clicked += () => { if (previousArea.tileInfo != null) { string name = EditorUtility.SaveFilePanel("Save map", "./Assets", "DataMap", "bin"); if (name != null) { IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(name, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, previousArea); stream.Close(); } } else { Debug.Log("Generate an Area before saving!"); } }; Button loadButton = root.Query <Button>("loadMap"); loadButton.clickable.clicked += () => { string name = EditorUtility.OpenFilePanel("Load Map", "./Assets", "bin"); if (name != null) { IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read); previousArea = (Area)formatter.Deserialize(stream); MapDrawer.DrawMapWithTileMap(previousArea); stream.Close(); } }; #endregion #region SizeSliders sliderX = root.Query <Slider>("sizeX"); sizeXText = root.Query <Label>("sizeXText"); sizeXText.text = ((int)sliderX.value).ToString() + " size X"; sliderX.RegisterValueChangedCallback((t) => { sizeXText.text = ((int)t.newValue).ToString() + " size X"; }); sliderY = root.Query <Slider>("sizeY"); sizeYText = root.Query <Label>("sizeYText"); sizeYText.text = ((int)sliderY.value).ToString() + " size Y"; sliderY.RegisterValueChangedCallback((t) => { sizeYText.text = ((int)t.newValue).ToString() + " size Y"; }); #endregion #region Default General Data ObjectField field = root.Query <ObjectField>("tileColision"); field.objectType = typeof(Tile); field.value = data.defaultCollisionTile; ObjectField fieldFloor = root.Query <ObjectField>("tileFloor"); fieldFloor.objectType = typeof(Tile); fieldFloor.value = data.defaultFreeTile; field.RegisterValueChangedCallback((t) => { data.defaultCollisionTile = (Tile)t.newValue; }); fieldFloor.RegisterValueChangedCallback((t) => { data.defaultFreeTile = (Tile)t.newValue; }); Toggle toggle = root.Query <Toggle>("autoClear"); toggle.value = data.autoClearTileMap; toggle.RegisterValueChangedCallback((t) => { data.autoClearTileMap = t.newValue; }); #endregion #region Map Specific Data parentMapSpecificData = root.Query <Box>("rootMapSpecific"); Slider iterations = new Slider(5000, 1000000); iterations.label = "Iterations (5000)"; iterations.value = iterationsDrunkard; iterations.RegisterValueChangedCallback((t) => { iterations.label = "Iterations (" + (int)t.newValue + ")"; iterationsDrunkard = (int)t.newValue; }); parentMapSpecificData.Add(iterations); enumFieldMap = root.Query <EnumField>("mapSelector"); enumFieldMap.Init(MapType.Drunkard); enumFieldMap.RegisterValueChangedCallback((t) => { var newValue = (MapType)t.newValue; switch (newValue) { case MapType.RandomNoise: RemoveChildsFromMapSpecificParent(); break; case MapType.Drunkard: DrunkardEnumSwitch(); break; case MapType.BSPDungeon: BSPDungeonSwitch(); break; case MapType.SimpleDungeon: SimpleDungeonSwitch(); break; case MapType.CellularAutomata: CellularAutomataSwitch(); break; } }); #endregion }