Skip to content

Commit

Permalink
feat: UserLogic ロジックオブジェクトのインスペクターにSkinParts上の表示サンプルが出る機能を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
pspkurara committed Sep 9, 2020
1 parent dd5adad commit 4cc0254
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
1 change: 1 addition & 0 deletions Packages/uGUI-Skinner/Editor/EditorConst.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public static class EditorConst
public const string MissingSkinPartsInspectorTypeMessage = "Inspector for \" {0} \" not found.\nPlease check if it is registered correctly";
public const MessageType MissingSkinPartsInspectorTypeMessageType = MessageType.Warning;

public static readonly GUIContent UserLogicSampleTitle = new GUIContent("Skin Parts Inspector Sample");

public static readonly GUILayoutOption SkinSelectArrowMaxWidth = GUILayout.MaxWidth(50);
public static readonly GUILayoutOption SkinAddOrRemoveButtonMaxWidth = GUILayout.MaxWidth(150);
Expand Down
122 changes: 122 additions & 0 deletions Packages/uGUI-Skinner/Editor/UserLogicInspector.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Reflection;
using System.Linq;

namespace Pspkurara.UI.Skinner
{

[CanEditMultipleObjects]
[CustomEditor(typeof(UserLogic),true)]
internal sealed class UserLogicInspector : Editor
{

#region クラス

/// <summary>
/// ユーザーロジックのサンプルを描画するためのダミーデータ
/// </summary>
private sealed class DummyDataObject : ScriptableObject
{

/// <summary>
/// サンプルユーザーロジック用のダミープロパティ
/// </summary>
public SkinPartsPropertry dummyProperty = new SkinPartsPropertry();

}

#endregion

#region プロパティや変数

private EditorSkinPartsPropertry dummyEditorSkinPartsProperty = new EditorSkinPartsPropertry();

private SerializedProperty dummyProperty { get; set; }

private DummyDataObject dummyData = null;

#endregion

#region メソッド

private void OnEnable()
{
// サンプル用にダミーオブジェクトを作っておく
if (!dummyData)
{
dummyData = CreateInstance<DummyDataObject>();
dummyData.hideFlags = HideFlags.HideAndDontSave;
}
ReloadDummyData(target);
}

private void OnDisable()
{
// 終わったら破棄
if (dummyData)
{
DestroyImmediate(dummyData);
}
dummyProperty.serializedObject.Dispose();
dummyProperty = null;
}

private void ReloadDummyData(Object target)
{
if (dummyData.dummyProperty.objectReferenceValues.Count > ScriptableLogic.RequiredObjectLength &&
dummyData.dummyProperty.objectReferenceValues[ScriptableLogic.LogicIndex] == target)
{
return;
}
if (dummyProperty != null)
{
dummyProperty.serializedObject.Dispose();
}
dummyData.dummyProperty.Clear();
dummyData.dummyProperty.objectReferenceValues.Add(target);
EditorUtility.SetDirty(dummyData);
SerializedObject self = new SerializedObject(dummyData);
dummyProperty = self.FindProperty("dummyProperty");
}

public override void OnInspectorGUI()
{
base.OnInspectorGUI();
SkinnerEditorUtility.DrawLine();
EditorGUILayout.LabelField(EditorConst.UserLogicSampleTitle);
SkinnerEditorUtility.DrawLine();

UserLogic drawTarget = serializedObject.targetObject as UserLogic;

ReloadDummyData(drawTarget);

var scriptableLogic = SkinPartsInspectorAccess.GetSkinInspector(typeof(ScriptableLogic));

// ダミーデータをマッピングする
dummyProperty.serializedObject.Update();
dummyEditorSkinPartsProperty.MapProperties(dummyProperty);

GUI.enabled = false;

// ダミーデータを描画
UserLogicExtension.SetActiveUserLogic(drawTarget);
scriptableLogic.CleanupFields(dummyEditorSkinPartsProperty);
scriptableLogic.DrawInspector(dummyEditorSkinPartsProperty);
UserLogicExtension.ReleaseActiveUserLogic();

GUI.enabled = true;

// ダミーデータを更新
dummyProperty.serializedObject.ApplyModifiedPropertiesWithoutUndo();

SkinnerEditorUtility.DrawLine();
}

#endregion

}

}

11 changes: 11 additions & 0 deletions Packages/uGUI-Skinner/Editor/UserLogicInspector.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 4cc0254

Please sign in to comment.