Exemplo n.º 1
0
        private void DocCharacters(Player self)
        {
            if (Generated)
            {
                return;
            }

            var imageDirectory = Path.Combine(DocumentationDirConfig.Value, "images/characters");

            Directory.CreateDirectory(imageDirectory);

            Jotunn.Logger.LogInfo("Documenting characters");

            AddHeader(1, "Character list");
            AddText("All of the Character prefabs currently in the game.");
            AddText("This file is automatically generated from Valheim using the JotunnDoc mod found on our GitHub.");
            AddTableHeader("Name", "Components");

            List <GameObject> allPrefabs = new List <GameObject>();

            allPrefabs.AddRange(ZNetScene.instance.m_nonNetViewPrefabs);
            allPrefabs.AddRange(ZNetScene.instance.m_prefabs);

            foreach (GameObject obj in allPrefabs.Where(x => !CustomPrefab.IsCustomPrefab(x.name) && x.GetComponent <Character>() != null).OrderBy(x => x.name))
            {
                string name = obj.name;
                if (RequestSprite(Path.Combine(imageDirectory, $"{name}.png"), obj, RenderManager.IsometricRotation))
                {
                    name += $"<br><img src=\"../../images/characters/{name}.png\">";
                }

                string components = "<ul>";

                foreach (Component comp in obj.GetComponents <Component>())
                {
                    components += "<li>" + comp.GetType().Name + "</li>";
                }

                components += "</ul>";

                AddTableRow(
                    name,
                    components
                    );
            }

            Save();
        }
Exemplo n.º 2
0
        private void DocPrefabs(Player self)
        {
            if (Generated)
            {
                return;
            }

            Jotunn.Logger.LogInfo("Documenting prefabs");

            AddHeader(1, "Prefab list");
            AddText("All of the prefabs currently in the game (ZNetScene and ZoneManager).");
            AddText("This file is automatically generated from Valheim using the JotunnDoc mod found on our GitHub.");
            AddTableHeader("Name", "Components");

            List <GameObject> allPrefabs = new List <GameObject>();

            allPrefabs.AddRange(ZNetScene.instance.m_nonNetViewPrefabs);
            allPrefabs.AddRange(ZNetScene.instance.m_prefabs);
            allPrefabs.AddRange(ZoneSystem.instance.m_locations.Where(x => x.m_prefab).Select(x => x.m_prefab));

            foreach (GameObject obj in allPrefabs.Where(x => !CustomPrefab.IsCustomPrefab(x.name)).OrderBy(x => x.name))
            {
                string components = "<ul>";

                foreach (Component comp in obj.GetComponents <Component>())
                {
                    components += "<li>" + comp.GetType().Name + "</li>";
                }

                components += "</ul>";

                AddTableRow(
                    obj.name,
                    components
                    );
            }

            Save();
        }
Exemplo n.º 3
0
        private void DocMaterials(Player self)
        {
            if (Generated)
            {
                return;
            }

            Jotunn.Logger.LogInfo("Documenting prefab materials");

            AddHeader(1, "Prefab material list");
            AddText("All materials, the prefabs they are used in and their respective shaders and keywords currently in the game (ZNetScene and ZoneManager).");
            AddText("This file is automatically generated from Valheim using the JotunnDoc mod found on our GitHub.");
            AddTableHeader("Material", "Prefabs", "Shader", "Keywords");

            List <GameObject> allPrefabs = new List <GameObject>();

            allPrefabs.AddRange(ZNetScene.instance.m_nonNetViewPrefabs);
            allPrefabs.AddRange(ZNetScene.instance.m_prefabs);
            allPrefabs.AddRange(ZoneSystem.instance.m_locations.Where(x => x.m_prefab).Select(x => x.m_prefab));

            Dictionary <string, Material>       mats       = new Dictionary <string, Material>();
            Dictionary <string, List <string> > matPrefabs = new Dictionary <string, List <string> >();

            foreach (GameObject prefab in allPrefabs.Where(x => !CustomPrefab.IsCustomPrefab(x.name)).OrderBy(x => x.name))
            {
                foreach (Material mat in ShaderHelper.GetAllRendererMaterials(prefab))
                {
                    const string instanceToken = " (Instance)";
                    string       matName       = mat.name;

                    // Add distinct materials
                    if (matName.EndsWith(instanceToken))
                    {
                        matName = matName.Substring(0, matName.Length - instanceToken.Length);
                    }

                    if (!mats.ContainsKey(matName))
                    {
                        mats.Add(matName, mat);
                    }

                    // Add prefab per material
                    if (!matPrefabs.ContainsKey(matName))
                    {
                        matPrefabs.Add(matName, new List <string>());
                    }
                    matPrefabs[matName].Add(prefab.name);
                }
            }

            foreach (var entry in mats.OrderBy(x => x.Key))
            {
                Material mat = entry.Value;

                StringBuilder prefabsb = new StringBuilder();
                prefabsb.Append("<ul>");
                foreach (string prefab in matPrefabs[entry.Key].Distinct().OrderBy(x => x))
                {
                    prefabsb.Append("<li>");
                    prefabsb.Append(prefab);
                    prefabsb.Append("</li>");
                }
                prefabsb.Append("</ul>");

                StringBuilder keysb = new StringBuilder();
                keysb.Append("<dl>");
                if (mat.shaderKeywords.Length > 0)
                {
                    foreach (string prop in mat.shaderKeywords)
                    {
                        keysb.Append("<dd>");
                        keysb.Append(prop);
                        keysb.Append("</dd>");
                    }
                }
                keysb.Append("</dl>");

                AddTableRow(entry.Key, prefabsb.ToString(), mat.shader.name, keysb.ToString());
            }

            Save();
        }