void OnSceneGUI() { if (!target) target = (TerrainTransparency)base.target; // if auto-update is enabled, and used-event (e.g. mouse down/move/up, while painting) occurred with our target-terrain selected if (target.autoUpdateTransparencyMap && Event.current.rawType == EventType.used && Event.current.button == 0 && Selection.transforms.Any(a=>a.gameObject == target.gameObject)) //Selection.activeTransform.gameObject == target.gameObject) targetLastMouseChangeTimes[target] = Time.realtimeSinceStartup; }
void OnSceneGUI() { if (!target) { target = (TerrainTransparency)base.target; } // if auto-update is enabled, and used-event (e.g. mouse down/move/up, while painting) occurred with our target-terrain selected if (target.autoUpdateTransparencyMap && Event.current.rawType == EventType.used && Event.current.button == 0 && Selection.transforms.Any(a => a.gameObject == target.gameObject)) //Selection.activeTransform.gameObject == target.gameObject) { targetLastMouseChangeTimes[target] = Time.realtimeSinceStartup; } }
float GetOpacityAt(Vector3 position, TerrainData terrainData, TerrainTransparency terrainTransparencySettings) { var currentLocationOnTerrainAlphaMap = new Vector2((terrainData.alphamapResolution / terrainData.size.x) * position.x, (terrainData.alphamapResolution / terrainData.size.z) * position.z); var aPos = (int)currentLocationOnTerrainAlphaMap.y; // for some reason we need to flip them var bPos = (int)currentLocationOnTerrainAlphaMap.x; if (aPos >= 0 && aPos < terrainData.alphamapResolution && bPos >= 0 && bPos < terrainData.alphamapResolution) // if in-bounds { float opacity = terrainTransparencySettings.opacityMap.GetPixel(bPos, aPos).a; //terrainAlphamaps[aPos, bPos, slotIndex]; float finalOpacity = opacity > terrainTransparencySettings.alphaCutoff ? 1 : 0; return(finalOpacity); } return(1); // if no texture detected underneath, assume we're on solid/opaque terrain }
public override void OnInspectorGUI() { if (!target) target = (TerrainTransparency)base.target; bool changeMade = DrawDefaultInspector(); if (GUILayout.Button("Update Transparency Map")) { target.UpdateTransparencyMap(); target.ApplyTransparencyMap(); } // if auto-update is enabled, and just-drawn inspector made changes or an undo/redo has occurred if (target.autoUpdateTransparencyMap && (changeMade || (new[] {EventType.ValidateCommand, EventType.Used}.Contains(Event.current.type) && Event.current.commandName == "UndoRedoPerformed"))) target.UpdateTransparencyMap(); }
float GetOpacityAt(Vector3 position, TerrainData terrainData, TerrainTransparency terrainTransparencySettings) { var currentLocationOnTerrainAlphaMap = new Vector2((terrainData.alphamapResolution / terrainData.size.x) * position.x, (terrainData.alphamapResolution / terrainData.size.z) * position.z); var aPos = (int)currentLocationOnTerrainAlphaMap.y; // for some reason we need to flip them var bPos = (int)currentLocationOnTerrainAlphaMap.x; if (aPos >= 0 && aPos < terrainData.alphamapResolution && bPos >= 0 && bPos < terrainData.alphamapResolution) // if in-bounds { float transparency = terrainTransparencySettings.transparencyMap.GetPixel(bPos, aPos).a; //terrainAlphamaps[aPos, bPos, slotIndex]; float opacity = 1.0f - transparency; float finalOpacity = opacity > terrainTransparencySettings.alphaCutoff ? 1 : 0; return finalOpacity; } return 1; // if no texture detected underneath, assume we're on solid/opaque terrain }
public override void OnInspectorGUI() { if (!target) { target = (TerrainTransparency)base.target; } bool changeMade = DrawDefaultInspector(); if (GUILayout.Button("Update Transparency Map")) { target.UpdateTransparencyMap(); target.ApplyTransparencyMap(); } // if auto-update is enabled, and just-drawn inspector made changes or an undo/redo has occurred if (target.autoUpdateTransparencyMap && (changeMade || (new[] { EventType.ValidateCommand, EventType.Used }.Contains(Event.current.type) && Event.current.commandName == "UndoRedoPerformed"))) { target.UpdateTransparencyMap(); } }