Exemple #1
0
		static void CreateVoxeland (bool infinite=true) 
		{
			GameObject go = new GameObject();
			go.name = "Voxeland";

			Voxeland voxeland = go.AddComponent<Voxeland>();
			voxeland.chunks = new ChunkGrid<Chunk>();
			voxeland.chunkSize = 30;
			Voxeland.instances.Add(voxeland);
			
			//adding empty layer 
			voxeland.landTypes = new LandTypeList();

			ArrayTools.Add(ref voxeland.landTypes.array, new BlockType()); 
			voxeland.landTypes.array[0].mainTex = TextureExtensions.ColorTexture(2,2,new Color(0.666f, 0.666f, 0.666f, 0.5f), linear:false);
			#if UNITY_2017_3_OR_NEWER
			voxeland.landTypes.array[0].bumpMap = TextureExtensions.ColorTexture(2,2,new Color(0.5f, 0.5f, 0.5f, 1f), linear:true);
			#else
			voxeland.landTypes.array[0].bumpMap = TextureExtensions.ColorTexture(2,2,new Color(0.5f, 0.5f, 0.5f, 0.5f), linear:true);
			#endif

			//voxeland.landTypes.mainTexArray = new Texture2DArray(1024, 1024, 1, TextureFormat.DXT5, true) { name = "Albedo Height Array" };
			//voxeland.landTypes.mainTexArray.SetTexture( TextureExtensions.ColorTexture(1024,1024,Color.gray), 0);
			//voxeland.landTypes.bumpMapArray = new Texture2DArray(1024, 1024, 1, TextureFormat.DXT5, true, linear:true) { name = "Normals Array" };
			//voxeland.landTypes.bumpMapArray.SetTexture( TextureExtensions.ColorTexture(1024,1024,new Color(0.5f,0.5f,0.5f,0.5f)), 0);

			voxeland.landTypes.selected = 0;

			//adding empty grass
			voxeland.grassTypes = new GrassTypeList();
			voxeland.grassTypes.selected = -1;

			//objects
			voxeland.objectsTypes = new ObjectTypeList();
			voxeland.objectsTypes.selected = -1;

			//data
			voxeland.data = ScriptableObject.CreateInstance<Data>(); 
			voxeland.data.areas = new ChunkGrid<Data.Area>();
			voxeland.data.areaSize = 512;

			//materials
			voxeland.material = Voxeland.GetDefaultLandMaterial();
			voxeland.farMaterial = Voxeland.GetDefaultFarMaterial();
			voxeland.grassMaterial = Voxeland.GetDefaultGrassMaterial();

			voxeland.landTypes.ApplyToMaterial(voxeland.material);
			voxeland.landTypes.ApplyToMaterial(voxeland.farMaterial, horizon:true);
			voxeland.grassTypes.ApplyToMaterial(voxeland.grassMaterial);

			if (voxeland.horizon != null) voxeland.horizon.meshRenderer.sharedMaterial = voxeland.farMaterial;
			
			//highlight
			if (voxeland.highlight == null) //could be created on de-prefab in onenable
			{
				voxeland.highlight = Highlight.Create(voxeland);
				voxeland.highlight.material = Voxeland.GetDefaultHighlightMaterial(); //new Material( Shader.Find("Voxeland/Highlight") );
			}

			//static and infinite
			if (infinite)
			{
				voxeland.playmodeSizeMode = Voxeland.SizeMode.DynamicInfinite;
				voxeland.editorSizeMode = Voxeland.SizeMode.DynamicInfinite;

				voxeland.saveMeshes = false;

				voxeland.horizon = Horizon.Create(voxeland);
			}
			else
			{
				voxeland.playmodeSizeMode = Voxeland.SizeMode.Static;
				voxeland.editorSizeMode = Voxeland.SizeMode.Static;

				voxeland.saveMeshes = true;  
			}

			//generators
			voxeland.data.generator.noiseGen.enabled = true;
			voxeland.data.generator.noiseGenB.enabled = false;
			voxeland.data.generator.noiseGenB.seed = 1234;
			voxeland.data.generator.noiseGenB.high = 0.1f;
			voxeland.data.generator.curveGen.enabled = true;
			voxeland.data.generator.blurGen.enabled = true;

			//registering undo
			Undo.RegisterCreatedObjectUndo (go, "Voxeland Create");
			EditorUtility.SetDirty(go);
		}
