123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- using System;
- using UnityEditor.U2D.Common;
- using UnityEditor.U2D.Layout;
- using UnityEngine;
- using UnityEditor.ShortcutManagement;
- using UnityEngine.UIElements;
- namespace UnityEditor.U2D.Animation
- {
- internal partial class SkinningModule
- {
- private LayoutOverlay m_LayoutOverlay;
- private BoneToolbar m_BoneToolbar;
- private MeshToolbar m_MeshToolbar;
- private WeightToolbar m_WeightToolbar;
- private InternalEditorBridge.ShortcutContext m_ShortcutContext;
- private static SkinningModule GetModuleFromContext(ShortcutArguments args)
- {
- var sc = args.context as InternalEditorBridge.ShortcutContext;
- if (sc == null)
- return null;
- return sc.context as SkinningModule;
- }
- [Shortcut("2D/Animation/Toggle Tool Text", typeof(InternalEditorBridge.ShortcutContext), KeyCode.BackQuote, ShortcutModifiers.Shift)]
- private static void CollapseToolbar(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null)
- {
- SkinningModuleSettings.compactToolBar = !SkinningModuleSettings.compactToolBar;
- }
- }
- [Shortcut("2D/Animation/Restore Bind Pose", typeof(InternalEditorBridge.ShortcutContext), KeyCode.Alpha1, ShortcutModifiers.Shift)]
- private static void DisablePoseModeKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- var effectiveSkeleton = sm.skinningCache.GetEffectiveSkeleton(sm.skinningCache.selectedSprite);
- if (effectiveSkeleton != null && effectiveSkeleton.isPosePreview)
- {
- using (sm.skinningCache.UndoScope(TextContent.restorePose))
- {
- sm.skinningCache.RestoreBindPose();
- sm.skinningCache.events.shortcut.Invoke("#1");
- }
- }
- }
- }
- [Shortcut("2D/Animation/Toggle Character Mode", typeof(InternalEditorBridge.ShortcutContext), KeyCode.Alpha2, ShortcutModifiers.Shift)]
- private static void ToggleCharacterModeKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled && sm.skinningCache.hasCharacter)
- {
- var tool = sm.skinningCache.GetTool(Tools.SwitchMode);
- using (sm.skinningCache.UndoScope(TextContent.setMode))
- {
- if (tool.isActive)
- tool.Deactivate();
- else
- tool.Activate();
- }
- sm.skinningCache.events.shortcut.Invoke("#2");
- }
- }
- [Shortcut("2D/Animation/Preview Pose", typeof(InternalEditorBridge.ShortcutContext), KeyCode.Q, ShortcutModifiers.Shift)]
- private static void EditPoseKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetSkeletonTool(Tools.EditPose);
- sm.skinningCache.events.shortcut.Invoke("#q");
- }
- }
- [Shortcut("2D/Animation/Edit Bone", typeof(InternalEditorBridge.ShortcutContext), KeyCode.W, ShortcutModifiers.Shift)]
- private static void EditJointsKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetSkeletonTool(Tools.EditJoints);
- sm.skinningCache.events.shortcut.Invoke("#w");
- }
- }
- [Shortcut("2D/Animation/Create Bone", typeof(InternalEditorBridge.ShortcutContext), KeyCode.E, ShortcutModifiers.Shift)]
- private static void CreateBoneKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetSkeletonTool(Tools.CreateBone);
- sm.skinningCache.events.shortcut.Invoke("#e");
- }
- }
- [Shortcut("2D/Animation/Split Bone", typeof(InternalEditorBridge.ShortcutContext), KeyCode.R, ShortcutModifiers.Shift)]
- private static void SplitBoneKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetSkeletonTool(Tools.SplitBone);
- sm.skinningCache.events.shortcut.Invoke("#r");
- }
- }
- [Shortcut("2D/Animation/Auto Geometry", typeof(InternalEditorBridge.ShortcutContext), KeyCode.A, ShortcutModifiers.Shift)]
- private static void GenerateGeometryKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetMeshTool(Tools.GenerateGeometry);
- sm.skinningCache.events.shortcut.Invoke("#a");
- }
- }
- [Shortcut("2D/Animation/Edit Geometry", typeof(InternalEditorBridge.ShortcutContext), KeyCode.S, ShortcutModifiers.Shift)]
- private static void MeshSelectionKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetMeshTool(Tools.EditGeometry);
- sm.skinningCache.events.shortcut.Invoke("#s");
- }
- }
- [Shortcut("2D/Animation/Create Vertex", typeof(InternalEditorBridge.ShortcutContext), KeyCode.J, ShortcutModifiers.Shift)]
- private static void CreateVertex(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetMeshTool(Tools.CreateVertex);
- sm.skinningCache.events.shortcut.Invoke("#d");
- }
- }
- [Shortcut("2D/Animation/Create Edge", typeof(InternalEditorBridge.ShortcutContext), KeyCode.G, ShortcutModifiers.Shift)]
- private static void CreateEdgeKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetMeshTool(Tools.CreateEdge);
- sm.skinningCache.events.shortcut.Invoke("#g");
- }
- }
- [Shortcut("2D/Animation/Split Edge", typeof(InternalEditorBridge.ShortcutContext), KeyCode.H, ShortcutModifiers.Shift)]
- private static void SplitEdge(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetMeshTool(Tools.SplitEdge);
- sm.skinningCache.events.shortcut.Invoke("#h");
- }
- }
- [Shortcut("2D/Animation/Auto Weights", typeof(InternalEditorBridge.ShortcutContext), KeyCode.Z, ShortcutModifiers.Shift)]
- private static void GenerateWeightsKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetWeightTool(Tools.GenerateWeights);
- sm.skinningCache.events.shortcut.Invoke("#z");
- }
- }
- [Shortcut("2D/Animation/Weight Slider", typeof(InternalEditorBridge.ShortcutContext), KeyCode.X, ShortcutModifiers.Shift)]
- private static void WeightSliderKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetWeightTool(Tools.WeightSlider);
- sm.skinningCache.events.shortcut.Invoke("#x");
- }
- }
- [Shortcut("2D/Animation/Weight Brush", typeof(InternalEditorBridge.ShortcutContext), KeyCode.N, ShortcutModifiers.Shift)]
- private static void WeightBrushKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.SetWeightTool(Tools.WeightBrush);
- sm.skinningCache.events.shortcut.Invoke("#c");
- }
- }
- [Shortcut("2D/Animation/Bone Influence", typeof(InternalEditorBridge.ShortcutContext), KeyCode.V, ShortcutModifiers.Shift)]
- private static void BoneInfluenceKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled && sm.skinningCache.mode == SkinningMode.Character)
- {
- sm.SetWeightTool(Tools.BoneInfluence);
- sm.skinningCache.events.shortcut.Invoke("#v");
- }
- }
- [Shortcut("2D/Animation/Paste Panel Weights", typeof(InternalEditorBridge.ShortcutContext), KeyCode.B, ShortcutModifiers.Shift)]
- private static void PastePanelKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.m_HorizontalToggleTools.TogglePasteTool(sm.currentTool);
- sm.skinningCache.events.shortcut.Invoke("#b");
- }
- }
- [Shortcut("2D/Animation/Visibility Panel", typeof(InternalEditorBridge.ShortcutContext), KeyCode.P, ShortcutModifiers.Shift)]
- private static void VisibilityPanelKey(ShortcutArguments args)
- {
- var sm = GetModuleFromContext(args);
- if (sm != null && !sm.spriteEditor.editingDisabled)
- {
- sm.m_HorizontalToggleTools.ToggleVisibilityTool(sm.currentTool);
- sm.skinningCache.events.shortcut.Invoke("#p");
- }
- }
- private void AddMainUI(VisualElement mainView)
- {
- var visualTree = ResourceLoader.Load<VisualTreeAsset>("LayoutOverlay/LayoutOverlay.uxml");
- VisualElement clone = visualTree.CloneTree();
- m_LayoutOverlay = clone.Q<LayoutOverlay>("LayoutOverlay");
- mainView.Add(m_LayoutOverlay);
- m_LayoutOverlay.hasScrollbar = true;
- m_LayoutOverlay.StretchToParentSize();
- CreateBoneToolbar();
- CreateMeshToolbar();
- CreateWeightToolbar();
- m_ShortcutContext = new InternalEditorBridge.ShortcutContext()
- {
- isActive = isFocused,
- context = this
- };
- InternalEditorBridge.RegisterShortcutContext(m_ShortcutContext);
- InternalEditorBridge.AddEditorApplicationProjectLoadedCallback(OnProjectLoaded);
- }
- private void OnProjectLoaded()
- {
- if (m_ShortcutContext != null)
- InternalEditorBridge.RegisterShortcutContext(m_ShortcutContext);
- }
-
- private void DoViewGUI()
- {
- if (spriteEditor.editingDisabled == m_BoneToolbar.enabledSelf)
- {
- m_BoneToolbar.SetEnabled(!spriteEditor.editingDisabled);
- m_MeshToolbar.SetEnabled(!spriteEditor.editingDisabled);
- m_WeightToolbar.SetEnabled(!spriteEditor.editingDisabled);
- }
- if (spriteEditor.editingDisabled == m_LayoutOverlay.rightOverlay.enabledSelf)
- {
- m_LayoutOverlay.rightOverlay.SetEnabled(!spriteEditor.editingDisabled);
- m_LayoutOverlay.rightOverlay.visible = !spriteEditor.editingDisabled;
- }
- }
- private bool isFocused()
- {
- return spriteEditor != null && (EditorWindow.focusedWindow == spriteEditor as EditorWindow);
- }
- private void CreateBoneToolbar()
- {
- m_BoneToolbar = BoneToolbar.GenerateFromUXML();
- m_BoneToolbar.Setup(skinningCache);
- m_LayoutOverlay.verticalToolbar.AddToContainer(m_BoneToolbar);
- m_BoneToolbar.SetSkeletonTool += SetSkeletonTool;
- m_BoneToolbar.SetEnabled(!spriteEditor.editingDisabled);
- }
- private void CreateMeshToolbar()
- {
- m_MeshToolbar = MeshToolbar.GenerateFromUXML();
- m_MeshToolbar.skinningCache = skinningCache;
- m_LayoutOverlay.verticalToolbar.AddToContainer(m_MeshToolbar);
- m_MeshToolbar.SetMeshTool += SetMeshTool;
- m_MeshToolbar.SetEnabled(!spriteEditor.editingDisabled);
- }
- private void CreateWeightToolbar()
- {
- m_WeightToolbar = WeightToolbar.GenerateFromUXML();
- m_WeightToolbar.skinningCache = skinningCache;
- m_LayoutOverlay.verticalToolbar.AddToContainer(m_WeightToolbar);
- m_WeightToolbar.SetWeightTool += SetWeightTool;
- m_WeightToolbar.SetEnabled(!spriteEditor.editingDisabled);
- }
- private void SetSkeletonTool(Tools toolType)
- {
- var tool = skinningCache.GetTool(toolType) as SkeletonToolWrapper;
- if (currentTool == tool)
- return;
- using (skinningCache.UndoScope(TextContent.setTool))
- {
- ActivateTool(tool);
- if (tool.editBindPose)
- skinningCache.RestoreBindPose();
- }
- }
- private void SetMeshTool(Tools toolType)
- {
- var tool = skinningCache.GetTool(toolType);
- if (currentTool == tool)
- return;
- using (skinningCache.UndoScope(TextContent.setTool))
- {
- ActivateTool(tool);
- skinningCache.RestoreBindPose();
- UnselectBones();
- }
- }
- private void SetWeightTool(Tools toolType)
- {
- var tool = skinningCache.GetTool(toolType);
- if (currentTool == tool)
- return;
- using (skinningCache.UndoScope(TextContent.setTool))
- {
- ActivateTool(tool);
- }
- }
- private void ActivateTool(BaseTool tool)
- {
- m_ModuleToolGroup.ActivateTool(tool);
- UpdateToggleState();
- skinningCache.events.toolChanged.Invoke(tool);
- }
- private void UnselectBones()
- {
- skinningCache.skeletonSelection.Clear();
- skinningCache.events.boneSelectionChanged.Invoke();
- }
- private void UpdateToggleState()
- {
- Debug.Assert(m_BoneToolbar != null);
- Debug.Assert(m_MeshToolbar != null);
- Debug.Assert(m_WeightToolbar != null);
- m_BoneToolbar.UpdateToggleState();
- m_MeshToolbar.UpdateToggleState();
- m_WeightToolbar.UpdateToggleState();
- }
- private void RemoveMainUI(VisualElement mainView)
- {
- InternalEditorBridge.RemoveEditorApplicationProjectLoadedCallback(OnProjectLoaded);
- InternalEditorBridge.UnregisterShortcutContext(m_ShortcutContext);
- }
- }
- }
|