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); }
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; }
private void OnLayerChanged(byte layer, bool isActive) { if (!isActive) { return; } currentLayer = layersSettings[layer]; currentLayerSettingsItem.Init(currentLayer, null, ShowMoreLayerInfo, HideMoreLayerInfo, true); RebuildBrush(BrushSize); }
/// <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(); }
/// <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(); }
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(); }