TiledTerrain/Assets/Tile Terrain/Runtime/TerrainAsset.cs

69 lines
1.9 KiB
C#
Raw Normal View History

2024-08-28 11:22:57 +03:00
using System;
using System.Buffers;
using UnityEditor;
using UnityEngine;
using UnityEngine.Experimental.Rendering;
namespace BitGames.Terrain
{
public class TerrainAsset : ScriptableObject
{
public int Size;
public BiomesAsset BiomesAsset;
public Texture2D ControlTexture;
public Texture2D ShadowTexture;
public Color ShadowColor = new(0.2f, 0.2f, 0.2f, 0.5f);
public static TerrainAsset Create(string path, int size)
{
var asset = CreateInstance<TerrainAsset>();
asset.Size = size;
var controlTexture = new Texture2D(size, size, TextureFormat.RG16, false);
controlTexture.name = "Control Texture";
controlTexture.filterMode = FilterMode.Point;
var shadowTexture = new Texture2D(size, size, TextureFormat.R8, true);
shadowTexture.name = "Shadow Texture";
controlTexture.filterMode = FilterMode.Bilinear;
var colorBuffer = ArrayPool<Color32>.Shared.Rent(size * size);
try
{
Array.Fill(colorBuffer, GetControlMapDefault());
controlTexture.SetPixels32(0, 0, size, size, colorBuffer);
controlTexture.Apply();
Array.Fill(colorBuffer, GetShadowMapDefault());
shadowTexture.SetPixels32(0, 0, size, size, colorBuffer);
shadowTexture.Apply();
}
finally
{
ArrayPool<Color32>.Shared.Return(colorBuffer);
}
asset.ControlTexture = controlTexture;
asset.ShadowTexture = shadowTexture;
AssetDatabase.CreateAsset(asset, path);
AssetDatabase.AddObjectToAsset(asset.ControlTexture, asset);
AssetDatabase.AddObjectToAsset(asset.ShadowTexture, asset);
AssetDatabase.ImportAsset(path);
return asset;
}
private static Color32 GetControlMapDefault()
{
return new Color32(0, (byte)ControlFlags.DEFAULT, 0, 0);
}
private static Color32 GetShadowMapDefault()
{
return Color.black;
}
}
}