Exemple #2
0
        public override void OnGUI(Rect rect)
        {
            if (background == null)
            {
                background = new Texture2D(1, 1, TextureFormat.RGBA32, false);
                background.SetPixel(0, 0, new Color(0.98f, 0.98f, 0.98f));
                background.Apply();
            }

            if (highlight == null)
            {
                highlight = new Texture2D(1, 1, TextureFormat.RGBA32, false);
                highlight.SetPixel(0, 0, new Color(0.6f, 0.7f, 0.9f));
                highlight.Apply();
            }

            //background
            //if (Event.current.type == EventType.repaint) GUI.skin.box.Draw(fullRect, false, true, true, false);
            GUI.DrawTexture(new Rect(1, 1, width - 2, lineHeight * items.Length), background, ScaleMode.StretchToFill);

            //list
            float currentHeight = 0;

            for (int i = 0; i < items.Length; i++)
            {
                MenuItem currentItem = items[i];
                Rect     lineRect;

                //labels
                if (currentItem.name != null)
                {
                    lineRect       = new Rect(1, currentHeight + 1, width - 2, lineHeight - 2);
                    currentHeight += lineHeight;

                    currentItem.clicked = false;
                    bool highlighted = lineRect.Contains(Event.current.mousePosition);
                    if (currentItem.disabled)
                    {
                        highlighted = false;
                    }

                    if (highlighted)
                    {
                        GUI.DrawTexture(lineRect, highlight);
                    }

                    UnityEditor.EditorGUI.BeginDisabledGroup(currentItem.disabled);
                    if (blackLabel == null)
                    {
                        blackLabel = new GUIStyle(UnityEditor.EditorStyles.label); blackLabel.normal.textColor = Color.black;
                    }
                    UnityEditor.EditorGUI.LabelField(new Rect(lineRect.x + 3, lineRect.y, lineRect.width - 3, lineRect.height), currentItem.name, blackLabel);
                    UnityEditor.EditorGUI.EndDisabledGroup();

                    if (currentItem.hasSubs)
                    {
                        Rect rightRect = lineRect; rightRect.width = 10; rightRect.height = 10;
                        rightRect.x = lineRect.x + lineRect.width - rightRect.width; rightRect.y = lineRect.y + lineRect.height / 2 - rightRect.height / 2;
                        //UnityEditor.EditorGUI.LabelField(rightRect, "\u25B6");
                        if (triangle == null)
                        {
                            triangle = Resources.Load("PopupMenuTrangleIcon") as Texture2D;
                        }
                        GUI.DrawTexture(rightRect, triangle, ScaleMode.ScaleAndCrop);
                    }

                    //opening subsmenus
                    if (highlighted)
                    {
                        bool clicked = Event.current.type == EventType.MouseDown && Event.current.type == 0;

                        if (clicked && currentItem.onClick != null)
                        {
                            currentItem.onClick();
                            CloseRecursive();
                        }

                        //starting timer on selected item change
                        if (currentItem != lastItem)
                        {
                            lastTimestart = System.DateTime.Now;
                            lastItem      = currentItem;
                        }

                        //when holding for too long
                        double highlightTime = (System.DateTime.Now - lastTimestart).TotalMilliseconds;
                        if ((highlightTime > 300 && expandedItem != currentItem) || clicked)
                        {
                            //re-opening expanded window
                            if (expandedWindow != null && expandedWindow.editorWindow != null)
                            {
                                expandedWindow.editorWindow.Close();
                            }
                            expandedWindow = new PopupMenu()
                            {
                                items = currentItem.subItems, parent = this
                            };
                            expandedItem = currentItem;
                            if (currentItem.subItems != null)
                            {
                                PopupWindow.Show(new Rect(lineRect.max - new Vector2(0, lineHeight), Vector2.zero), expandedWindow);
                            }
                        }
                    }
                }

                //separator
                else
                {
                    lineRect       = new Rect(4, currentHeight + separatorHeight / 2, width - 4 - 4 - 2, 1);
                    currentHeight += separatorHeight;

                    if (separator == null)
                    {
                        separator = TextureExtensions.ColorTexture(2, 2, new Color(0.3f, 0.3f, 0.3f, 1));
                    }
                    Rect separatorRect = new Rect(lineRect.x + 3, lineRect.y, lineRect.width - 3, lineRect.height);
                    GUI.DrawTexture(separatorRect, separator, ScaleMode.ScaleAndCrop);
                }
            }

            //#if (!UNITY_EDITOR_LINUX)
            this.editorWindow.Repaint();
            //#endif
        }