public static void DrawSceneGUI(MapMagicObject mapMagic) { if (Event.current.type == EventType.Repaint) { Profiler.BeginSample("Drawing Frames"); //drawing standard tiles foreach (TerrainTile tile in mapMagic.tiles.All()) { if (!tile.Ready) { DrawClock(tile, mapMagic.transform); } if (tile != mapMagic.PreviewTile) { Terrain activeTerrain = tile.ActiveTerrain; if (activeTerrain != null) { DrawTerrainFrame(activeTerrain, standardColor, dotted: tile.main == null); } } } //preview tile above them if (mapMagic.PreviewTile != null && mapMagic.PreviewTile.main != null) { DrawTerrainFrame(mapMagic.PreviewTile.main.terrain, previewColor, false, offset: defaultZOffset *1.5f); } Profiler.EndSample(); } }
public static void RefreshMapMagic(string reference) /// Makes MM generate if override changed /// Automaticaly finds current mm and it's graph { MapMagicObject mm = GraphWindow.RelatedMapMagic; if (mm == null) { return; } Graph mmGraph = mm.graph; if (mmGraph == null) { return; } foreach (IUnit unit in mmGraph.exposed.UnitsByReference(mmGraph, reference)) { if (unit is Generator gen) { mm.Clear(gen); } } GraphWindow.RefreshMapMagic(null); //will clear no generator - needed genscleared before }
// Start is called before the first frame update private void Start() { _magic = gameObject.AddComponent <MapMagicObject>(); _magic.graph = mapMagicGraph; _magic.tiles.generateInfinite = true; _magic.StartGenerate(true, false); }
public static void DrawSelector(MatrixGenerators.Blur200 gen) { //drawing standard class values using (Cell.Padded(1, 1, 0, 0)) { //radius warning MapMagicObject mapMagic = GraphWindow.current.mapMagic; if (mapMagic != null) { float pixelSize = mapMagic.tileSize.x / (int)mapMagic.tileResolution; if (gen.blur * gen.downsample > mapMagic.tileMargins * pixelSize) { Cell.EmptyLinePx(2); using (Cell.LinePx(40)) using (Cell.Padded(2, 2, 0, 0)) { Draw.Element(UI.current.styles.foldoutBackground); using (Cell.LinePx(15)) Draw.Label("Current setup can"); using (Cell.LinePx(15)) Draw.Label("create tile seams"); using (Cell.LinePx(15)) Draw.URL("More", url: "https://gitlab.com/denispahunov/mapmagic/-/wikis/Tile_Seams_Reasons"); } Cell.EmptyLinePx(2); } } } }
public static void DrawInspectorGUI (MapMagicObject mapMagic) { /*using (Cell.Line) { //Cell.current.margins = new Padding(-2,0); foreach (int num in LayersEditor.DrawLayersEnumerable( mapMagic.locks.Length, onAdd:n => AddLockLayer(mapMagic,n), onRemove:n => RemoveLockLayer(mapMagic,n), onMove:(n1,n2) => MoveLockLayer(mapMagic,n1,n2)) ) { using (Cell.Line) DrawLock(mapMagic.locks[num]); } }*/ using (Cell.Line) { LayersEditor.DrawLayers( mapMagic.locks.Length, onDraw:n => DrawLock(mapMagic.locks[n]), onAdd:n => AddLockLayer(mapMagic,n), onRemove:n => RemoveLockLayer(mapMagic,n), onMove:(n1,n2) => MoveLockLayer(mapMagic,n1,n2)); } }
public static void RemoveLockLayer (MapMagicObject mapMagic, int num) { ArrayTools.RemoveAt(ref mapMagic.locks, num); //mapMagic.ClearAll(); //mapMagic.StartGenerate(); //mapMagic.GenerateAll(); SceneView.RepaintAll(); }
public static void MoveLockLayer (MapMagicObject mapMagic, int from, int to) { ArrayTools.Move(mapMagic.locks, from, to); //mapMagic.ClearAll(); //mapMagic.StartGenerate(); //mapMagic.GenerateAll(); SceneView.RepaintAll(); }
void Awake() { if (Instance == null) { Instance = this; } else { Destroy(this); } InputManager.Instance.onRestartScene += () => { RestartScene(); }; InputManager.Instance.onStart += () => { if (_isPlayerDead.Value) { _deathText.SetActive(false); RestartScene(); } }; _isPlayerDead.Subscribe(TryEnableDeathText); DistanceText = DistanceTextTransform.Value.GetComponent <TMP_Text>(); distanceTextPrefix = DistanceText.text; shrineText = ShrineTextTransform.Value.GetComponent <TMP_Text>(); shrineTextPrefix = shrineText.text; TrySpawnBoss(); _playerShrinesVisited.Subscribe(TrySpawnBoss); if (UseRandomSeed) { UnityRandomSeed = Random.state.GetHashCode(); } Random.InitState(UnityRandomSeed); MapMagicObject mapMagic = MapMagicSceneReference.Value.GetComponent <MapMagicObject>(); if (GenerateRandomSeed || mapMagic.graph.random.Seed == 0) { mapMagic.graph.random.Seed = Random.Range(10000, 9999999); mapMagic.Refresh(); } if (UseSetSeed) { mapMagic.graph.random.Seed = int.Parse(Seed); mapMagic.Refresh(); } }
private void OnGUI() { current = this; mapMagic = GetRelatedMapMagic(graph); if (graph==null || graph.generators==null) return; if (graphUI.undo == null) { graphUI.undo = new Den.Tools.GUI.Undo() { undoObject = graph , undoName = "MapMagic Graph Change" }; graphUI.undo.undoAction = GraphWindow.RefreshMapMagic; } graphUI.undo.undoObject = graph; BeginWindows(); //using (Timer.Start("UI_Graph")) graphUI.DrawInSubWindow(DrawGraph, 1, new Rect(0, toolbarSize, position.width, position.height-toolbarSize) ); //using (Timer.Start("UI_Toolbar")) toolbarUI.DrawInSubWindow(DrawToolbar, 2, new Rect(0, 0, position.width, toolbarSize)); EndWindows(); //graphUI.Draw(DrawGraph); //toolbarUI.Draw(DrawToolbar); //storing graph pivot to focus it on load Vector3 scrollZoom = graphUI.scrollZoom.GetWindowCenter(position.size); scrollZoom.z = graphUI.scrollZoom.zoom; if (graphsScrollZooms.ContainsKey(graph)) graphsScrollZooms[graph] = scrollZoom; else graphsScrollZooms.Add(graph, scrollZoom); //debug mouse pos //Draw.DebugMousePos(); //switching to main on field drag release //mapMagic.guiDraggingField = DragDrop.obj!=null && (DragDrop.group=="DragField" || DragDrop.group=="DragCurve" || DragDrop.group=="DragLevels"); if (mapMagic != null) { bool newForceDrafts = DragDrop.obj!=null && (DragDrop.group=="DragField" || DragDrop.group=="DragCurve" || DragDrop.group=="DragLevels"); if (!newForceDrafts && mapMagic.guiDraggingField) { mapMagic.guiDraggingField = newForceDrafts; mapMagic.SwitchLods(); } mapMagic.guiDraggingField = newForceDrafts; } //showing fps /*long currentFrameTime = System.Diagnostics.Stopwatch.GetTimestamp(); float timeDelta = 1f * (currentFrameTime-lastFrameTime) / System.Diagnostics.Stopwatch.Frequency; lastFrameTime = currentFrameTime; float fps = 1 / timeDelta; EditorGUI.LabelField(new Rect(position.x+position.width-70, 0, 70, 18), "FPS:" + fps.ToString("0.0"));*/ }
private static void AddLockLayer (MapMagicObject mapMagic, int num) { Lock newLock = new Lock(); newLock.guiName = "Location " + mapMagic.locks.Length; newLock.worldPos = new Vector3(mapMagic.tileSize.x/2, 0, mapMagic.tileSize.z/2); //placing at the center of the tile 0 ArrayTools.Insert(ref mapMagic.locks, mapMagic.locks.Length, newLock); //mapMagic.ClearAll(); //don't jenerate on adding lock (we might have a custom location prepared) //mapMagic.StartGenerate(); //mapMagic.GenerateAll(); SceneView.RepaintAll(); }
private bool TryOpenMapMagicBiome (Graph graph) /// Finds MapMagic object in scene and opens graph as mm biome with mm graph as a root /// Return false if it's wrong mm (or no mm at all) { MapMagicObject mapMagic = GetRelatedMapMagic(graph); if (mapMagic == null) return false; parentGraphs = GetStepsToSubGraph(mapMagic.graph, graph); this.graph = graph; ScrollZoomOnOpen(); return true; }
public static void DrawInspectorGUI(MapMagicObject mapMagic, ref SelectionMode selectionMode) { Cell.EmptyLinePx(2); using (Cell.LinePx(25)) DrawPinButton(ref selectionMode, SelectionMode.pin, "MapMagic/Icons/Pin", "MapMagic/PinButtons/PinTop", "Pin New Tile", pinButtonColor); using (Cell.LinePx(25)) DrawPinButton(ref selectionMode, SelectionMode.pinLowres, "MapMagic/Icons/PinDraft", "MapMagic/PinButtons/PinMid", "Pin As Draft", pinButtonColor); using (Cell.LinePx(25)) DrawPinButton(ref selectionMode, SelectionMode.pinExisting, "MapMagic/Icons/PinExisting", "MapMagic/PinButtons/PinBottom", "Pin Existing Terrain", pinButtonColor); Cell.EmptyLinePx(5); using (Cell.LinePx(25)) DrawPinButton(ref selectionMode, SelectionMode.selectPreview, "MapMagic/Icons/Preview", "MapMagic/PinButtons/Preview", "Select Preview", previewButtonColor); Cell.EmptyLinePx(5); using (Cell.LinePx(25)) DrawPinButton(ref selectionMode, SelectionMode.unpin, "MapMagic/Icons/Unpin", "MapMagic/PinButtons/Remove", "Unpin", unpinButtonColor); Cell.EmptyLinePx(2); }
//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; }
public static void OnAllTilesGenerated(MapMagicObject mapMagic) { doDeactivate = true; Coord newPositionAsCoord = new Coord((int)(thingToTrackReference.position.x * 0.001), (int)(thingToTrackReference.position.z * 0.001)); SetPlaceName(newPositionAsCoord); if (TownGlobalObject.TownWaitingToRender) { TownGlobalObject.TownWaitingToRender = (TownGlobalObject.TownsWaitingToRender.Count == 0) ? false : true; foreach (var item in TownGlobalObject.TownsWaitingToRender.ToArray()) { //Debug.LogFormat( // "{1} chosen for position {0} against {2} and {3}", // tgos.ObjectToTrackPositionInTileCoords, // tgos.LocalTownCoords, // item.name, // TownGlobalObject.bundles[tgos.LocalTownCoords].name); /// if (item.name == TownGlobalObject.bundles[tgos.LocalTownCoords].name && /// if (!TownGlobalObject.renderedTowns.Contains <Coord>(item.options.coord)) // tgos.LocalTownCoords)) { GameObject hold = item.Generate(); TownGlobalObject.renderedTowns.Add(item.options.coord); } } //for (int i = 0; i < TownGlobalObject.TownsWaitingToRender.Count; i++) //{ // TownGlobalObject.TownsWaitingToRender.Dequeue().Generate(); //} // Debug.Log("Generate"); } }
public static MapMagicObject CreateMapMagic (Graph graph) { GameObject go = new GameObject(); go.name = "MapMagic"; MapMagicObject mapMagic = go.AddComponent<MapMagicObject>(); Selection.activeObject = mapMagic; mapMagic.graph = graph; mapMagic.tiles.Pin( new Coord(0,0), false, mapMagic ); //registering undo UnityEditor.Undo.RegisterCreatedObjectUndo (go, "MapMagic Create"); EditorUtility.SetDirty(mapMagic); // Selection.activeGameObject = mapMagic.gameObject; //MapMagicWindow.Show(mapMagic.gens, mapMagic, asBiome:false); return mapMagic; }
public override void OnInspectorGUI () { current = this; mapMagic = (MapMagicObject)target; //waiting for object selector close if (Event.current.type == EventType.ExecuteCommand && Event.current.commandName == "ObjectSelectorUpdated" && ScriptableAssetExtensions.GetObjectSelectorId() == 12345) mapMagic.graph = (Graph)ScriptableAssetExtensions.GetObjectSelectorObject(); if (ui.undo == null) ui.undo = new Den.Tools.GUI.Undo { undoObject = mapMagic, undoName = "MapMagic Inspector Value" }; ui.Draw(DrawGUI, inInspector:true); current = null; }
static void LoadPreviews() /// Loads all of the previews for current MapMagic object in scene /// And finds proper windows to all of the previews { MapMagicObject mapMagic = GameObject.FindObjectOfType <MapMagicObject>(); if (mapMagic == null || mapMagic.graph == null) { return; } foreach (Generator gen in mapMagic.graph.generators) { if (gen.guiPreview && gen is IOutlet <object> outlet) { CreatePreview(outlet); } } BaseMatrixWindow[] windows = Resources.FindObjectsOfTypeAll <BaseMatrixWindow>(); foreach (BaseMatrixWindow window in windows) { if (!(window is IPreviewWindow previewWindow)) { continue; } Guid guid = previewWindow.SerializedGenGuid; foreach (var kvp in all) { if (kvp.Key.Gen.Guid == guid) { kvp.Value.Window = window; previewWindow.Preview = kvp.Value; } } } }
public static TerrainTile Construct(MapMagicObject mapMagic) { Profiler.BeginSample("Construct Internal"); GameObject go = new GameObject(); go.transform.parent = mapMagic.transform; TerrainTile tile = go.AddComponent <TerrainTile>(); tile.mapMagic = mapMagic; //tile.Resize(mapMagic.tileSize, (int)mapMagic.tileResolution, mapMagic.tileMargins, (int)mapMagic.lodResolution, mapMagic.lodMargins); //creating detail levels in playmode (for editor Pin us used) if (MapMagicObject.isPlaying) //if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) { tile.main = new DetailLevel(tile, isDraft: false); //tile created in any case and generated at the background if (mapMagic.draftsInPlaymode) { tile.draft = new DetailLevel(tile, isDraft: true); } } //creating objects pool GameObject poolGo = new GameObject(); poolGo.transform.parent = tile.transform; poolGo.transform.localPosition = new Vector3(); poolGo.name = "Objects"; tile.objectsPool = poolGo.AddComponent <ObjectsPool>(); Profiler.EndSample(); return(tile); }
public static void ShowEditor () { MapMagicObject mm = FindObjectOfType<MapMagicObject>(); Graph gens = mm!=null? mm.graph : null; GraphWindow.Show(mm?.graph); }
public static void OnAllComplete_FlushAllLocks(MapMagicObject mapMagic) { lockDatas.Clear(); }
public static void DrawSceneGUI(MapMagicObject mapMagic, SelectionMode selectionMode) { Dictionary <Coord, TerrainTile> tilesLut = new Dictionary <Coord, TerrainTile>(mapMagic.tiles.grid); if (selectionMode != SelectionMode.none && !Event.current.alt) { //returning if no scene veiw (right after script compile) SceneView sceneview = UnityEditor.SceneView.lastActiveSceneView; if (sceneview == null || sceneview.camera == null) { return; } //disabling selection HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); //preparing the sets of both custom and tile terrains HashSet <Terrain> pinnedCustomTerrains = new HashSet <Terrain>(); //custom terrains that were already pinned before foreach (TerrainTile tile in mapMagic.tiles.customTiles) { if (tile.main != null) { pinnedCustomTerrains.Add(tile.main.terrain); } if (tile.draft != null) { pinnedCustomTerrains.Add(tile.draft.terrain); } } HashSet <Terrain> pinnedTileTerrains = new HashSet <Terrain>(); foreach (var kvp in tilesLut) { TerrainTile tile = kvp.Value; if (tile.main != null) { pinnedTileTerrains.Add(tile.main.terrain); } if (tile.draft != null) { pinnedTileTerrains.Add(tile.draft.terrain); } } if (selectionMode == SelectionMode.pin) { Handles.color = FrameDraw.pinColor; List <Coord> selectedCoords = SelectTiles((Vector3)mapMagic.tileSize, false, tilesLut, mapMagic.transform); if (selectedCoords != null) { UnityEditor.Undo.RegisterFullObjectHierarchyUndo(mapMagic.gameObject, "MapMagic Pin Terrains"); foreach (Coord coord in selectedCoords) { mapMagic.tiles.Pin(coord, false, mapMagic); } foreach (Coord coord in selectedCoords) { UnityEditor.Undo.RegisterCreatedObjectUndo(mapMagic.tiles[coord].gameObject, "MapMagic Pin Terrains"); } } } if (selectionMode == SelectionMode.pinLowres) { Handles.color = FrameDraw.pinColor; List <Coord> selectedCoords = SelectTiles((Vector3)mapMagic.tileSize, true, tilesLut, mapMagic.transform); if (selectedCoords != null) { UnityEditor.Undo.RegisterFullObjectHierarchyUndo(mapMagic.gameObject, "MapMagic Pin Draft Terrains"); foreach (Coord coord in selectedCoords) { mapMagic.tiles.Pin(coord, true, mapMagic); } foreach (Coord coord in selectedCoords) { UnityEditor.Undo.RegisterCreatedObjectUndo(mapMagic.tiles[coord].gameObject, "MapMagic Pin Terrains"); } } } if (selectionMode == SelectionMode.pinExisting) { //excluding tiles HashSet <Terrain> possibleTerrains = new HashSet <Terrain>(); Terrain[] allTerrains = GameObject.FindObjectsOfType <Terrain>(); foreach (Terrain terrain in allTerrains) { if (!pinnedTileTerrains.Contains(terrain)) { possibleTerrains.Add(terrain); } } HashSet <Terrain> selectedTerrains = SelectTerrains(possibleTerrains, FrameDraw.pinColor, false); if (selectedTerrains != null) { UnityEditor.Undo.RegisterFullObjectHierarchyUndo(mapMagic.gameObject, "MapMagic Pin Terrains"); foreach (Terrain terrain in selectedTerrains) { if (pinnedCustomTerrains.Contains(terrain)) { continue; } terrain.transform.parent = mapMagic.transform; TerrainTile tile = terrain.gameObject.GetComponent <TerrainTile>(); if (tile == null) { tile = terrain.gameObject.AddComponent <TerrainTile>(); } tile.main.terrain = terrain; //tile.main.area = new Terrains.Area(terrain); //tile.main.use = true; //tile.lodData = null; mapMagic.tiles.PinCustom(tile); mapMagic.StartGenerate(tile); } } } if (selectionMode == SelectionMode.selectPreview) { //hash set of all pinned terrains contains main data HashSet <Terrain> pinnedMainTerrains = new HashSet <Terrain>(); foreach (var kvp in tilesLut) { TerrainTile tile = kvp.Value; if (tile.main != null) { pinnedMainTerrains.Add(tile.main.terrain); } } pinnedMainTerrains.UnionWith(pinnedCustomTerrains); HashSet <Terrain> selectedTerrains = SelectTerrains(pinnedMainTerrains, FrameDraw.selectPreviewColor, false); if (selectedTerrains != null && selectedTerrains.Count == 1) { UnityEditor.Undo.RegisterCompleteObjectUndo(mapMagic, "MapMagic Select Preview"); Terrain selectedTerrain = selectedTerrains.Any(); //clearing preview if (selectedTerrain == mapMagic.AssignedPreviewTerrain) { mapMagic.ClearPreviewTile(); TerrainTile.OnPreviewAssigned(mapMagic.PreviewData); } //assigning new else { foreach (var kvp in tilesLut) { TerrainTile tile = kvp.Value; if (tile.main?.terrain == selectedTerrain && mapMagic.AssignedPreviewTerrain != selectedTerrain) { mapMagic.AssignPreviewTile(tile); mapMagic.AssignedPreviewData.isPreview = true; TerrainTile.OnPreviewAssigned(mapMagic.AssignedPreviewData); UI.RepaintAllWindows(); } } } } } if (selectionMode == SelectionMode.unpin) { HashSet <Terrain> possibleTerrains = new HashSet <Terrain>(pinnedTileTerrains); possibleTerrains.UnionWith(pinnedCustomTerrains); HashSet <Terrain> selectedTerrains = SelectTerrains(possibleTerrains, FrameDraw.unpinColor, false); if (selectedTerrains != null) { UnityEditor.Undo.RegisterFullObjectHierarchyUndo(mapMagic.gameObject, "MapMagic Unpin Terrains"); foreach (Terrain terrain in selectedTerrains) { //terrain-to-coord lut (to pick tile terrain coord faster) Dictionary <Terrain, Coord> terrainToCoordLut = new Dictionary <Terrain, Coord>(); foreach (var kvp in tilesLut) { Coord coord = kvp.Key; TerrainTile tile = kvp.Value; if (tile.main != null) { terrainToCoordLut.Add(tile.main.terrain, coord); } if (tile.draft != null) { terrainToCoordLut.Add(tile.draft.terrain, coord); } } //if it's tile if (terrainToCoordLut.ContainsKey(terrain)) { Coord coord = terrainToCoordLut[terrain]; mapMagic.tiles.Unpin(coord); } //if it's custom if (pinnedCustomTerrains.Contains(terrain)) { TerrainTile tileComponent = terrain.gameObject.GetComponent <TerrainTile>(); mapMagic.tiles.UnpinCustom(tileComponent); GameObject.DestroyImmediate(tileComponent); } } } } //redrawing scene SceneView.lastActiveSceneView.Repaint(); } }
public static void DrawSceneGUI (MapMagicObject mapMagic) { //drawing locks if (Event.current.type == EventType.Repaint) { UnityEngine.Profiling.Profiler.BeginSample("Drawing Locks"); int curNumCorners = numCorners; if (mapMagic.locks.Length > 3) curNumCorners = numCorners/2; if (mapMagic.locks.Length > 6) curNumCorners = numCorners/4; if (corners.Length > curNumCorners) corners = new Vector3[curNumCorners]; //list of all terrains to draw brush //Terrain[] terrains = mapMagic.GetComponentsInChildren<Terrain>(); List<Terrain> terrains = new List<Terrain>(mapMagic.tiles.AllActiveTerrains()); List<Rect> terrainRects = new List<Rect>(mapMagic.tiles.AllWorldRects()); //offseting MM-coordsys on mm pos //for (int i=0; i<terrainRects.Count; i++) // terrainRects[i] = new Rect(terrainRects[i].position + mapMagic.transform.position.V2(), terrainRects[i].size); for (int l=0; l<mapMagic.locks.Length; l++) { Lock lockArea = mapMagic.locks[l]; //if (!lockArea.guiExpanded) continue; Color color = lockColor; Color tcolor = transitionColor; if (!lockArea.IsContainedInAll(terrainRects)) { color = illegalLockColor; tcolor = illegalTransitionColor; } lockArea.guiHeight = DrawCircle( polyLine, lockArea.worldPos, lockArea.worldRadius, color, corners, terrains, terrainRects, parent:mapMagic.transform); DrawCircle( polyLine, lockArea.worldPos, lockArea.worldRadius+lockArea.worldTransition, tcolor, corners, terrains, terrainRects, parent:mapMagic.transform); } UnityEngine.Profiling.Profiler.EndSample(); } //drawing locks handles UnityEngine.Profiling.Profiler.BeginSample("Drawing Lock Handles " + Event.current.type); for (int l=0; l<mapMagic.locks.Length; l++) { Lock lockArea = mapMagic.locks[l]; if (!lockArea.locked) { UnityEditor.Undo.RecordObject(mapMagic, "MapMagic Lock Move"); Vector3 lockCenter = lockArea.worldPos + mapMagic.transform.position; lockCenter.y = lockArea.guiHeight; lockCenter = Handles.PositionHandle(lockCenter, Quaternion.identity); lockArea.worldPos = new Vector3(lockCenter.x, 0, lockCenter.z) - mapMagic.transform.position; } //Handles.ArrowHandleCap(0, lk.worldPos, Quaternion.identity, 100, EventType.Repaint); } UnityEngine.Profiling.Profiler.EndSample(); }
private void OnGUI() { current = this; mapMagic = FindRelatedMapMagic(graph); if (graph==null || graph.generators==null) return; if (mapMagic==null) Den.Tools.Tasks.CoroutineManager.Update(); //updating coroutine if no mm assigned (to display brush previews) //fps timer #if MM_DEBUG long frameStart = System.Diagnostics.Stopwatch.GetTimestamp(); #endif //undo if (graphUI.undo == null) { graphUI.undo = new Den.Tools.GUI.Undo() { undoObject = graph , undoName = "MapMagic Graph Change" }; graphUI.undo.undoAction = GraphWindow.RefreshMapMagic; } graphUI.undo.undoObject = graph; //mini with selection if (selected.Count == 1 && IsMini) { Generator selectedGen = selected.Any(); Rect selectedRect = new Rect(PlaceByAnchor(graph.guiMiniAnchor,graph.guiMiniPos,selectedGen.guiSize), selectedGen.guiSize); selectedRect.position = selectedRect.position+new Vector2(0,toolbarSize); //skipping drawing graph if clicked somewhere in generator bool clickedToGen = Event.current.isMouse && selectedRect.Contains(Event.current.mousePosition); using (new UnityEngine.GUI.ClipScope(new Rect(0, toolbarSize, Screen.width, Screen.height-toolbarSize))) { if (clickedToGen) EditorGUI.BeginDisabledGroup(true); //disabling other controls when clicking selected mini gen graphUI.Draw(DrawGraph, inInspector:false); if (clickedToGen) EditorGUI.EndDisabledGroup(); miniSelectedUI.Draw(DrawMiniSelected, inInspector:false); } //using (new UnityEngine.GUI.ClipScope(new Rect(20, 20+toolbarSize, selectedGen.guiSize.x, selectedGen.guiSize.y))) // miniSelectedUI.Draw(DrawMiniSelected, inInspector:false); } //standard graph/mini else using (new UnityEngine.GUI.ClipScope(new Rect(0, toolbarSize, Screen.width, Screen.height-toolbarSize))) graphUI.Draw(DrawGraph, inInspector:false, customRect:new Rect(0, toolbarSize, Screen.width, Screen.height-toolbarSize)); //toolbar using (new UnityEngine.GUI.ClipScope(new Rect(0,0, Screen.width, toolbarSize))) toolbarUI.Draw(DrawToolbar, inInspector:false); //storing graph pivot to focus it on load Vector3 scrollZoom = graphUI.scrollZoom.GetWindowCenter(position.size); scrollZoom.z = graphUI.scrollZoom.zoom; if (graphsScrollZooms.ContainsKey(graph)) graphsScrollZooms[graph] = scrollZoom; else graphsScrollZooms.Add(graph, scrollZoom); //switching to main on field drag release //mapMagic.guiDraggingField = DragDrop.obj!=null && (DragDrop.group=="DragField" || DragDrop.group=="DragCurve" || DragDrop.group=="DragLevels"); if (mapMagic != null) { bool newForceDrafts = DragDrop.obj!=null && (DragDrop.group=="DragField" || DragDrop.group=="DragCurve" || DragDrop.group=="DragLevels"); if (!newForceDrafts && mapMagic.guiDraggingField) { mapMagic.guiDraggingField = newForceDrafts; mapMagic.SwitchLods(); } mapMagic.guiDraggingField = newForceDrafts; } //showing fps #if MM_DEBUG if (graph.debugGraphFps) { long frameEnd = System.Diagnostics.Stopwatch.GetTimestamp(); float timeDelta = 1f * (frameEnd-frameStart) / System.Diagnostics.Stopwatch.Frequency; float fps = 1f / timeDelta; EditorGUI.LabelField(new Rect(10, toolbarSize+10, 70, 18), "FPS:" + fps.ToString("0.0")); } #endif //moving scene view #if MM_DEBUG if (graph.drawInSceneView) MoveSceneView(); #endif }