From ab5a2a4c029e0c9839348f4d0c3404c783815665 Mon Sep 17 00:00:00 2001 From: AbstractConcept Date: Fri, 14 Oct 2022 00:52:07 -0500 Subject: [PATCH] Multi-drag and stretching for keyframes --- .vs/RimWorld-Animation-Studio/v16/.suo | Bin 678912 -> 683008 bytes .../Resources/Prefabs/KeyframeSlider.prefab | 2 + Assets/Scenes/MainScene.unity | 4 +- .../AnimationClips/PawnAnimationClip.cs | 9 +- .../KeyFrames/PawnKeyframe.cs | 6 + Assets/Scripts/GUI/KeyframeSlider.cs | 117 ++++++++++++++---- Assets/Scripts/GUI/StageCard.cs | 2 +- .../Scripts/Managers/AnimationController.cs | 62 ++++++++-- Assets/Scripts/Managers/InputManager.cs | 6 +- Assets/Scripts/Math/Constants/Constants.cs | 1 + Assets/Scripts/Workspace/Workspace.cs | 3 + Library/ArtifactDB | Bin 16777216 -> 16777216 bytes .../02/02d038242aec7f08a0ae0ef619f35253 | Bin 0 -> 14288 bytes .../08/0849b09ca822548dbe60ea1cf0d488a7 | Bin 0 -> 12776 bytes .../09d5f5a0acc8d9eb4e75d166755c7858} | Bin 24677 -> 22121 bytes .../0e/0e12311ad2d088363b0e1aa9d63c6e76 | Bin 0 -> 13000 bytes .../0e/0e9c5317b41cd4f57111a1dd7414a115 | Bin 0 -> 13024 bytes .../0f/0fc8b8437dd20dce6456b408a2605838 | Bin 0 -> 13048 bytes .../11/11b0b41b683dc2d8d4c91636e263d16c | Bin 8688 -> 0 bytes .../12/126de03784b1ff4ed6b4f7f3bece7efa | Bin 18056 -> 0 bytes .../1a/1abece6722aa0aef74545a4c54c26668 | Bin 0 -> 35832 bytes .../1b/1be3197b4cea048fca37d5d1e008ae8f | Bin 0 -> 9364 bytes .../1c/1cd72c8d9cf2e32d335c1559118249c3 | Bin 0 -> 35852 bytes .../1d/1df6d1645d796f1d98c338b82971d674 | Bin 0 -> 9344 bytes .../2185b63a589824799b6e884ffe5f561b} | Bin 24677 -> 22121 bytes .../23/2314d4e006fd0f8f255b77d566dcddd7 | Bin 17548 -> 0 bytes .../23/2391bf4e29e8a5b6c1fa9644fc9b7e2a | Bin 0 -> 13044 bytes .../28/2877e5a14f5c299bd3601757424a7c89 | Bin 17772 -> 0 bytes .../2c/2c86dab841b89a3a9cc26efefec2ac5f | Bin 18116 -> 0 bytes .../2e/2ea355ffc2a6caf29b72c0f2f22af111 | Bin 0 -> 13260 bytes .../2f/2ff3701b57e2a01e2c2215bb4351fbda | Bin 17596 -> 0 bytes .../32/323cfebd1ab3ab1eb238bca56546faea | Bin 0 -> 12732 bytes .../34/3443da02546860be97e3e7fa8b74051f | Bin 0 -> 9360 bytes .../36/3668d4d5a5812a1434d80ce887fb1b93 | Bin 0 -> 13300 bytes .../38/38868a65cfad47d13178814300492661 | Bin 17524 -> 0 bytes .../3d/3d24a99f7315ba23370371b8d70e1880 | Bin 0 -> 13120 bytes .../3d/3df8530ec14d4448d800a26ddeb13d49 | Bin 0 -> 13076 bytes .../3f7d662127509df25ba49e5255102b2e} | Bin 34056 -> 35272 bytes .../44/44ea4205fba0f72708875d2996cede48 | Bin 17540 -> 0 bytes .../45/455b03c70f8edb4c582326a578d548a8 | Bin 17992 -> 0 bytes .../48/48a264869c5f2da939f104384c13ee8c | Bin 17536 -> 0 bytes .../49/498a068a834e39ea2168f2ef4539f92e | Bin 0 -> 11536 bytes .../4b/4b85a0fce4aa6186cc9dc3bff8a46e78 | Bin 33888 -> 0 bytes .../4d/4d1ccf450769c817225cddb4efa536e8 | Bin 0 -> 9360 bytes .../4e/4e3907b6490ab944db19a6e3919df192 | Bin 18084 -> 0 bytes .../4e/4ee7c56c6207d6b358b710043a101b0f | Bin 17656 -> 0 bytes .../4f8ed142a7c2608511e1c60192124240} | Bin 24693 -> 22121 bytes .../51/5131fe4a17a1247a0551a24ba6e1962f | Bin 0 -> 10464 bytes .../52/52c999a19a1bfe6ac0312fc3ab3654cc | Bin 17656 -> 0 bytes .../53/533f3a44005dcc9282cf381609785135 | Bin 18028 -> 0 bytes .../53/53b42736bdd902205c64434b2067e5b0 | Bin 17508 -> 0 bytes .../542163b115139605c90060f97521ff54} | Bin 6744 -> 6728 bytes .../55/5528dbd1e936348442a803d991e85312 | Bin 17504 -> 0 bytes .../56/56c6f1e704206665706fe41ed727b2d0 | Bin 0 -> 14344 bytes .../5a52b1acbc2f4f2cfd61fa2829f185b5} | Bin 13984 -> 14396 bytes .../5a/5a57c9b955014b661a1c774bb6ecb782 | Bin 0 -> 13052 bytes .../5a/5aedf05dc9124869240e1364da64c4ec | Bin 8732 -> 0 bytes .../5e/5ee82798c357968ec0b9bf4622589f63 | Bin 0 -> 14020 bytes .../60/605d028ce47aa1384a27aa9c11093b4d | Bin 0 -> 14132 bytes .../64/649a6fc93ff5bff0e8410995bd1d62d0 | Bin 0 -> 14072 bytes .../65/65cb6c7686662a85a37bbd01831eec35 | Bin 17548 -> 0 bytes .../66/66570a981116293f4bacb9581dcbcdbc | Bin 0 -> 14644 bytes .../67/678663bf1ace83d88bb8809803a0feec | Bin 0 -> 14176 bytes .../68/6864f5348d56c2245e607c8ae048cbad | Bin 18036 -> 0 bytes .../68/68757ffd15e539f44e1d0933dbb07f21 | Bin 17524 -> 0 bytes .../6d073850cf62451d5d93ee9da26f8a2a} | Bin 14316 -> 14352 bytes .../6f/6f6b361a5c4f34ac04b8c5e8dee4b14d | Bin 17548 -> 0 bytes .../73/73970973be75cfcba4b6985db34d359e | Bin 0 -> 13052 bytes .../80/806ca765630a0000d90c11162ca1719a | Bin 0 -> 35848 bytes .../89/89619f484fdf58b39e0b938400a64608 | Bin 0 -> 14204 bytes .../89/89fa44427cebb99893d66cefec028087 | Bin 0 -> 14064 bytes .../8a/8af2c2d0ca781bb4666d524a1922d351 | Bin 0 -> 14644 bytes .../8d/8d96e626a0fbda17cebc78df7299570b | Bin 17524 -> 0 bytes .../8eeb3e8240d542a465e60b3eadfab3ed} | Bin 24693 -> 22121 bytes .../90/90efccdf87697142c0eb2872657295de | Bin 17412 -> 0 bytes .../91/916b645af3c0b2ef8b41920896a0d165 | Bin 0 -> 11716 bytes .../94/94452e40e1d683df59bb47fc974daca1 | Bin 17628 -> 0 bytes .../94/944d0e282cd10494e5d6b6f937a01fbf | Bin 0 -> 11248 bytes .../94/94856e6bdd22cf835b494abed65be7c0 | Bin 0 -> 11644 bytes .../95/9535dba88e96b11a6049796a2486ae9f | Bin 0 -> 13072 bytes .../98/98d5e8314e079b51f51c1baaacca04f8 | Bin 18040 -> 0 bytes .../99ab23523be72ba427e1c8f3c737912e} | Bin 33684 -> 35560 bytes .../9a/9a0d64004528f452f40cc7ec14e196d8 | Bin 0 -> 35828 bytes .../9d/9d583772fc9560e69191089fd96952f6 | Bin 18028 -> 0 bytes .../9e01f22821bd69e1442d2c62f4d773ab} | Bin 14300 -> 14396 bytes .../9e3019cbdeaea5f2007208846059b4c6} | Bin 8504 -> 5908 bytes .../a00f49cf5ac488a05b9467a25525d828} | Bin 33532 -> 35612 bytes .../a0/a0d9c5823b6824a8c0d942b9b7f9911c | Bin 0 -> 14204 bytes .../a1/a1df5a1b70c88300b8b54a1d537be0db | Bin 0 -> 35904 bytes .../a5/a56188b5cbb00f65c056c97c0c9cf1c7 | Bin 17772 -> 0 bytes .../a7/a71c575c22c59430a9b7c6052ff5b0b3 | Bin 0 -> 35708 bytes .../ac8ca18eeb2b48a944fd3e14c53de09b} | Bin 18100 -> 18196 bytes .../ae/ae8acaf5e06375958ac1f8f4e1829be8 | Bin 0 -> 13196 bytes .../af/af3e2b083ded73933e142bd964ee7c6a | Bin 0 -> 11372 bytes .../af/affbde7006e621a330ad3c3dd8a61e86 | Bin 18016 -> 0 bytes .../b2/b2ee9e171216ca5ab2b303e4a7813074 | Bin 17536 -> 0 bytes .../b4/b493d91632c61bbb00bd3a216fb36954 | Bin 0 -> 14756 bytes .../b5/b530e645717e1a38c555ecbb0e87d9b2 | Bin 0 -> 13124 bytes .../b6/b63bc4155f99dba0318877c683c97458 | Bin 0 -> 10676 bytes .../b6842725fe5696f4d5e35c7f368fadf1} | Bin 33980 -> 35484 bytes .../b9757c8c5f968e708a5b6fb82844018e} | Bin 6784 -> 6120 bytes .../b9/b9a3614df4cde0197263760022e80510 | Bin 18064 -> 0 bytes .../ba/ba53a25ec580b7ad21efac86c74bbf28 | Bin 0 -> 14352 bytes .../bb/bb94090f399549e74864dd45e53c7569 | Bin 0 -> 35888 bytes .../bd/bd7c67e6051c85be1ca741c395b8081a | Bin 0 -> 14140 bytes .../bd/bde4348b229243174c6bce96340d72e5 | Bin 14864 -> 0 bytes .../bf3fbaa37422dbd3a2a1a3c6f75c3aa1} | Bin 18052 -> 18228 bytes .../bf/bfdcc988f29ea86f1d7a06e0da364a95 | Bin 0 -> 9364 bytes .../c1/c14beaf1680cdb65e690455d888df9ce | Bin 24693 -> 0 bytes .../c8/c82f34917da6d7275ebabfa591a4b498 | Bin 0 -> 14204 bytes .../c9/c93fbf96a645634f5be891cb5de71ab8 | Bin 0 -> 9360 bytes .../cd/cdda76a06b53ce32bb8fd12399b51a11 | Bin 17912 -> 0 bytes .../d0/d02fd8b9ec2d772f679a89ae6f7e503b | Bin 0 -> 9396 bytes .../d7/d700ed56facf1faf43ab8725b891ed47 | Bin 17620 -> 0 bytes .../d7/d72aab511b7787059894b3034f70f480 | Bin 0 -> 12936 bytes .../d7/d7cae56c69f1ca17b8445ab3e546dde1 | Bin 0 -> 35820 bytes .../d9/d94b9167b1f84ebaad21b612fced7d33 | Bin 18104 -> 0 bytes .../d9/d97cb90045265e262a43687b73274634 | Bin 0 -> 14640 bytes .../db/db00d420b6f65f8f933eff7d7c5c0177 | Bin 0 -> 35872 bytes .../dd/dda39ed8e607d540fb3c6e6e2f1b61a6 | Bin 0 -> 14132 bytes .../dd/ddb1bc6ed1f2c35dda161ceea677473e | Bin 0 -> 14132 bytes .../df/df3935d5962eb0cfb0e1b4a50685baec | Bin 24693 -> 0 bytes .../df/df3fcfe4980e8ea29a9eb0d7cb90fe3b | Bin 0 -> 9360 bytes .../df/df7877327f159a195ae942ceb19d84a4 | Bin 17980 -> 0 bytes .../df/df9dcaaf0673a14e861b7234334c459d | Bin 0 -> 12888 bytes .../e1/e1d4e1b9dc9625eeabd47ad42fa3a791 | Bin 0 -> 35904 bytes .../e3/e37287137267d9b534d61151da4b3d6b | Bin 0 -> 10464 bytes .../e5/e5688387228c3a9296775f5ff8834450 | Bin 0 -> 11044 bytes .../e6/e633a12ff417532e45230d5c35333a20 | Bin 0 -> 9360 bytes .../e6/e6373e2c44116eef4fefb40c1acb379b | Bin 30972 -> 0 bytes .../e7/e79d5102857bd8ca1138fed92d2121e9 | Bin 0 -> 9360 bytes .../e9/e9a6c1822c2981424ce73fbae9fce466 | Bin 17652 -> 0 bytes .../ea/ea2284230b4c6c399fa104ca9f256e98 | Bin 0 -> 10644 bytes .../ec/ecf78cc080b3c30c43321e760e6da82f | Bin 0 -> 13944 bytes .../ed/edcf699b43f8b112a6b54529945834f1 | Bin 0 -> 10568 bytes .../ee/ee344e781e2b78377830daa1ed164c4a | Bin 24693 -> 0 bytes .../f1/f1d589e7b4e015b00006884eb2669d42 | Bin 0 -> 11324 bytes .../f5/f519dd47ff51258ba9669996e7511d78 | Bin 17892 -> 0 bytes .../f7/f798cd819383ef6866dd29cc3b53cb34 | Bin 0 -> 12820 bytes .../f9/f931554ad0dcfd6230ee8391395856dd | Bin 17504 -> 0 bytes .../fb/fb45f46c507a6424ca848cc6cb5ebe9f | Bin 0 -> 14212 bytes .../fc/fc25adc3d507ff3a2d82dfe460775cd9 | Bin 0 -> 10612 bytes .../fc/fc6454ad5d068dc9aecceda5707b8fee | Bin 0 -> 35824 bytes .../fd/fd6444cb98e40b32f1280dc9f8797ba9 | Bin 0 -> 11604 bytes Library/CurrentLayout-default.dwlt | 28 ++--- Library/CurrentMaximizeLayout.dwlt | 38 +++--- .../Assembly-CSharp-Editor.dll | Bin 6144 -> 6144 bytes Library/ScriptAssemblies/Assembly-CSharp.dll | Bin 138240 -> 140800 bytes Library/ScriptAssemblies/Assembly-CSharp.pdb | Bin 69976 -> 71160 bytes Library/SourceAssetDB | Bin 4194304 -> 4194304 bytes .../Hierarchy/8cbfdc-eac2d5e7275f9064fa.json | 2 +- 151 files changed, 195 insertions(+), 85 deletions(-) create mode 100644 Library/Artifacts/02/02d038242aec7f08a0ae0ef619f35253 create mode 100644 Library/Artifacts/08/0849b09ca822548dbe60ea1cf0d488a7 rename Library/Artifacts/{62/62e03d82699bc107796b6a42349be48e => 09/09d5f5a0acc8d9eb4e75d166755c7858} (51%) create mode 100644 Library/Artifacts/0e/0e12311ad2d088363b0e1aa9d63c6e76 create mode 100644 Library/Artifacts/0e/0e9c5317b41cd4f57111a1dd7414a115 create mode 100644 Library/Artifacts/0f/0fc8b8437dd20dce6456b408a2605838 delete mode 100644 Library/Artifacts/11/11b0b41b683dc2d8d4c91636e263d16c delete mode 100644 Library/Artifacts/12/126de03784b1ff4ed6b4f7f3bece7efa create mode 100644 Library/Artifacts/1a/1abece6722aa0aef74545a4c54c26668 create mode 100644 Library/Artifacts/1b/1be3197b4cea048fca37d5d1e008ae8f create mode 100644 Library/Artifacts/1c/1cd72c8d9cf2e32d335c1559118249c3 create mode 100644 Library/Artifacts/1d/1df6d1645d796f1d98c338b82971d674 rename Library/Artifacts/{16/16d9a81a2d6093a011cc3320059d3086 => 21/2185b63a589824799b6e884ffe5f561b} (51%) delete mode 100644 Library/Artifacts/23/2314d4e006fd0f8f255b77d566dcddd7 create mode 100644 Library/Artifacts/23/2391bf4e29e8a5b6c1fa9644fc9b7e2a delete mode 100644 Library/Artifacts/28/2877e5a14f5c299bd3601757424a7c89 delete mode 100644 Library/Artifacts/2c/2c86dab841b89a3a9cc26efefec2ac5f create mode 100644 Library/Artifacts/2e/2ea355ffc2a6caf29b72c0f2f22af111 delete mode 100644 Library/Artifacts/2f/2ff3701b57e2a01e2c2215bb4351fbda create mode 100644 Library/Artifacts/32/323cfebd1ab3ab1eb238bca56546faea create mode 100644 Library/Artifacts/34/3443da02546860be97e3e7fa8b74051f create mode 100644 Library/Artifacts/36/3668d4d5a5812a1434d80ce887fb1b93 delete mode 100644 Library/Artifacts/38/38868a65cfad47d13178814300492661 create mode 100644 Library/Artifacts/3d/3d24a99f7315ba23370371b8d70e1880 create mode 100644 Library/Artifacts/3d/3df8530ec14d4448d800a26ddeb13d49 rename Library/Artifacts/{28/282bc08edb1fe781ce03e0a09447a1d1 => 3f/3f7d662127509df25ba49e5255102b2e} (95%) delete mode 100644 Library/Artifacts/44/44ea4205fba0f72708875d2996cede48 delete mode 100644 Library/Artifacts/45/455b03c70f8edb4c582326a578d548a8 delete mode 100644 Library/Artifacts/48/48a264869c5f2da939f104384c13ee8c create mode 100644 Library/Artifacts/49/498a068a834e39ea2168f2ef4539f92e delete mode 100644 Library/Artifacts/4b/4b85a0fce4aa6186cc9dc3bff8a46e78 create mode 100644 Library/Artifacts/4d/4d1ccf450769c817225cddb4efa536e8 delete mode 100644 Library/Artifacts/4e/4e3907b6490ab944db19a6e3919df192 delete mode 100644 Library/Artifacts/4e/4ee7c56c6207d6b358b710043a101b0f rename Library/Artifacts/{00/0079499d318ab22970c3670f455d7603 => 4f/4f8ed142a7c2608511e1c60192124240} (51%) create mode 100644 Library/Artifacts/51/5131fe4a17a1247a0551a24ba6e1962f delete mode 100644 Library/Artifacts/52/52c999a19a1bfe6ac0312fc3ab3654cc delete mode 100644 Library/Artifacts/53/533f3a44005dcc9282cf381609785135 delete mode 100644 Library/Artifacts/53/53b42736bdd902205c64434b2067e5b0 rename Library/Artifacts/{be/beb3b045511bd918925a38634fdea0f5 => 54/542163b115139605c90060f97521ff54} (92%) delete mode 100644 Library/Artifacts/55/5528dbd1e936348442a803d991e85312 create mode 100644 Library/Artifacts/56/56c6f1e704206665706fe41ed727b2d0 rename Library/Artifacts/{cc/cc495cdd4bbc67b3c287623a8ee720fa => 5a/5a52b1acbc2f4f2cfd61fa2829f185b5} (95%) create mode 100644 Library/Artifacts/5a/5a57c9b955014b661a1c774bb6ecb782 delete mode 100644 Library/Artifacts/5a/5aedf05dc9124869240e1364da64c4ec create mode 100644 Library/Artifacts/5e/5ee82798c357968ec0b9bf4622589f63 create mode 100644 Library/Artifacts/60/605d028ce47aa1384a27aa9c11093b4d create mode 100644 Library/Artifacts/64/649a6fc93ff5bff0e8410995bd1d62d0 delete mode 100644 Library/Artifacts/65/65cb6c7686662a85a37bbd01831eec35 create mode 100644 Library/Artifacts/66/66570a981116293f4bacb9581dcbcdbc create mode 100644 Library/Artifacts/67/678663bf1ace83d88bb8809803a0feec delete mode 100644 Library/Artifacts/68/6864f5348d56c2245e607c8ae048cbad delete mode 100644 Library/Artifacts/68/68757ffd15e539f44e1d0933dbb07f21 rename Library/Artifacts/{60/6098e06242189d71f4e7c50820861db7 => 6d/6d073850cf62451d5d93ee9da26f8a2a} (98%) delete mode 100644 Library/Artifacts/6f/6f6b361a5c4f34ac04b8c5e8dee4b14d create mode 100644 Library/Artifacts/73/73970973be75cfcba4b6985db34d359e create mode 100644 Library/Artifacts/80/806ca765630a0000d90c11162ca1719a create mode 100644 Library/Artifacts/89/89619f484fdf58b39e0b938400a64608 create mode 100644 Library/Artifacts/89/89fa44427cebb99893d66cefec028087 create mode 100644 Library/Artifacts/8a/8af2c2d0ca781bb4666d524a1922d351 delete mode 100644 Library/Artifacts/8d/8d96e626a0fbda17cebc78df7299570b rename Library/Artifacts/{8c/8c5b93e921be5a5ea74a8334f7bb4c84 => 8e/8eeb3e8240d542a465e60b3eadfab3ed} (51%) delete mode 100644 Library/Artifacts/90/90efccdf87697142c0eb2872657295de create mode 100644 Library/Artifacts/91/916b645af3c0b2ef8b41920896a0d165 delete mode 100644 Library/Artifacts/94/94452e40e1d683df59bb47fc974daca1 create mode 100644 Library/Artifacts/94/944d0e282cd10494e5d6b6f937a01fbf create mode 100644 Library/Artifacts/94/94856e6bdd22cf835b494abed65be7c0 create mode 100644 Library/Artifacts/95/9535dba88e96b11a6049796a2486ae9f delete mode 100644 Library/Artifacts/98/98d5e8314e079b51f51c1baaacca04f8 rename Library/Artifacts/{0c/0ccbf41ed3f6a7d95088e05b4dd8d604 => 99/99ab23523be72ba427e1c8f3c737912e} (93%) create mode 100644 Library/Artifacts/9a/9a0d64004528f452f40cc7ec14e196d8 delete mode 100644 Library/Artifacts/9d/9d583772fc9560e69191089fd96952f6 rename Library/Artifacts/{27/27f4ce52838da7cd7ffb3002cbdad27e => 9e/9e01f22821bd69e1442d2c62f4d773ab} (97%) rename Library/Artifacts/{34/34b6c56438f99ea0f67b9096581ea543 => 9e/9e3019cbdeaea5f2007208846059b4c6} (50%) rename Library/Artifacts/{80/800ba3c25bf5e2b11cbe58afb47f76ba => a0/a00f49cf5ac488a05b9467a25525d828} (92%) create mode 100644 Library/Artifacts/a0/a0d9c5823b6824a8c0d942b9b7f9911c create mode 100644 Library/Artifacts/a1/a1df5a1b70c88300b8b54a1d537be0db delete mode 100644 Library/Artifacts/a5/a56188b5cbb00f65c056c97c0c9cf1c7 create mode 100644 Library/Artifacts/a7/a71c575c22c59430a9b7c6052ff5b0b3 rename Library/Artifacts/{e0/e0ef95b99b3f583df2dc630cc974f6ee => ac/ac8ca18eeb2b48a944fd3e14c53de09b} (98%) create mode 100644 Library/Artifacts/ae/ae8acaf5e06375958ac1f8f4e1829be8 create mode 100644 Library/Artifacts/af/af3e2b083ded73933e142bd964ee7c6a delete mode 100644 Library/Artifacts/af/affbde7006e621a330ad3c3dd8a61e86 delete mode 100644 Library/Artifacts/b2/b2ee9e171216ca5ab2b303e4a7813074 create mode 100644 Library/Artifacts/b4/b493d91632c61bbb00bd3a216fb36954 create mode 100644 Library/Artifacts/b5/b530e645717e1a38c555ecbb0e87d9b2 create mode 100644 Library/Artifacts/b6/b63bc4155f99dba0318877c683c97458 rename Library/Artifacts/{51/5197309788ee4638a5fc9d47979a73bb => b6/b6842725fe5696f4d5e35c7f368fadf1} (94%) rename Library/Artifacts/{d4/d406612026b7a0798aeef4ede630ee6e => b9/b9757c8c5f968e708a5b6fb82844018e} (62%) delete mode 100644 Library/Artifacts/b9/b9a3614df4cde0197263760022e80510 create mode 100644 Library/Artifacts/ba/ba53a25ec580b7ad21efac86c74bbf28 create mode 100644 Library/Artifacts/bb/bb94090f399549e74864dd45e53c7569 create mode 100644 Library/Artifacts/bd/bd7c67e6051c85be1ca741c395b8081a delete mode 100644 Library/Artifacts/bd/bde4348b229243174c6bce96340d72e5 rename Library/Artifacts/{fe/fea833185dcdf1a0b4781ce6bdebbd3e => bf/bf3fbaa37422dbd3a2a1a3c6f75c3aa1} (96%) create mode 100644 Library/Artifacts/bf/bfdcc988f29ea86f1d7a06e0da364a95 delete mode 100644 Library/Artifacts/c1/c14beaf1680cdb65e690455d888df9ce create mode 100644 Library/Artifacts/c8/c82f34917da6d7275ebabfa591a4b498 create mode 100644 Library/Artifacts/c9/c93fbf96a645634f5be891cb5de71ab8 delete mode 100644 Library/Artifacts/cd/cdda76a06b53ce32bb8fd12399b51a11 create mode 100644 Library/Artifacts/d0/d02fd8b9ec2d772f679a89ae6f7e503b delete mode 100644 Library/Artifacts/d7/d700ed56facf1faf43ab8725b891ed47 create mode 100644 Library/Artifacts/d7/d72aab511b7787059894b3034f70f480 create mode 100644 Library/Artifacts/d7/d7cae56c69f1ca17b8445ab3e546dde1 delete mode 100644 Library/Artifacts/d9/d94b9167b1f84ebaad21b612fced7d33 create mode 100644 Library/Artifacts/d9/d97cb90045265e262a43687b73274634 create mode 100644 Library/Artifacts/db/db00d420b6f65f8f933eff7d7c5c0177 create mode 100644 Library/Artifacts/dd/dda39ed8e607d540fb3c6e6e2f1b61a6 create mode 100644 Library/Artifacts/dd/ddb1bc6ed1f2c35dda161ceea677473e delete mode 100644 Library/Artifacts/df/df3935d5962eb0cfb0e1b4a50685baec create mode 100644 Library/Artifacts/df/df3fcfe4980e8ea29a9eb0d7cb90fe3b delete mode 100644 Library/Artifacts/df/df7877327f159a195ae942ceb19d84a4 create mode 100644 Library/Artifacts/df/df9dcaaf0673a14e861b7234334c459d create mode 100644 Library/Artifacts/e1/e1d4e1b9dc9625eeabd47ad42fa3a791 create mode 100644 Library/Artifacts/e3/e37287137267d9b534d61151da4b3d6b create mode 100644 Library/Artifacts/e5/e5688387228c3a9296775f5ff8834450 create mode 100644 Library/Artifacts/e6/e633a12ff417532e45230d5c35333a20 delete mode 100644 Library/Artifacts/e6/e6373e2c44116eef4fefb40c1acb379b create mode 100644 Library/Artifacts/e7/e79d5102857bd8ca1138fed92d2121e9 delete mode 100644 Library/Artifacts/e9/e9a6c1822c2981424ce73fbae9fce466 create mode 100644 Library/Artifacts/ea/ea2284230b4c6c399fa104ca9f256e98 create mode 100644 Library/Artifacts/ec/ecf78cc080b3c30c43321e760e6da82f create mode 100644 Library/Artifacts/ed/edcf699b43f8b112a6b54529945834f1 delete mode 100644 Library/Artifacts/ee/ee344e781e2b78377830daa1ed164c4a create mode 100644 Library/Artifacts/f1/f1d589e7b4e015b00006884eb2669d42 delete mode 100644 Library/Artifacts/f5/f519dd47ff51258ba9669996e7511d78 create mode 100644 Library/Artifacts/f7/f798cd819383ef6866dd29cc3b53cb34 delete mode 100644 Library/Artifacts/f9/f931554ad0dcfd6230ee8391395856dd create mode 100644 Library/Artifacts/fb/fb45f46c507a6424ca848cc6cb5ebe9f create mode 100644 Library/Artifacts/fc/fc25adc3d507ff3a2d82dfe460775cd9 create mode 100644 Library/Artifacts/fc/fc6454ad5d068dc9aecceda5707b8fee create mode 100644 Library/Artifacts/fd/fd6444cb98e40b32f1280dc9f8797ba9 diff --git a/.vs/RimWorld-Animation-Studio/v16/.suo b/.vs/RimWorld-Animation-Studio/v16/.suo index d438df66423ed2e7f176f5750d741b886e15c269..ba2bf9474169770302351eef8d0352e43151fea4 100644 GIT binary patch delta 14789 zcmeI33tW`N-p6;Iz0Sj>6%i3p7vw0~iVK30*A?-Sno`=$NI?N5S0Hxrmc?pj-cn$S z>0*j#WLAc(xu#~Tl6g8^%(r^eV;(ZQr=gjOn!LYxc0u%*sh#S)pHB~;@6I#x%zgg< z|I9Pb;M~;7`AMfD%RouxyNoJT7;d%Te0_br2vviAzyYR$X<#~-0UiKEqf*)6c4gbO z9oH9SkP^ujXbtFjw&-7<5Gx*d9%VD7nWQcINh&0S6{rgX%7{u8j7Q??%ZR3Vp(w34 zd?5h0_08ap0pUQzYz}6En}7^LK^*7=x&aDw01Z$DfF7U?7zAzveLw~n4F-TN;BP>b z)j_2yRP}C=d-=fqOwZcoj+SfZG#90MTzIxXIvd z5DP3I9*hKLa4Qh;*nApJ28-@4E(&Evk0DxArYZLzrtmjhh43Foi6zpMfPuZPFrtM` zN3gKR87a%0Dlw^<2xRR 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 delta 10136 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 100000 && keyframeID < 1000000; } + + public KeyframeSlider GetKeyframeSlider() + { + return Selectable.allSelectablesArray.FirstOrDefault(x => x.GetComponent()?.keyframeID == keyframeID)?.GetComponent< KeyframeSlider>(); + } } } diff --git a/Assets/Scripts/GUI/KeyframeSlider.cs b/Assets/Scripts/GUI/KeyframeSlider.cs index 0a61a4f2..2af15d83 100644 --- a/Assets/Scripts/GUI/KeyframeSlider.cs +++ b/Assets/Scripts/GUI/KeyframeSlider.cs @@ -23,9 +23,15 @@ namespace RimWorldAnimationStudio private PawnAnimationClip clip; private PawnKeyframe keyframe; - private float dragTimeStart = -1f; - public void Initialize(AnimationTimeline timeline, int actorID, int keyframeID) + private float dragTimeStart = -1f; + private int dragTickStart = -1; + + public KeyframeSlider linkedSlider; + public Keyframe pivotKeyframe; + public int linkedOffset; + + public void Initialize(AnimationTimeline timeline, int actorID, int keyframeID) { this.timeline = timeline; this.clip = Workspace.Instance.GetPawnAnimationClip(actorID); @@ -48,8 +54,6 @@ namespace RimWorldAnimationStudio keyframe.atTick = (int)value; clip.BuildSimpleCurves(); - //AnimationController.Instance.stageTick = keyframe.atTick.Value; - timeline.InitiateUpdateOfGhostFrames(); } @@ -99,52 +103,76 @@ namespace RimWorldAnimationStudio if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.LeftCommand)) { Workspace.keyframeID.Add(keyframeID); } - else + else if (Workspace.keyframeID.NullOrEmpty() || Workspace.keyframeID.Contains(keyframeID) == false) { Workspace.keyframeID = new List { keyframeID }; } if (eventData.clickCount >= 2) { AnimationController.Instance.stageTick = keyframe.atTick.Value; } - - //Workspace.Instance.RecordEvent("Keyframe selected"); } public void OnBeginDrag(PointerEventData eventData) { - //AnimationController.Instance.stageTick = keyframe.atTick.Value; Workspace.actorID = actorID; - - Workspace.keyframeID = new List { keyframeID }; - dragTimeStart = Time.unscaledTime; + dragTickStart = keyframe.atTick.Value; + + if (Workspace.keyframeID.NullOrEmpty() || Workspace.keyframeID.Contains(keyframeID) == false) + { Workspace.keyframeID = new List { keyframeID }; } + + List selectedKeyframes = Workspace.Instance.GetPawnKeyframes(Workspace.keyframeID).Except(new List() { keyframe })?.ToList(); + + // Link other slected keyframes to the movement of this one + if (selectedKeyframes.NotNullOrEmpty()) + { + foreach (PawnKeyframe selectedKeyframe in selectedKeyframes) + { + KeyframeSlider unlinkedSlider = selectedKeyframe.GetKeyframeSlider(); + + if (unlinkedSlider != null) + { + unlinkedSlider.linkedSlider = this; + unlinkedSlider.linkedOffset = unlinkedSlider.keyframe.atTick.Value - keyframe.atTick.Value; + } + } + + pivotKeyframe = keyframe.atTick < selectedKeyframes[0].atTick ? selectedKeyframes.Last() : selectedKeyframes.First(); + } } public override void OnDrag(PointerEventData eventData) { - if (keyframe.atTick == 1) - { value = 1; return; } + Workspace.actorID = actorID; + // The first keyframe can't be moved + if (keyframe.atTick == Constants.minTick) + { value = Constants.minTick; return; } + + // Sticky drag if (Time.unscaledTime - dragTimeStart < 0.05f) return; interactable = true; base.OnDrag(eventData); + // Snap to nearest keyframe (on another timeline) int targetTick = Workspace.FindClosestKeyFrameAtTick(keyframe.atTick.Value, Mathf.CeilToInt(Workspace.StageWindowSize * 0.01f), actorID); - if (Input.GetKey(KeyCode.LeftShift) && Workspace.Instance.DoesPawnKeyframeExistAtTick(Workspace.stageID, actorID, targetTick) == false) { value = (float)targetTick; } - // Prevent frames from being moved to tick 1 - if (value == 1) - { value = 2; } - - //AnimationController.Instance.stageTick = keyframe.atTick.Value; - Workspace.actorID = actorID; + // Prevent other frames from being moved to the first keyframe + if (value == Constants.minTick) + { value = Constants.minTick + 1; } } public void OnEndDrag(PointerEventData eventData) { - if (keyframe.atTick == 1) - { value = 1; return; } + if (keyframe.atTick == Constants.minTick) + { value = Constants.minTick; return; } + + foreach (Selectable otherSlider in Selectable.allSelectablesArray) + { + if (otherSlider is KeyframeSlider) + { Debug.Log("unlinked keyframes"); (otherSlider as KeyframeSlider).linkedSlider = null; } + } interactable = false; Workspace.Instance.RecordEvent("Keyframe move"); @@ -154,25 +182,60 @@ namespace RimWorldAnimationStudio { base.Update(); + // Update outdated values + if (Workspace.keyframeID.NullOrEmpty() || Workspace.keyframeID.Contains(keyframeID) == false) + { linkedSlider = null; } + + else if (AnimationController.Instance.stretchKeyframesToggle.isOn && linkedSlider != null && linkedSlider.IsPivotKeyframe(keyframe) == false) + { + //int minTick = linkedSlider.pivotKeyframe.atTick.Value + GetIndexAmongstSelectedKeyframes(); + //value = Mathf.Clamp(Mathf.CeilToInt(linkedSlider.keyframe.atTick.Value + linkedOffset * linkedSlider.ScaledOffsetFromPivot()), minTick, Workspace.StageWindowSize); + value = Mathf.CeilToInt(linkedSlider.keyframe.atTick.Value + linkedOffset * linkedSlider.ScaledOffsetFromPivot()); + } + + else if (AnimationController.Instance.stretchKeyframesToggle.isOn == false && linkedSlider != null) + { value = Mathf.Clamp(linkedSlider.keyframe.atTick.Value + linkedOffset, Constants.minTick + 1, Workspace.StageWindowSize); } + + else if (keyframe.atTick.Value != value) + { value = keyframe.atTick.Value; } + + // Update key color if (keyframe.atTick.HasValue && Workspace.keyframeID.Contains(keyframeID) && AnimationController.Instance.stageTick == keyframe.atTick.Value) { handleImage.color = Constants.ColorPurple; } else if (Workspace.keyframeID.Contains(keyframeID)) { handleImage.color = Constants.ColorCyan; } - else if (keyframe.atTick.HasValue && AnimationController.Instance.stageTick == keyframe.atTick.Value) + else if (AnimationController.Instance.stageTick == keyframe.atTick.Value) { handleImage.color = Constants.ColorPink; } else { handleImage.color = Constants.ColorGrey; } + // Show sound symbol string soundDef = Workspace.Instance.GetPawnKeyframe(actorID, keyframeID)?.soundEffect; + soundIcon.SetActive(soundDef != null && soundDef != "" && soundDef != "None"); + } - if (soundDef != null && soundDef != "" && soundDef != "None") - { soundIcon.SetActive(true); } + public float ScaledOffsetFromPivot() + { + //if (IsPivotKeyframe(keyframe)) return 1f; + if (dragTickStart == pivotKeyframe.atTick.Value) return 0f; - else - { soundIcon.SetActive(false); } + return (float)(keyframe.atTick.Value - pivotKeyframe.atTick.Value) / (dragTickStart - pivotKeyframe.atTick.Value); + } + + public bool IsPivotKeyframe(Keyframe otherKeyframe) + { + return pivotKeyframe == otherKeyframe; + } + + public int GetIndexAmongstSelectedKeyframes() + { + List selectedKeyframes = Workspace.Instance.GetPawnKeyframes(Workspace.keyframeID).OrderBy(x => x.atTick)?.ToList(); + if (selectedKeyframes.NullOrEmpty() || selectedKeyframes.Contains(keyframe) == false) return -1; + + return selectedKeyframes.IndexOf(keyframe); } } } diff --git a/Assets/Scripts/GUI/StageCard.cs b/Assets/Scripts/GUI/StageCard.cs index 811eb6d4..486c84b1 100644 --- a/Assets/Scripts/GUI/StageCard.cs +++ b/Assets/Scripts/GUI/StageCard.cs @@ -64,7 +64,7 @@ namespace RimWorldAnimationStudio if (Workspace.stageID != transform.GetSiblingIndex()) { - AnimationController.Instance.stageTick = 1; + AnimationController.Instance.stageTick = Constants.minTick; Workspace.Instance.RecordEvent("Stage selected"); } diff --git a/Assets/Scripts/Managers/AnimationController.cs b/Assets/Scripts/Managers/AnimationController.cs index 15e041d3..a215599e 100644 --- a/Assets/Scripts/Managers/AnimationController.cs +++ b/Assets/Scripts/Managers/AnimationController.cs @@ -13,7 +13,7 @@ namespace RimWorldAnimationStudio { [Header("Animation settings")] public bool isAnimating = false; - public int stageTick = 1; + public int stageTick = Constants.minTick; [Header("Object references")] public Slider stageTimelineSlider; @@ -25,7 +25,7 @@ namespace RimWorldAnimationStudio public ActorCard actorCard; public Transform animationTimelines; public Transform actorBodies; - public Toggle stretchkeyframesToggle; + public Toggle stretchKeyframesToggle; public InputField playBackSpeedField; public Button playToggleButton; @@ -34,7 +34,7 @@ namespace RimWorldAnimationStudio public GameObject animationTimelinePrefab; // Private timing variables - private int lastStageTick = 1; + private int lastStageTick = Constants.minTick; private float timeSinceLastUpdate = 0; private int cycleIndex = 0; private bool isDirty = true; @@ -57,7 +57,7 @@ namespace RimWorldAnimationStudio { Initialize(); } // Update tick if animating - stageTick = Mathf.Clamp(stageTick, 1, Workspace.StageWindowSize); + stageTick = Mathf.Clamp(stageTick, Constants.minTick, Workspace.StageWindowSize); if (isAnimating) { @@ -72,12 +72,12 @@ namespace RimWorldAnimationStudio if (stageTick > Workspace.StageWindowSize) { if (stageLoopDropdown.value == 1) - { stageTick = 1; } + { stageTick = Constants.minTick; } else if (stageLoopDropdown.value >= 2) { ++cycleIndex; - stageTick = 1; + stageTick = Constants.minTick; if ((stageLoopDropdown.value == 2 && cycleIndex >= int.Parse(cyclesNormalField.text)) || (stageLoopDropdown.value == 3 && cycleIndex >= int.Parse(cyclesFastField.text))) @@ -148,7 +148,7 @@ namespace RimWorldAnimationStudio bool requiresGenitals = actor.requiredGenitals.Any(x => x == "Penis") || Workspace.animationDef.actors[actorID].isFucking; float clipPercent = (float)(stageTick % clip.duration) / clip.duration; - if (stageTick == clip.duration) clipPercent = 1f; + if (stageTick > Constants.minTick && stageTick == clip.duration) clipPercent = 1f; if (Workspace.animationDef.animationStages[Workspace.stageID].isLooping == false) { clipPercent = (float)stageTick / clip.duration; } @@ -401,7 +401,7 @@ namespace RimWorldAnimationStudio if (tickToPasteAt < 1) continue; if (tickToPasteAt > Workspace.StageWindowSize) { - if (stretchkeyframesToggle.isOn) + if (stretchKeyframesToggle.isOn) { ResizeStageWindowSize(tickToPasteAt); } else continue; @@ -487,7 +487,7 @@ namespace RimWorldAnimationStudio if (keyframe == null || clip == null) return; - if (keyframe.atTick == 1 && force == false) + if (keyframe.atTick == Constants.minTick && force == false) { Debug.LogWarning("Cannot delete key frame - the first key frame of an animation clip cannot be deleted"); return; } if (clip.keyframes.Count <= 2 && force == false) @@ -527,7 +527,7 @@ namespace RimWorldAnimationStudio if (Workspace.animationDef == null) return; int.TryParse(animationClipTimeField.text, out int newStageTick); - stageTick = Mathf.Clamp(newStageTick, 1, Workspace.StageWindowSize); + stageTick = Mathf.Clamp(newStageTick, Constants.minTick, Workspace.StageWindowSize); stageTimelineSlider.value = stageTick; } @@ -540,8 +540,11 @@ namespace RimWorldAnimationStudio Debug.Log("Resizing animation clip length to " + newStageWindowSize.ToString() + " ticks."); - if (stretchkeyframesToggle.isOn) - { StretchKeyframes(newStageWindowSize); } + if (stretchKeyframesToggle.isOn) + { + List keyframes = Workspace.animationDef.animationStages[Workspace.stageID].animationClips.SelectMany(x => x.keyframes)?.ToList(); + StretchKeyframes(keyframes, Workspace.StageWindowSize, newStageWindowSize); + } else { @@ -566,7 +569,7 @@ namespace RimWorldAnimationStudio ResizeStageWindowSize(newStageWindowSize); } - public void StretchKeyframes(int newStageWindowSize) + /*public void StretchKeyframes(int newStageWindowSize) { float scale = (float)newStageWindowSize / Workspace.StageWindowSize; @@ -580,6 +583,39 @@ namespace RimWorldAnimationStudio clip.BuildSimpleCurves(); } + }*/ + + public void StretchKeyframes(List keyframesToStretch, int v1, int v2) + { + int v0 = keyframesToStretch.Min(x => x.atTick.Value); + + if (v1 == v0) + { OffsetKeyframes(keyframesToStretch, v1, v2); return; } + + float scaleFactor = (float)(v2 - v0) / (v1 - v0); + + foreach (PawnKeyframe keyframe in keyframesToStretch) + { + keyframe.atTick = Mathf.RoundToInt(scaleFactor * (keyframe.atTick.Value - v0) + v0); + } + + foreach(PawnAnimationClip clip in Workspace.animationDef.animationStages[Workspace.stageID].animationClips) + { clip.BuildSimpleCurves(); } + } + + public void OffsetKeyframes(List keyframesToOffset, int v1, int v2) + { + float offset = v2 - v1; + + foreach (PawnKeyframe keyframe in keyframesToOffset) + { + keyframe.atTick = Mathf.RoundToInt(keyframe.atTick.Value + offset); + Debug.Log(keyframe.atTick); + Workspace.Instance.GetAnimationClipThatOwnsKeyframe(keyframe.keyframeID, out int clipID).BuildSimpleCurves(); + } + + foreach (PawnAnimationClip clip in Workspace.animationDef.animationStages[Workspace.stageID].animationClips) + { clip.BuildSimpleCurves(); } } public void ResizeStageWindowSize(int newStageWindowSize) diff --git a/Assets/Scripts/Managers/InputManager.cs b/Assets/Scripts/Managers/InputManager.cs index 69d0e21a..6afcc1d8 100644 --- a/Assets/Scripts/Managers/InputManager.cs +++ b/Assets/Scripts/Managers/InputManager.cs @@ -341,19 +341,19 @@ namespace RimWorldAnimationStudio public void ToPreviousTick() { if (Workspace.animationDef == null) return; - AnimationController.Instance.stageTick = Mathf.Clamp(AnimationController.Instance.stageTick - 1, 1, Workspace.StageWindowSize); + AnimationController.Instance.stageTick = Mathf.Clamp(AnimationController.Instance.stageTick - 1, Constants.minTick, Workspace.StageWindowSize); } public void ToNextTick() { if (Workspace.animationDef == null) return; - AnimationController.Instance.stageTick = Mathf.Clamp(AnimationController.Instance.stageTick + 1, 1, Workspace.StageWindowSize); + AnimationController.Instance.stageTick = Mathf.Clamp(AnimationController.Instance.stageTick + 1, Constants.minTick, Workspace.StageWindowSize); } public void ToFirstTick() { if (Workspace.animationDef == null) return; - AnimationController.Instance.stageTick = 1; + AnimationController.Instance.stageTick = Constants.minTick; } public void ToLastTick() diff --git a/Assets/Scripts/Math/Constants/Constants.cs b/Assets/Scripts/Math/Constants/Constants.cs index 7e783304..891f4b4c 100644 --- a/Assets/Scripts/Math/Constants/Constants.cs +++ b/Assets/Scripts/Math/Constants/Constants.cs @@ -8,6 +8,7 @@ namespace RimWorldAnimationStudio public static class Constants { public static int defaultAnimationClipLength = 600; + public static int minTick = 1; public static int minAnimationClipLength = 2; public static int maxAnimationClipLength = 9999; diff --git a/Assets/Scripts/Workspace/Workspace.cs b/Assets/Scripts/Workspace/Workspace.cs index 8101ea00..0ac8a52d 100644 --- a/Assets/Scripts/Workspace/Workspace.cs +++ b/Assets/Scripts/Workspace/Workspace.cs @@ -37,6 +37,9 @@ namespace RimWorldAnimationStudio if (animationDef.animationStages[stageID].stageWindowSize < 0) { animationDef.animationStages[stageID].stageWindowSize = animationDef.animationStages[stageID].animationClips.Select(x => x.duration).Max(); } + Debug.Log(animationDef.animationStages[stageID].stageWindowSize); + + return animationDef.animationStages[stageID].stageWindowSize; } } diff --git a/Library/ArtifactDB b/Library/ArtifactDB index 373aa6d8f146dcafc91648d86015f749dbe04af7..a4ca2c882c24f2c9d76fd5f0c832a8ae403c3394 100644 GIT binary patch delta 1504340 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