コード例 #1
0
    private void createTerrainOutput(TerrainOutput terrainOutput)
    {
        if (terrainOutput.Type.Equals(OutputType.Object))
        {
            return;
        }
        UnityEngine.Object tabButtonPrefab = Resources.Load("Prefabs/TabButtonOutput", typeof(GameObject));
        GameObject         tabButton       = (GameObject)Instantiate(tabButtonPrefab);

        tabButton.transform.SetParent(TabPanel.transform, false);

        System.Console.WriteLine("Output is " + terrainOutput.Title);
        tabButton.GetComponentInChildren <Text>().text = terrainOutput.Title;

        tabButtons.Add(tabButton);

        GameObject layerOutput = null;

        UnityEngine.Object terrainOutputPrefab;
        switch (terrainOutput.Type)
        {
        case OutputType.Group:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputGroupPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputGroupPanel>().Init(terrainOutput);
            break;

        case OutputType.Image:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputImagePanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputImagePanel>().Init(terrainOutput);
            break;

        case OutputType.Mesh:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputMeshPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputMeshPanel>().Init(terrainOutput);
            break;

        case OutputType.Values:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputValuesPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputValuesPanel>().Init(terrainOutput);
            break;
        }

        tabButton.GetComponent <Button>().onClick.AddListener(() => selectTab(layerOutput, tabButton));
        terrainOutputObjects.Add(terrainOutput, layerOutput);

        if (firstLayout)
        {
            firstLayout = false;
            selectTab(layerOutput, tabButton);
        }
    }
コード例 #2
0
    internal void Init(TerrainOutput terrainOutput)
    {
        for (int i = 0; i < ((TerrainOutputValues)terrainOutput).ValueTitles.Count; i++)
        {
            UnityEngine.Object terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputValuePanel", typeof(GameObject));
            GameObject         layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponentsInChildren <Text>()[0].text = ((TerrainOutputValues)terrainOutput).ValueTitles[i];
            layerOutput.GetComponentsInChildren <Text>()[1].text = ((TerrainOutputValues)terrainOutput).Values[i];

            layerOutput.transform.SetParent(gameObject.transform);
        }
    }
コード例 #3
0
    internal void Init(TerrainOutput terrainOutput)
    {
        if (File.Exists(((TerrainOutputImage)terrainOutput).ImagePath))
        {
            byte[]    fileData = File.ReadAllBytes(((TerrainOutputImage)terrainOutput).ImagePath);
            Texture2D tex      = new Texture2D(2, 2);
            tex.LoadImage(fileData);

            Image.GetComponent <RectTransform>().sizeDelta = new Vector2(tex.width, tex.height);

            Image.GetComponent <RawImage>().texture = tex;
        }
    }
コード例 #4
0
        public static void FillHeightMapMesh(TerrainOutputMesh splittedMesh, GeoPoint[][] heightMapGeoPoints, float cellSize, float minHeight, float maxHeight, List <float[]> grassLand)
        {
            float maxHeightValue = 0;

            for (int x = 0; x < heightMapGeoPoints.Length; x++)
            {
                for (int y = 0; y < heightMapGeoPoints[x].Length; y++)
                {
                    if (maxHeightValue < heightMapGeoPoints[x][y].Height)
                    {
                        maxHeightValue = heightMapGeoPoints[x][y].Height;
                    }
                }
            }


            int           chunk                 = 0;
            float         heightFactor          = (maxHeight / maxHeightValue) / cellSize;
            TerrainOutput terrainOutputSplitted = splitTerrainSegments(heightMapGeoPoints);

            for (int x = 0; x < heightMapGeoPoints.Length; x++)
            {
                for (int y = 0; y < heightMapGeoPoints[x].Length; y++)
                {
                    if (heightMapGeoPoints[x][y].Type.Equals(CellType.Grass))
                    {
                        grassLand.Add(new float[] { heightMapGeoPoints[x][y].X, heightMapGeoPoints[x][y].Y, heightMapGeoPoints[x][y].Height * heightFactor });
                    }
                }
            }



            splittedMesh.CameraPosition = new float[] { 0, heightMapGeoPoints.Length / 4, 0 };
            splittedMesh.CameraRotation = new float[] { 22.5f, 45, 0 };

            foreach (CellType type in Enum.GetValues(typeof(CellType)))
            {
                splittedMesh.VertexData.Add(new List <float[]>());
                splittedMesh.FacesData.Add(new List <int[]>());
                splittedMesh.MaterialColor.Add("");
                splittedMesh.MaterialTexture.Add("");
                splittedMesh.TexureCoordData.Add(new List <float[]>());
                exportSplittedHeightMap(heightMapGeoPoints, splittedMesh, chunk, heightFactor, type);
                chunk++;
            }

            exportTransitionHeightMap_(heightMapGeoPoints, splittedMesh, heightFactor);
        }
