Example #1
0
		//when selected
		public void OnSceneGUI ()
		{	
			//foreach (TerrainTile tile in mapMagic.tiles.All())
			//	EditorUtility.SetSelectedRenderState(tile.ActiveTerrain.GetComponent<Terrain>(), EditorSelectedRenderState.Hidden);

			current = this;
			if (mapMagic == null) mapMagic = (MapMagicObject)target;
			if (!mapMagic.enabled) return;

			FrameDraw.DrawSceneGUI(mapMagic);

			if (mapMagic.guiTiles)
				PinDraw.DrawSceneGUI(mapMagic, ref selectionMode);

			if (mapMagic.guiLocks)
				LockDraw.DrawSceneGUI(mapMagic); 

			current = null;
		}
Example #2
0
		public void DrawGUI ()
		{
			Cell.EmptyLinePx(4);

			//graph
			using (Cell.LinePx(20))
			{
				using (Cell.RowPx(50)) Draw.Label("Graph");
				using (Cell.Row) 
				{
					Draw.ObjectField(ref mapMagic.graph);

					if (Cell.current.valChanged && mapMagic.graph != null)
						mapMagic.Refresh();
				}

				using (Cell.RowPx(22))
				{
					Cell.current.disabled = mapMagic.graph==null || mapMagic.graph.Equals(null);
					Texture2D openIcon = UI.current.textures.GetTexture("DPUI/Icons/FolderOpen");
					if (Draw.Button(icon:openIcon, iconScale:0.5f, visible:false))
						GraphWindow.Show(mapMagic.graph);
				}
			}



			//graph empty warning
			if (mapMagic.graph==null || mapMagic.graph.Equals(null))
				using (Cell.LinePx(80))
				{
					using (Cell.LinePx(50)) Draw.Label("MapMagic graph is not assigned. \nEither create a new one or \nselect already existing graph");
						
					using (Cell.LinePx(20))
					{
						using (Cell.Row) if (Draw.Button("Create")) 
						{
							Graph graph = Graph.Create();
							graph.OnBeforeSerialize();
							graph = ScriptableAssetExtensions.SaveAsset(graph, filename:"MapMagic Graph", caption:"Save MapMagic Graph");

							mapMagic.graph = graph;
						}

						using (Cell.Row) if (Draw.Button("Select")) 
						{
							//showing object selector
							ScriptableAssetExtensions.ShowObjectSelector(typeof(Graph), 12345, false);
						}
					}

					return;
				}

			//graph not loaded
			else if (mapMagic.graph.generators == null)
			{
				using (Cell.LineStd) Draw.Label("Could not load graph");
				using (Cell.LineStd) Draw.Label("See console for details");

				return;
			}

			//seed
			/*using (Cell.LinePx(20)))
			{
				Draw.Label("Seed", cell:UI.Empty(Size.RowPixels(50)));
				Draw.Field(ref mapMagic.seed, cell:UI.Empty(Size.row));
				UI.Empty(Size.RowPixels(68));
			}*/

			//generate
			Cell.EmptyLinePx(4);

			using (Cell.LinePx(30))
			{
				//if (pinButtonsOverflow == null) pinButtonsOverflow = new RectOffset(0,0,1,2);
				GUIStyle style = UI.current.textures.GetElementStyle("MapMagic/PinButtons/Top", "MapMagic/PinButtons/Top_pressed");  

				using (Cell.Padded(0,0,-2,-1))
					if (Draw.Button("", style:style)) 
				{
					//graphUI.undo.Record(completeUndo:true); //won't record changed terrain data
					foreach (Terrain terrain in mapMagic.tiles.AllActiveTerrains())
						UnityEditor.Undo.RegisterFullObjectHierarchyUndo(terrain.terrainData, "RefreshAll");
					EditorUtility.SetDirty(mapMagic);

					mapMagic.ClearAll();
					mapMagic.StartGenerate();
				}

				Draw.Label("Generate", style:UI.current.styles.middleCenterLabel);
				using (Cell.RowPx(30)) Draw.Icon(UI.current.textures.GetTexture("DPUI/Icons/RefreshAll"), scale:0.5f);
			}

			using (Cell.LinePx(22))
			{
				GUIStyle style = UI.current.textures.GetElementStyle("MapMagic/PinButtons/Bottom", "MapMagic/PinButtons/Bottom_pressed");

				using (Cell.Padded(0,0,-2,-1))
					if (Draw.Button("", style:style)) 
				{
					mapMagic.StartGenerate();
				}
					
				Draw.Label("Generate Changed", style:UI.current.styles.middleCenterLabel);
				using (Cell.RowPx(30)) Draw.Icon(UI.current.textures.GetTexture("DPUI/Icons/Refresh"), scale:0.5f);
			}

			//Tiles
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiTiles, "Tiles", isLeft:true))
					if (mapMagic.guiTiles)
						PinDraw.DrawInspectorGUI(mapMagic, ref selectionMode);
				
			//Locks
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiLocks, "Locks", isLeft:true))
					if (mapMagic.guiLocks)
						LockDraw.DrawInspectorGUI(mapMagic);

			//Infinite Terrain
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiInfiniteTerrains, "Infinite Terrain (Playmode)", isLeft:true))
					if (mapMagic.guiInfiniteTerrains)
					{
						using (Cell.LineStd) Draw.ToggleLeft(ref mapMagic.tiles.generateInfinite, "Generate Infinite Terrain");

						using (Cell.LineStd) Draw.Field(ref mapMagic.mainRange, "Main Range");
						using (Cell.LineStd) 
						{
							if (!mapMagic.draftsInPlaymode) 
							{
								Cell.current.disabled = true;
								mapMagic.tiles.generateRange = mapMagic.mainRange;
							}

							Draw.Field(ref mapMagic.tiles.generateRange, "Drafts Range");
						}

						Cell.EmptyLinePx(4);
						using (Cell.LineStd) Draw.ToggleLeft(ref mapMagic.hideFarTerrains, "Hide Out-of-Range Terrains");
					
						Cell.EmptyLinePx(4);
						using (Cell.LineStd) Draw.Label("Generate Terrain Markers:");
						using (Cell.LineStd) Draw.Toggle(ref mapMagic.tiles.genAroundMainCam, "Around Main Camera");
						using (Cell.LineStd) 
						{
							using (Cell.RowRel(1-Cell.current.fieldWidth))
								Draw.Label("Around Objects Tagged");

							using (Cell.RowRel(Cell.current.fieldWidth))
							{
								using (Cell.RowPx(20))
									Draw.Toggle(ref mapMagic.tiles.genAroundObjsTag);

								using (Cell.Row)
									mapMagic.tiles.genAroundTag = Draw.Field(
										mapMagic.tiles.genAroundTag, 
										drawFn:(Rect rect, string oldVal) => { return EditorGUI.TagField(rect, (string)oldVal); } );
							}
						}
					}

			//Size and Resolution
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiTileSettings, "Tile Settings", isLeft:true))
					if (mapMagic.guiTileSettings)
					{
						using (Cell.LineStd) 
						{
							float newSize = Draw.Field(mapMagic.tileSize.x, "Size");
							if (Cell.current.valChanged)
							{
								//UnityEditor.Undo.RegisterFullObjectHierarchyUndo(mapMagic.gameObject, "MapMagic Tile Size");
								mapMagic.tileSize.z = newSize; 
								mapMagic.tileSize.x = newSize;
							}
						}

						Cell.EmptyLinePx(6);
						using (Cell.LineStd) 
						{
							MapMagicObject.Resolution prevResolution = mapMagic.tileResolution;
							Draw.Field(ref mapMagic.tileResolution, "Main Resolution");
							if (Cell.current.valChanged && mapMagic.locks.Length!=0)
							{
								if (!EditorUtility.DisplayDialog("Resolution Change", "This will remove all of the Lock custom terrain data. Are you sure you wish to continue?", "Change", "Cancel"))
									mapMagic.tileResolution = prevResolution;
							}
						}
						using (Cell.LineStd) Draw.Field(ref mapMagic.tileMargins, "Main Margins");

						Cell.EmptyLinePx(6);
						if (mapMagic.draftsInEditor || mapMagic.draftsInPlaymode)
						{
							using (Cell.LineStd) Draw.Field(ref mapMagic.draftResolution, "Draft Resolution");
							using (Cell.LineStd) Draw.Field(ref mapMagic.draftMargins, "Draft Margins");
						}

						Cell.EmptyLinePx(6);
						using (Cell.LineStd) Draw.Label("Use Draft (low-detail) Terrains in:");
						using (Cell.LineStd) 
						{
							Draw.ToggleLeft(ref mapMagic.draftsInEditor, "Editor");
							if (Cell.current.valChanged) mapMagic.EnableEditorDrafts(mapMagic.draftsInEditor);
						}
						using (Cell.LineStd) 
						{
							Draw.ToggleLeft(ref mapMagic.draftsInPlaymode, "Playmode");
							if (!mapMagic.draftsInPlaymode) mapMagic.tiles.generateRange = mapMagic.mainRange; //if just changed
						}

						if (Cell.current.valChanged)
						{
							if (mapMagic.tileMargins < 2) mapMagic.tileMargins = 2;  //min margins is 2 for now
							if (mapMagic.draftMargins < 2) mapMagic.draftMargins = 2;

							mapMagic.ApplyTileSettings();
						}
					}

			//Outputs settings
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiOutputsSettings, "Outputs Settings", isLeft:true))
					if (mapMagic.guiOutputsSettings)
					{
						using (Cell.LinePx(0))
						{
							Draw.Element(UI.current.styles.foldoutBackground);

							using (Cell.Padded(2,2,0,0))
							{
								Cell.EmptyLinePx(2);
								using (Cell.LineStd) Draw.Label("Height Output", style:UI.current.styles.boldLabel);

								Cell.EmptyLinePx(2);
								using (Cell.LineStd) Draw.Field(ref mapMagic.globals.height, "Height");
								using (Cell.LineStd) Draw.Field(ref mapMagic.globals.heightInterpolation, "Interpolate");

								Cell.EmptyLinePx(2);
								using (Cell.LineStd) Draw.Label("Apply Type");
								using (Cell.LineStd) Draw.Field(ref mapMagic.globals.heightMainApply, "Main");
								using (Cell.LineStd) Draw.Field(ref mapMagic.globals.heightDraftApply, "Draft");
								using (Cell.LineStd) Draw.Field(ref mapMagic.globals.heightSplit, "Split Frame");

								Cell.EmptyLinePx(2);
							}
						}
						
						if (Cell.current.valChanged)
						{
							mapMagic.ClearAll();
							if (mapMagic.instantGenerate)
								mapMagic.StartGenerate();
						}
					}


			//Exposed variables
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiExposedVariables, "Exposed Variables", isLeft:true))
					if (mapMagic.guiExposedVariables)
						Expose.GUI.OverrideInspector.DrawStaticOverride(mapMagic.graph.defaults);


			//Terrain Settings
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiTerrainSettings, "Terrain Properties", isLeft:true))
					if (mapMagic.guiTerrainSettings)
					{
						Cell.EmptyLinePx(6);
						using (Cell.LinePx(0))
						{
							using (Cell.LineStd)
							{
								using (Cell.RowRel(1-Cell.current.fieldWidth-0.08f)) Draw.Label("Auto Connect");
								using (Cell.RowRel(0.08f)) Draw.Toggle(ref mapMagic.terrainSettings.allowAutoConnect);
								using (Cell.RowRel(Cell.current.fieldWidth)) Draw.Field(ref mapMagic.terrainSettings.groupingID);
							}
							//using (Cell.LineStd) Draw.Field(ref mapMagic.terrainSettings.pixelError, "Pixel Error");
							using (Cell.LineStd)
							{
								using (Cell.RowRel(1-Cell.current.fieldWidth-0.08f)) Draw.Label("Base Map Distance");
								using (Cell.RowRel(0.08f)) Draw.Toggle(ref mapMagic.terrainSettings.showBaseMap);
								using (Cell.RowRel(Cell.current.fieldWidth)) Draw.Field(ref mapMagic.terrainSettings.baseMapDist);
							}
							using (Cell.LineStd) Draw.Field(ref mapMagic.terrainSettings.baseMapResolution, "Base Map Resolution");
							
							Draw.Class(mapMagic.terrainSettings, category:"Terrain");

							if (Cell.current.valChanged) mapMagic.ApplyTerrainSettings();
						}

						Cell.EmptyLinePx(6);
						using (Cell.LineStd) Draw.Field(ref mapMagic.terrainSettings.material, "Material Template");

						Cell.EmptyLinePx(6);
						using (Cell.LineStd)
						{
							Draw.ToggleLeft(ref mapMagic.guiHideWireframe, "Hide Selection Outline"); //
							if (Cell.current.valChanged) mapMagic.transform.ToggleDisplayWireframe(mapMagic.guiHideWireframe);
						}

						//copy
						Cell.EmptyLinePx(6);
						using (Cell.LineStd) Draw.ToggleLeft(ref mapMagic.terrainSettings.copyLayersTags, "Copy Layers to Terrains");
						using (Cell.LineStd) Draw.ToggleLeft(ref mapMagic.terrainSettings.copyLayersTags, "Copy Tags to Terrains");
						using (Cell.LineStd) Draw.ToggleLeft(ref mapMagic.terrainSettings.copyComponents, "Copy Components to Terrains");

						if (Cell.current.valChanged)
							mapMagic.ApplyTerrainSettings();
					}


			//Trees, Details and Grass Settings
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiTreesGrassSettings, "Trees, Details and Grass Properties", isLeft:true))
					if (mapMagic.guiTreesGrassSettings)
					{
						Draw.Class(mapMagic.terrainSettings, category:"Trees");
						Cell.EmptyLinePx(5);
						Draw.Class(mapMagic.terrainSettings, category:"Grass");
						Cell.EmptyLinePx(5);
						Draw.Class(mapMagic.terrainSettings, category:"WindTint");

						if (Cell.current.valChanged) mapMagic.ApplyTerrainSettings();
					}

			//Multithreading
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref mapMagic.guiThreads, "Multithreading", isLeft:true))
					if (mapMagic.guiThreads)
					{
						using (Cell.LineStd) Draw.Toggle(ref Den.Tools.Tasks.ThreadManager.useMultithreading, "Use Multithreading");
						using (Cell.LineStd) Draw.Toggle(ref Den.Tools.Tasks.ThreadManager.autoMaxThreads, "Auto Max Threads");
						using (Cell.LineStd) 
						{
							Cell.current.disabled = Den.Tools.Tasks.ThreadManager.autoMaxThreads;
							Draw.Field(ref Den.Tools.Tasks.ThreadManager.maxThreads, "Max Threads");
						}

						Cell.EmptyLinePx(5);

						using (Cell.LineStd) 
							Draw.Field(ref Den.Tools.Tasks.CoroutineManager.timePerFrame, "Apply Time per Frame");

						Cell.EmptyLinePx(5);

						using (Cell.LineStd) Draw.Toggle(ref mapMagic.instantGenerate, "Instant Generate");

						Cell.EmptyLinePx(5);

						using (Cell.LinePx(32)) Draw.Helpbox("Multitheading values are shared between all MapMagic objects in all scenes");

					}

			//About
			Cell.EmptyLinePx(4);
			using (Cell.LineStd)
				using (new Draw.FoldoutGroup(ref guiAbout, "About", isLeft:true))
					if (guiAbout)
					{
						using (Cell.Line)
						{
							using (Cell.RowPx(100))
								Draw.Icon(UI.current.textures.GetTexture("MapMagic/Icons/AssetBig"), scale:0.5f);

							using (Cell.Row)
							{
								string versionName = MapMagicObject.version.ToString();
								//versionName = versionName[0]+"."+versionName[1]+"."+versionName[2];
								using (Cell.LineStd) Draw.Label("MapMagic " + versionName);
								using (Cell.LineStd) Draw.Label("by Denis Pahunov");

								Cell.EmptyLinePx(10);

								using (Cell.LineStd) Draw.URL(" - Online Documentation", "https://gitlab.com/denispahunov/mapmagic/wikis/home");
								using (Cell.LineStd) Draw.URL(" - Video Tutorials", url:"https://www.youtube.com/playlist?list=PL8fjbXLqBxvbsJ56kskwA2tWziQx3G05m");
								using (Cell.LineStd) Draw.URL(" - Forum Thread", url:"https://forum.unity.com/threads/released-mapmagic-2-infinite-procedural-land-generator.875470/");
								using (Cell.LineStd) Draw.URL(" - Issues / Ideas", url:"http://mm2.idea.informer.com");
							}
						}
					}
		}