/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Live2D.Cubism.Editor.OriginalWorkflow;
using Live2D.Cubism.Framework.MotionFade;
using UnityEditor;
using UnityEngine;
namespace Live2D.Cubism.Editor
{
///
/// Cubism unity editor menu.
///
public class CubismUnityEditorMenu
{
///
/// Should import as original workflow.
///
public static bool ShouldImportAsOriginalWorkflow
{
get
{
return CubismOriginalWorkflowSettings.OriginalWorkflowSettings.ShouldImportAsOriginalWorkflow;
}
set
{
CubismOriginalWorkflowSettings.OriginalWorkflowSettings.ShouldImportAsOriginalWorkflow = value;
EditorUtility.SetDirty(CubismOriginalWorkflowSettings.OriginalWorkflowSettings);
}
}
///
/// Should clear animation clip curves.
///
public static bool ShouldClearAnimationCurves
{
get
{
return CubismOriginalWorkflowSettings.OriginalWorkflowSettings.ShouldClearAnimationCurves;
}
set
{
CubismOriginalWorkflowSettings.OriginalWorkflowSettings.ShouldClearAnimationCurves = value;
EditorUtility.SetDirty(CubismOriginalWorkflowSettings.OriginalWorkflowSettings);
}
}
///
/// Unity editor menu should import as original workflow.
///
[MenuItem ("Live2D/Cubism/OriginalWorkflow/Should Import As Original Workflow")]
private static void ImportAsOriginalWorkflow()
{
SetImportAsOriginalWorkflow(!ShouldImportAsOriginalWorkflow);
// Disable clear animation curves.
if(!ShouldImportAsOriginalWorkflow)
{
SetClearAnimationCurves(false);
}
}
///
/// Unity editor menu clear animation curves.
///
[MenuItem ("Live2D/Cubism/OriginalWorkflow/Should Clear Animation Curves")]
private static void ClearAnimationCurves()
{
SetClearAnimationCurves(!ShouldClearAnimationCurves);
}
///
/// Unity editor context menu create an animator controller for cubism.
///
[MenuItem("Assets/Create/Live2D Cubism/Animator Controller for Cubism")]
private static void CreateAnimatorController()
{
var dataPath = Directory.GetParent(Application.dataPath).FullName + "/";
var assetPath = CubismUnityEditorUtility.GetCurrentDirectoryPath();
var assetName = "";
if (!File.Exists(dataPath + assetPath + "/New Cubism Animator Controller.controller"))
{
assetName = "New Cubism Animator Controller.controller";
}
else
{
var regex = new Regex(@"new cubism animator controller [0-9]+.controller");
var files = Directory.GetFiles(dataPath + assetPath, "*.controller")
.Where(path=> regex.IsMatch(Path.GetFileName(path).ToLower()))
.OrderBy(f => f, StringComparer.OrdinalIgnoreCase)
.ToArray();
for (var i = 0; i < files.Length; i++)
{
var name = $"New Cubism Animator Controller {(i + 1)}.controller";
if (files[i].ToLower().EndsWith(name, StringComparison.OrdinalIgnoreCase))
{
continue;
}
assetName = name;
break;
}
if (string.IsNullOrEmpty(assetName))
{
assetName = $"New Cubism Animator Controller {(files.Length + 1)}.controller";
}
}
assetPath = Path.Combine(assetPath, assetName);
CubismFadeMotionImporter.CreateAnimatorController(assetPath);
AssetDatabase.Refresh();
}
///
/// Set import as original workflow.
///
public static void SetImportAsOriginalWorkflow(bool isEnable)
{
ShouldImportAsOriginalWorkflow= isEnable;
Menu.SetChecked ("Live2D/Cubism/OriginalWorkflow/Should Import As Original Workflow", ShouldImportAsOriginalWorkflow);
}
///
/// Set clear animation curves.
///
public static void SetClearAnimationCurves(bool isEnable)
{
ShouldClearAnimationCurves= (ShouldImportAsOriginalWorkflow && isEnable);
Menu.SetChecked ("Live2D/Cubism/OriginalWorkflow/Should Clear Animation Curves", ShouldClearAnimationCurves);
}
///
/// Initialize cubism menu.
///
[InitializeOnLoadMethod]
private static void Initialize()
{
EditorApplication.delayCall += () => Menu.SetChecked ("Live2D/Cubism/OriginalWorkflow/Should Import As Original Workflow", ShouldImportAsOriginalWorkflow);
EditorApplication.delayCall += () => Menu.SetChecked ("Live2D/Cubism/OriginalWorkflow/Should Clear Animation Curves", ShouldClearAnimationCurves);
}
}
}