コード例 #5
0
    internal void Init(TerrainOutput terrainOutput)
    {
        List <Dropdown.OptionData> options      = new List <Dropdown.OptionData>();
        List <GameObject>          layerOutputs = new List <GameObject>();

        foreach (TerrainOutput terrainOutput_ in ((TerrainOutputGroup)terrainOutput).ChildOutputs)
        {
            createTerrainOutput(terrainOutput_, options, layerOutputs);
        }

        TerrainOutputDropdown.GetComponent <Dropdown>().ClearOptions();
        TerrainOutputDropdown.GetComponent <Dropdown>().AddOptions(options);

        TerrainOutputDropdown.GetComponent <Dropdown>().onValueChanged.AddListener((idx) => selectTab(idx, layerOutputs));

        if (options.Count > 0)
        {
            selectTab(0, layerOutputs);
        }
    }
コード例 #6
0
    internal void Init(TerrainOutput terrainOutput_)
    {
        terrainOutput = (TerrainOutputMesh)terrainOutput_;
        meshes        = new List <Mesh>();
        materials     = new List <Material>();

        subMeshes    = new List <List <Mesh> >();
        subMaterials = new List <List <Material> >();

        processMesh(terrainOutput, meshes, materials);

        /*foreach (string meshPath in terrainOutput.MeshPath)
         * {
         *  Mesh mesh = new Mesh();
         *  ObjImporter newMesh = new ObjImporter();
         *  mesh = newMesh.ImportFile(meshPath);
         *  meshes.Add(mesh);
         *  //mesh.RecalculateNormals();
         * }*/
    }
コード例 #7
0
    private void createTerrainOutput(TerrainOutput terrainOutput, List <Dropdown.OptionData> options, List <GameObject> layerOutputs)
    {
        options.Add(new Dropdown.OptionData(terrainOutput.Title));
        GameObject layerOutput = null;

        UnityEngine.Object terrainOutputPrefab;

        switch (terrainOutput.Type)
        {
        case OutputType.Group:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputGroupPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputGroupPanel>().Init(terrainOutput);
            break;

        case OutputType.Image:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputImagePanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputImagePanel>().Init(terrainOutput);
            break;

        case OutputType.Mesh:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputMeshPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputMeshPanel>().Init(terrainOutput);
            break;

        case OutputType.Values:
            terrainOutputPrefab = Resources.Load("Prefabs/TerrainOutputValuesPanel", typeof(GameObject));
            layerOutput         = (GameObject)Instantiate(terrainOutputPrefab);
            layerOutput.GetComponent <TerrainOutputValuesPanel>().Init(terrainOutput);
            break;
        }

        terrainOutputObjects.Add(terrainOutput, layerOutput);
        layerOutputs.Add(layerOutput);
    }
コード例 #8
0
        private static TerrainOutput ParseParadoxFile()
        {
            var fileTree = new List <(int Key, object Value)>();

            var terrainNames   = new List <string>();
            var terrains       = new List <TerrainEntity>();
            var terrainCache   = new List <List <FirstLevelCore> >();
            var paletteLookups = new List <(Color Palette, int Index)>();

            // Generating file tree representation.
            FileUnpacker.ParseFile(Path.Combine(Application.streamingAssetsPath, "map", "terrain.txt"),
                                   fileTree, TerrainMagicOverride);

            for (var index = 0; index < fileTree.Count; index++)
            {
                var currentTerrain = terrains[index];

                var(breakCores, _) = FileUnpacker.AssignFirstLevelDistributeWorkload(ref currentTerrain, fileTree[index],
                                                                                     TerrainOverride);

                terrainCache.Add(breakCores);

                bool TerrainOverride((int Key, object Value) target)
                {
                    switch ((LoadVariables)target.Key)
                    {
                    case LoadVariables.Palette:
                        if (!ColorUtility.TryParseHtmlString("#" + (string)target.Value, out var paletteColor))
                        {
                            throw new Exception("Unknown hex color. " + (string)target.Value);
                        }

                        paletteLookups.Add((paletteColor, index));
                        return(true);

                    default:
                        return(false);
                    }
                }
            }

            int TerrainMagicOverride(int parent, string str)
            {
                if (parent != -1)
                {
                    return((int)MagicUnifiedNumbers.ContinueMagicNumbers);
                }

                terrainNames.Add(str);

                terrains.Add(new TerrainEntity {
                    Name = str
                });
                return((int)MagicUnifiedNumbers.Terrain + terrainNames.Count - 1);
            }

            var output = new TerrainOutput(terrainNames, terrains, terrainCache, paletteLookups);

            //File.WriteAllText(Path.Combine(Application.streamingAssetsPath, "JsonData", "terrain.txt"),
            //JsonUtility.ToJson(output, true));

            File.WriteAllBytes(Path.Combine(Application.streamingAssetsPath, "JsonData", "terrain.txt"),
                               LoadMethods.Zip(JsonUtility.ToJson(output)));

            return(output);
        }