private static bool DoDisplayAnimationClipHeader(Uni2DAnimationClip a_rAnimationClip, Uni2DAnimationPlayer a_rAnimationPreviewPlayer, out AnimationGUIAction a_eAction, bool a_bCompactMode, bool a_bFolded, int iClipIndex = -1) { a_eAction = AnimationGUIAction.None; ///// Clip header ///// EditorGUILayout.BeginVertical(EditorStyles.textField); { if (a_bCompactMode) { ///// Top toolbar ///// EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); { // ^ if (GUILayout.Button("\u25B2" /*"\u2191"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { a_eAction = AnimationGUIAction.MoveUp; } // v if (GUILayout.Button("\u25BC" /*"\u2193"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { a_eAction = AnimationGUIAction.MoveDown; } if (iClipIndex > -1) { if (GUILayout.Button("Clip #" + iClipIndex, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true))) { EditorGUIUtility.PingObject(a_rAnimationClip.gameObject); } } else { GUILayout.FlexibleSpace( ); } // X if (GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { a_eAction = AnimationGUIAction.Close; } } EditorGUILayout.EndHorizontal( ); } /////////////// EditorGUILayout.Space( ); EditorGUILayout.BeginHorizontal( ); { Rect oClipTextureRect = GUILayoutUtility.GetRect(64.0f, 64.0f, 64.0f, 64.0f, GUILayout.ExpandWidth(false)); // Animation clip preview Uni2DEditorGUIUtils.DrawAnimationClipPreview(oClipTextureRect, a_rAnimationClip, a_rAnimationPreviewPlayer); // Clip settings EditorGUILayout.BeginVertical( ); { //string rName; float fFrameRate; Uni2DAnimationClip.WrapMode eWrapMode; // Name //rName = EditorGUILayout.TextField( "Clip Name", a_rAnimationClip.name ); EditorGUILayout.LabelField(a_rAnimationClip.name, EditorStyles.boldLabel); EditorGUI.BeginChangeCheck( ); { EditorGUI.BeginChangeCheck( ); { // Frame rate fFrameRate = EditorGUILayout.FloatField("Frame Rate", a_rAnimationClip.frameRate); // Wrap mode eWrapMode = (Uni2DAnimationClip.WrapMode)EditorGUILayout.EnumPopup("Wrap Mode", a_rAnimationClip.wrapMode); } if (EditorGUI.EndChangeCheck( )) { // Update animation players settings a_rAnimationPreviewPlayer.FrameRate = fFrameRate; a_rAnimationPreviewPlayer.WrapMode = eWrapMode; } } if (EditorGUI.EndChangeCheck( )) { //a_rAnimationClip.name = rName; a_rAnimationClip.frameRate = fFrameRate; a_rAnimationClip.wrapMode = eWrapMode; if (a_bCompactMode) { a_rAnimationClip.ApplySettings(Uni2DAnimationClip.AnimationClipRegeneration.RegenerateNothing); } EditorUtility.SetDirty(a_rAnimationClip); } // Clip length infos // TODO: refactor with AnimationPlayer int iClipFrameCount = a_rAnimationClip.FrameCount; int iWrappedFrameCount = iClipFrameCount; if (a_rAnimationClip.wrapMode == Uni2DAnimationClip.WrapMode.PingPong && iWrappedFrameCount > 2) { iWrappedFrameCount = (iWrappedFrameCount * 2 - 2); } float fClipLength = Mathf.Abs(iWrappedFrameCount / a_rAnimationClip.frameRate); EditorGUILayout.BeginHorizontal( ); { EditorGUILayout.LabelField(iClipFrameCount + " frame(s) = " + (iClipFrameCount != iWrappedFrameCount ? (iWrappedFrameCount + " wrapped frame(s) = ") : null ) + fClipLength + " sec. @ " + a_rAnimationClip.frameRate + " FPS", EditorStyles.miniLabel, GUILayout.ExpandWidth(false)); if (a_bCompactMode && GUILayout.Button("Edit", EditorStyles.miniButton, GUILayout.ExpandWidth(true))) { Selection.activeObject = a_rAnimationClip; } } EditorGUILayout.EndHorizontal( ); } EditorGUILayout.EndVertical( ); } EditorGUILayout.EndHorizontal( ); // Frame foldout if (!a_bCompactMode) { EditorGUILayout.BeginHorizontal( ); { a_bFolded = EditorGUILayout.Foldout(a_bFolded, GUIContent.none); } EditorGUILayout.EndHorizontal( ); } else { EditorGUILayout.Space( ); } } EditorGUILayout.EndVertical( ); return(a_bFolded); }
// Displays the animation frame GUI // Returns the performed user action public static AnimationGUIAction DisplayAnimationFrame(Uni2DAnimationFrame a_rAnimationFrame, Uni2DTextureAtlas a_rGlobalAtlas, ref bool a_bEventFoldout) { AnimationGUIAction eAction = AnimationGUIAction.None; // Box EditorGUILayout.BeginVertical(EditorStyles.textField); { ///// Top toolbar ///// EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); { // ^ if (GUILayout.Button("\u25B2" /*"\u2191"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { eAction = AnimationGUIAction.MoveUp; } // v if (GUILayout.Button("\u25BC" /*"\u2193"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { eAction = AnimationGUIAction.MoveDown; } // + ^ if (GUILayout.Button("+ \u25B2" /*"+ \u2191"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true))) { eAction = AnimationGUIAction.AddUp; } // X if (GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { eAction = AnimationGUIAction.Close; } } EditorGUILayout.EndHorizontal( ); /////////////// EditorGUILayout.Space( ); ///// Animation Frame box ///// EditorGUILayout.BeginHorizontal( ); { Texture2D rFrameTexture = a_rAnimationFrame.textureContainer; string rFrameTextureGUID = a_rAnimationFrame.textureContainer.GUID; bool bHasFrameTextureChanged; // Display frame texture on the left Rect oClipTextureRect = GUILayoutUtility.GetRect(64.0f, 64.0f, 64.0f, 64.0f, GUILayout.ExpandWidth(false)); EditorGUI.BeginChangeCheck( ); { rFrameTexture = (Texture2D)EditorGUI.ObjectField(oClipTextureRect, GUIContent.none, rFrameTexture, typeof(Texture2D), false); } bHasFrameTextureChanged = EditorGUI.EndChangeCheck( ); EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true)); { // Frame texture name GUILayout.Label(rFrameTexture != null ? rFrameTexture.name : "(No Texture)", EditorStyles.boldLabel, GUILayout.ExpandWidth(false)); // Frame Name a_rAnimationFrame.name = EditorGUILayout.TextField("Frame Name", a_rAnimationFrame.name); // Frame atlas EditorGUILayout.BeginHorizontal( ); { // Disable popup menu if global atlas is set EditorGUI.BeginDisabledGroup(a_rGlobalAtlas != null); { // Atlas popup string[] oTextureGUID = (rFrameTexture != null) ? new string[1] { rFrameTextureGUID } : new string[0]; EditorGUILayout.PrefixLabel("Use Atlas"); a_rAnimationFrame.atlas = Uni2DEditorGUIUtils.AtlasPopup(a_rAnimationFrame.atlas, oTextureGUID); } EditorGUI.EndDisabledGroup( ); // Atlas select button EditorGUI.BeginDisabledGroup(a_rAnimationFrame.atlas == null); { if (GUILayout.Button("Select", GUILayout.Width(80.0f))) { EditorGUIUtility.PingObject(a_rAnimationFrame.atlas.gameObject); } } EditorGUI.EndDisabledGroup( ); } EditorGUILayout.EndHorizontal( ); // Trigger? a_rAnimationFrame.triggerEvent = EditorGUILayout.Toggle("Trigger Event", a_rAnimationFrame.triggerEvent); // Event param a_bEventFoldout = EditorGUILayout.Foldout(a_bEventFoldout, "Frame Infos"); if (a_bEventFoldout) { Uni2DAnimationFrameInfos rFrameInfos = a_rAnimationFrame.frameInfos; ++EditorGUI.indentLevel; { rFrameInfos.stringInfo = EditorGUILayout.TextField("String Info", rFrameInfos.stringInfo); rFrameInfos.intInfo = EditorGUILayout.IntField("Int Info", rFrameInfos.intInfo); rFrameInfos.floatInfo = EditorGUILayout.FloatField("Float Info", rFrameInfos.floatInfo); rFrameInfos.objectInfo = EditorGUILayout.ObjectField("Object Info", rFrameInfos.objectInfo, typeof(Object), true); } --EditorGUI.indentLevel; } EditorGUILayout.Space( ); } EditorGUILayout.EndVertical( ); if (bHasFrameTextureChanged) { // Save texture in texture container, keep reference to the asset if not using an atlas a_rAnimationFrame.textureContainer = new Texture2DContainer(rFrameTexture, a_rGlobalAtlas == null); } } EditorGUILayout.EndHorizontal( ); /////////////// EditorGUILayout.Space( ); ///// Bottom toolbar ///// EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true)); { // + v if (GUILayout.Button("+ \u25BC" /*"+ \u2193"*/, EditorStyles.toolbarButton, GUILayout.ExpandWidth(true))) { eAction = AnimationGUIAction.AddDown; } } EditorGUILayout.EndHorizontal( ); } EditorGUILayout.EndVertical( ); return(eAction); }