From f449a9b4e2add82df890000e7a700b12011ff58f Mon Sep 17 00:00:00 2001 From: AbstractConcept Date: Thu, 13 Oct 2022 00:33:18 -0500 Subject: [PATCH] New paste functions plus keyframe drag select --- .vs/RimWorld-Animation-Studio/v16/.suo | Bin 691200 -> 678912 bytes .../Prefabs/AnimationTimeline.prefab | 4 +- Assets/Scenes/MainScene.unity | 157 +++++++++++++++++- Assets/Scripts/GUI/AnimationTimeline.cs | 16 +- .../Scripts/Managers/AnimationController.cs | 77 ++++++++- Assets/Scripts/Managers/InputManager.cs | 90 ++++++++++ Assets/Scripts/Workspace/Workspace.cs | 8 + Assets/StreamingAssets/keybindConfig.xml | 1 - .../Managed/Assembly-CSharp.dll | Bin 120320 -> 123904 bytes .../Managed/Unity.2D.Animation.Runtime.dll | Bin 33792 -> 33792 bytes .../Unity.2D.Animation.Triangle.Runtime.dll | Bin 187392 -> 187392 bytes .../Managed/Unity.2D.Common.Runtime.dll | Bin 3584 -> 3584 bytes .../Managed/Unity.2D.PixelPerfect.dll | Bin 11264 -> 11264 bytes .../Managed/Unity.2D.SpriteShape.Runtime.dll | Bin 87552 -> 87552 bytes .../Unity.InternalAPIEngineBridge.001.dll | Bin 4096 -> 4096 bytes .../Managed/Unity.Mathematics.dll | Bin 710144 -> 710144 bytes .../Managed/Unity.TextMeshPro.dll | Bin 368128 -> 368128 bytes .../Managed/Unity.Timeline.dll | Bin 109056 -> 109056 bytes .../Managed/UnityEngine.UI.dll | Bin 226304 -> 226304 bytes .../StreamingAssets/keybindConfig.xml | 1 - .../globalgamemanagers | Bin 75756 -> 75780 bytes .../globalgamemanagers.assets | Bin 92224 -> 92224 bytes Build/RimWorld-Animation-Studio_Data/level0 | Bin 247464 -> 248296 bytes .../sharedassets0.assets | Bin 334924 -> 334924 bytes Library/ArtifactDB | Bin 16777216 -> 16777216 bytes .../00/0079499d318ab22970c3670f455d7603 | Bin 0 -> 24693 bytes .../01/01ad461993311d2aa3b9059b68ac484f | Bin 12652 -> 0 bytes .../0c/0ccbf41ed3f6a7d95088e05b4dd8d604 | Bin 0 -> 33684 bytes .../0f/0fbef0624e651db1556f2704d61f6984 | Bin 0 -> 24693 bytes .../11b0b41b683dc2d8d4c91636e263d16c} | Bin 6436 -> 8688 bytes .../12/126de03784b1ff4ed6b4f7f3bece7efa | Bin 0 -> 18056 bytes .../16/16d9a81a2d6093a011cc3320059d3086 | Bin 0 -> 24677 bytes .../23/2314d4e006fd0f8f255b77d566dcddd7 | Bin 0 -> 17548 bytes .../25/2506816c9f76f5dee61501780b455bad | Bin 0 -> 8840 bytes .../27/27f4ce52838da7cd7ffb3002cbdad27e | Bin 0 -> 14300 bytes .../28/282bc08edb1fe781ce03e0a09447a1d1 | Bin 0 -> 34056 bytes .../28/2845d34db55908ebf7fc1e3c919fedd0 | Bin 0 -> 14308 bytes .../28/2877e5a14f5c299bd3601757424a7c89 | Bin 0 -> 17772 bytes .../2c/2c86dab841b89a3a9cc26efefec2ac5f | Bin 0 -> 18116 bytes .../2f/2ff3701b57e2a01e2c2215bb4351fbda | Bin 0 -> 17596 bytes .../38/38868a65cfad47d13178814300492661 | Bin 0 -> 17524 bytes .../44/44ea4205fba0f72708875d2996cede48 | Bin 0 -> 17540 bytes .../45/455b03c70f8edb4c582326a578d548a8 | Bin 0 -> 17992 bytes .../48/48a264869c5f2da939f104384c13ee8c | Bin 0 -> 17536 bytes .../4b/4b85a0fce4aa6186cc9dc3bff8a46e78 | Bin 0 -> 33888 bytes .../4e/4e3907b6490ab944db19a6e3919df192 | Bin 0 -> 18084 bytes .../4e/4ee7c56c6207d6b358b710043a101b0f | Bin 0 -> 17656 bytes .../51/5197309788ee4638a5fc9d47979a73bb | Bin 0 -> 33980 bytes .../52/52c999a19a1bfe6ac0312fc3ab3654cc | Bin 0 -> 17656 bytes .../53/533f3a44005dcc9282cf381609785135 | Bin 0 -> 18028 bytes .../53/53b42736bdd902205c64434b2067e5b0 | Bin 0 -> 17508 bytes .../55/5528dbd1e936348442a803d991e85312 | Bin 0 -> 17504 bytes .../5aedf05dc9124869240e1364da64c4ec} | Bin 6244 -> 8732 bytes .../60/6098e06242189d71f4e7c50820861db7 | Bin 0 -> 14316 bytes .../62/62e03d82699bc107796b6a42349be48e | Bin 0 -> 24677 bytes .../65/65cb6c7686662a85a37bbd01831eec35 | Bin 0 -> 17548 bytes .../68/6864f5348d56c2245e607c8ae048cbad | Bin 0 -> 18036 bytes .../68/68757ffd15e539f44e1d0933dbb07f21 | Bin 0 -> 17524 bytes .../6f/6f6b361a5c4f34ac04b8c5e8dee4b14d | Bin 0 -> 17548 bytes .../80/800ba3c25bf5e2b11cbe58afb47f76ba | Bin 0 -> 33532 bytes .../88/8841eaf9af5e44599e7011ef9b3cce6c | Bin 0 -> 18180 bytes .../8c/8c5b93e921be5a5ea74a8334f7bb4c84 | Bin 0 -> 24693 bytes .../8d/8d96e626a0fbda17cebc78df7299570b | Bin 0 -> 17524 bytes .../90efccdf87697142c0eb2872657295de} | Bin 14856 -> 17412 bytes .../94/94452e40e1d683df59bb47fc974daca1 | Bin 0 -> 17628 bytes .../98/98d5e8314e079b51f51c1baaacca04f8 | Bin 0 -> 18040 bytes .../9d/9d583772fc9560e69191089fd96952f6 | Bin 0 -> 18028 bytes .../a5/a56188b5cbb00f65c056c97c0c9cf1c7 | Bin 0 -> 17772 bytes .../af/affbde7006e621a330ad3c3dd8a61e86 | Bin 0 -> 18016 bytes .../b2/b2ee9e171216ca5ab2b303e4a7813074 | Bin 0 -> 17536 bytes .../b9/b9a3614df4cde0197263760022e80510 | Bin 0 -> 18064 bytes .../beb3b045511bd918925a38634fdea0f5} | Bin 6460 -> 6744 bytes .../c0/c00c90404a134c6f3b381a5e88bdc92f | Bin 0 -> 34128 bytes .../c1/c14beaf1680cdb65e690455d888df9ce | Bin 0 -> 24693 bytes .../cd/cdda76a06b53ce32bb8fd12399b51a11 | Bin 0 -> 17912 bytes .../d406612026b7a0798aeef4ede630ee6e} | Bin 6456 -> 6784 bytes .../d7/d700ed56facf1faf43ab8725b891ed47 | Bin 0 -> 17620 bytes .../d9/d94b9167b1f84ebaad21b612fced7d33 | Bin 0 -> 18104 bytes .../df/df7877327f159a195ae942ceb19d84a4 | Bin 0 -> 17980 bytes .../e0/e0ef95b99b3f583df2dc630cc974f6ee | Bin 0 -> 18100 bytes .../e9/e9a6c1822c2981424ce73fbae9fce466 | Bin 0 -> 17652 bytes .../ee/ee344e781e2b78377830daa1ed164c4a | Bin 0 -> 24693 bytes .../f5/f519dd47ff51258ba9669996e7511d78 | Bin 0 -> 17892 bytes .../f9/f931554ad0dcfd6230ee8391395856dd | Bin 0 -> 17504 bytes .../fe/fea833185dcdf1a0b4781ce6bdebbd3e | Bin 0 -> 18052 bytes Library/CurrentLayout-default.dwlt | 52 +++--- Library/CurrentMaximizeLayout.dwlt | 56 +++---- Library/InspectorExpandedItems.asset | Bin 6612 -> 6636 bytes Library/LastBuild.buildreport | Bin 156076 -> 156080 bytes .../Win/Data/Managed/Assembly-CSharp.dll | Bin 120320 -> 123904 bytes .../Managed/Unity.2D.Animation.Runtime.dll | Bin 33792 -> 33792 bytes .../Unity.2D.Animation.Triangle.Runtime.dll | Bin 187392 -> 187392 bytes .../Data/Managed/Unity.2D.Common.Runtime.dll | Bin 3584 -> 3584 bytes .../Data/Managed/Unity.2D.PixelPerfect.dll | Bin 11264 -> 11264 bytes .../Managed/Unity.2D.SpriteShape.Runtime.dll | Bin 87552 -> 87552 bytes .../Unity.InternalAPIEngineBridge.001.dll | Bin 4096 -> 4096 bytes .../Win/Data/Managed/Unity.Mathematics.dll | Bin 710144 -> 710144 bytes .../Win/Data/Managed/Unity.TextMeshPro.dll | Bin 368128 -> 368128 bytes .../Win/Data/Managed/Unity.Timeline.dll | Bin 109056 -> 109056 bytes .../Win/Data/Managed/UnityEngine.UI.dll | Bin 226304 -> 226304 bytes .../Win/Data/globalgamemanagers | Bin 75756 -> 75780 bytes .../Win/Data/globalgamemanagers.assets | Bin 92224 -> 92224 bytes Library/PlayerDataCache/Win/Data/level0 | Bin 247464 -> 248296 bytes .../Win/Data/sharedassets0.assets | Bin 334924 -> 334924 bytes .../PlayerDataCache/Win/ScriptsOnlyCache.yaml | 2 +- .../Assembly-CSharp-Editor.dll | Bin 6144 -> 6144 bytes Library/ScriptAssemblies/Assembly-CSharp.dll | Bin 134656 -> 138240 bytes Library/ScriptAssemblies/Assembly-CSharp.pdb | Bin 68384 -> 69976 bytes Library/SourceAssetDB | Bin 4194304 -> 4194304 bytes .../Hierarchy/8cbfdc-2482d1331163f49448.json | 2 +- .../Hierarchy/8cbfdc-dc4c8b005322f3b46a.json | 2 +- .../Hierarchy/8cbfdc-eac2d5e7275f9064fa.json | 2 +- .../SceneView/352ee9-mainStage.json | 2 +- ...adercompiler-UnityShaderCompiler.exe10.log | 2 + ...adercompiler-UnityShaderCompiler.exe11.log | 2 + ...hadercompiler-UnityShaderCompiler.exe3.log | 2 - ...hadercompiler-UnityShaderCompiler.exe8.log | 2 - 117 files changed, 399 insertions(+), 81 deletions(-) create mode 100644 Library/Artifacts/00/0079499d318ab22970c3670f455d7603 delete mode 100644 Library/Artifacts/01/01ad461993311d2aa3b9059b68ac484f create mode 100644 Library/Artifacts/0c/0ccbf41ed3f6a7d95088e05b4dd8d604 create mode 100644 Library/Artifacts/0f/0fbef0624e651db1556f2704d61f6984 rename Library/Artifacts/{33/332928bdfaf0f2b1e07cf39d8bba263c => 11/11b0b41b683dc2d8d4c91636e263d16c} (50%) create mode 100644 Library/Artifacts/12/126de03784b1ff4ed6b4f7f3bece7efa create mode 100644 Library/Artifacts/16/16d9a81a2d6093a011cc3320059d3086 create mode 100644 Library/Artifacts/23/2314d4e006fd0f8f255b77d566dcddd7 create mode 100644 Library/Artifacts/25/2506816c9f76f5dee61501780b455bad create mode 100644 Library/Artifacts/27/27f4ce52838da7cd7ffb3002cbdad27e create mode 100644 Library/Artifacts/28/282bc08edb1fe781ce03e0a09447a1d1 create mode 100644 Library/Artifacts/28/2845d34db55908ebf7fc1e3c919fedd0 create mode 100644 Library/Artifacts/28/2877e5a14f5c299bd3601757424a7c89 create mode 100644 Library/Artifacts/2c/2c86dab841b89a3a9cc26efefec2ac5f create mode 100644 Library/Artifacts/2f/2ff3701b57e2a01e2c2215bb4351fbda create mode 100644 Library/Artifacts/38/38868a65cfad47d13178814300492661 create mode 100644 Library/Artifacts/44/44ea4205fba0f72708875d2996cede48 create mode 100644 Library/Artifacts/45/455b03c70f8edb4c582326a578d548a8 create mode 100644 Library/Artifacts/48/48a264869c5f2da939f104384c13ee8c create mode 100644 Library/Artifacts/4b/4b85a0fce4aa6186cc9dc3bff8a46e78 create mode 100644 Library/Artifacts/4e/4e3907b6490ab944db19a6e3919df192 create mode 100644 Library/Artifacts/4e/4ee7c56c6207d6b358b710043a101b0f create mode 100644 Library/Artifacts/51/5197309788ee4638a5fc9d47979a73bb create mode 100644 Library/Artifacts/52/52c999a19a1bfe6ac0312fc3ab3654cc create mode 100644 Library/Artifacts/53/533f3a44005dcc9282cf381609785135 create mode 100644 Library/Artifacts/53/53b42736bdd902205c64434b2067e5b0 create mode 100644 Library/Artifacts/55/5528dbd1e936348442a803d991e85312 rename Library/Artifacts/{1c/1cd17394cbab13522ce0ae17c3637c48 => 5a/5aedf05dc9124869240e1364da64c4ec} (50%) create mode 100644 Library/Artifacts/60/6098e06242189d71f4e7c50820861db7 create mode 100644 Library/Artifacts/62/62e03d82699bc107796b6a42349be48e create mode 100644 Library/Artifacts/65/65cb6c7686662a85a37bbd01831eec35 create mode 100644 Library/Artifacts/68/6864f5348d56c2245e607c8ae048cbad create mode 100644 Library/Artifacts/68/68757ffd15e539f44e1d0933dbb07f21 create mode 100644 Library/Artifacts/6f/6f6b361a5c4f34ac04b8c5e8dee4b14d create mode 100644 Library/Artifacts/80/800ba3c25bf5e2b11cbe58afb47f76ba create mode 100644 Library/Artifacts/88/8841eaf9af5e44599e7011ef9b3cce6c create mode 100644 Library/Artifacts/8c/8c5b93e921be5a5ea74a8334f7bb4c84 create mode 100644 Library/Artifacts/8d/8d96e626a0fbda17cebc78df7299570b rename Library/Artifacts/{88/88b6e28c3a1df3c7feecfca176c90645 => 90/90efccdf87697142c0eb2872657295de} (82%) create mode 100644 Library/Artifacts/94/94452e40e1d683df59bb47fc974daca1 create mode 100644 Library/Artifacts/98/98d5e8314e079b51f51c1baaacca04f8 create mode 100644 Library/Artifacts/9d/9d583772fc9560e69191089fd96952f6 create mode 100644 Library/Artifacts/a5/a56188b5cbb00f65c056c97c0c9cf1c7 create mode 100644 Library/Artifacts/af/affbde7006e621a330ad3c3dd8a61e86 create mode 100644 Library/Artifacts/b2/b2ee9e171216ca5ab2b303e4a7813074 create mode 100644 Library/Artifacts/b9/b9a3614df4cde0197263760022e80510 rename Library/Artifacts/{f3/f3a39c5a05b576a60bd232164c0b770d => be/beb3b045511bd918925a38634fdea0f5} (65%) create mode 100644 Library/Artifacts/c0/c00c90404a134c6f3b381a5e88bdc92f create mode 100644 Library/Artifacts/c1/c14beaf1680cdb65e690455d888df9ce create mode 100644 Library/Artifacts/cd/cdda76a06b53ce32bb8fd12399b51a11 rename Library/Artifacts/{18/185a5a3bf1fb5baf613685b38e9a2fac => d4/d406612026b7a0798aeef4ede630ee6e} (63%) create mode 100644 Library/Artifacts/d7/d700ed56facf1faf43ab8725b891ed47 create mode 100644 Library/Artifacts/d9/d94b9167b1f84ebaad21b612fced7d33 create mode 100644 Library/Artifacts/df/df7877327f159a195ae942ceb19d84a4 create mode 100644 Library/Artifacts/e0/e0ef95b99b3f583df2dc630cc974f6ee create mode 100644 Library/Artifacts/e9/e9a6c1822c2981424ce73fbae9fce466 create mode 100644 Library/Artifacts/ee/ee344e781e2b78377830daa1ed164c4a create mode 100644 Library/Artifacts/f5/f519dd47ff51258ba9669996e7511d78 create mode 100644 Library/Artifacts/f9/f931554ad0dcfd6230ee8391395856dd create mode 100644 Library/Artifacts/fe/fea833185dcdf1a0b4781ce6bdebbd3e diff --git a/.vs/RimWorld-Animation-Studio/v16/.suo b/.vs/RimWorld-Animation-Studio/v16/.suo index c33e2b7483c1121edc672160883b42ac77bbb527..d438df66423ed2e7f176f5750d741b886e15c269 100644 GIT binary patch delta 9711 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 iq=zscEWaDZ>@GxN?n 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.ToList()?.IndexOf(this); - int? siblingCount = transform.parent.GetComponentsInChildren()?.ToList()?.Count(); + int? siblingIndex = anchorTransform.parent.GetComponentsInChildren()?.ToList()?.IndexOf(this); + int? siblingCount = anchorTransform.parent.GetComponentsInChildren()?.ToList()?.Count(); if (siblingIndex != null && siblingCount != null && MoveAnimationTimeline(siblingIndex.Value, delta)) { @@ -102,5 +106,11 @@ namespace RimWorldAnimationStudio return true; } + + public void OnPointerClick(PointerEventData eventData) + { + Workspace.actorID = actorID; + Workspace.keyframeID.Clear(); + } } } diff --git a/Assets/Scripts/Managers/AnimationController.cs b/Assets/Scripts/Managers/AnimationController.cs index 7456b3b7..15e041d3 100644 --- a/Assets/Scripts/Managers/AnimationController.cs +++ b/Assets/Scripts/Managers/AnimationController.cs @@ -382,6 +382,62 @@ namespace RimWorldAnimationStudio } public void PastePawnKeyframes() + { + List actorsInvolved = Workspace.copiedKeyframes.Select(x => x.actorID)?.ToList(); + actorsInvolved = actorsInvolved?.Distinct()?.ToList(); + + foreach (int i in actorsInvolved) { Debug.Log("Actor: " + i); } + + if (actorsInvolved.NullOrEmpty()) { Debug.Log("Cannot paste keyframes - there were no copied keyframes to paste"); return; } + if (actorsInvolved.Count > 1 && actorsInvolved.Contains(Workspace.actorID) == false) { Debug.Log("Cannot paste keyframes - keyframes copied across multiple timelines can only be pasted back into these source timelines"); return; } + + int earliestTick = actorsInvolved.Count == 1 ? Workspace.Instance.GetEarliestAtTickInCopiedKeyframes(actorsInvolved[0]) : Workspace.Instance.GetEarliestAtTickInCopiedKeyframes(Workspace.actorID); + if (earliestTick < 1) { Debug.Log("Unknown error occured during keyframe paste operation"); return; } + + foreach (PawnKeyframe copiedKeyframe in Workspace.copiedKeyframes) + { + int tickToPasteAt = stageTick + (copiedKeyframe.atTick.Value - earliestTick); + + if (tickToPasteAt < 1) continue; + if (tickToPasteAt > Workspace.StageWindowSize) + { + if (stretchkeyframesToggle.isOn) + { ResizeStageWindowSize(tickToPasteAt); } + + else continue; + } + + int targetActorID = actorsInvolved.Count == 1 ? Workspace.actorID : copiedKeyframe.actorID; + + if (Workspace.Instance.DoesPawnKeyframeExistAtTick(Workspace.stageID, targetActorID, tickToPasteAt)) + { + PawnKeyframe oldKeyframe = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[targetActorID].keyframes.First(x => x.atTick == tickToPasteAt); + RemovePawnKeyframe(targetActorID, oldKeyframe.keyframeID, true); + } + + PawnKeyframe clonedKeyframe = copiedKeyframe.Copy(); + clonedKeyframe.GenerateKeyframeID(targetActorID); + clonedKeyframe.atTick = tickToPasteAt; + + PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[targetActorID]; + PawnKeyframe nextKeyframe = clip.keyframes.FirstOrDefault(x => x.atTick > stageTick); + + if (nextKeyframe != null) + { clip.keyframes.Insert(clip.keyframes.IndexOf(nextKeyframe), clonedKeyframe); } + + else + { clip.keyframes.Add(clonedKeyframe); } + + clip.BuildSimpleCurves(); + + animationTimelines.GetComponentsInChildren()[clonedKeyframe.actorID].AddPawnKeyFrame(clonedKeyframe.keyframeID); + } + + Workspace.Instance.RecordEvent("Keyframe pasted"); + } + + + /*public void PastePawnKeyframes() { foreach (PawnKeyframe keyframe in Workspace.copiedKeyframes) { @@ -413,7 +469,7 @@ namespace RimWorldAnimationStudio } Workspace.Instance.RecordEvent("Keyframe pasted"); - } + }*/ public void RemovePawnKeyframe() { @@ -507,13 +563,7 @@ namespace RimWorldAnimationStudio } } - animationClipLengthField.text = newStageWindowSize.ToString(); - - Workspace.animationDef.animationStages[Workspace.stageID].stageWindowSize = newStageWindowSize; - Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks = newStageWindowSize * int.Parse(cyclesNormalField.text); - Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicksQuick = newStageWindowSize * int.Parse(cyclesFastField.text); - - Workspace.Instance.RecordEvent("Stage length"); + ResizeStageWindowSize(newStageWindowSize); } public void StretchKeyframes(int newStageWindowSize) @@ -532,6 +582,17 @@ namespace RimWorldAnimationStudio } } + public void ResizeStageWindowSize(int newStageWindowSize) + { + animationClipLengthField.text = newStageWindowSize.ToString(); + + Workspace.animationDef.animationStages[Workspace.stageID].stageWindowSize = newStageWindowSize; + Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicks = newStageWindowSize * int.Parse(cyclesNormalField.text); + Workspace.animationDef.animationStages[Workspace.stageID].playTimeTicksQuick = newStageWindowSize * int.Parse(cyclesFastField.text); + + Workspace.Instance.RecordEvent("Stage length"); + } + public void OnCycleNormalFieldChange() { if (Workspace.animationDef == null) return; diff --git a/Assets/Scripts/Managers/InputManager.cs b/Assets/Scripts/Managers/InputManager.cs index 3db59c04..69d0e21a 100644 --- a/Assets/Scripts/Managers/InputManager.cs +++ b/Assets/Scripts/Managers/InputManager.cs @@ -4,18 +4,24 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; +using UnityEngine.UI; +using UnityEngine.EventSystems; namespace RimWorldAnimationStudio { public class InputManager : Singleton { public Transform dialogBoxes; + public GameObject keyframeSelector; private float lastUpdate = -1f; private float timeBetweenUpdates = 0.15f; private float largeStep = 0.1f; private float smallStep = 0.03f; + private bool isDragging; + private Vector2 v0; + public bool CanRepeatThisUpdate() { if (Time.unscaledTime > lastUpdate + timeBetweenUpdates) @@ -55,6 +61,7 @@ namespace RimWorldAnimationStudio bool canRepeatThisUpdate = CanRepeatThisUpdate(); + // Check keybinds foreach (Keybind keybind in KeybindConfig.Instance.GetAllKeybinds()) { if (IsModifierKeyHeld() && keybind.keyModifiers.NullOrEmpty()) goto nextKeybind; @@ -73,6 +80,89 @@ namespace RimWorldAnimationStudio nextKeybind:; } + + // Drag selection + if (Input.GetMouseButtonDown(0)) + { StartKeyframeSelectionDrag(); } + + else if (Input.GetMouseButtonUp(0)) + { EndKeyframeSelectionDrag(); } + + else if (isDragging) + { UpdateKeyframeSelector(); } + + else + { HideKeyframeSelector(); } + } + + public void StartKeyframeSelectionDrag() + { + PointerEventData pointer = new PointerEventData(EventSystem.current); + pointer.position = Input.mousePosition; + + List raycastResults = new List(); + EventSystem.current.RaycastAll(pointer, raycastResults); + + if (raycastResults.Count > 0) + { + foreach (var go in raycastResults) + { + //Debug.Log(go.gameObject); + if (go.gameObject?.GetComponent