Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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
        }
Exemplo n.º 3
0
 // 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);
 }
Exemplo n.º 4
0
        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);
                    }
                }
            }
        }
Exemplo n.º 5
0
		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));
			}
		}
Exemplo n.º 6
0
		public static void RemoveLockLayer (MapMagicObject mapMagic, int num) 
		{ 
			ArrayTools.RemoveAt(ref mapMagic.locks, num);
			//mapMagic.ClearAll();
			//mapMagic.StartGenerate();
			//mapMagic.GenerateAll();
			SceneView.RepaintAll();
		}
Exemplo n.º 7
0
		public static void MoveLockLayer (MapMagicObject mapMagic, int from, int to) 
		{ 
			ArrayTools.Move(mapMagic.locks, from, to);
			//mapMagic.ClearAll();
			//mapMagic.StartGenerate();
			//mapMagic.GenerateAll();
			SceneView.RepaintAll();
		}
Exemplo n.º 8
0
    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();
        }
    }
Exemplo n.º 9
0
		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"));*/
		}
Exemplo n.º 10
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();
		}
Exemplo n.º 11
0
			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;
			}
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
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;
		}
Exemplo n.º 14
0
    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");
        }
    }
Exemplo n.º 15
0
		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;
		}
Exemplo n.º 16
0
		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;
		}
Exemplo n.º 17
0
        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;
                    }
                }
            }
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
			public static void ShowEditor ()
			{
				MapMagicObject mm = FindObjectOfType<MapMagicObject>();
				Graph gens = mm!=null? mm.graph : null;
				GraphWindow.Show(mm?.graph);
			}
Exemplo n.º 20
0
 public static void OnAllComplete_FlushAllLocks(MapMagicObject mapMagic)
 {
     lockDatas.Clear();
 }
Exemplo n.º 21
0
        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();
            }
        }
Exemplo n.º 22
0
		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();
		}
Exemplo n.º 23
0
		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
		}