Beispiel #1
0
    public void CreateTerrain(ja2.Map Map_, ja2.TerrainMaterialManager MatManager)
    {
        if (Map_.width % ja2.TerrainPartition.PARTITION_WIDTH != 0 || Map_.width % ja2.TerrainPartition.PARTITION_WIDTH != 0)
        {
            throw new System.ArgumentException("Map width/height must be normalized to terrain partition width/height.");
        }
        // Create component
        mapInstance     = ScriptableObject.CreateInstance <MapInstance>();
        mapInstance.map = Map_;

        // Need to create terrain partitions
        int partition_width  = Map_.width / ja2.TerrainPartition.PARTITION_WIDTH;
        int partition_height = Map_.height / ja2.TerrainPartition.PARTITION_HEIGHT;

        for (int i = 0; i < partition_height; ++i)
        {
            for (int j = 0; j < partition_width; ++j)
            {
                // Create terrain GO
                GameObject terrain_go = new GameObject(PARTITION_NAME + j + "_" + i);
                terrain_go.isStatic = true;
                // Set parent
                terrain_go.transform.parent = transform;
                // Update position
                Vector3 tile_vertex_0 = ja2.TerrainPartition.TileVertex(j * ja2.TerrainPartition.PARTITION_WIDTH, i * ja2.TerrainPartition.PARTITION_HEIGHT, 0);
                Vector3 tile_vertex_1 = ja2.TerrainPartition.TileVertex(j * ja2.TerrainPartition.PARTITION_WIDTH, i * ja2.TerrainPartition.PARTITION_HEIGHT, 1);
                terrain_go.transform.position = new Vector3(tile_vertex_0.x, 0, tile_vertex_1.z);
                // Set layer
                terrain_go.layer = Terrain.LAYER;
                // Create component
                var terrain = terrain_go.AddComponent <Terrain>();
                terrain.CreatePartition(j, i, mapInstance, MatManager);
            }
        }
    }
Beispiel #2
0
 public void CreatePartition(int X, int Y, MapInstance Map, TerrainMaterialManager MatManager)
 {
     TerrainTileSet tile_set = MatManager.GetTerrainSet(Map.map.terrainName);
     // Create terrain partition
     terrainPartition = new ja2.TerrainPartition();
     Mesh mesh = terrainPartition.Create(X, Y, Map.map, tile_set);
     // Add needed components
     GetComponent<MeshFilter>().mesh = mesh;
     GetComponent<MeshCollider>().sharedMesh = mesh;
     var mesh_renderer = gameObject.GetComponent<MeshRenderer>();
     // Set map material
     mesh_renderer.sharedMaterial = Resources.LoadAssetAtPath("Assets/Materials/" + tile_set.materialName + ".mat", typeof(Material)) as Material;
     // Don't cast shadows
     mesh_renderer.castShadows = false;
 }