コード例 #1
0
        private void CreateUILayerSettings()
        {
            if (layerSettingsItems != null)
            {
                return;
            }

            layerSettingsItems = new Dictionary <byte, LayerSettingsItem>();

            currentLayer = defaultLayer = layersSettings.GetFirstLayer();
            if (savedLayer != null)
            {
                currentLayer = savedLayer;
            }

            foreach (TerrainTypeLayerSettings layerSettings in layersSettings)
            {
                GameObject        tmpItem           = Instantiate <GameObject>(layerSettingsItemGO);
                LayerSettingsItem layerSettingsItem = tmpItem.GetComponent <LayerSettingsItem>();
                tmpItem.transform.SetParent(layersPivot, false);
                layerSettingsItem.Init(layerSettings, layersToggleGroup, ShowMoreLayerInfo, HideMoreLayerInfo);
                layerSettingsItem.onActive += OnLayerChanged;

                layerSettingsItems.Add(layerSettingsItem.index, layerSettingsItem);
            }

            if (!layerSettingsItems.ContainsKey(currentLayer.index))
            {
                Debug.LogError("Can`t find default layer");
                currentLayer.index = 1;
                savedLayer         = null;
            }

            layerSettingsItems[currentLayer.index].SetActive(true);
        }
コード例 #2
0
        public void Init(TerrainTypeLayerSettings layerSettings, ToggleGroup layersToggleGroup,
                         Action <Rect, string, string> showMoreInfoCallback,
                         Action hideMoreInfoCallback, bool blockSelectable = false)
        {
            nameText.text    = layerSettings.name;
            styleText.text   = layerSettings.style.ToString();
            colorImage.color = layerSettings.color;
            blockingImageGO.SetActive(layerSettings.blocking);

            toggle.onValueChanged.AddListener(OnToggleChanged);
            toggle.group = layersToggleGroup;
            if (layersToggleGroup != null)
            {
                layersToggleGroup.RegisterToggle(toggle);
            }

            showMoreInfo = showMoreInfoCallback;
            hideMoreInfo = hideMoreInfoCallback;

//            this.blockSelectable = blockSelectable;
            toggle.graphic = blockSelectable ? null : selectImage;


            index       = layerSettings.index;
            description = layerSettings.description;
        }
コード例 #3
0
 private void OnLayerChanged(byte layer, bool isActive)
 {
     if (!isActive)
     {
         return;
     }
     currentLayer = layersSettings[layer];
     currentLayerSettingsItem.Init(currentLayer, null, ShowMoreLayerInfo, HideMoreLayerInfo, true);
     RebuildBrush(BrushSize);
 }
コード例 #4
0
        /// <summary>
        /// Painting on TerrainTypeLayer
        /// </summary>
        /// <param name="position">Brush position</param>
        /// <param name="brushSize"></param>
        /// <param name="layer">Layer index</param>
        private void Paint(Vector2 positionCenter, float brushSize, TerrainTypeLayerSettings layer)
        {
            Rect rect = Rect.MinMaxRect(
                positionCenter.x - brushSize, positionCenter.y - brushSize,
                positionCenter.x + brushSize, positionCenter.y + brushSize
                );

//            if (RectUtils.IsCrossed(new Rect(Vector2.zero, TerrainTypeSize), rect))
//            {

            var crossRect = RectUtils.Cross(new Rect(Vector2.zero, TerrainTypeSize), rect);
            int size      = (int)brushSize;

//            Vector2 positionCenterLocal = positionCenter - crossRect.position;
//            Vector2 positionCenterLocal = positionCenter - crossRect.position;

            TerrainTypeTexture.SetPixels(
                Mathf.RoundToInt(crossRect.x), Mathf.RoundToInt(crossRect.y),
                Mathf.RoundToInt(crossRect.width), Mathf.RoundToInt(crossRect.height),
                TerrainTypeTexture.GetPixels(
                    Mathf.RoundToInt(crossRect.x), Mathf.RoundToInt(crossRect.y),
                    Mathf.RoundToInt(crossRect.width), Mathf.RoundToInt(crossRect.height))
                .Select((color, i) =>
            {
                int x = i % Mathf.RoundToInt(crossRect.width) + Mathf.RoundToInt(crossRect.xMin) -
                        Mathf.RoundToInt(positionCenter.x);
                int y = i / Mathf.RoundToInt(crossRect.width) + Mathf.RoundToInt(crossRect.yMin) -
                        Mathf.RoundToInt(positionCenter.y);

                return((x * x + y * y > size * size) ? color : layer.color);
            }
                        )
                .ToArray()
                );

            for (int j = (int)crossRect.yMin; j < (int)crossRect.yMax; j++)
            {
                for (int i = (int)crossRect.xMin; i < (int)crossRect.xMax; i++)
                {
                    int x = (int)(i - positionCenter.x);
                    int y = (int)(j - positionCenter.y);
                    if (x * x + y * y <= size * size)
                    {
                        TerrainTypeData2D[i, j] = layer.index;
                    }
                }
            }

            TerrainTypeTexture.Apply();
        }
コード例 #5
0
        /// <summary>
        /// Painting on TerrainTypeLayer
        /// </summary>
        /// <param name="position">Brush position</param>
        /// <param name="brushSize"></param>
        /// <param name="layer">Layer index</param>
        private void SymmetryPaint(Vector3 paintPosition, float brushSize, TerrainTypeLayerSettings layer)
        {
            //Paint(positionCenter, brushSize, layer);

            //TODO Symmetry points

            BrushGenerator.Current.GenerateSymmetry(paintPosition);

            for (int i = 0; i < BrushGenerator.Current.PaintPositions.Length; i++)
            {
                Vector2 brushPos2 = GetTypePos(BrushGenerator.Current.PaintPositions[i]);
                brushPos2 = new Vector2(brushPos2.x * 10, TerrainTypeSize.y - brushPos2.y * 10);

                Paint(brushPos2, brushSize, layer);
            }

            TerrainTypeTexture.Apply();
        }
コード例 #6
0
        private void Close()
        {
            sizeField.OnValueChanged.RemoveAllListeners();
            sizeField.OnEndEdit.RemoveAllListeners();
            clearAllButton.onClick.RemoveAllListeners();
            clearCurrentButton.onClick.RemoveAllListeners();
            layerCapacityField.OnValueChanged.RemoveAllListeners();
            currentLayerSettingsItem.onActive -= OnCurrentLayerPressed;

//            terrainMaterial.SetTexture("_BrushTex", null);

            ApplyTerrainTypeChanges();
            HideMoreLayerInfo();

            ScmapEditor.Current.TerrainMaterial.SetInt("_Brush", 0);
            ScmapEditor.Current.TerrainMaterial.SetInt("_HideTerrainType", 1);
            ScmapEditor.Current.TerrainMaterial.SetTexture("_TerrainTypeAlbedo", null);

            TerrainTypeTexture = null;
            TerrainTypeData2D  = null;
            savedLayer         = currentLayer;
            currentLayerSettingsItem.Clear();
//            ClearUILayerSettings();
        }