public void ShowFaction(int _Faction) { if (_Faction >= Factions.Count) { Debug.LogWarning("[UFoW] Cant reveal Faction, because it does not exist. Create more Factions."); return; } RevealFaction = (FogOfWar.Players)Mathf.FloorToInt(Mathf.Pow(2, _Faction)); if (BlurFog == FogOfWar.FogQuality.Off) { Shader.SetGlobalTexture("FogOfWar", FogOfWar.Factions[_Faction].FogTexture); } else { if (fogOfWarBlur == null) { fogOfWarBlur = gameObject.AddComponent <FogOfWarBlur>(); } Shader.SetGlobalTexture("FogOfWar", FogOfWar.Factions[_Faction].BluredRenderTexture); } FogOfWar.RevealFactionInt = _Faction; FogOfWar.RevealFaction = RevealFaction; #if UNITY_EDITOR if (!Application.isPlaying) { SetWhiteTextureAsFog(); } #endif }
public void InitializeMaps() { SetUpShaderKeywords(); FogOfWar.Reset(); if (Factions.Count == 0) { AddFaction(); } //1. FogOfWar Data FogOfWar.InitializeFogOfWar(LevelWidth, LevelHeight, Factions, RevealFaction); ShowFaction(RevealFaction); //Pass Reveal opacities FogOfWar.RevealOpacities = RevealOpacities; //2. ResistanceMap Data SetResistanceMap(ResitenceMapPath); foreach (Faction f in Factions) { f.BluredRenderTexture = new RenderTexture(LevelWidth * UpSample, LevelHeight * UpSample, 0); f.BluredRenderTexture.filterMode = FogTextureFilterMode; } if (BlurFog == FogOfWar.FogQuality.Off) { Shader.SetGlobalTexture("FogOfWar", FogOfWar.Factions[FogOfWar.RevealFactionInt].FogTexture); } else { if (fogOfWarBlur == null) { fogOfWarBlur = gameObject.AddComponent <FogOfWarBlur>(); } Shader.SetGlobalTexture("FogOfWar", FogOfWar.Factions[FogOfWar.RevealFactionInt].BluredRenderTexture); } //Pass Level width and height to Shaders Shader.SetGlobalFloat("LevelWidth", (float)LevelWidth); Shader.SetGlobalFloat("LevelHeight", (float)LevelHeight); Shader.SetGlobalFloat("Scale", PatchScale); Shader.SetGlobalVector("Origin", new Vector4(Origin.x, Origin.y, Origin.z, 0f)); Shader.SetGlobalColor("FogColor", FogColor); Shader.SetGlobalFloat("FogSpeed", AnimatedFogSpeed); Shader.SetGlobalFloat("FogTiling", AnimatedFogTiling); Shader.SetGlobalFloat("FogIntensity", AnimatedFogIntensity); Shader.SetGlobalTexture("FogNoise", FogNoise); }
private void SaveAndCreateTerrain() { int width = int.Parse(MapSizeX.ToString().Remove(0, 1)); int height = int.Parse(MapSizeZ.ToString().Remove(0, 1)); Texture2D ResistanceMap = new Texture2D(width, height); Color[] c = new Color[width * height]; for (int i = 0; i < c.Length; i++) { c[i] = new Color(0f, 0f, 0f, 1f); } if (BorderResistanceMap) { for (int x = 0; x < width; x++) { for (int z = 0; z < height; z++) { int coord = z * width + x; if (x == 0 || x == width - 1 || z == 0 || z == height - 1) { c[coord].r = 1f; } } } } ResistanceMap.SetPixels(c); byte[] pngData = ResistanceMap.EncodeToPNG(); if (pngData != null) { File.WriteAllBytes(FileLocation, pngData); } AssetDatabase.Refresh(); GameObject g = new GameObject("Fog of War Manager"); FogOfWarManager manager = g.AddComponent <FogOfWarManager>(); if (CreateTerrain) { GameObject t = new GameObject("Terrain"); Terrain terrain = t.AddComponent <Terrain>(); TerrainData terrainData = new TerrainData(); Material TerrainMaterial = new Material(Shader.Find("UFoW/Terrain/Diffuse")); TerrainMaterial.name = "TerrainMaterial"; string PathOnly = FileLocation; for (int i = PathOnly.Length - 1; i > 0; i--) { if (PathOnly[i] == '/') { PathOnly = PathOnly.Remove(i + 1, PathOnly.Length - i - 1); break; } } string matString = PathOnly + TerrainMaterial.name + ".mat"; AssetDatabase.CreateAsset(TerrainMaterial, matString); AssetDatabase.SaveAssets(); switch (TerrainMat) { case FogOfWar.TerrainMaterial.Legacy_Specular: TerrainMaterial = new Material(Shader.Find("UFoW/Terrain/Specular")); break; case FogOfWar.TerrainMaterial.Legacy_Diffuse: TerrainMaterial = new Material(Shader.Find("UFoW/Terrain/Standard")); break; } terrain.materialType = Terrain.MaterialType.Custom; terrainData.heightmapResolution = height + 1; terrainData.size = new Vector3(width + (Overshoot * 2), MinMaxHeight.y, height + (Overshoot * 2)); terrainData.SetDetailResolution(height, 8); terrain.terrainData = terrainData; terrain.materialTemplate = TerrainMaterial; TerrainCollider terrainCollider = t.AddComponent <TerrainCollider>(); terrainCollider.terrainData = terrainData; if (SaveTerrainData) { string tDString = PathOnly + "TerrainData" + ".asset"; AssetDatabase.CreateAsset(terrainData, tDString); AssetDatabase.SaveAssets(); } t.transform.position -= new Vector3(Overshoot, 0f, Overshoot); manager.FogOfWarTerrain = terrain; } manager.fogAlignment = FogOfWar.FogAlignment.Horizontal; manager.LevelH = MapSizeX; manager.LevelW = MapSizeZ; manager.LevelWidth = width; manager.LevelHeight = height; manager.ResitenceMapPath = FileLocation; manager.SetResistanceMap(FileLocation); manager.RevealOpacities = new Color(RevealOpacity, CoveredOpacity, UndiscoveredOpacity, 1f); manager.StartEndHeight = MinMaxHeight; manager.FogTextureFilterMode = FogFilterMode; manager.ManualMode = false; if (BlurQuality != FogOfWar.FogQuality.Off) { FogOfWarBlur blur = manager.gameObject.AddComponent <FogOfWarBlur>(); manager.fogOfWarBlur = blur; manager.BlurFog = BlurQuality; } manager.InitializeMaps(); }
private void SaveAndCreateCanvas() { int width = int.Parse(MapSizeX.ToString().Remove(0, 1)); int height = int.Parse(MapSizeZ.ToString().Remove(0, 1)); Texture2D ResistanceMap = new Texture2D(width, height); Color[] c = new Color[width * height]; for (int i = 0; i < c.Length; i++) { c[i] = new Color(0f, 0f, 0f, 1f); } if (BorderResistanceMap) { for (int x = 0; x < width; x++) { for (int z = 0; z < height; z++) { int coord = z * width + x; if (x == 0 || x == width - 1 || z == 0 || z == height - 1) { c[coord].r = 1f; } } } } ResistanceMap.SetPixels(c); byte[] pngData = ResistanceMap.EncodeToPNG(); if (pngData != null) { File.WriteAllBytes(FileLocation, pngData); } AssetDatabase.Refresh(); GameObject g = new GameObject("Fog of War Manager"); FogOfWarManager manager = g.AddComponent <FogOfWarManager>(); string PathOnly = FileLocation; for (int i = PathOnly.Length - 1; i > 0; i--) { if (PathOnly[i] == '/') { PathOnly = PathOnly.Remove(i + 1, PathOnly.Length - i - 1); break; } } manager.fogAlignment = FogOfWar.FogAlignment.Vertical; GameObject FogCanvas = new GameObject("Canvas"); FogCanvas.AddComponent <Canvas>(); RectTransform rectT = FogCanvas.GetComponent <RectTransform>(); Canvas fogCanvas = FogCanvas.GetComponent <Canvas>(); fogCanvas.renderMode = RenderMode.WorldSpace; rectT.position = new Vector3((float)width / 2f, (float)height / 2f, 0f); rectT.sizeDelta = new Vector2((float)width, (float)height); GameObject camObj = new GameObject("Camera"); Camera cam = camObj.AddComponent <Camera>(); cam.orthographic = true; cam.orthographicSize = 10f; cam.transform.position = new Vector3(width / 2f, height / 2f, -10f); manager.FogCanvas = fogCanvas; manager.LevelH = MapSizeX; manager.LevelW = MapSizeZ; manager.LevelWidth = width; manager.LevelHeight = height; manager.ResitenceMapPath = FileLocation; manager.SetResistanceMap(FileLocation); manager.RevealOpacities = new Color(RevealOpacity, CoveredOpacity, UndiscoveredOpacity, 1f); manager.StartEndHeight = MinMaxHeight; manager.FogTextureFilterMode = FogFilterMode; manager.ManualMode = false; if (BlurQuality != FogOfWar.FogQuality.Off) { FogOfWarBlur blur = manager.gameObject.AddComponent <FogOfWarBlur>(); manager.fogOfWarBlur = blur; manager.BlurFog = BlurQuality; } manager.InitializeMaps(); GameObject Quad = GameObject.CreatePrimitive(PrimitiveType.Quad); Quad.name = "Raycast Catcher"; Quad.GetComponent <MeshRenderer>().enabled = false; Quad.transform.position = new Vector3(width / 2f, height / 2f, 0f); Quad.transform.localScale = new Vector3(width, height, 1f); }