IndieGame/client/Assets/Plugins/Easy Save 3/Editor/ES3PlayMakerEditor.cs

804 lines
18 KiB
C#
Raw Normal View History

2024-10-11 10:12:15 +08:00
#if PLAYMAKER_1_8_OR_NEWER
using UnityEngine;
using UnityEditor;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using HutongGames.PlayMakerEditor;
using System.Text.RegularExpressions;
namespace ES3PlayMaker
{
#region Base Actions
public abstract class BaseEditor : CustomActionEditor
{
bool showErrorHandling = false;
public abstract void DrawGUI();
public override bool OnGUI()
{
DrawGUI();
EditorGUILayout.Separator();
showErrorHandling = EditorGUILayout.Foldout(showErrorHandling, "Error Handling");
if (showErrorHandling)
{
EditorGUI.indentLevel++;
EditField("errorEvent");
EditField("errorMessage");
EditorGUI.indentLevel--;
}
return GUI.changed;
}
// Displays the FsmVar field without the unnecessary Type field.
protected void FsmVarField(string fieldName)
{
if (target == null || target.State == null)
return;
var fsmVar = (FsmVar)ES3Internal.ES3Reflection.GetField(target.GetType(), fieldName).GetValue(target);
if (fsmVar == null)
{
fsmVar = new FsmVar();
ES3Internal.ES3Reflection.GetField(target.GetType(), fieldName).SetValue(target, fsmVar);
}
EditorGUILayout.BeginHorizontal();
var label = Regex.Replace(fieldName, @"\p{Lu}", m => " " + m.Value.ToLowerInvariant());
EditorGUILayout.PrefixLabel(char.ToUpperInvariant(label[0]) + label.Substring(1));
var localVariables = target.Fsm.Variables.GetAllNamedVariablesSorted();
var globalVariables = FsmVariables.GlobalVariables.GetAllNamedVariablesSorted();
var variableNames = new string[localVariables.Length + globalVariables.Length];
int selected = -1;
for(int i=0; i<variableNames.Length; i++)
{
var variable = i >= localVariables.Length ? globalVariables[i - localVariables.Length] : localVariables[i];
variableNames[i] = i >= localVariables.Length ? "Globals/"+variable.Name : variable.Name;
if (fsmVar.NamedVar == variable)
selected = i;
}
var newSelected = EditorGUILayout.Popup(selected, variableNames);
EditorGUILayout.EndHorizontal();
if (newSelected == -1)
return;
if (selected != newSelected)
{
if (newSelected >= localVariables.Length)
fsmVar.NamedVar = globalVariables[newSelected - localVariables.Length];
else
fsmVar.NamedVar = localVariables[newSelected];
}
}
}
public abstract class SettingsEditor : BaseEditor
{
public override bool OnGUI()
{
base.OnGUI();
return DrawSettingsEditor();
}
public bool DrawSettingsEditor()
{
var action = target as ES3PlayMaker.SettingsAction;
if (action == null)
return false;
action.overrideDefaultSettings.Value = EditorGUILayout.ToggleLeft("Override Default Settings", action.overrideDefaultSettings.Value);
if (action.overrideDefaultSettings.Value)
{
EditorGUI.indentLevel++;
EditField("path");
EditField("location");
EditField("encryptionType");
EditField("encryptionPassword");
EditField("compressionType");
EditField("directory");
EditField("format");
EditField("bufferSize");
EditorGUI.indentLevel--;
EditorGUILayout.Space();
}
return GUI.changed;
}
}
public abstract class KeyValueSettingsEditor : SettingsEditor
{
public override bool OnGUI()
{
EditField("key");
EditField("value");
base.OnGUI();
return GUI.changed;
}
public override void DrawGUI(){}
}
public abstract class ES3FileActionEditor : BaseEditor
{
public override bool OnGUI()
{
EditField("fsmES3File");
base.OnGUI();
var action = target as ES3PlayMaker.ES3FileAction;
if (action == null)
return false;
return GUI.changed;
}
}
#endregion
#if !PLAYMAKER_1_9_OR_NEWER
#region Save Actions
/*[CustomActionEditor(typeof(ES3PlayMaker.Save))]
public class SaveEditor : KeyValueSettingsEditor{}*/
/*[CustomActionEditor(typeof(ES3PlayMaker.SaveMultiple))]
public class SaveMultipleEditor : SettingsEditor
{
public override bool OnGUI()
{
return base.OnGUI();
}
public override void DrawGUI()
{
DrawDefaultInspector();
}
}*/
[CustomActionEditor(typeof(ES3PlayMaker.SaveAll))]
public class SaveAllEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("key");
EditField("saveFsmVariables");
EditField("saveGlobalVariables");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.SaveRaw))]
public class SaveRawEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("str");
EditField("useBase64Encoding");
EditField("appendNewline");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.AppendRaw))]
public class AppendRawEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("str");
EditField("useBase64Encoding");
EditField("appendNewline");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.SaveImage))]
public class SaveImageEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("imagePath");
EditField("texture2D");
EditField("quality");
}
}
#endregion
#region Load Actions
[CustomActionEditor(typeof(ES3PlayMaker.Load))]
public class LoadEditor : KeyValueSettingsEditor
{
public override void DrawGUI()
{
EditorGUILayout.Space();
EditField("defaultValue");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.LoadInto))]
public class LoadIntoEditor : KeyValueSettingsEditor{}
[CustomActionEditor(typeof(ES3PlayMaker.LoadAll))]
public class LoadAllEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("key");
EditField("loadFsmVariables");
EditField("loadGlobalVariables");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.LoadAudio))]
public class LoadAudioEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("audioFilePath");
EditField("audioClip");
#if UNITY_2018_3_OR_NEWER
EditField("audioType");
#endif
}
}
[CustomActionEditor(typeof(ES3PlayMaker.LoadImage))]
public class LoadImageEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("imagePath");
EditField("texture2D");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.LoadRawString))]
public class LoadRawStringEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("str");
EditField("useBase64Encoding");
}
}
#endregion
#region Exists Actions
[CustomActionEditor(typeof(ES3PlayMaker.KeyExists))]
public class KeyExistsEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("key");
EditField("exists");
EditorGUILayout.Separator();
EditField("existsEvent");
EditField("doesNotExistEvent");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.FileExists))]
public class FileExistsEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
EditField("exists");
EditorGUILayout.Separator();
EditField("existsEvent");
EditField("doesNotExistEvent");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.DirectoryExists))]
public class DirectoryExistsEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("directoryPath");
EditField("exists");
EditorGUILayout.Separator();
EditField("existsEvent");
EditField("doesNotExistEvent");
}
}
#endregion
#region Delete Actions
[CustomActionEditor(typeof(ES3PlayMaker.DeleteKey))]
public class DeleteKeyEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("key");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.DeleteFile))]
public class DeleteFileEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.DeleteDirectory))]
public class DeleteDirectoryEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("directoryPath");
}
}
#endregion
#region Backup Actions
[CustomActionEditor(typeof(ES3PlayMaker.CreateBackup))]
public class CreateBackupEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.RestoreBackup))]
public class RestoreBackupEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
EditField("backupWasRestored");
}
}
#endregion
#region Key, File and Directory methods
[CustomActionEditor(typeof(ES3PlayMaker.RenameFile))]
public class RenameFileEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("oldFilePath");
EditField("newFilePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.CopyFile))]
public class CopyFileEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("oldFilePath");
EditField("newFilePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.CopyDirectory))]
public class CopyDirectoryEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("oldDirectoryPath");
EditField("newDirectoryPath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.GetKeys))]
public class GetKeysEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
EditField("keys");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.GetKeyCount))]
public class GetKeyCountEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
EditField("keyCount");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.GetFiles))]
public class GetFilesEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("directoryPath");
EditField("files");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.GetDirectories))]
public class GetDirectoriesEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("directoryPath");
EditField("directories");
}
}
#endregion
#region ES3File Actions
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileCreate))]
public class ES3FileCreateEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
EditField("filePath");
EditField("syncWithFile");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileSync))]
public class ES3FileSyncEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
}
}
/*[CustomActionEditor(typeof(ES3PlayMaker.ES3FileSave))]
public class ES3FileSaveEditor : SaveEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
base.DrawGUI();
}
}*/
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileLoad))]
public class ES3FileLoadEditor : LoadEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
base.DrawGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileLoadInto))]
public class ES3FileLoadIntoEditor : LoadIntoEditor
{
public override void DrawGUI()
{
base.DrawGUI();
EditField("fsmES3File");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileDeleteKey))]
public class ES3FileDeleteKeyEditor : DeleteKeyEditor
{
public override void DrawGUI()
{
base.DrawGUI();
EditField("fsmES3File");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileKeyExists))]
public class ES3FileKeyExistsEditor : KeyExistsEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
base.DrawGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileGetKeys))]
public class ES3FileGetKeysEditor : ES3FileActionEditor
{
public override void DrawGUI()
{
EditField("keys");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileClear))]
public class ES3FileClearEditor : BaseEditor
{
public override void DrawGUI()
{
EditField("fsmES3File");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3FileSize))]
public class ES3FileSizeEditor : BaseEditor
{
public override void DrawGUI()
{
EditField("size");
EditField("fsmES3File");
}
}
#endregion
#region ES3Cloud Actions
#if !DISABLE_WEB
public abstract class ES3CloudEditor : SettingsEditor
{
protected abstract void DrawChildGUI();
public override void DrawGUI()
{
EditField("url");
EditField("apiKey");
EditorGUILayout.Space();
DrawChildGUI();
EditorGUILayout.Space();
EditField("errorCode");
}
}
public abstract class ES3CloudUserEditor : ES3CloudEditor
{
public bool showUser = false;
protected override void DrawChildGUI()
{
if((showUser = EditorGUILayout.Foldout(showUser, "User (optional)")))
{
EditorGUI.indentLevel++;
EditField("user");
EditField("password");
EditorGUI.indentLevel--;
}
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudSync))]
public class ES3CloudSyncEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadFile))]
public class ES3CloudDownloadFileEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadES3File))]
public class ES3CloudDownloadES3FileEditor : BaseEditor
{
public bool showUser = false;
public override void DrawGUI()
{
EditField("fsmES3File");
EditField("url");
EditField("apiKey");
EditField("errorCode");
if ((showUser = EditorGUILayout.Foldout(showUser, "User (optional)")))
{
EditorGUI.indentLevel++;
EditField("user");
EditField("password");
EditorGUI.indentLevel--;
}
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudUploadFile))]
public class ES3CloudUploadFileEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudUploadES3File))]
public class ES3CloudUploadES3FileEditor : BaseEditor
{
public bool showUser = false;
public override void DrawGUI()
{
EditField("fsmES3File");
EditField("url");
EditField("apiKey");
EditField("errorCode");
if((showUser = EditorGUILayout.Foldout(showUser, "User (optional)")))
{
EditorGUI.indentLevel++;
EditField("user");
EditField("password");
EditorGUI.indentLevel--;
}
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDeleteFile))]
public class ES3CloudDeleteFileEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudRenameFile))]
public class ES3CloudRenameFileEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
EditField("newFilename");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadFilenames))]
public class ES3CloudDownloadFilenamesEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("filenames");
EditField("searchPattern");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudSearchFilenames))]
public class ES3CloudSearchFilenamesEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("filenames");
EditField("searchPattern");
base.DrawChildGUI();
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3CloudDownloadTimestamp))]
public class ES3CloudDownloadTimestampEditor : ES3CloudUserEditor
{
protected override void DrawChildGUI()
{
EditField("path");
EditField("timestamp");
base.DrawChildGUI();
}
}
#endif
#endregion
#region ES3SpreadsheetActions
[CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetCreate))]
public class ES3SpreadsheetCreateEditor : BaseEditor
{
public override void DrawGUI()
{
EditField("fsmES3Spreadsheet");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetSetCell))]
public class ES3SpreadsheetSetCellEditor : BaseEditor
{
public override void DrawGUI()
{
EditField("fsmES3Spreadsheet");
EditField("col");
EditField("row");
EditField("value");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetGetCell))]
public class ES3SpreadsheetGetCellEditor : BaseEditor
{
public override void DrawGUI()
{
EditField("fsmES3Spreadsheet");
EditField("col");
EditField("row");
EditField("value");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetLoad))]
public class ES3SpreadsheetLoadEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("fsmES3Spreadsheet");
EditField("filePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.ES3SpreadsheetSave))]
public class ES3SpreadsheetSaveEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("fsmES3Spreadsheet");
EditField("filePath");
EditField("append");
}
}
#endregion
#region Caching
[CustomActionEditor(typeof(ES3PlayMaker.CacheFile))]
public class CacheFileEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
}
}
[CustomActionEditor(typeof(ES3PlayMaker.StoreCachedFile))]
public class StoreCachedFileEditor : SettingsEditor
{
public override void DrawGUI()
{
EditField("filePath");
}
}
#endregion
#endif
}
#endif