Example #1
0
    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
    }
Example #2
0
    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);
    }
Example #3
0
    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();
    }
Example #4
0
    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);
    }