BITFALL/Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain .../Editor/Scripts/DataTool/GRawExporterWindow.cs

138 lines
4.6 KiB
C#

#if GRIFFIN
using UnityEditor;
using UnityEngine;
namespace Pinwheel.Griffin.DataTool
{
public class GRawExporterWindow : EditorWindow
{
public GTerrainData SrcData { get; set; }
public GBitDepth BitDepth { get; set; }
public string DataDirectory { get; set; }
public bool BulkExport { get; set; }
public int BulkExportGroupId { get; set; }
private const string PREF_PREFIX = "raw-exporter";
private const string BIT_DEPTH_PREFIX = "bit-depth";
private const string DATA_DIRECTORY_PREFIX = "directory";
private const string INSTRUCTION =
"Export height map (R channel) to RAW file (raw, r16).";
private const string INSTRUCTION_BULK =
"Export height maps (R channel) to RAW files (raw, r16).";
public static GRawExporterWindow ShowWindow()
{
GRawExporterWindow window = ScriptableObject.CreateInstance<GRawExporterWindow>();
window.titleContent = new GUIContent("Raw Exporter");
window.minSize = new Vector2(400, 300);
window.ShowUtility();
return window;
}
private void OnEnable()
{
BitDepth = (GBitDepth)EditorPrefs.GetInt(GEditorCommon.GetProjectRelatedEditorPrefsKey(PREF_PREFIX, BIT_DEPTH_PREFIX), 0);
DataDirectory = EditorPrefs.GetString(GEditorCommon.GetProjectRelatedEditorPrefsKey(PREF_PREFIX, DATA_DIRECTORY_PREFIX), "Assets/Polaris Exported/");
if (string.IsNullOrEmpty(DataDirectory))
{
DataDirectory = "Assets/";
}
}
private void OnDisable()
{
EditorPrefs.SetInt(GEditorCommon.GetProjectRelatedEditorPrefsKey(PREF_PREFIX, BIT_DEPTH_PREFIX), (int)BitDepth);
EditorPrefs.SetString(GEditorCommon.GetProjectRelatedEditorPrefsKey(PREF_PREFIX, DATA_DIRECTORY_PREFIX), DataDirectory);
}
private void OnGUI()
{
DrawInstructionGUI();
DrawExportGUI();
}
private void DrawInstructionGUI()
{
string label = "Instruction";
string id = "raw-exporter-instruction";
GEditorCommon.Foldout(label, false, id, () =>
{
EditorGUILayout.LabelField(BulkExport ? INSTRUCTION_BULK : INSTRUCTION, GEditorCommon.WordWrapItalicLabel);
});
}
private void DrawExportGUI()
{
string label = "Export";
string id = "raw-exporter-import";
GEditorCommon.Foldout(label, true, id, () =>
{
if (BulkExport)
{
GUI.enabled = false;
GEditorCommon.ActiveTerrainGroupPopupWithAllOption("Group Id", BulkExportGroupId);
GUI.enabled = true;
}
else
{
GUI.enabled = false;
EditorGUILayout.ObjectField("Griffin Data", SrcData, typeof(GTerrainData), false);
GUI.enabled = true;
}
BitDepth = (GBitDepth)EditorGUILayout.EnumPopup("Bit Depth", BitDepth);
string path = DataDirectory;
GEditorCommon.BrowseFolder("Directory", ref path);
DataDirectory = path;
EditorGUILayout.LabelField("Files with the same name will be overwriten!", GEditorCommon.WordWrapItalicLabel);
if (GUILayout.Button("Export"))
{
Export();
}
});
}
private void Export()
{
if (BulkExport)
{
DoBulkExport();
}
else
{
DoExport();
}
}
private void DoExport()
{
GRawExporter exporter = new GRawExporter();
exporter.SrcData = SrcData;
exporter.BitDepth = BitDepth;
exporter.DataDirectory = DataDirectory;
exporter.Export();
}
private void DoBulkExport()
{
GCommon.ForEachTerrain(
BulkExportGroupId,
(t) =>
{
if (t.TerrainData == null)
return;
GRawExporter exporter = new GRawExporter();
exporter.SrcData = t.TerrainData;
exporter.BitDepth = BitDepth;
exporter.DataDirectory = DataDirectory;
exporter.Export();
});
}
}
}
#endif