diff --git a/Library/ArtifactDB-lock b/Library/ArtifactDB-lock
index 1f30d515..6c193e41 100755
Binary files a/Library/ArtifactDB-lock and b/Library/ArtifactDB-lock differ
diff --git a/Library/Artifacts/00/0029553622f4652b4d04f3117b1be030 b/Library/Artifacts/00/0029553622f4652b4d04f3117b1be030
new file mode 100644
index 00000000..6115383f
Binary files /dev/null and b/Library/Artifacts/00/0029553622f4652b4d04f3117b1be030 differ
diff --git a/Library/Artifacts/01/018f77a97a5e5168638254a38477a88a b/Library/Artifacts/01/018f77a97a5e5168638254a38477a88a
new file mode 100644
index 00000000..b9d7bf07
Binary files /dev/null and b/Library/Artifacts/01/018f77a97a5e5168638254a38477a88a differ
diff --git a/Library/Artifacts/02/0235d73af3f17809d52b75063321a133 b/Library/Artifacts/02/0235d73af3f17809d52b75063321a133
new file mode 100644
index 00000000..8bf5650d
Binary files /dev/null and b/Library/Artifacts/02/0235d73af3f17809d52b75063321a133 differ
diff --git a/Library/Artifacts/03/0319e516784dd2531225ed315af35726 b/Library/Artifacts/03/0319e516784dd2531225ed315af35726
new file mode 100644
index 00000000..49872b9a
Binary files /dev/null and b/Library/Artifacts/03/0319e516784dd2531225ed315af35726 differ
diff --git a/Library/Artifacts/04/04826e3c71c091638b42fbe14fdead4b b/Library/Artifacts/04/04826e3c71c091638b42fbe14fdead4b
new file mode 100644
index 00000000..4928e478
Binary files /dev/null and b/Library/Artifacts/04/04826e3c71c091638b42fbe14fdead4b differ
diff --git a/Library/Artifacts/04/04f53218a4e356351cd24407acd771f4 b/Library/Artifacts/04/04f53218a4e356351cd24407acd771f4
new file mode 100644
index 00000000..4696d628
Binary files /dev/null and b/Library/Artifacts/04/04f53218a4e356351cd24407acd771f4 differ
diff --git a/Library/Artifacts/05/05183f122ab25afdfe3f0a78226aa292 b/Library/Artifacts/05/05183f122ab25afdfe3f0a78226aa292
new file mode 100644
index 00000000..923019b1
Binary files /dev/null and b/Library/Artifacts/05/05183f122ab25afdfe3f0a78226aa292 differ
diff --git a/Library/Artifacts/06/06678709961a32de6df7d467ba58e44f b/Library/Artifacts/06/06678709961a32de6df7d467ba58e44f
new file mode 100644
index 00000000..df58d1d9
Binary files /dev/null and b/Library/Artifacts/06/06678709961a32de6df7d467ba58e44f differ
diff --git a/Library/Artifacts/06/0691907d06fe1a00bb99b02867087383 b/Library/Artifacts/06/0691907d06fe1a00bb99b02867087383
new file mode 100644
index 00000000..888da98d
Binary files /dev/null and b/Library/Artifacts/06/0691907d06fe1a00bb99b02867087383 differ
diff --git a/Library/Artifacts/07/07a228cc8735ae9062bcbb7b875fc095 b/Library/Artifacts/07/07a228cc8735ae9062bcbb7b875fc095
new file mode 100644
index 00000000..e8aee214
Binary files /dev/null and b/Library/Artifacts/07/07a228cc8735ae9062bcbb7b875fc095 differ
diff --git a/Library/Artifacts/07/07aea8528868d414bf6dc18babcdf8ac b/Library/Artifacts/07/07aea8528868d414bf6dc18babcdf8ac
new file mode 100644
index 00000000..9b76128a
Binary files /dev/null and b/Library/Artifacts/07/07aea8528868d414bf6dc18babcdf8ac differ
diff --git a/Library/Artifacts/07/07ebb177881206ba5a9c666f457f779f b/Library/Artifacts/07/07ebb177881206ba5a9c666f457f779f
new file mode 100644
index 00000000..9eb04662
Binary files /dev/null and b/Library/Artifacts/07/07ebb177881206ba5a9c666f457f779f differ
diff --git a/Library/Artifacts/08/0864ef9ab5a29144ea912760a12da47b b/Library/Artifacts/08/0864ef9ab5a29144ea912760a12da47b
new file mode 100644
index 00000000..1fc93331
Binary files /dev/null and b/Library/Artifacts/08/0864ef9ab5a29144ea912760a12da47b differ
diff --git a/Library/Artifacts/09/09561b6216eb4bfcc7af5058de021aa2 b/Library/Artifacts/09/09561b6216eb4bfcc7af5058de021aa2
new file mode 100644
index 00000000..db00d1a7
Binary files /dev/null and b/Library/Artifacts/09/09561b6216eb4bfcc7af5058de021aa2 differ
diff --git a/Library/Artifacts/09/0978d7bde126d881e6a8ab3aefe236f6 b/Library/Artifacts/09/0978d7bde126d881e6a8ab3aefe236f6
new file mode 100644
index 00000000..f758a204
Binary files /dev/null and b/Library/Artifacts/09/0978d7bde126d881e6a8ab3aefe236f6 differ
diff --git a/Library/Artifacts/09/09940c50204ba97362498013542114f8 b/Library/Artifacts/09/09940c50204ba97362498013542114f8
new file mode 100644
index 00000000..178196e5
Binary files /dev/null and b/Library/Artifacts/09/09940c50204ba97362498013542114f8 differ
diff --git a/Library/Artifacts/09/09d2d7da1621699eed5de228888a9dee b/Library/Artifacts/09/09d2d7da1621699eed5de228888a9dee
new file mode 100644
index 00000000..f6dcaab2
Binary files /dev/null and b/Library/Artifacts/09/09d2d7da1621699eed5de228888a9dee differ
diff --git a/Library/Artifacts/0a/0a36e336a69d2b3bd9d76d0700bdf040 b/Library/Artifacts/0a/0a36e336a69d2b3bd9d76d0700bdf040
new file mode 100644
index 00000000..30f3de1c
Binary files /dev/null and b/Library/Artifacts/0a/0a36e336a69d2b3bd9d76d0700bdf040 differ
diff --git a/Library/Artifacts/0b/0b4aa18a3b9492174a4e28db0e4e5782 b/Library/Artifacts/0b/0b4aa18a3b9492174a4e28db0e4e5782
new file mode 100644
index 00000000..0e2bdd9e
Binary files /dev/null and b/Library/Artifacts/0b/0b4aa18a3b9492174a4e28db0e4e5782 differ
diff --git a/Library/Artifacts/0b/0bec1044075e2f7823a2b77a9d5a9eda b/Library/Artifacts/0b/0bec1044075e2f7823a2b77a9d5a9eda
new file mode 100644
index 00000000..89b97d8f
Binary files /dev/null and b/Library/Artifacts/0b/0bec1044075e2f7823a2b77a9d5a9eda differ
diff --git a/Library/Artifacts/0d/0d86772fdf9f57c1ffee2bdc554e51fd b/Library/Artifacts/0d/0d86772fdf9f57c1ffee2bdc554e51fd
new file mode 100644
index 00000000..197e0944
Binary files /dev/null and b/Library/Artifacts/0d/0d86772fdf9f57c1ffee2bdc554e51fd differ
diff --git a/Library/Artifacts/0f/0f194d15ef389f9b0b54dfab1be72e7f b/Library/Artifacts/0f/0f194d15ef389f9b0b54dfab1be72e7f
new file mode 100644
index 00000000..da746f39
Binary files /dev/null and b/Library/Artifacts/0f/0f194d15ef389f9b0b54dfab1be72e7f differ
diff --git a/Library/Artifacts/10/100bda1c9a8cb108b54f3ffbf4ddeafd b/Library/Artifacts/10/100bda1c9a8cb108b54f3ffbf4ddeafd
new file mode 100644
index 00000000..1276b5e1
Binary files /dev/null and b/Library/Artifacts/10/100bda1c9a8cb108b54f3ffbf4ddeafd differ
diff --git a/Library/Artifacts/10/10e1017b35bc3f7b653307aad2e82a09 b/Library/Artifacts/10/10e1017b35bc3f7b653307aad2e82a09
new file mode 100644
index 00000000..ec12c7f7
Binary files /dev/null and b/Library/Artifacts/10/10e1017b35bc3f7b653307aad2e82a09 differ
diff --git a/Library/Artifacts/11/1164caf7e985bfb5e09f4d11462d4b17 b/Library/Artifacts/11/1164caf7e985bfb5e09f4d11462d4b17
new file mode 100644
index 00000000..57fe414d
Binary files /dev/null and b/Library/Artifacts/11/1164caf7e985bfb5e09f4d11462d4b17 differ
diff --git a/Library/Artifacts/11/11f75eb0777026409f2a97b7b774e3b2 b/Library/Artifacts/11/11f75eb0777026409f2a97b7b774e3b2
new file mode 100644
index 00000000..cc58f5c3
Binary files /dev/null and b/Library/Artifacts/11/11f75eb0777026409f2a97b7b774e3b2 differ
diff --git a/Library/Artifacts/12/128ad65ec3ceeafcc3995a8aa16a87e0 b/Library/Artifacts/12/128ad65ec3ceeafcc3995a8aa16a87e0
new file mode 100644
index 00000000..07d9bb1c
Binary files /dev/null and b/Library/Artifacts/12/128ad65ec3ceeafcc3995a8aa16a87e0 differ
diff --git a/Library/Artifacts/12/129bb0e397b04ccfe80831aca4545d3d b/Library/Artifacts/12/129bb0e397b04ccfe80831aca4545d3d
new file mode 100644
index 00000000..f15b4c12
Binary files /dev/null and b/Library/Artifacts/12/129bb0e397b04ccfe80831aca4545d3d differ
diff --git a/Library/Artifacts/13/13aa377f7ecaca5d2eb23147726d36ed b/Library/Artifacts/13/13aa377f7ecaca5d2eb23147726d36ed
new file mode 100644
index 00000000..2ab5d69d
Binary files /dev/null and b/Library/Artifacts/13/13aa377f7ecaca5d2eb23147726d36ed differ
diff --git a/Library/Artifacts/13/13e9dc6991e4f6c923a7bfb3ff572468 b/Library/Artifacts/13/13e9dc6991e4f6c923a7bfb3ff572468
new file mode 100644
index 00000000..09f05f9c
Binary files /dev/null and b/Library/Artifacts/13/13e9dc6991e4f6c923a7bfb3ff572468 differ
diff --git a/Library/Artifacts/15/151f92c0c965ceed78248bbed5ba6139 b/Library/Artifacts/15/151f92c0c965ceed78248bbed5ba6139
new file mode 100644
index 00000000..b5f4d6bc
Binary files /dev/null and b/Library/Artifacts/15/151f92c0c965ceed78248bbed5ba6139 differ
diff --git a/Library/Artifacts/16/16156164e9ebda19212b0f9fb181c502 b/Library/Artifacts/16/16156164e9ebda19212b0f9fb181c502
new file mode 100644
index 00000000..4e92fd79
Binary files /dev/null and b/Library/Artifacts/16/16156164e9ebda19212b0f9fb181c502 differ
diff --git a/Library/Artifacts/16/16e9e4ba5be20f69bf3976cb19f3844a b/Library/Artifacts/16/16e9e4ba5be20f69bf3976cb19f3844a
new file mode 100644
index 00000000..62114ab9
Binary files /dev/null and b/Library/Artifacts/16/16e9e4ba5be20f69bf3976cb19f3844a differ
diff --git a/Library/Artifacts/17/1717f883727db3be9a6500f8c454fe56 b/Library/Artifacts/17/1717f883727db3be9a6500f8c454fe56
new file mode 100644
index 00000000..c9761fe4
Binary files /dev/null and b/Library/Artifacts/17/1717f883727db3be9a6500f8c454fe56 differ
diff --git a/Library/Artifacts/18/188106e1a9bc702527d3eb740c1fd9ea b/Library/Artifacts/18/188106e1a9bc702527d3eb740c1fd9ea
new file mode 100644
index 00000000..dcdd39f1
Binary files /dev/null and b/Library/Artifacts/18/188106e1a9bc702527d3eb740c1fd9ea differ
diff --git a/Library/Artifacts/18/18d54db495959931997ee29a40c46ec8 b/Library/Artifacts/18/18d54db495959931997ee29a40c46ec8
new file mode 100644
index 00000000..dbb3cb63
Binary files /dev/null and b/Library/Artifacts/18/18d54db495959931997ee29a40c46ec8 differ
diff --git a/Library/Artifacts/1a/1aa57bbb13d72155b0dbf6a92ec3e5dd b/Library/Artifacts/1a/1aa57bbb13d72155b0dbf6a92ec3e5dd
new file mode 100644
index 00000000..5b2d8604
Binary files /dev/null and b/Library/Artifacts/1a/1aa57bbb13d72155b0dbf6a92ec3e5dd differ
diff --git a/Library/Artifacts/1b/1b3b19b85995902ef625fb69e62399f6 b/Library/Artifacts/1b/1b3b19b85995902ef625fb69e62399f6
new file mode 100644
index 00000000..49f517d4
Binary files /dev/null and b/Library/Artifacts/1b/1b3b19b85995902ef625fb69e62399f6 differ
diff --git a/Library/Artifacts/1b/1b947c385c1c919dbc7da4cf5ad1c3bf b/Library/Artifacts/1b/1b947c385c1c919dbc7da4cf5ad1c3bf
new file mode 100644
index 00000000..52eb2256
Binary files /dev/null and b/Library/Artifacts/1b/1b947c385c1c919dbc7da4cf5ad1c3bf differ
diff --git a/Library/Artifacts/1b/1bfd0003ed7d0e62ff47ee625478fbd9 b/Library/Artifacts/1b/1bfd0003ed7d0e62ff47ee625478fbd9
new file mode 100644
index 00000000..f0c8fd64
Binary files /dev/null and b/Library/Artifacts/1b/1bfd0003ed7d0e62ff47ee625478fbd9 differ
diff --git a/Library/Artifacts/1c/1cb2d3230fde7ab38c27ad3638f1494c b/Library/Artifacts/1c/1cb2d3230fde7ab38c27ad3638f1494c
new file mode 100644
index 00000000..a769132c
Binary files /dev/null and b/Library/Artifacts/1c/1cb2d3230fde7ab38c27ad3638f1494c differ
diff --git a/Library/Artifacts/1d/1d534fcda05926335b191fd84c38a0d5 b/Library/Artifacts/1d/1d534fcda05926335b191fd84c38a0d5
new file mode 100644
index 00000000..6ed369f5
Binary files /dev/null and b/Library/Artifacts/1d/1d534fcda05926335b191fd84c38a0d5 differ
diff --git a/Library/Artifacts/1e/1e055896de29cde05f093b70f8cc4ccd b/Library/Artifacts/1e/1e055896de29cde05f093b70f8cc4ccd
new file mode 100644
index 00000000..feda014d
Binary files /dev/null and b/Library/Artifacts/1e/1e055896de29cde05f093b70f8cc4ccd differ
diff --git a/Library/Artifacts/1f/1f4bd39e26a4853d8ffc6548bfd25379 b/Library/Artifacts/1f/1f4bd39e26a4853d8ffc6548bfd25379
new file mode 100644
index 00000000..fce628d6
Binary files /dev/null and b/Library/Artifacts/1f/1f4bd39e26a4853d8ffc6548bfd25379 differ
diff --git a/Library/Artifacts/20/203ebf043b7883971e794d53f87519f2 b/Library/Artifacts/20/203ebf043b7883971e794d53f87519f2
new file mode 100644
index 00000000..54db8d8b
Binary files /dev/null and b/Library/Artifacts/20/203ebf043b7883971e794d53f87519f2 differ
diff --git a/Library/Artifacts/22/2227c75a8ae319f529e08066aac39d2a b/Library/Artifacts/22/2227c75a8ae319f529e08066aac39d2a
new file mode 100644
index 00000000..4cf7ca70
Binary files /dev/null and b/Library/Artifacts/22/2227c75a8ae319f529e08066aac39d2a differ
diff --git a/Library/Artifacts/22/224ec6a13599e6d17ce2325accf7fd81 b/Library/Artifacts/22/224ec6a13599e6d17ce2325accf7fd81
new file mode 100644
index 00000000..5eea18f8
Binary files /dev/null and b/Library/Artifacts/22/224ec6a13599e6d17ce2325accf7fd81 differ
diff --git a/Library/Artifacts/22/22f6caa03b2f9dd789b94f0aedaf196c b/Library/Artifacts/22/22f6caa03b2f9dd789b94f0aedaf196c
new file mode 100644
index 00000000..940cd9a1
Binary files /dev/null and b/Library/Artifacts/22/22f6caa03b2f9dd789b94f0aedaf196c differ
diff --git a/Library/Artifacts/23/2354ac2a4860f8fa2f6e549023b0c512 b/Library/Artifacts/23/2354ac2a4860f8fa2f6e549023b0c512
new file mode 100644
index 00000000..425b6597
Binary files /dev/null and b/Library/Artifacts/23/2354ac2a4860f8fa2f6e549023b0c512 differ
diff --git a/Library/Artifacts/23/236ea775f159b219e2f899f11fa657a1 b/Library/Artifacts/23/236ea775f159b219e2f899f11fa657a1
new file mode 100644
index 00000000..7a071930
Binary files /dev/null and b/Library/Artifacts/23/236ea775f159b219e2f899f11fa657a1 differ
diff --git a/Library/Artifacts/24/24b0781da1483be7da27e64e13deaf01 b/Library/Artifacts/24/24b0781da1483be7da27e64e13deaf01
new file mode 100644
index 00000000..723ad022
Binary files /dev/null and b/Library/Artifacts/24/24b0781da1483be7da27e64e13deaf01 differ
diff --git a/Library/Artifacts/25/25edf3423bd57d4ff609d635587d107d b/Library/Artifacts/25/25edf3423bd57d4ff609d635587d107d
new file mode 100644
index 00000000..ce8de858
Binary files /dev/null and b/Library/Artifacts/25/25edf3423bd57d4ff609d635587d107d differ
diff --git a/Library/Artifacts/29/2981d9e4371abc8570aecd1a2b474acd b/Library/Artifacts/29/2981d9e4371abc8570aecd1a2b474acd
new file mode 100644
index 00000000..738226c3
Binary files /dev/null and b/Library/Artifacts/29/2981d9e4371abc8570aecd1a2b474acd differ
diff --git a/Library/Artifacts/29/29efd15da8694506dbae418a3266fb0c b/Library/Artifacts/29/29efd15da8694506dbae418a3266fb0c
new file mode 100644
index 00000000..65dde698
Binary files /dev/null and b/Library/Artifacts/29/29efd15da8694506dbae418a3266fb0c differ
diff --git a/Library/Artifacts/29/29fc7860d2bc4a276bb845d66add609e b/Library/Artifacts/29/29fc7860d2bc4a276bb845d66add609e
new file mode 100644
index 00000000..1117c200
Binary files /dev/null and b/Library/Artifacts/29/29fc7860d2bc4a276bb845d66add609e differ
diff --git a/Library/Artifacts/2a/2a0a0e2b8855dade864a57ef78fa6096 b/Library/Artifacts/2a/2a0a0e2b8855dade864a57ef78fa6096
new file mode 100644
index 00000000..d86dbc6e
Binary files /dev/null and b/Library/Artifacts/2a/2a0a0e2b8855dade864a57ef78fa6096 differ
diff --git a/Library/Artifacts/2b/2b237c789dd92013876d4846702f25dd b/Library/Artifacts/2b/2b237c789dd92013876d4846702f25dd
new file mode 100644
index 00000000..e608d851
Binary files /dev/null and b/Library/Artifacts/2b/2b237c789dd92013876d4846702f25dd differ
diff --git a/Library/Artifacts/2b/2bd8b416c326a29384172dd93b03f112 b/Library/Artifacts/2b/2bd8b416c326a29384172dd93b03f112
new file mode 100644
index 00000000..f9727f0b
Binary files /dev/null and b/Library/Artifacts/2b/2bd8b416c326a29384172dd93b03f112 differ
diff --git a/Library/Artifacts/2c/2c8fda20103541bca7670095933d8319 b/Library/Artifacts/2c/2c8fda20103541bca7670095933d8319
new file mode 100644
index 00000000..e95f7e5b
Binary files /dev/null and b/Library/Artifacts/2c/2c8fda20103541bca7670095933d8319 differ
diff --git a/Library/Artifacts/2d/2d24c507aea9ed16cf7aae1ef98e0020 b/Library/Artifacts/2d/2d24c507aea9ed16cf7aae1ef98e0020
new file mode 100644
index 00000000..2c8fa4d2
Binary files /dev/null and b/Library/Artifacts/2d/2d24c507aea9ed16cf7aae1ef98e0020 differ
diff --git a/Library/Artifacts/2e/2e76cf02d62238c7b0b698cf448d190c b/Library/Artifacts/2e/2e76cf02d62238c7b0b698cf448d190c
new file mode 100644
index 00000000..40b8d8f6
Binary files /dev/null and b/Library/Artifacts/2e/2e76cf02d62238c7b0b698cf448d190c differ
diff --git a/Library/Artifacts/2e/2ef4f5f364bee48a33baeb15f0a967c7 b/Library/Artifacts/2e/2ef4f5f364bee48a33baeb15f0a967c7
new file mode 100644
index 00000000..68cc93d6
Binary files /dev/null and b/Library/Artifacts/2e/2ef4f5f364bee48a33baeb15f0a967c7 differ
diff --git a/Library/Artifacts/30/304f62abf756f4621ba65ebd641f3d35 b/Library/Artifacts/30/304f62abf756f4621ba65ebd641f3d35
new file mode 100644
index 00000000..a1918a2c
Binary files /dev/null and b/Library/Artifacts/30/304f62abf756f4621ba65ebd641f3d35 differ
diff --git a/Library/Artifacts/31/31945a6caa51332e9a6df65bc4fb459d b/Library/Artifacts/31/31945a6caa51332e9a6df65bc4fb459d
new file mode 100644
index 00000000..a4f8d7e6
Binary files /dev/null and b/Library/Artifacts/31/31945a6caa51332e9a6df65bc4fb459d differ
diff --git a/Library/Artifacts/32/320b3ceef7a57aec4ddd7e3c525bca4c b/Library/Artifacts/32/320b3ceef7a57aec4ddd7e3c525bca4c
new file mode 100644
index 00000000..3917f857
Binary files /dev/null and b/Library/Artifacts/32/320b3ceef7a57aec4ddd7e3c525bca4c differ
diff --git a/Library/Artifacts/32/32abc32c975b3836b2ed274acfccf53c b/Library/Artifacts/32/32abc32c975b3836b2ed274acfccf53c
new file mode 100644
index 00000000..bebcbba4
Binary files /dev/null and b/Library/Artifacts/32/32abc32c975b3836b2ed274acfccf53c differ
diff --git a/Library/Artifacts/33/3332ecd8e44400f6087306090b112b2b b/Library/Artifacts/33/3332ecd8e44400f6087306090b112b2b
new file mode 100644
index 00000000..5f230f7a
Binary files /dev/null and b/Library/Artifacts/33/3332ecd8e44400f6087306090b112b2b differ
diff --git a/Library/Artifacts/33/33b7d8861d79a8b58de7caa5c61ec0bf b/Library/Artifacts/33/33b7d8861d79a8b58de7caa5c61ec0bf
new file mode 100644
index 00000000..b09859db
Binary files /dev/null and b/Library/Artifacts/33/33b7d8861d79a8b58de7caa5c61ec0bf differ
diff --git a/Library/Artifacts/34/34853110ead7040c0872c4a4bf125307 b/Library/Artifacts/34/34853110ead7040c0872c4a4bf125307
new file mode 100644
index 00000000..63d74f17
Binary files /dev/null and b/Library/Artifacts/34/34853110ead7040c0872c4a4bf125307 differ
diff --git a/Library/Artifacts/34/34a3a1f29149954d395622940719a91e b/Library/Artifacts/34/34a3a1f29149954d395622940719a91e
new file mode 100644
index 00000000..f7b619e4
Binary files /dev/null and b/Library/Artifacts/34/34a3a1f29149954d395622940719a91e differ
diff --git a/Library/Artifacts/34/34f83d522472dabf7bdea1f5cec9dd6d b/Library/Artifacts/34/34f83d522472dabf7bdea1f5cec9dd6d
new file mode 100644
index 00000000..c212f9fc
Binary files /dev/null and b/Library/Artifacts/34/34f83d522472dabf7bdea1f5cec9dd6d differ
diff --git a/Library/Artifacts/35/352889b5da1c4eac43ea41bd1ca3c4af b/Library/Artifacts/35/352889b5da1c4eac43ea41bd1ca3c4af
new file mode 100644
index 00000000..5a5db64c
Binary files /dev/null and b/Library/Artifacts/35/352889b5da1c4eac43ea41bd1ca3c4af differ
diff --git a/Library/Artifacts/35/353423a7a39b02ae206470d332899644 b/Library/Artifacts/35/353423a7a39b02ae206470d332899644
new file mode 100644
index 00000000..4ddf2d99
Binary files /dev/null and b/Library/Artifacts/35/353423a7a39b02ae206470d332899644 differ
diff --git a/Library/Artifacts/35/3587a77daea791ca48112a1ee7a10017 b/Library/Artifacts/35/3587a77daea791ca48112a1ee7a10017
new file mode 100644
index 00000000..4278bc59
Binary files /dev/null and b/Library/Artifacts/35/3587a77daea791ca48112a1ee7a10017 differ
diff --git a/Library/Artifacts/36/36f68805e14f8be8c5ac6b33da631007 b/Library/Artifacts/36/36f68805e14f8be8c5ac6b33da631007
new file mode 100644
index 00000000..ea3c78a1
Binary files /dev/null and b/Library/Artifacts/36/36f68805e14f8be8c5ac6b33da631007 differ
diff --git a/Library/Artifacts/38/38452b9f0a486f74089817d199d33755 b/Library/Artifacts/38/38452b9f0a486f74089817d199d33755
new file mode 100644
index 00000000..b39cf9ae
Binary files /dev/null and b/Library/Artifacts/38/38452b9f0a486f74089817d199d33755 differ
diff --git a/Library/Artifacts/38/38d2169dc79e3d616dd2482ee13013e5 b/Library/Artifacts/38/38d2169dc79e3d616dd2482ee13013e5
new file mode 100644
index 00000000..1af083c3
Binary files /dev/null and b/Library/Artifacts/38/38d2169dc79e3d616dd2482ee13013e5 differ
diff --git a/Library/Artifacts/39/39c13f94790d5eae484c7a422ed5a29f b/Library/Artifacts/39/39c13f94790d5eae484c7a422ed5a29f
new file mode 100644
index 00000000..eaa7af16
Binary files /dev/null and b/Library/Artifacts/39/39c13f94790d5eae484c7a422ed5a29f differ
diff --git a/Library/Artifacts/3b/3b074ca21462d01cfc2ee660f1410c92 b/Library/Artifacts/3b/3b074ca21462d01cfc2ee660f1410c92
new file mode 100644
index 00000000..0f65bf08
Binary files /dev/null and b/Library/Artifacts/3b/3b074ca21462d01cfc2ee660f1410c92 differ
diff --git a/Library/Artifacts/3b/3b5017c081b93345d0a011d753dc7774 b/Library/Artifacts/3b/3b5017c081b93345d0a011d753dc7774
new file mode 100644
index 00000000..b47e5001
Binary files /dev/null and b/Library/Artifacts/3b/3b5017c081b93345d0a011d753dc7774 differ
diff --git a/Library/Artifacts/3b/3b6424e29732be156d448fcf94e8a280 b/Library/Artifacts/3b/3b6424e29732be156d448fcf94e8a280
new file mode 100644
index 00000000..d376e393
Binary files /dev/null and b/Library/Artifacts/3b/3b6424e29732be156d448fcf94e8a280 differ
diff --git a/Library/Artifacts/3b/3b69adb9f6edbab6a4e308fea3b6938f b/Library/Artifacts/3b/3b69adb9f6edbab6a4e308fea3b6938f
new file mode 100644
index 00000000..0885cd5d
Binary files /dev/null and b/Library/Artifacts/3b/3b69adb9f6edbab6a4e308fea3b6938f differ
diff --git a/Library/Artifacts/3b/3bf061e49b972f0cb5a5af5868f736bd b/Library/Artifacts/3b/3bf061e49b972f0cb5a5af5868f736bd
new file mode 100644
index 00000000..70d7d694
Binary files /dev/null and b/Library/Artifacts/3b/3bf061e49b972f0cb5a5af5868f736bd differ
diff --git a/Library/Artifacts/3c/3cf62292aa7e235f59c535bcfcb45ca6 b/Library/Artifacts/3c/3cf62292aa7e235f59c535bcfcb45ca6
new file mode 100644
index 00000000..d1c615dd
Binary files /dev/null and b/Library/Artifacts/3c/3cf62292aa7e235f59c535bcfcb45ca6 differ
diff --git a/Library/Artifacts/3c/3cf81f281d892f723a9d66b574293809 b/Library/Artifacts/3c/3cf81f281d892f723a9d66b574293809
new file mode 100644
index 00000000..f8e5fadd
Binary files /dev/null and b/Library/Artifacts/3c/3cf81f281d892f723a9d66b574293809 differ
diff --git a/Library/Artifacts/3e/3e1657142e4a828b6f147f672d395401 b/Library/Artifacts/3e/3e1657142e4a828b6f147f672d395401
new file mode 100644
index 00000000..fc5cc853
Binary files /dev/null and b/Library/Artifacts/3e/3e1657142e4a828b6f147f672d395401 differ
diff --git a/Library/Artifacts/3e/3e3b2f98d0d29d208523e5d1fe5860e2 b/Library/Artifacts/3e/3e3b2f98d0d29d208523e5d1fe5860e2
new file mode 100644
index 00000000..7665ab78
Binary files /dev/null and b/Library/Artifacts/3e/3e3b2f98d0d29d208523e5d1fe5860e2 differ
diff --git a/Library/Artifacts/40/406667e0cc5682769fcdf8f6699be745 b/Library/Artifacts/40/406667e0cc5682769fcdf8f6699be745
new file mode 100644
index 00000000..9dc4d57f
Binary files /dev/null and b/Library/Artifacts/40/406667e0cc5682769fcdf8f6699be745 differ
diff --git a/Library/Artifacts/41/41a84cab0d072025bb53771fd8893c35 b/Library/Artifacts/41/41a84cab0d072025bb53771fd8893c35
new file mode 100644
index 00000000..d8755d7b
Binary files /dev/null and b/Library/Artifacts/41/41a84cab0d072025bb53771fd8893c35 differ
diff --git a/Library/Artifacts/42/420e4ba47707afd7407e3ee22ecb6a3d b/Library/Artifacts/42/420e4ba47707afd7407e3ee22ecb6a3d
new file mode 100644
index 00000000..b653c69c
Binary files /dev/null and b/Library/Artifacts/42/420e4ba47707afd7407e3ee22ecb6a3d differ
diff --git a/Library/Artifacts/42/424c45d065a2d8cf1eff299c498e49fc b/Library/Artifacts/42/424c45d065a2d8cf1eff299c498e49fc
new file mode 100644
index 00000000..af2a3462
Binary files /dev/null and b/Library/Artifacts/42/424c45d065a2d8cf1eff299c498e49fc differ
diff --git a/Library/Artifacts/45/45c5e23ead47f77d42597b0c5d63a6f8 b/Library/Artifacts/45/45c5e23ead47f77d42597b0c5d63a6f8
new file mode 100644
index 00000000..5e530ed6
Binary files /dev/null and b/Library/Artifacts/45/45c5e23ead47f77d42597b0c5d63a6f8 differ
diff --git a/Library/Artifacts/45/45d4b980bf1e4c3c67a71aa8c96653b3 b/Library/Artifacts/45/45d4b980bf1e4c3c67a71aa8c96653b3
new file mode 100644
index 00000000..a28b92b3
Binary files /dev/null and b/Library/Artifacts/45/45d4b980bf1e4c3c67a71aa8c96653b3 differ
diff --git a/Library/Artifacts/46/4604ae599492d72d6d7711ff0ba6926d b/Library/Artifacts/46/4604ae599492d72d6d7711ff0ba6926d
new file mode 100644
index 00000000..cda7ae9f
Binary files /dev/null and b/Library/Artifacts/46/4604ae599492d72d6d7711ff0ba6926d differ
diff --git a/Library/Artifacts/46/4631034e8ff998a51a6066934e93691f b/Library/Artifacts/46/4631034e8ff998a51a6066934e93691f
new file mode 100644
index 00000000..0b26875b
Binary files /dev/null and b/Library/Artifacts/46/4631034e8ff998a51a6066934e93691f differ
diff --git a/Library/Artifacts/49/49bb006419ba74e2b0fb7e971bf578d1 b/Library/Artifacts/49/49bb006419ba74e2b0fb7e971bf578d1
new file mode 100644
index 00000000..b004a2a9
Binary files /dev/null and b/Library/Artifacts/49/49bb006419ba74e2b0fb7e971bf578d1 differ
diff --git a/Library/Artifacts/4a/4ae0c70a5192bc431d2713c41c473ad8 b/Library/Artifacts/4a/4ae0c70a5192bc431d2713c41c473ad8
new file mode 100644
index 00000000..89c8faff
Binary files /dev/null and b/Library/Artifacts/4a/4ae0c70a5192bc431d2713c41c473ad8 differ
diff --git a/Library/Artifacts/4b/4b29793b03d2af826cbf1d4b86c414ab b/Library/Artifacts/4b/4b29793b03d2af826cbf1d4b86c414ab
new file mode 100644
index 00000000..cbc84d5a
Binary files /dev/null and b/Library/Artifacts/4b/4b29793b03d2af826cbf1d4b86c414ab differ
diff --git a/Library/Artifacts/4c/4c298ebd09a0ca6558380c4f062fe6f7 b/Library/Artifacts/4c/4c298ebd09a0ca6558380c4f062fe6f7
new file mode 100644
index 00000000..fecb3706
Binary files /dev/null and b/Library/Artifacts/4c/4c298ebd09a0ca6558380c4f062fe6f7 differ
diff --git a/Library/Artifacts/4d/4d4e959f0be9775c2a504aa6be9c05d6 b/Library/Artifacts/4d/4d4e959f0be9775c2a504aa6be9c05d6
new file mode 100644
index 00000000..06092442
Binary files /dev/null and b/Library/Artifacts/4d/4d4e959f0be9775c2a504aa6be9c05d6 differ
diff --git a/Library/Artifacts/4d/4d7304dde45857b53a4d1dbec5e98e63 b/Library/Artifacts/4d/4d7304dde45857b53a4d1dbec5e98e63
new file mode 100644
index 00000000..bc34d2c5
Binary files /dev/null and b/Library/Artifacts/4d/4d7304dde45857b53a4d1dbec5e98e63 differ
diff --git a/Library/Artifacts/4d/4dd260c46c332d0257e8c05afe86723b b/Library/Artifacts/4d/4dd260c46c332d0257e8c05afe86723b
new file mode 100644
index 00000000..f6691039
Binary files /dev/null and b/Library/Artifacts/4d/4dd260c46c332d0257e8c05afe86723b differ
diff --git a/Library/Artifacts/4f/4f22116333244dd1da6ef105875cd32d b/Library/Artifacts/4f/4f22116333244dd1da6ef105875cd32d
new file mode 100644
index 00000000..6448cf7b
Binary files /dev/null and b/Library/Artifacts/4f/4f22116333244dd1da6ef105875cd32d differ
diff --git a/Library/Artifacts/4f/4f99927a3a18e52e3e116a2d2a571c62 b/Library/Artifacts/4f/4f99927a3a18e52e3e116a2d2a571c62
new file mode 100644
index 00000000..05308264
Binary files /dev/null and b/Library/Artifacts/4f/4f99927a3a18e52e3e116a2d2a571c62 differ
diff --git a/Library/Artifacts/50/50f780043df38608c1a89851e0f00472 b/Library/Artifacts/50/50f780043df38608c1a89851e0f00472
new file mode 100644
index 00000000..676f5454
Binary files /dev/null and b/Library/Artifacts/50/50f780043df38608c1a89851e0f00472 differ
diff --git a/Library/Artifacts/54/5451d6c779275a710c178a4358733479 b/Library/Artifacts/54/5451d6c779275a710c178a4358733479
new file mode 100644
index 00000000..92ba1f2a
Binary files /dev/null and b/Library/Artifacts/54/5451d6c779275a710c178a4358733479 differ
diff --git a/Library/Artifacts/54/546ddeaeb7ff2b87b8e4604d7b208817 b/Library/Artifacts/54/546ddeaeb7ff2b87b8e4604d7b208817
new file mode 100644
index 00000000..ddd87942
Binary files /dev/null and b/Library/Artifacts/54/546ddeaeb7ff2b87b8e4604d7b208817 differ
diff --git a/Library/Artifacts/54/547146d67f76a9e6e3119a81fdc4d9c5 b/Library/Artifacts/54/547146d67f76a9e6e3119a81fdc4d9c5
new file mode 100644
index 00000000..e1629b07
Binary files /dev/null and b/Library/Artifacts/54/547146d67f76a9e6e3119a81fdc4d9c5 differ
diff --git a/Library/Artifacts/54/54bfc44f51ffc0294ba020608f81046c b/Library/Artifacts/54/54bfc44f51ffc0294ba020608f81046c
new file mode 100644
index 00000000..e6bc1ba8
Binary files /dev/null and b/Library/Artifacts/54/54bfc44f51ffc0294ba020608f81046c differ
diff --git a/Library/Artifacts/55/554bfd9e663480607e342b531a8c7b5c b/Library/Artifacts/55/554bfd9e663480607e342b531a8c7b5c
new file mode 100644
index 00000000..aef9374e
Binary files /dev/null and b/Library/Artifacts/55/554bfd9e663480607e342b531a8c7b5c differ
diff --git a/Library/Artifacts/55/5577302bc316cd4dd66349f830e65d91 b/Library/Artifacts/55/5577302bc316cd4dd66349f830e65d91
new file mode 100644
index 00000000..97fe0f99
Binary files /dev/null and b/Library/Artifacts/55/5577302bc316cd4dd66349f830e65d91 differ
diff --git a/Library/Artifacts/56/56d9d60050f26a7a6fce178993df3da1 b/Library/Artifacts/56/56d9d60050f26a7a6fce178993df3da1
new file mode 100644
index 00000000..4e356c6f
Binary files /dev/null and b/Library/Artifacts/56/56d9d60050f26a7a6fce178993df3da1 differ
diff --git a/Library/Artifacts/57/5708a0c8a5ef97b0ad360337681b201d b/Library/Artifacts/57/5708a0c8a5ef97b0ad360337681b201d
new file mode 100644
index 00000000..85c9e438
Binary files /dev/null and b/Library/Artifacts/57/5708a0c8a5ef97b0ad360337681b201d differ
diff --git a/Library/Artifacts/5b/5b6127d2d88693c0dd48250c84ce84ad b/Library/Artifacts/5b/5b6127d2d88693c0dd48250c84ce84ad
new file mode 100644
index 00000000..50fa0de1
Binary files /dev/null and b/Library/Artifacts/5b/5b6127d2d88693c0dd48250c84ce84ad differ
diff --git a/Library/Artifacts/5c/5c24f9dcc64551ecf234f9557370ab51 b/Library/Artifacts/5c/5c24f9dcc64551ecf234f9557370ab51
new file mode 100644
index 00000000..b397e632
Binary files /dev/null and b/Library/Artifacts/5c/5c24f9dcc64551ecf234f9557370ab51 differ
diff --git a/Library/Artifacts/5c/5c3c9a14c1653389c5bf59dd619ca029 b/Library/Artifacts/5c/5c3c9a14c1653389c5bf59dd619ca029
new file mode 100644
index 00000000..44bace03
Binary files /dev/null and b/Library/Artifacts/5c/5c3c9a14c1653389c5bf59dd619ca029 differ
diff --git a/Library/Artifacts/5d/5d2763d7fe83e5315d2c0814e6261fc2 b/Library/Artifacts/5d/5d2763d7fe83e5315d2c0814e6261fc2
new file mode 100644
index 00000000..95a7448f
Binary files /dev/null and b/Library/Artifacts/5d/5d2763d7fe83e5315d2c0814e6261fc2 differ
diff --git a/Library/Artifacts/5d/5d631262502e4c66155f7600c2abef9c b/Library/Artifacts/5d/5d631262502e4c66155f7600c2abef9c
new file mode 100644
index 00000000..0283aa4d
Binary files /dev/null and b/Library/Artifacts/5d/5d631262502e4c66155f7600c2abef9c differ
diff --git a/Library/Artifacts/5d/5dc813644eb6f963622c744efc5f1ac4 b/Library/Artifacts/5d/5dc813644eb6f963622c744efc5f1ac4
new file mode 100644
index 00000000..66cd83c8
Binary files /dev/null and b/Library/Artifacts/5d/5dc813644eb6f963622c744efc5f1ac4 differ
diff --git a/Library/Artifacts/5f/5f03e37f66cabdf43a63357342f511f6 b/Library/Artifacts/5f/5f03e37f66cabdf43a63357342f511f6
new file mode 100644
index 00000000..429dd435
Binary files /dev/null and b/Library/Artifacts/5f/5f03e37f66cabdf43a63357342f511f6 differ
diff --git a/Library/Artifacts/5f/5f28799c47374b2f9147e8afe59f85f0 b/Library/Artifacts/5f/5f28799c47374b2f9147e8afe59f85f0
new file mode 100644
index 00000000..9f02e12a
Binary files /dev/null and b/Library/Artifacts/5f/5f28799c47374b2f9147e8afe59f85f0 differ
diff --git a/Library/Artifacts/60/607ba79e923f1e8a7e13ce5d86fdb043 b/Library/Artifacts/60/607ba79e923f1e8a7e13ce5d86fdb043
new file mode 100644
index 00000000..24f17394
Binary files /dev/null and b/Library/Artifacts/60/607ba79e923f1e8a7e13ce5d86fdb043 differ
diff --git a/Library/Artifacts/63/630aaf83b178d5e0af73a716e4d051fa b/Library/Artifacts/63/630aaf83b178d5e0af73a716e4d051fa
new file mode 100644
index 00000000..05da2fe2
Binary files /dev/null and b/Library/Artifacts/63/630aaf83b178d5e0af73a716e4d051fa differ
diff --git a/Library/Artifacts/63/634a21967e8e49a06accb7a952f866b5 b/Library/Artifacts/63/634a21967e8e49a06accb7a952f866b5
new file mode 100644
index 00000000..10de5939
Binary files /dev/null and b/Library/Artifacts/63/634a21967e8e49a06accb7a952f866b5 differ
diff --git a/Library/Artifacts/63/635bc2b1ef7a91229d3d62e8d1d0f12e b/Library/Artifacts/63/635bc2b1ef7a91229d3d62e8d1d0f12e
new file mode 100644
index 00000000..e0f95c55
Binary files /dev/null and b/Library/Artifacts/63/635bc2b1ef7a91229d3d62e8d1d0f12e differ
diff --git a/Library/Artifacts/64/649c69c6a322d9841d2babe51987f41e b/Library/Artifacts/64/649c69c6a322d9841d2babe51987f41e
new file mode 100644
index 00000000..a7d36516
Binary files /dev/null and b/Library/Artifacts/64/649c69c6a322d9841d2babe51987f41e differ
diff --git a/Library/Artifacts/65/65ed9f65e348230d25dbd1d1ffd8a715 b/Library/Artifacts/65/65ed9f65e348230d25dbd1d1ffd8a715
new file mode 100644
index 00000000..48d6da57
Binary files /dev/null and b/Library/Artifacts/65/65ed9f65e348230d25dbd1d1ffd8a715 differ
diff --git a/Library/Artifacts/67/672f517860da5bdd0cc2054954e98ab2 b/Library/Artifacts/67/672f517860da5bdd0cc2054954e98ab2
new file mode 100644
index 00000000..bd5d7fdb
Binary files /dev/null and b/Library/Artifacts/67/672f517860da5bdd0cc2054954e98ab2 differ
diff --git a/Library/Artifacts/68/680391bc9e7a703420c1670bc942547a b/Library/Artifacts/68/680391bc9e7a703420c1670bc942547a
new file mode 100644
index 00000000..c44f804e
Binary files /dev/null and b/Library/Artifacts/68/680391bc9e7a703420c1670bc942547a differ
diff --git a/Library/Artifacts/68/684bdd2404ff09aa3d0b6bb769043111 b/Library/Artifacts/68/684bdd2404ff09aa3d0b6bb769043111
new file mode 100644
index 00000000..bc170e7a
Binary files /dev/null and b/Library/Artifacts/68/684bdd2404ff09aa3d0b6bb769043111 differ
diff --git a/Library/Artifacts/68/68c0ea01436b0bfa9706c09f2afd94e8 b/Library/Artifacts/68/68c0ea01436b0bfa9706c09f2afd94e8
new file mode 100644
index 00000000..74033488
Binary files /dev/null and b/Library/Artifacts/68/68c0ea01436b0bfa9706c09f2afd94e8 differ
diff --git a/Library/Artifacts/6b/6b34e585142c9cd10c84522020fb3ee9 b/Library/Artifacts/6b/6b34e585142c9cd10c84522020fb3ee9
new file mode 100644
index 00000000..5c9df90c
Binary files /dev/null and b/Library/Artifacts/6b/6b34e585142c9cd10c84522020fb3ee9 differ
diff --git a/Library/Artifacts/6b/6bd378349c90e0156da8a8522dc42aed b/Library/Artifacts/6b/6bd378349c90e0156da8a8522dc42aed
new file mode 100644
index 00000000..2a8b7727
Binary files /dev/null and b/Library/Artifacts/6b/6bd378349c90e0156da8a8522dc42aed differ
diff --git a/Library/Artifacts/6b/6bf9bd506572220aad5b79233cbb8a77 b/Library/Artifacts/6b/6bf9bd506572220aad5b79233cbb8a77
new file mode 100644
index 00000000..b39c9fcc
Binary files /dev/null and b/Library/Artifacts/6b/6bf9bd506572220aad5b79233cbb8a77 differ
diff --git a/Library/Artifacts/6c/6c94abf3225039283c66beb87d46cade b/Library/Artifacts/6c/6c94abf3225039283c66beb87d46cade
new file mode 100644
index 00000000..c0a582bf
Binary files /dev/null and b/Library/Artifacts/6c/6c94abf3225039283c66beb87d46cade differ
diff --git a/Library/Artifacts/6d/6d5a9ee6c59a98771eebc40ad54ec4fc b/Library/Artifacts/6d/6d5a9ee6c59a98771eebc40ad54ec4fc
new file mode 100644
index 00000000..d2321d57
Binary files /dev/null and b/Library/Artifacts/6d/6d5a9ee6c59a98771eebc40ad54ec4fc differ
diff --git a/Library/Artifacts/6f/6f4479102c1b3f82cb7e111db9e8853e b/Library/Artifacts/6f/6f4479102c1b3f82cb7e111db9e8853e
new file mode 100644
index 00000000..b069e00b
Binary files /dev/null and b/Library/Artifacts/6f/6f4479102c1b3f82cb7e111db9e8853e differ
diff --git a/Library/Artifacts/70/706124cb62594864e3bd864ce310be13 b/Library/Artifacts/70/706124cb62594864e3bd864ce310be13
new file mode 100644
index 00000000..d4355d62
Binary files /dev/null and b/Library/Artifacts/70/706124cb62594864e3bd864ce310be13 differ
diff --git a/Library/Artifacts/70/70693ec3297b9225047cc91365bc5b88 b/Library/Artifacts/70/70693ec3297b9225047cc91365bc5b88
new file mode 100644
index 00000000..79e4f891
Binary files /dev/null and b/Library/Artifacts/70/70693ec3297b9225047cc91365bc5b88 differ
diff --git a/Library/Artifacts/70/7085caab76a988df0db81b693ee18919 b/Library/Artifacts/70/7085caab76a988df0db81b693ee18919
new file mode 100644
index 00000000..9f26b58e
Binary files /dev/null and b/Library/Artifacts/70/7085caab76a988df0db81b693ee18919 differ
diff --git a/Library/Artifacts/70/70e81d26234bc52a8a990d330cdce000 b/Library/Artifacts/70/70e81d26234bc52a8a990d330cdce000
new file mode 100644
index 00000000..79ccbf70
Binary files /dev/null and b/Library/Artifacts/70/70e81d26234bc52a8a990d330cdce000 differ
diff --git a/Library/Artifacts/74/74c4f74fa4d4474449218023022a847e b/Library/Artifacts/74/74c4f74fa4d4474449218023022a847e
new file mode 100644
index 00000000..31b43792
Binary files /dev/null and b/Library/Artifacts/74/74c4f74fa4d4474449218023022a847e differ
diff --git a/Library/Artifacts/76/768f4b577c3db9aedbc2dcfd6c50a27f b/Library/Artifacts/76/768f4b577c3db9aedbc2dcfd6c50a27f
new file mode 100644
index 00000000..3bd07af3
Binary files /dev/null and b/Library/Artifacts/76/768f4b577c3db9aedbc2dcfd6c50a27f differ
diff --git a/Library/Artifacts/77/7730e40f312e025878c65055388330af b/Library/Artifacts/77/7730e40f312e025878c65055388330af
new file mode 100644
index 00000000..7ebb9b16
Binary files /dev/null and b/Library/Artifacts/77/7730e40f312e025878c65055388330af differ
diff --git a/Library/Artifacts/77/77421464921e5321041a8ca845969e43 b/Library/Artifacts/77/77421464921e5321041a8ca845969e43
new file mode 100644
index 00000000..b73e4b05
Binary files /dev/null and b/Library/Artifacts/77/77421464921e5321041a8ca845969e43 differ
diff --git a/Library/Artifacts/77/7763db0057241e5973ca6c62b5f9843b b/Library/Artifacts/77/7763db0057241e5973ca6c62b5f9843b
new file mode 100644
index 00000000..e4d25ef0
Binary files /dev/null and b/Library/Artifacts/77/7763db0057241e5973ca6c62b5f9843b differ
diff --git a/Library/Artifacts/79/791597a4ab0a87a3d1816447a382dbdc b/Library/Artifacts/79/791597a4ab0a87a3d1816447a382dbdc
new file mode 100644
index 00000000..d41d3725
Binary files /dev/null and b/Library/Artifacts/79/791597a4ab0a87a3d1816447a382dbdc differ
diff --git a/Library/Artifacts/79/795e57af5419189e0bb54ed8e48ccc0f b/Library/Artifacts/79/795e57af5419189e0bb54ed8e48ccc0f
new file mode 100644
index 00000000..b6a09310
Binary files /dev/null and b/Library/Artifacts/79/795e57af5419189e0bb54ed8e48ccc0f differ
diff --git a/Library/Artifacts/79/79f23255d6bc737575c9e2b39f3d5778 b/Library/Artifacts/79/79f23255d6bc737575c9e2b39f3d5778
new file mode 100644
index 00000000..e5374807
Binary files /dev/null and b/Library/Artifacts/79/79f23255d6bc737575c9e2b39f3d5778 differ
diff --git a/Library/Artifacts/7a/7ae7ae38dd3bf5e5c662a3666f38607d b/Library/Artifacts/7a/7ae7ae38dd3bf5e5c662a3666f38607d
new file mode 100644
index 00000000..e6f54c9a
Binary files /dev/null and b/Library/Artifacts/7a/7ae7ae38dd3bf5e5c662a3666f38607d differ
diff --git a/Library/Artifacts/7c/7c6e72d7347d8786aefdc9c368ba7621 b/Library/Artifacts/7c/7c6e72d7347d8786aefdc9c368ba7621
new file mode 100644
index 00000000..f2992762
Binary files /dev/null and b/Library/Artifacts/7c/7c6e72d7347d8786aefdc9c368ba7621 differ
diff --git a/Library/Artifacts/7c/7c953ca57e26d6f24101d746c85ee8be b/Library/Artifacts/7c/7c953ca57e26d6f24101d746c85ee8be
new file mode 100644
index 00000000..311cd45d
Binary files /dev/null and b/Library/Artifacts/7c/7c953ca57e26d6f24101d746c85ee8be differ
diff --git a/Library/Artifacts/7d/7d3fb7fa7aace5545076cb78d23419ae b/Library/Artifacts/7d/7d3fb7fa7aace5545076cb78d23419ae
new file mode 100644
index 00000000..1e35d1bb
Binary files /dev/null and b/Library/Artifacts/7d/7d3fb7fa7aace5545076cb78d23419ae differ
diff --git a/Library/Artifacts/7d/7d9ce3317d52a621690575c6dc805ac1 b/Library/Artifacts/7d/7d9ce3317d52a621690575c6dc805ac1
new file mode 100644
index 00000000..efd91151
Binary files /dev/null and b/Library/Artifacts/7d/7d9ce3317d52a621690575c6dc805ac1 differ
diff --git a/Library/Artifacts/7f/7f2a83d8a47c7f95e7af4eed25a85b64 b/Library/Artifacts/7f/7f2a83d8a47c7f95e7af4eed25a85b64
new file mode 100644
index 00000000..0f7e003b
Binary files /dev/null and b/Library/Artifacts/7f/7f2a83d8a47c7f95e7af4eed25a85b64 differ
diff --git a/Library/Artifacts/7f/7f580219ae2620817e2342bf21aa0a4f b/Library/Artifacts/7f/7f580219ae2620817e2342bf21aa0a4f
new file mode 100644
index 00000000..77436422
Binary files /dev/null and b/Library/Artifacts/7f/7f580219ae2620817e2342bf21aa0a4f differ
diff --git a/Library/Artifacts/7f/7fed84bf36ce518cc3a7e6c84da16512 b/Library/Artifacts/7f/7fed84bf36ce518cc3a7e6c84da16512
new file mode 100644
index 00000000..d56724f0
Binary files /dev/null and b/Library/Artifacts/7f/7fed84bf36ce518cc3a7e6c84da16512 differ
diff --git a/Library/Artifacts/82/8245b8fa0be6ceb3d205d726cc9d9dde b/Library/Artifacts/82/8245b8fa0be6ceb3d205d726cc9d9dde
new file mode 100644
index 00000000..7730b863
Binary files /dev/null and b/Library/Artifacts/82/8245b8fa0be6ceb3d205d726cc9d9dde differ
diff --git a/Library/Artifacts/82/829691f1d658a29ab544851f51914439 b/Library/Artifacts/82/829691f1d658a29ab544851f51914439
new file mode 100644
index 00000000..f10b8d70
Binary files /dev/null and b/Library/Artifacts/82/829691f1d658a29ab544851f51914439 differ
diff --git a/Library/Artifacts/82/82ec7e22c34bc1d2723f60eed857852d b/Library/Artifacts/82/82ec7e22c34bc1d2723f60eed857852d
new file mode 100644
index 00000000..9992f890
Binary files /dev/null and b/Library/Artifacts/82/82ec7e22c34bc1d2723f60eed857852d differ
diff --git a/Library/Artifacts/83/832e24de61b4e85f1f5dc7dd361af2c7 b/Library/Artifacts/83/832e24de61b4e85f1f5dc7dd361af2c7
new file mode 100644
index 00000000..3a55fe6c
Binary files /dev/null and b/Library/Artifacts/83/832e24de61b4e85f1f5dc7dd361af2c7 differ
diff --git a/Library/Artifacts/84/84bf9a008bab6b0c7bd5b5b58a0935b3 b/Library/Artifacts/84/84bf9a008bab6b0c7bd5b5b58a0935b3
new file mode 100644
index 00000000..2878ade4
Binary files /dev/null and b/Library/Artifacts/84/84bf9a008bab6b0c7bd5b5b58a0935b3 differ
diff --git a/Library/Artifacts/84/84ecd8956b31bf88db7cf16b65662776 b/Library/Artifacts/84/84ecd8956b31bf88db7cf16b65662776
new file mode 100644
index 00000000..3342b7ac
Binary files /dev/null and b/Library/Artifacts/84/84ecd8956b31bf88db7cf16b65662776 differ
diff --git a/Library/Artifacts/85/8500c4ea5fb8148f829bced786820819 b/Library/Artifacts/85/8500c4ea5fb8148f829bced786820819
new file mode 100644
index 00000000..d75d1acb
Binary files /dev/null and b/Library/Artifacts/85/8500c4ea5fb8148f829bced786820819 differ
diff --git a/Library/Artifacts/86/8640cd3a0a74de9beb6f984f37e67ee2 b/Library/Artifacts/86/8640cd3a0a74de9beb6f984f37e67ee2
new file mode 100644
index 00000000..4e568825
Binary files /dev/null and b/Library/Artifacts/86/8640cd3a0a74de9beb6f984f37e67ee2 differ
diff --git a/Library/Artifacts/86/864300d0fc7108c233cbb53aa8a4ff54 b/Library/Artifacts/86/864300d0fc7108c233cbb53aa8a4ff54
new file mode 100644
index 00000000..7bc95325
Binary files /dev/null and b/Library/Artifacts/86/864300d0fc7108c233cbb53aa8a4ff54 differ
diff --git a/Library/Artifacts/86/868b2fec188922bf71858caf666e59a0 b/Library/Artifacts/86/868b2fec188922bf71858caf666e59a0
new file mode 100644
index 00000000..64c28c76
Binary files /dev/null and b/Library/Artifacts/86/868b2fec188922bf71858caf666e59a0 differ
diff --git a/Library/Artifacts/86/8699aa94a0390e28ba46cea2dd7ed320 b/Library/Artifacts/86/8699aa94a0390e28ba46cea2dd7ed320
new file mode 100644
index 00000000..bb16e133
Binary files /dev/null and b/Library/Artifacts/86/8699aa94a0390e28ba46cea2dd7ed320 differ
diff --git a/Library/Artifacts/86/86fd02e2b638e200e20b6a15415c6bd2 b/Library/Artifacts/86/86fd02e2b638e200e20b6a15415c6bd2
new file mode 100644
index 00000000..f01eca3a
Binary files /dev/null and b/Library/Artifacts/86/86fd02e2b638e200e20b6a15415c6bd2 differ
diff --git a/Library/Artifacts/87/876b73ff201203a1160428d45cfc7b67 b/Library/Artifacts/87/876b73ff201203a1160428d45cfc7b67
new file mode 100644
index 00000000..0523cf2d
Binary files /dev/null and b/Library/Artifacts/87/876b73ff201203a1160428d45cfc7b67 differ
diff --git a/Library/Artifacts/87/877e39a02bb40f8a14f694b73ec9c9e0 b/Library/Artifacts/87/877e39a02bb40f8a14f694b73ec9c9e0
new file mode 100644
index 00000000..df8ed7b2
Binary files /dev/null and b/Library/Artifacts/87/877e39a02bb40f8a14f694b73ec9c9e0 differ
diff --git a/Library/Artifacts/88/8844297634d89b981855d46e8e5f7b6a b/Library/Artifacts/88/8844297634d89b981855d46e8e5f7b6a
new file mode 100644
index 00000000..b3f70a9c
Binary files /dev/null and b/Library/Artifacts/88/8844297634d89b981855d46e8e5f7b6a differ
diff --git a/Library/Artifacts/89/891f3f312958b8c7db19a2e4dcaaec64 b/Library/Artifacts/89/891f3f312958b8c7db19a2e4dcaaec64
new file mode 100644
index 00000000..d7fe53cc
Binary files /dev/null and b/Library/Artifacts/89/891f3f312958b8c7db19a2e4dcaaec64 differ
diff --git a/Library/Artifacts/89/895314592ecc78871810e4756634be58 b/Library/Artifacts/89/895314592ecc78871810e4756634be58
new file mode 100644
index 00000000..30c3e380
Binary files /dev/null and b/Library/Artifacts/89/895314592ecc78871810e4756634be58 differ
diff --git a/Library/Artifacts/89/89fd0ac9b3476e8743afb1f872181baf b/Library/Artifacts/89/89fd0ac9b3476e8743afb1f872181baf
new file mode 100644
index 00000000..4f124bc6
Binary files /dev/null and b/Library/Artifacts/89/89fd0ac9b3476e8743afb1f872181baf differ
diff --git a/Library/Artifacts/8a/8aafe97eda77c767101c439a1f68a1af b/Library/Artifacts/8a/8aafe97eda77c767101c439a1f68a1af
new file mode 100644
index 00000000..79c15491
Binary files /dev/null and b/Library/Artifacts/8a/8aafe97eda77c767101c439a1f68a1af differ
diff --git a/Library/Artifacts/8b/8b8b78b2d33d6292242dd3aec1e30fbe b/Library/Artifacts/8b/8b8b78b2d33d6292242dd3aec1e30fbe
new file mode 100644
index 00000000..b396d5b4
Binary files /dev/null and b/Library/Artifacts/8b/8b8b78b2d33d6292242dd3aec1e30fbe differ
diff --git a/Library/Artifacts/8b/8bcad8b36423966a1ee080d46d66e31c b/Library/Artifacts/8b/8bcad8b36423966a1ee080d46d66e31c
new file mode 100644
index 00000000..102bd484
Binary files /dev/null and b/Library/Artifacts/8b/8bcad8b36423966a1ee080d46d66e31c differ
diff --git a/Library/Artifacts/8b/8bf501b0adaa3528873357b20d2dd4dd b/Library/Artifacts/8b/8bf501b0adaa3528873357b20d2dd4dd
new file mode 100644
index 00000000..b47b2014
Binary files /dev/null and b/Library/Artifacts/8b/8bf501b0adaa3528873357b20d2dd4dd differ
diff --git a/Library/Artifacts/8c/8c313fc1b464076901f04a82b3a49869 b/Library/Artifacts/8c/8c313fc1b464076901f04a82b3a49869
new file mode 100644
index 00000000..a662e361
Binary files /dev/null and b/Library/Artifacts/8c/8c313fc1b464076901f04a82b3a49869 differ
diff --git a/Library/Artifacts/8c/8c63258101eb9bef240735ae2386f761 b/Library/Artifacts/8c/8c63258101eb9bef240735ae2386f761
new file mode 100644
index 00000000..a865b2ae
Binary files /dev/null and b/Library/Artifacts/8c/8c63258101eb9bef240735ae2386f761 differ
diff --git a/Library/Artifacts/8c/8c6cbd9e14cf4a915b08c6e4346c1a7e b/Library/Artifacts/8c/8c6cbd9e14cf4a915b08c6e4346c1a7e
new file mode 100644
index 00000000..2e3e3489
Binary files /dev/null and b/Library/Artifacts/8c/8c6cbd9e14cf4a915b08c6e4346c1a7e differ
diff --git a/Library/Artifacts/8c/8cab8ac701831f659d2d1c6f45105014 b/Library/Artifacts/8c/8cab8ac701831f659d2d1c6f45105014
new file mode 100644
index 00000000..03ece00b
Binary files /dev/null and b/Library/Artifacts/8c/8cab8ac701831f659d2d1c6f45105014 differ
diff --git a/Library/Artifacts/8d/8d34f9126778745ae03f0ff3fab4c1ef b/Library/Artifacts/8d/8d34f9126778745ae03f0ff3fab4c1ef
new file mode 100644
index 00000000..7e187087
Binary files /dev/null and b/Library/Artifacts/8d/8d34f9126778745ae03f0ff3fab4c1ef differ
diff --git a/Library/Artifacts/8d/8d493b69a3ccafc56b5e905b804a3e5c b/Library/Artifacts/8d/8d493b69a3ccafc56b5e905b804a3e5c
new file mode 100644
index 00000000..2e5fdb59
Binary files /dev/null and b/Library/Artifacts/8d/8d493b69a3ccafc56b5e905b804a3e5c differ
diff --git a/Library/Artifacts/8d/8d4d3419e56f4e25061eb17f738aadb6 b/Library/Artifacts/8d/8d4d3419e56f4e25061eb17f738aadb6
new file mode 100644
index 00000000..9a1d2b81
Binary files /dev/null and b/Library/Artifacts/8d/8d4d3419e56f4e25061eb17f738aadb6 differ
diff --git a/Library/Artifacts/8e/8e0ba742967ca3b727b9f2d1bd74bbd5 b/Library/Artifacts/8e/8e0ba742967ca3b727b9f2d1bd74bbd5
new file mode 100644
index 00000000..232930ad
Binary files /dev/null and b/Library/Artifacts/8e/8e0ba742967ca3b727b9f2d1bd74bbd5 differ
diff --git a/Library/Artifacts/8e/8e79e033c94e618ea8f3fa79eb2b5994 b/Library/Artifacts/8e/8e79e033c94e618ea8f3fa79eb2b5994
new file mode 100644
index 00000000..49337ca1
Binary files /dev/null and b/Library/Artifacts/8e/8e79e033c94e618ea8f3fa79eb2b5994 differ
diff --git a/Library/Artifacts/8f/8f06dc3f08add835cedb248a4d6130b4 b/Library/Artifacts/8f/8f06dc3f08add835cedb248a4d6130b4
new file mode 100644
index 00000000..e5f26c93
Binary files /dev/null and b/Library/Artifacts/8f/8f06dc3f08add835cedb248a4d6130b4 differ
diff --git a/Library/Artifacts/8f/8f7e75f7eb5ba51fb923bc0fc4cc7842 b/Library/Artifacts/8f/8f7e75f7eb5ba51fb923bc0fc4cc7842
new file mode 100644
index 00000000..8787703e
Binary files /dev/null and b/Library/Artifacts/8f/8f7e75f7eb5ba51fb923bc0fc4cc7842 differ
diff --git a/Library/Artifacts/8f/8f87fcf1cb81e1f07e164dc70fe077e4 b/Library/Artifacts/8f/8f87fcf1cb81e1f07e164dc70fe077e4
new file mode 100644
index 00000000..8d2e9a44
Binary files /dev/null and b/Library/Artifacts/8f/8f87fcf1cb81e1f07e164dc70fe077e4 differ
diff --git a/Library/Artifacts/91/91ed1f7406c68b2240c2e38f925096ea b/Library/Artifacts/91/91ed1f7406c68b2240c2e38f925096ea
new file mode 100644
index 00000000..432ba1fd
Binary files /dev/null and b/Library/Artifacts/91/91ed1f7406c68b2240c2e38f925096ea differ
diff --git a/Library/Artifacts/92/92b078aa351457e9ca1daa6f636bb8d5 b/Library/Artifacts/92/92b078aa351457e9ca1daa6f636bb8d5
new file mode 100644
index 00000000..792467ab
Binary files /dev/null and b/Library/Artifacts/92/92b078aa351457e9ca1daa6f636bb8d5 differ
diff --git a/Library/Artifacts/93/93e91804692dac9e6179aebed3b328b3 b/Library/Artifacts/93/93e91804692dac9e6179aebed3b328b3
new file mode 100644
index 00000000..52670bec
Binary files /dev/null and b/Library/Artifacts/93/93e91804692dac9e6179aebed3b328b3 differ
diff --git a/Library/Artifacts/94/9475411c4d6773ebe0cd064441364a6d b/Library/Artifacts/94/9475411c4d6773ebe0cd064441364a6d
new file mode 100644
index 00000000..054c63d0
Binary files /dev/null and b/Library/Artifacts/94/9475411c4d6773ebe0cd064441364a6d differ
diff --git a/Library/Artifacts/94/947ce2831d1edc9528c651e19e130ccb b/Library/Artifacts/94/947ce2831d1edc9528c651e19e130ccb
new file mode 100644
index 00000000..3bec7120
Binary files /dev/null and b/Library/Artifacts/94/947ce2831d1edc9528c651e19e130ccb differ
diff --git a/Library/Artifacts/94/94bb5fb158ee362385d11652b283854a b/Library/Artifacts/94/94bb5fb158ee362385d11652b283854a
new file mode 100644
index 00000000..d949b376
Binary files /dev/null and b/Library/Artifacts/94/94bb5fb158ee362385d11652b283854a differ
diff --git a/Library/Artifacts/95/950e7471c56b06025124c4c83f15de81 b/Library/Artifacts/95/950e7471c56b06025124c4c83f15de81
new file mode 100644
index 00000000..95d7ce79
Binary files /dev/null and b/Library/Artifacts/95/950e7471c56b06025124c4c83f15de81 differ
diff --git a/Library/Artifacts/97/9784f86376f7b78cdea55c5d454f3ce2 b/Library/Artifacts/97/9784f86376f7b78cdea55c5d454f3ce2
new file mode 100644
index 00000000..0f2c9950
Binary files /dev/null and b/Library/Artifacts/97/9784f86376f7b78cdea55c5d454f3ce2 differ
diff --git a/Library/Artifacts/98/98e19a9cf34c320f1982320e02913393 b/Library/Artifacts/98/98e19a9cf34c320f1982320e02913393
new file mode 100644
index 00000000..a35a86d0
Binary files /dev/null and b/Library/Artifacts/98/98e19a9cf34c320f1982320e02913393 differ
diff --git a/Library/Artifacts/99/99941cf4de4846b554f9c15f0c69a1d5 b/Library/Artifacts/99/99941cf4de4846b554f9c15f0c69a1d5
new file mode 100644
index 00000000..8eb135a2
Binary files /dev/null and b/Library/Artifacts/99/99941cf4de4846b554f9c15f0c69a1d5 differ
diff --git a/Library/Artifacts/9a/9a124c6c66e96c4328051d24bd44b940 b/Library/Artifacts/9a/9a124c6c66e96c4328051d24bd44b940
new file mode 100644
index 00000000..8dc0a392
Binary files /dev/null and b/Library/Artifacts/9a/9a124c6c66e96c4328051d24bd44b940 differ
diff --git a/Library/Artifacts/9a/9a1a6db0f843e7ca939ce1d8ea0effd8 b/Library/Artifacts/9a/9a1a6db0f843e7ca939ce1d8ea0effd8
new file mode 100644
index 00000000..c7443e18
Binary files /dev/null and b/Library/Artifacts/9a/9a1a6db0f843e7ca939ce1d8ea0effd8 differ
diff --git a/Library/Artifacts/9b/9bc6b156a85885bf2825ffe87d8ab7ca b/Library/Artifacts/9b/9bc6b156a85885bf2825ffe87d8ab7ca
new file mode 100644
index 00000000..8c46a86e
Binary files /dev/null and b/Library/Artifacts/9b/9bc6b156a85885bf2825ffe87d8ab7ca differ
diff --git a/Library/Artifacts/9c/9c0af0c1c272aee04823041ce54f7634 b/Library/Artifacts/9c/9c0af0c1c272aee04823041ce54f7634
new file mode 100644
index 00000000..f1b8d66b
Binary files /dev/null and b/Library/Artifacts/9c/9c0af0c1c272aee04823041ce54f7634 differ
diff --git a/Library/Artifacts/9d/9d0f97ee176335fb012c4d389e34772f b/Library/Artifacts/9d/9d0f97ee176335fb012c4d389e34772f
new file mode 100644
index 00000000..96ed2bee
Binary files /dev/null and b/Library/Artifacts/9d/9d0f97ee176335fb012c4d389e34772f differ
diff --git a/Library/Artifacts/9f/9f8fbcba92dcbdedd531fa480b8fba8a b/Library/Artifacts/9f/9f8fbcba92dcbdedd531fa480b8fba8a
new file mode 100644
index 00000000..1b7a7321
Binary files /dev/null and b/Library/Artifacts/9f/9f8fbcba92dcbdedd531fa480b8fba8a differ
diff --git a/Library/Artifacts/9f/9f93bf121c09c72c7d37d2f3b06a0492 b/Library/Artifacts/9f/9f93bf121c09c72c7d37d2f3b06a0492
new file mode 100644
index 00000000..7d857ca8
Binary files /dev/null and b/Library/Artifacts/9f/9f93bf121c09c72c7d37d2f3b06a0492 differ
diff --git a/Library/Artifacts/a0/a00673dabccc37aea81973823a6d4beb b/Library/Artifacts/a0/a00673dabccc37aea81973823a6d4beb
new file mode 100644
index 00000000..f6fd4e91
Binary files /dev/null and b/Library/Artifacts/a0/a00673dabccc37aea81973823a6d4beb differ
diff --git a/Library/Artifacts/a0/a0ab0da2120cfffe8d7a6a2352641819 b/Library/Artifacts/a0/a0ab0da2120cfffe8d7a6a2352641819
new file mode 100644
index 00000000..bb0a7bdc
Binary files /dev/null and b/Library/Artifacts/a0/a0ab0da2120cfffe8d7a6a2352641819 differ
diff --git a/Library/Artifacts/a1/a13e709d364b8a16d177676a73543990 b/Library/Artifacts/a1/a13e709d364b8a16d177676a73543990
new file mode 100644
index 00000000..6c561199
Binary files /dev/null and b/Library/Artifacts/a1/a13e709d364b8a16d177676a73543990 differ
diff --git a/Library/Artifacts/a3/a39ac55c31dbe56f18fdc8e6f45047bc b/Library/Artifacts/a3/a39ac55c31dbe56f18fdc8e6f45047bc
new file mode 100644
index 00000000..fed3308a
Binary files /dev/null and b/Library/Artifacts/a3/a39ac55c31dbe56f18fdc8e6f45047bc differ
diff --git a/Library/Artifacts/a3/a39f97b41150d1a27deb0c87cb40d4d9 b/Library/Artifacts/a3/a39f97b41150d1a27deb0c87cb40d4d9
new file mode 100644
index 00000000..1dcf24c2
Binary files /dev/null and b/Library/Artifacts/a3/a39f97b41150d1a27deb0c87cb40d4d9 differ
diff --git a/Library/Artifacts/a4/a40b1f91dd8d7b675a6ee75d24266d71 b/Library/Artifacts/a4/a40b1f91dd8d7b675a6ee75d24266d71
new file mode 100644
index 00000000..1fca7ef0
Binary files /dev/null and b/Library/Artifacts/a4/a40b1f91dd8d7b675a6ee75d24266d71 differ
diff --git a/Library/Artifacts/a4/a4b358324d88eef3fb5e819857a73ee1 b/Library/Artifacts/a4/a4b358324d88eef3fb5e819857a73ee1
new file mode 100644
index 00000000..76b548cf
Binary files /dev/null and b/Library/Artifacts/a4/a4b358324d88eef3fb5e819857a73ee1 differ
diff --git a/Library/Artifacts/a6/a686521d803512de55c55b43c7257c99 b/Library/Artifacts/a6/a686521d803512de55c55b43c7257c99
new file mode 100644
index 00000000..78b5268c
Binary files /dev/null and b/Library/Artifacts/a6/a686521d803512de55c55b43c7257c99 differ
diff --git a/Library/Artifacts/a8/a802d93a956c832f0d9869fd8ac5e1b2 b/Library/Artifacts/a8/a802d93a956c832f0d9869fd8ac5e1b2
new file mode 100644
index 00000000..80cdc881
Binary files /dev/null and b/Library/Artifacts/a8/a802d93a956c832f0d9869fd8ac5e1b2 differ
diff --git a/Library/Artifacts/a8/a83a05fc1d758f2da6c3a11cbe3598d9 b/Library/Artifacts/a8/a83a05fc1d758f2da6c3a11cbe3598d9
new file mode 100644
index 00000000..eb7a43e0
Binary files /dev/null and b/Library/Artifacts/a8/a83a05fc1d758f2da6c3a11cbe3598d9 differ
diff --git a/Library/Artifacts/a9/a9074548e04bfcb69dcba6a715b7250d b/Library/Artifacts/a9/a9074548e04bfcb69dcba6a715b7250d
new file mode 100644
index 00000000..7caa7dbc
Binary files /dev/null and b/Library/Artifacts/a9/a9074548e04bfcb69dcba6a715b7250d differ
diff --git a/Library/Artifacts/a9/a9106fc22ac256fbc1bcf49831d52ebe b/Library/Artifacts/a9/a9106fc22ac256fbc1bcf49831d52ebe
new file mode 100644
index 00000000..d372a74c
Binary files /dev/null and b/Library/Artifacts/a9/a9106fc22ac256fbc1bcf49831d52ebe differ
diff --git a/Library/Artifacts/aa/aa282dd2ccfc07edc915080853016c27 b/Library/Artifacts/aa/aa282dd2ccfc07edc915080853016c27
new file mode 100644
index 00000000..743280cf
Binary files /dev/null and b/Library/Artifacts/aa/aa282dd2ccfc07edc915080853016c27 differ
diff --git a/Library/Artifacts/ab/ab43aa5f3ebffaf2ed7c383234ab130d b/Library/Artifacts/ab/ab43aa5f3ebffaf2ed7c383234ab130d
new file mode 100644
index 00000000..89d332f6
Binary files /dev/null and b/Library/Artifacts/ab/ab43aa5f3ebffaf2ed7c383234ab130d differ
diff --git a/Library/Artifacts/ae/ae1ef527e4df060cca5ca88c3b2021d6 b/Library/Artifacts/ae/ae1ef527e4df060cca5ca88c3b2021d6
new file mode 100644
index 00000000..a9c01da6
Binary files /dev/null and b/Library/Artifacts/ae/ae1ef527e4df060cca5ca88c3b2021d6 differ
diff --git a/Library/Artifacts/af/af02887aa55f6e6066c8e9668e37b62b b/Library/Artifacts/af/af02887aa55f6e6066c8e9668e37b62b
new file mode 100644
index 00000000..cbdd15a4
Binary files /dev/null and b/Library/Artifacts/af/af02887aa55f6e6066c8e9668e37b62b differ
diff --git a/Library/Artifacts/b0/b02fb0c95b8bcef6ed999fb35c18c9bd b/Library/Artifacts/b0/b02fb0c95b8bcef6ed999fb35c18c9bd
new file mode 100644
index 00000000..cf788a01
Binary files /dev/null and b/Library/Artifacts/b0/b02fb0c95b8bcef6ed999fb35c18c9bd differ
diff --git a/Library/Artifacts/b0/b070859f17b9e0774fb11ca5d2912781 b/Library/Artifacts/b0/b070859f17b9e0774fb11ca5d2912781
new file mode 100644
index 00000000..cb378817
Binary files /dev/null and b/Library/Artifacts/b0/b070859f17b9e0774fb11ca5d2912781 differ
diff --git a/Library/Artifacts/b0/b08b13dfd055a75163ceb9d799d80503 b/Library/Artifacts/b0/b08b13dfd055a75163ceb9d799d80503
new file mode 100644
index 00000000..41754900
Binary files /dev/null and b/Library/Artifacts/b0/b08b13dfd055a75163ceb9d799d80503 differ
diff --git a/Library/Artifacts/b0/b0e2f79f89ad0714b906cc8806bb593c b/Library/Artifacts/b0/b0e2f79f89ad0714b906cc8806bb593c
new file mode 100644
index 00000000..47b0a5d8
Binary files /dev/null and b/Library/Artifacts/b0/b0e2f79f89ad0714b906cc8806bb593c differ
diff --git a/Library/Artifacts/b1/b1152375cdacc90db920806f4ed39d24 b/Library/Artifacts/b1/b1152375cdacc90db920806f4ed39d24
new file mode 100644
index 00000000..3fd2a394
Binary files /dev/null and b/Library/Artifacts/b1/b1152375cdacc90db920806f4ed39d24 differ
diff --git a/Library/Artifacts/b1/b121ed172309de754ccab5febf41e351 b/Library/Artifacts/b1/b121ed172309de754ccab5febf41e351
new file mode 100644
index 00000000..04445681
Binary files /dev/null and b/Library/Artifacts/b1/b121ed172309de754ccab5febf41e351 differ
diff --git a/Library/Artifacts/b3/b3303afd6db875bdc41838fa90bc2f1d b/Library/Artifacts/b3/b3303afd6db875bdc41838fa90bc2f1d
new file mode 100644
index 00000000..8c83975f
Binary files /dev/null and b/Library/Artifacts/b3/b3303afd6db875bdc41838fa90bc2f1d differ
diff --git a/Library/Artifacts/b3/b3b02779cb738f55b72cf8d82e91d9a0 b/Library/Artifacts/b3/b3b02779cb738f55b72cf8d82e91d9a0
new file mode 100644
index 00000000..4151ca64
Binary files /dev/null and b/Library/Artifacts/b3/b3b02779cb738f55b72cf8d82e91d9a0 differ
diff --git a/Library/Artifacts/b4/b4521a7bb7c7d02279f64c6e8ca12295 b/Library/Artifacts/b4/b4521a7bb7c7d02279f64c6e8ca12295
new file mode 100644
index 00000000..0dc148ba
Binary files /dev/null and b/Library/Artifacts/b4/b4521a7bb7c7d02279f64c6e8ca12295 differ
diff --git a/Library/Artifacts/b4/b4d497b4df332d188357ca007a80f426 b/Library/Artifacts/b4/b4d497b4df332d188357ca007a80f426
new file mode 100644
index 00000000..884f8a40
Binary files /dev/null and b/Library/Artifacts/b4/b4d497b4df332d188357ca007a80f426 differ
diff --git a/Library/Artifacts/b5/b59afd047afaffb66bdfa224fc653886 b/Library/Artifacts/b5/b59afd047afaffb66bdfa224fc653886
new file mode 100644
index 00000000..8b750a5d
Binary files /dev/null and b/Library/Artifacts/b5/b59afd047afaffb66bdfa224fc653886 differ
diff --git a/Library/Artifacts/b5/b5b8deb8ce31cdb8c09bf04e53af5749 b/Library/Artifacts/b5/b5b8deb8ce31cdb8c09bf04e53af5749
new file mode 100644
index 00000000..a108ca7a
Binary files /dev/null and b/Library/Artifacts/b5/b5b8deb8ce31cdb8c09bf04e53af5749 differ
diff --git a/Library/Artifacts/b5/b5ff872000b8243346bf550be81cc90f b/Library/Artifacts/b5/b5ff872000b8243346bf550be81cc90f
new file mode 100644
index 00000000..0e94cbab
Binary files /dev/null and b/Library/Artifacts/b5/b5ff872000b8243346bf550be81cc90f differ
diff --git a/Library/Artifacts/b6/b680563f03d2cb85dc26a12bfd45f6aa b/Library/Artifacts/b6/b680563f03d2cb85dc26a12bfd45f6aa
new file mode 100644
index 00000000..52f64b91
Binary files /dev/null and b/Library/Artifacts/b6/b680563f03d2cb85dc26a12bfd45f6aa differ
diff --git a/Library/Artifacts/b8/b804c36535e4d448d0238c42a01f4b9a b/Library/Artifacts/b8/b804c36535e4d448d0238c42a01f4b9a
new file mode 100644
index 00000000..cdbcf2e5
Binary files /dev/null and b/Library/Artifacts/b8/b804c36535e4d448d0238c42a01f4b9a differ
diff --git a/Library/Artifacts/b8/b80f66a85347cca07b261c32af8ab94a b/Library/Artifacts/b8/b80f66a85347cca07b261c32af8ab94a
new file mode 100644
index 00000000..546d78e7
Binary files /dev/null and b/Library/Artifacts/b8/b80f66a85347cca07b261c32af8ab94a differ
diff --git a/Library/Artifacts/b8/b874713716580d52f3245935c092d238 b/Library/Artifacts/b8/b874713716580d52f3245935c092d238
new file mode 100644
index 00000000..9c42de4a
Binary files /dev/null and b/Library/Artifacts/b8/b874713716580d52f3245935c092d238 differ
diff --git a/Library/Artifacts/b8/b8aed71e2a745a10b78123b381d47bcb b/Library/Artifacts/b8/b8aed71e2a745a10b78123b381d47bcb
new file mode 100644
index 00000000..5d2326ed
Binary files /dev/null and b/Library/Artifacts/b8/b8aed71e2a745a10b78123b381d47bcb differ
diff --git a/Library/Artifacts/b9/b96bb2c3690eb35cbd89413c3df073cd b/Library/Artifacts/b9/b96bb2c3690eb35cbd89413c3df073cd
new file mode 100644
index 00000000..cbc5f387
Binary files /dev/null and b/Library/Artifacts/b9/b96bb2c3690eb35cbd89413c3df073cd differ
diff --git a/Library/Artifacts/ba/ba3be77918dfdddaef51471962c73b95 b/Library/Artifacts/ba/ba3be77918dfdddaef51471962c73b95
new file mode 100644
index 00000000..e1b46db2
Binary files /dev/null and b/Library/Artifacts/ba/ba3be77918dfdddaef51471962c73b95 differ
diff --git a/Library/Artifacts/ba/badff435652a698dd888a3b85ddc8c44 b/Library/Artifacts/ba/badff435652a698dd888a3b85ddc8c44
new file mode 100644
index 00000000..d8fd83d4
Binary files /dev/null and b/Library/Artifacts/ba/badff435652a698dd888a3b85ddc8c44 differ
diff --git a/Library/Artifacts/bb/bb9092eac4ee5d660989e5916d23d000 b/Library/Artifacts/bb/bb9092eac4ee5d660989e5916d23d000
new file mode 100644
index 00000000..112231b3
Binary files /dev/null and b/Library/Artifacts/bb/bb9092eac4ee5d660989e5916d23d000 differ
diff --git a/Library/Artifacts/bc/bc17fec3e1c9781537248d9116c82143 b/Library/Artifacts/bc/bc17fec3e1c9781537248d9116c82143
new file mode 100644
index 00000000..1cdb3ee9
Binary files /dev/null and b/Library/Artifacts/bc/bc17fec3e1c9781537248d9116c82143 differ
diff --git a/Library/Artifacts/bc/bc340d52e69afdb53add921b7c6c972f b/Library/Artifacts/bc/bc340d52e69afdb53add921b7c6c972f
new file mode 100644
index 00000000..34b306cc
Binary files /dev/null and b/Library/Artifacts/bc/bc340d52e69afdb53add921b7c6c972f differ
diff --git a/Library/Artifacts/bd/bd6fa0b9c59605d6ac08621ce9f4caac b/Library/Artifacts/bd/bd6fa0b9c59605d6ac08621ce9f4caac
new file mode 100644
index 00000000..4d55c792
Binary files /dev/null and b/Library/Artifacts/bd/bd6fa0b9c59605d6ac08621ce9f4caac differ
diff --git a/Library/Artifacts/bd/bdd798ee6d3f49d84aa073c37e3a598f b/Library/Artifacts/bd/bdd798ee6d3f49d84aa073c37e3a598f
new file mode 100644
index 00000000..02956fca
Binary files /dev/null and b/Library/Artifacts/bd/bdd798ee6d3f49d84aa073c37e3a598f differ
diff --git a/Library/Artifacts/be/bed1afec2352f7ffe55ed24ccd04530b b/Library/Artifacts/be/bed1afec2352f7ffe55ed24ccd04530b
new file mode 100644
index 00000000..8a64b4e3
Binary files /dev/null and b/Library/Artifacts/be/bed1afec2352f7ffe55ed24ccd04530b differ
diff --git a/Library/Artifacts/be/bee418951f1361e1a5ed46ffe2c4c532 b/Library/Artifacts/be/bee418951f1361e1a5ed46ffe2c4c532
new file mode 100644
index 00000000..88e2497a
Binary files /dev/null and b/Library/Artifacts/be/bee418951f1361e1a5ed46ffe2c4c532 differ
diff --git a/Library/Artifacts/c0/c0dcd23f8d484ba09ded93e0b8270ce9 b/Library/Artifacts/c0/c0dcd23f8d484ba09ded93e0b8270ce9
new file mode 100644
index 00000000..074a04fa
Binary files /dev/null and b/Library/Artifacts/c0/c0dcd23f8d484ba09ded93e0b8270ce9 differ
diff --git a/Library/Artifacts/c1/c1446367bfc12f8ff6d058c0d0900223 b/Library/Artifacts/c1/c1446367bfc12f8ff6d058c0d0900223
new file mode 100644
index 00000000..9ba0bfc4
Binary files /dev/null and b/Library/Artifacts/c1/c1446367bfc12f8ff6d058c0d0900223 differ
diff --git a/Library/Artifacts/c3/c3a9eb1ac83734c90e55eebdb47cff5a b/Library/Artifacts/c3/c3a9eb1ac83734c90e55eebdb47cff5a
new file mode 100644
index 00000000..59ec2b8e
Binary files /dev/null and b/Library/Artifacts/c3/c3a9eb1ac83734c90e55eebdb47cff5a differ
diff --git a/Library/Artifacts/c5/c584ceefcf44c9543b4637dbbef3e9e1 b/Library/Artifacts/c5/c584ceefcf44c9543b4637dbbef3e9e1
new file mode 100644
index 00000000..342732a9
Binary files /dev/null and b/Library/Artifacts/c5/c584ceefcf44c9543b4637dbbef3e9e1 differ
diff --git a/Library/Artifacts/c5/c5e9e90c9fb96b733b006eff64da0fe0 b/Library/Artifacts/c5/c5e9e90c9fb96b733b006eff64da0fe0
new file mode 100644
index 00000000..f280ed06
Binary files /dev/null and b/Library/Artifacts/c5/c5e9e90c9fb96b733b006eff64da0fe0 differ
diff --git a/Library/Artifacts/c8/c80b49b40abefcc4ba491111e2a39158 b/Library/Artifacts/c8/c80b49b40abefcc4ba491111e2a39158
new file mode 100644
index 00000000..a435c7c7
Binary files /dev/null and b/Library/Artifacts/c8/c80b49b40abefcc4ba491111e2a39158 differ
diff --git a/Library/Artifacts/c8/c85a2de30c28696d2b8e00c9ee9c0804 b/Library/Artifacts/c8/c85a2de30c28696d2b8e00c9ee9c0804
new file mode 100644
index 00000000..74aa1102
Binary files /dev/null and b/Library/Artifacts/c8/c85a2de30c28696d2b8e00c9ee9c0804 differ
diff --git a/Library/Artifacts/c8/c8bcda2953ef6a133cda68fd7e61ac38 b/Library/Artifacts/c8/c8bcda2953ef6a133cda68fd7e61ac38
new file mode 100644
index 00000000..724a1a49
Binary files /dev/null and b/Library/Artifacts/c8/c8bcda2953ef6a133cda68fd7e61ac38 differ
diff --git a/Library/Artifacts/c8/c8d7adf74b1bbe2c14e0b253aa48b51b b/Library/Artifacts/c8/c8d7adf74b1bbe2c14e0b253aa48b51b
new file mode 100644
index 00000000..f2bd4fc9
Binary files /dev/null and b/Library/Artifacts/c8/c8d7adf74b1bbe2c14e0b253aa48b51b differ
diff --git a/Library/Artifacts/c9/c9483c74d76be8693158fdf04302f4b0 b/Library/Artifacts/c9/c9483c74d76be8693158fdf04302f4b0
new file mode 100644
index 00000000..6464e167
Binary files /dev/null and b/Library/Artifacts/c9/c9483c74d76be8693158fdf04302f4b0 differ
diff --git a/Library/Artifacts/c9/c9ae74aaf0f956d03dc45bfc365c66fa b/Library/Artifacts/c9/c9ae74aaf0f956d03dc45bfc365c66fa
new file mode 100644
index 00000000..6d1bc9b0
Binary files /dev/null and b/Library/Artifacts/c9/c9ae74aaf0f956d03dc45bfc365c66fa differ
diff --git a/Library/Artifacts/c9/c9bb953ac0be05357bad98fd3f056033 b/Library/Artifacts/c9/c9bb953ac0be05357bad98fd3f056033
new file mode 100644
index 00000000..ea9f63ef
Binary files /dev/null and b/Library/Artifacts/c9/c9bb953ac0be05357bad98fd3f056033 differ
diff --git a/Library/Artifacts/ca/caa3e53dc279c7b8ede2cbf8165bf3ee b/Library/Artifacts/ca/caa3e53dc279c7b8ede2cbf8165bf3ee
new file mode 100644
index 00000000..cebaa4a1
Binary files /dev/null and b/Library/Artifacts/ca/caa3e53dc279c7b8ede2cbf8165bf3ee differ
diff --git a/Library/Artifacts/cb/cb0a66a3aec67027f73b244dfaf247f4 b/Library/Artifacts/cb/cb0a66a3aec67027f73b244dfaf247f4
new file mode 100644
index 00000000..da49cb71
Binary files /dev/null and b/Library/Artifacts/cb/cb0a66a3aec67027f73b244dfaf247f4 differ
diff --git a/Library/Artifacts/cb/cb3ecfd9b6aecf39c6e1cf78dcf19933 b/Library/Artifacts/cb/cb3ecfd9b6aecf39c6e1cf78dcf19933
new file mode 100644
index 00000000..a8a8b36e
Binary files /dev/null and b/Library/Artifacts/cb/cb3ecfd9b6aecf39c6e1cf78dcf19933 differ
diff --git a/Library/Artifacts/cb/cb53b6c70a1106a0f0e91e91bc167f56 b/Library/Artifacts/cb/cb53b6c70a1106a0f0e91e91bc167f56
new file mode 100644
index 00000000..2fe4fd48
Binary files /dev/null and b/Library/Artifacts/cb/cb53b6c70a1106a0f0e91e91bc167f56 differ
diff --git a/Library/Artifacts/cb/cb94b31b81b621894b749ad183612c9a b/Library/Artifacts/cb/cb94b31b81b621894b749ad183612c9a
new file mode 100644
index 00000000..41e256cc
Binary files /dev/null and b/Library/Artifacts/cb/cb94b31b81b621894b749ad183612c9a differ
diff --git a/Library/Artifacts/cb/cbf1eac94220a944c87e004d3aa5a144 b/Library/Artifacts/cb/cbf1eac94220a944c87e004d3aa5a144
new file mode 100644
index 00000000..d2dfd65d
Binary files /dev/null and b/Library/Artifacts/cb/cbf1eac94220a944c87e004d3aa5a144 differ
diff --git a/Library/Artifacts/cc/cc99967f6bf7de4e663a983e7dbc127d b/Library/Artifacts/cc/cc99967f6bf7de4e663a983e7dbc127d
new file mode 100644
index 00000000..445ccea0
Binary files /dev/null and b/Library/Artifacts/cc/cc99967f6bf7de4e663a983e7dbc127d differ
diff --git a/Library/Artifacts/cd/cda73b72691a996230031964ec798d61 b/Library/Artifacts/cd/cda73b72691a996230031964ec798d61
new file mode 100644
index 00000000..8474a46a
Binary files /dev/null and b/Library/Artifacts/cd/cda73b72691a996230031964ec798d61 differ
diff --git a/Library/Artifacts/ce/ce1686a328c989e0b6aa8e7a00903c07 b/Library/Artifacts/ce/ce1686a328c989e0b6aa8e7a00903c07
new file mode 100644
index 00000000..fa7dfe94
Binary files /dev/null and b/Library/Artifacts/ce/ce1686a328c989e0b6aa8e7a00903c07 differ
diff --git a/Library/Artifacts/ce/ce88e41491a3740ba22340ce9852d01a b/Library/Artifacts/ce/ce88e41491a3740ba22340ce9852d01a
new file mode 100644
index 00000000..9f26460b
Binary files /dev/null and b/Library/Artifacts/ce/ce88e41491a3740ba22340ce9852d01a differ
diff --git a/Library/Artifacts/ce/cecbe8dd7f013c1022b7c597c2611481 b/Library/Artifacts/ce/cecbe8dd7f013c1022b7c597c2611481
new file mode 100644
index 00000000..d4234eff
Binary files /dev/null and b/Library/Artifacts/ce/cecbe8dd7f013c1022b7c597c2611481 differ
diff --git a/Library/Artifacts/ce/ceede607a901bbf83aae57f5a755d0e5 b/Library/Artifacts/ce/ceede607a901bbf83aae57f5a755d0e5
new file mode 100644
index 00000000..88a3c72b
Binary files /dev/null and b/Library/Artifacts/ce/ceede607a901bbf83aae57f5a755d0e5 differ
diff --git a/Library/Artifacts/cf/cf79ec8703bfce3099395427972e048b b/Library/Artifacts/cf/cf79ec8703bfce3099395427972e048b
new file mode 100644
index 00000000..d5993eb5
Binary files /dev/null and b/Library/Artifacts/cf/cf79ec8703bfce3099395427972e048b differ
diff --git a/Library/Artifacts/d1/d131e970016a8bc5d6ff6790285bf045 b/Library/Artifacts/d1/d131e970016a8bc5d6ff6790285bf045
new file mode 100644
index 00000000..a9256ab7
Binary files /dev/null and b/Library/Artifacts/d1/d131e970016a8bc5d6ff6790285bf045 differ
diff --git a/Library/Artifacts/d1/d146f4f6a7132ad29db8b1818c676d74 b/Library/Artifacts/d1/d146f4f6a7132ad29db8b1818c676d74
new file mode 100644
index 00000000..8170afa9
Binary files /dev/null and b/Library/Artifacts/d1/d146f4f6a7132ad29db8b1818c676d74 differ
diff --git a/Library/Artifacts/d1/d1de53cb0d42999ea4b89db4ffd0b38c b/Library/Artifacts/d1/d1de53cb0d42999ea4b89db4ffd0b38c
new file mode 100644
index 00000000..e0c27b90
Binary files /dev/null and b/Library/Artifacts/d1/d1de53cb0d42999ea4b89db4ffd0b38c differ
diff --git a/Library/Artifacts/d2/d2299030eee74e2e51093d3d1147afdd b/Library/Artifacts/d2/d2299030eee74e2e51093d3d1147afdd
new file mode 100644
index 00000000..8acb04bb
Binary files /dev/null and b/Library/Artifacts/d2/d2299030eee74e2e51093d3d1147afdd differ
diff --git a/Library/Artifacts/d2/d2fa02dcba0798f9bf4cd8822ecb437c b/Library/Artifacts/d2/d2fa02dcba0798f9bf4cd8822ecb437c
new file mode 100644
index 00000000..a57589ea
Binary files /dev/null and b/Library/Artifacts/d2/d2fa02dcba0798f9bf4cd8822ecb437c differ
diff --git a/Library/Artifacts/d3/d352c79fa58b168e5a51dc934db43099 b/Library/Artifacts/d3/d352c79fa58b168e5a51dc934db43099
new file mode 100644
index 00000000..bc0a0e28
Binary files /dev/null and b/Library/Artifacts/d3/d352c79fa58b168e5a51dc934db43099 differ
diff --git a/Library/Artifacts/d3/d369768522e1f4528f54a20fa4b5dc5f b/Library/Artifacts/d3/d369768522e1f4528f54a20fa4b5dc5f
new file mode 100644
index 00000000..ba723e5e
Binary files /dev/null and b/Library/Artifacts/d3/d369768522e1f4528f54a20fa4b5dc5f differ
diff --git a/Library/Artifacts/d4/d421015c530e6ad4f154adbfeb84dad8 b/Library/Artifacts/d4/d421015c530e6ad4f154adbfeb84dad8
new file mode 100644
index 00000000..fdcb3b73
Binary files /dev/null and b/Library/Artifacts/d4/d421015c530e6ad4f154adbfeb84dad8 differ
diff --git a/Library/Artifacts/d4/d4c1ab42710108d340bf2d6cc42bd1bc b/Library/Artifacts/d4/d4c1ab42710108d340bf2d6cc42bd1bc
new file mode 100644
index 00000000..4c4a6a6c
Binary files /dev/null and b/Library/Artifacts/d4/d4c1ab42710108d340bf2d6cc42bd1bc differ
diff --git a/Library/Artifacts/d5/d501ce8de4e5dd84bd6a529447561a0d b/Library/Artifacts/d5/d501ce8de4e5dd84bd6a529447561a0d
new file mode 100644
index 00000000..f22eda8a
Binary files /dev/null and b/Library/Artifacts/d5/d501ce8de4e5dd84bd6a529447561a0d differ
diff --git a/Library/Artifacts/d5/d5b23d4e0d04bfbfd94c0d979079d17d b/Library/Artifacts/d5/d5b23d4e0d04bfbfd94c0d979079d17d
new file mode 100644
index 00000000..f0f6387a
Binary files /dev/null and b/Library/Artifacts/d5/d5b23d4e0d04bfbfd94c0d979079d17d differ
diff --git a/Library/Artifacts/d6/d69be43fcbf09cd955c78da2bc699580 b/Library/Artifacts/d6/d69be43fcbf09cd955c78da2bc699580
new file mode 100644
index 00000000..7610ee55
Binary files /dev/null and b/Library/Artifacts/d6/d69be43fcbf09cd955c78da2bc699580 differ
diff --git a/Library/Artifacts/d6/d6d360ab46855b89d690ea08513111e7 b/Library/Artifacts/d6/d6d360ab46855b89d690ea08513111e7
new file mode 100644
index 00000000..0e267989
Binary files /dev/null and b/Library/Artifacts/d6/d6d360ab46855b89d690ea08513111e7 differ
diff --git a/Library/Artifacts/d6/d6d66b3320e09c13d1e4caa9f00fa1f3 b/Library/Artifacts/d6/d6d66b3320e09c13d1e4caa9f00fa1f3
new file mode 100644
index 00000000..479e5983
Binary files /dev/null and b/Library/Artifacts/d6/d6d66b3320e09c13d1e4caa9f00fa1f3 differ
diff --git a/Library/Artifacts/d6/d6f62c07ffa9460b932cbd0bb676ad5e b/Library/Artifacts/d6/d6f62c07ffa9460b932cbd0bb676ad5e
new file mode 100644
index 00000000..c041d06a
Binary files /dev/null and b/Library/Artifacts/d6/d6f62c07ffa9460b932cbd0bb676ad5e differ
diff --git a/Library/Artifacts/d8/d83d3bb0ba702f09db686cb0044e6254 b/Library/Artifacts/d8/d83d3bb0ba702f09db686cb0044e6254
new file mode 100644
index 00000000..d58f998f
Binary files /dev/null and b/Library/Artifacts/d8/d83d3bb0ba702f09db686cb0044e6254 differ
diff --git a/Library/Artifacts/d8/d849d391c620a880ec9ef72fcbd91578 b/Library/Artifacts/d8/d849d391c620a880ec9ef72fcbd91578
new file mode 100644
index 00000000..12f5be5b
Binary files /dev/null and b/Library/Artifacts/d8/d849d391c620a880ec9ef72fcbd91578 differ
diff --git a/Library/Artifacts/d8/d88b94e14b545f134deda555cfdb8029 b/Library/Artifacts/d8/d88b94e14b545f134deda555cfdb8029
new file mode 100644
index 00000000..7d331816
Binary files /dev/null and b/Library/Artifacts/d8/d88b94e14b545f134deda555cfdb8029 differ
diff --git a/Library/Artifacts/d9/d9a1b7fadfd80219b047c70a1344cb20 b/Library/Artifacts/d9/d9a1b7fadfd80219b047c70a1344cb20
new file mode 100644
index 00000000..a02aaf40
Binary files /dev/null and b/Library/Artifacts/d9/d9a1b7fadfd80219b047c70a1344cb20 differ
diff --git a/Library/Artifacts/db/db8565082c3b2402b86778816ad68fb5 b/Library/Artifacts/db/db8565082c3b2402b86778816ad68fb5
new file mode 100644
index 00000000..f2ac429f
Binary files /dev/null and b/Library/Artifacts/db/db8565082c3b2402b86778816ad68fb5 differ
diff --git a/Library/Artifacts/db/dbce4734d00f6e9710c758c56d14bb0f b/Library/Artifacts/db/dbce4734d00f6e9710c758c56d14bb0f
new file mode 100644
index 00000000..8390feb4
Binary files /dev/null and b/Library/Artifacts/db/dbce4734d00f6e9710c758c56d14bb0f differ
diff --git a/Library/Artifacts/dc/dc3f2ef5513a1285d12efdbe4a6a7659 b/Library/Artifacts/dc/dc3f2ef5513a1285d12efdbe4a6a7659
new file mode 100644
index 00000000..e74b88b2
Binary files /dev/null and b/Library/Artifacts/dc/dc3f2ef5513a1285d12efdbe4a6a7659 differ
diff --git a/Library/Artifacts/dc/dc4c56ca652fc59b96e1dfaf699b8b2c b/Library/Artifacts/dc/dc4c56ca652fc59b96e1dfaf699b8b2c
new file mode 100644
index 00000000..3bcf2df9
Binary files /dev/null and b/Library/Artifacts/dc/dc4c56ca652fc59b96e1dfaf699b8b2c differ
diff --git a/Library/Artifacts/dc/dc95be37595275ed0add1e71fc6d7f4c b/Library/Artifacts/dc/dc95be37595275ed0add1e71fc6d7f4c
new file mode 100644
index 00000000..68bc8fd6
Binary files /dev/null and b/Library/Artifacts/dc/dc95be37595275ed0add1e71fc6d7f4c differ
diff --git a/Library/Artifacts/dd/dd06731b3904fce3696ab9778a851429 b/Library/Artifacts/dd/dd06731b3904fce3696ab9778a851429
new file mode 100644
index 00000000..44734598
Binary files /dev/null and b/Library/Artifacts/dd/dd06731b3904fce3696ab9778a851429 differ
diff --git a/Library/Artifacts/de/de3b3842ff8c7e085c65a1b60a890259 b/Library/Artifacts/de/de3b3842ff8c7e085c65a1b60a890259
new file mode 100644
index 00000000..55d5011e
Binary files /dev/null and b/Library/Artifacts/de/de3b3842ff8c7e085c65a1b60a890259 differ
diff --git a/Library/Artifacts/de/de78c36ede8206cc18b3a7602981eac8 b/Library/Artifacts/de/de78c36ede8206cc18b3a7602981eac8
new file mode 100644
index 00000000..571e3708
Binary files /dev/null and b/Library/Artifacts/de/de78c36ede8206cc18b3a7602981eac8 differ
diff --git a/Library/Artifacts/de/dec9f6b32deb79ccc37236fb4eeeb165 b/Library/Artifacts/de/dec9f6b32deb79ccc37236fb4eeeb165
new file mode 100644
index 00000000..72116c14
Binary files /dev/null and b/Library/Artifacts/de/dec9f6b32deb79ccc37236fb4eeeb165 differ
diff --git a/Library/Artifacts/e0/e003b6c481809c6347e51a31bf885b11 b/Library/Artifacts/e0/e003b6c481809c6347e51a31bf885b11
new file mode 100644
index 00000000..3c2a7a86
Binary files /dev/null and b/Library/Artifacts/e0/e003b6c481809c6347e51a31bf885b11 differ
diff --git a/Library/Artifacts/e1/e10ef0873afca209e9913cdc5db76f10 b/Library/Artifacts/e1/e10ef0873afca209e9913cdc5db76f10
new file mode 100644
index 00000000..f73fb11a
Binary files /dev/null and b/Library/Artifacts/e1/e10ef0873afca209e9913cdc5db76f10 differ
diff --git a/Library/Artifacts/e2/e232c6021335e0493616b1e21ad8330f b/Library/Artifacts/e2/e232c6021335e0493616b1e21ad8330f
new file mode 100644
index 00000000..c905d470
Binary files /dev/null and b/Library/Artifacts/e2/e232c6021335e0493616b1e21ad8330f differ
diff --git a/Library/Artifacts/e2/e2a4d3acb43aaafc697da7b01c22ff36 b/Library/Artifacts/e2/e2a4d3acb43aaafc697da7b01c22ff36
new file mode 100644
index 00000000..b5a0b079
Binary files /dev/null and b/Library/Artifacts/e2/e2a4d3acb43aaafc697da7b01c22ff36 differ
diff --git a/Library/Artifacts/e4/e415521198e2d59d14f4234aa9b50de4 b/Library/Artifacts/e4/e415521198e2d59d14f4234aa9b50de4
new file mode 100644
index 00000000..ba3a03de
Binary files /dev/null and b/Library/Artifacts/e4/e415521198e2d59d14f4234aa9b50de4 differ
diff --git a/Library/Artifacts/e6/e6076146e69d0c03995439f048af4a65 b/Library/Artifacts/e6/e6076146e69d0c03995439f048af4a65
new file mode 100644
index 00000000..edab45da
Binary files /dev/null and b/Library/Artifacts/e6/e6076146e69d0c03995439f048af4a65 differ
diff --git a/Library/Artifacts/e7/e775b6271334233d69b66aecdc387e81 b/Library/Artifacts/e7/e775b6271334233d69b66aecdc387e81
new file mode 100644
index 00000000..390c5bbe
Binary files /dev/null and b/Library/Artifacts/e7/e775b6271334233d69b66aecdc387e81 differ
diff --git a/Library/Artifacts/e8/e80a81d79ecb592315f3a5da6c06a8b8 b/Library/Artifacts/e8/e80a81d79ecb592315f3a5da6c06a8b8
new file mode 100644
index 00000000..9c1e7f8b
Binary files /dev/null and b/Library/Artifacts/e8/e80a81d79ecb592315f3a5da6c06a8b8 differ
diff --git a/Library/Artifacts/e8/e863aa0356bde1969a227c9db0455690 b/Library/Artifacts/e8/e863aa0356bde1969a227c9db0455690
new file mode 100644
index 00000000..d2da4388
Binary files /dev/null and b/Library/Artifacts/e8/e863aa0356bde1969a227c9db0455690 differ
diff --git a/Library/Artifacts/e8/e8986757545075f8a7fa63a8618d708b b/Library/Artifacts/e8/e8986757545075f8a7fa63a8618d708b
new file mode 100644
index 00000000..e5a7b5cb
Binary files /dev/null and b/Library/Artifacts/e8/e8986757545075f8a7fa63a8618d708b differ
diff --git a/Library/Artifacts/e8/e8b339bf7334f183fa90ed707b8d0111 b/Library/Artifacts/e8/e8b339bf7334f183fa90ed707b8d0111
new file mode 100644
index 00000000..2b2a3aa5
Binary files /dev/null and b/Library/Artifacts/e8/e8b339bf7334f183fa90ed707b8d0111 differ
diff --git a/Library/Artifacts/ec/ec9c56978a26ff9bc731d108f73ff7e4 b/Library/Artifacts/ec/ec9c56978a26ff9bc731d108f73ff7e4
new file mode 100644
index 00000000..4dec456e
Binary files /dev/null and b/Library/Artifacts/ec/ec9c56978a26ff9bc731d108f73ff7e4 differ
diff --git a/Library/Artifacts/ef/efbd24915425674aa44822eed203d102 b/Library/Artifacts/ef/efbd24915425674aa44822eed203d102
new file mode 100644
index 00000000..b4db7dfb
Binary files /dev/null and b/Library/Artifacts/ef/efbd24915425674aa44822eed203d102 differ
diff --git a/Library/Artifacts/ef/eff34bd7695344aacd8a530849673b6e b/Library/Artifacts/ef/eff34bd7695344aacd8a530849673b6e
new file mode 100644
index 00000000..ef88c46e
Binary files /dev/null and b/Library/Artifacts/ef/eff34bd7695344aacd8a530849673b6e differ
diff --git a/Library/Artifacts/ef/eff87ecac76ede0a6d0414693e51fb75 b/Library/Artifacts/ef/eff87ecac76ede0a6d0414693e51fb75
new file mode 100644
index 00000000..b575804f
Binary files /dev/null and b/Library/Artifacts/ef/eff87ecac76ede0a6d0414693e51fb75 differ
diff --git a/Library/Artifacts/f0/f06e564fdd30c8a74c9911d01b5ba8d0 b/Library/Artifacts/f0/f06e564fdd30c8a74c9911d01b5ba8d0
new file mode 100644
index 00000000..aaedd397
Binary files /dev/null and b/Library/Artifacts/f0/f06e564fdd30c8a74c9911d01b5ba8d0 differ
diff --git a/Library/Artifacts/f1/f1783a158fe01115ce7d91a4c6122648 b/Library/Artifacts/f1/f1783a158fe01115ce7d91a4c6122648
new file mode 100644
index 00000000..843eea9c
Binary files /dev/null and b/Library/Artifacts/f1/f1783a158fe01115ce7d91a4c6122648 differ
diff --git a/Library/Artifacts/f2/f20bab22d66695eed9dd102f60a76085 b/Library/Artifacts/f2/f20bab22d66695eed9dd102f60a76085
new file mode 100644
index 00000000..607c96e0
Binary files /dev/null and b/Library/Artifacts/f2/f20bab22d66695eed9dd102f60a76085 differ
diff --git a/Library/Artifacts/f7/f71595f677e22f8287eff029f8d30879 b/Library/Artifacts/f7/f71595f677e22f8287eff029f8d30879
new file mode 100644
index 00000000..6810b7d7
Binary files /dev/null and b/Library/Artifacts/f7/f71595f677e22f8287eff029f8d30879 differ
diff --git a/Library/Artifacts/f7/f737ca1bc3a9f9feb40641cdc8bfcd0d b/Library/Artifacts/f7/f737ca1bc3a9f9feb40641cdc8bfcd0d
new file mode 100644
index 00000000..69ebf4ad
Binary files /dev/null and b/Library/Artifacts/f7/f737ca1bc3a9f9feb40641cdc8bfcd0d differ
diff --git a/Library/Artifacts/f7/f7463f73153c3e497db2432a796cd1e8 b/Library/Artifacts/f7/f7463f73153c3e497db2432a796cd1e8
new file mode 100644
index 00000000..11f75c0b
Binary files /dev/null and b/Library/Artifacts/f7/f7463f73153c3e497db2432a796cd1e8 differ
diff --git a/Library/Artifacts/f8/f8084f0ce920f953f00a17db75e4ca8f b/Library/Artifacts/f8/f8084f0ce920f953f00a17db75e4ca8f
new file mode 100644
index 00000000..f6ccdfbf
Binary files /dev/null and b/Library/Artifacts/f8/f8084f0ce920f953f00a17db75e4ca8f differ
diff --git a/Library/Artifacts/f8/f8d366e6d73f39a253ec9de965e22899 b/Library/Artifacts/f8/f8d366e6d73f39a253ec9de965e22899
new file mode 100644
index 00000000..4f83222e
Binary files /dev/null and b/Library/Artifacts/f8/f8d366e6d73f39a253ec9de965e22899 differ
diff --git a/Library/Artifacts/fa/fa0e10fb93626a94cc90e4b6ce659a95 b/Library/Artifacts/fa/fa0e10fb93626a94cc90e4b6ce659a95
new file mode 100644
index 00000000..2873528f
Binary files /dev/null and b/Library/Artifacts/fa/fa0e10fb93626a94cc90e4b6ce659a95 differ
diff --git a/Library/Artifacts/fa/faa07ce2d0ca4b519e46ccff36b549db b/Library/Artifacts/fa/faa07ce2d0ca4b519e46ccff36b549db
new file mode 100644
index 00000000..c1c7cffc
Binary files /dev/null and b/Library/Artifacts/fa/faa07ce2d0ca4b519e46ccff36b549db differ
diff --git a/Library/Artifacts/fb/fba3fa67c416c61bcbb8a58f0193a78d b/Library/Artifacts/fb/fba3fa67c416c61bcbb8a58f0193a78d
new file mode 100644
index 00000000..208107f7
Binary files /dev/null and b/Library/Artifacts/fb/fba3fa67c416c61bcbb8a58f0193a78d differ
diff --git a/Library/Artifacts/fb/fbd06276b9c051ce2c0ba56f872f5340 b/Library/Artifacts/fb/fbd06276b9c051ce2c0ba56f872f5340
new file mode 100644
index 00000000..9382ee23
Binary files /dev/null and b/Library/Artifacts/fb/fbd06276b9c051ce2c0ba56f872f5340 differ
diff --git a/Library/Artifacts/fc/fc9063d7ae9379ab031391e1fcb6a49c b/Library/Artifacts/fc/fc9063d7ae9379ab031391e1fcb6a49c
new file mode 100644
index 00000000..e16574f2
Binary files /dev/null and b/Library/Artifacts/fc/fc9063d7ae9379ab031391e1fcb6a49c differ
diff --git a/Library/Artifacts/fe/fe945148f45a37bc2803a0450418445e b/Library/Artifacts/fe/fe945148f45a37bc2803a0450418445e
new file mode 100644
index 00000000..d52346a9
Binary files /dev/null and b/Library/Artifacts/fe/fe945148f45a37bc2803a0450418445e differ
diff --git a/Library/Artifacts/ff/ff6542a233ff57d1889aee2603f505ba b/Library/Artifacts/ff/ff6542a233ff57d1889aee2603f505ba
new file mode 100644
index 00000000..f1f5bd2c
Binary files /dev/null and b/Library/Artifacts/ff/ff6542a233ff57d1889aee2603f505ba differ
diff --git a/Library/Artifacts/ff/ff7b2758e7d0cf198d4be3fb3847117e b/Library/Artifacts/ff/ff7b2758e7d0cf198d4be3fb3847117e
new file mode 100644
index 00000000..f7544aa8
Binary files /dev/null and b/Library/Artifacts/ff/ff7b2758e7d0cf198d4be3fb3847117e differ
diff --git a/Library/Bee/CachedNodeOutput/658a09052c145150db87d71bb4095fda_out b/Library/Bee/CachedNodeOutput/658a09052c145150db87d71bb4095fda_out
new file mode 100644
index 00000000..e69de29b
diff --git a/Library/Bee/CachedNodeOutput/d6095ff2bb83b3a809f8d66cd680b92c_out b/Library/Bee/CachedNodeOutput/d6095ff2bb83b3a809f8d66cd680b92c_out
new file mode 100644
index 00000000..e69de29b
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.UnityAdditionalFile.txt b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.UnityAdditionalFile.txt
new file mode 100644
index 00000000..e1a51109
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.UnityAdditionalFile.txt
@@ -0,0 +1 @@
+/home/sascha/current_coding/TurnBasedStrategyCourse
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll
new file mode 100644
index 00000000..04fa2c33
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm
new file mode 100644
index 00000000..fc99e599
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm
@@ -0,0 +1,205 @@
+MaterialQuality
+Utilities
+MaterialQualityUtilities
+PixelPerfectCamera
+UnityEngine
+Experimental
+Rendering
+Universal
+CinemachineUniversalPixelPerfect
+Light2D
+Light2DBlendStyle
+Renderer2DData
+AssetModificationProcessor
+
+Sysroot
+UnityEditor
+LinuxStandalone
+ChannelClient
+Unity
+MPE
+ChannelClientScope
+ChannelService
+ChannelScope
+EventDataSerialization
+EventService
+RoleProviderAttribute
+ProcessEvent
+ProcessLevel
+ProcessState
+RoleCapability
+ChannelInfo
+ChannelClientInfo
+ProcessService
+NavMeshBuilder
+NavMeshVisualizationSettings
+PrefabStage
+Experimental
+SceneManagement
+PrefabStageUtility
+AssetImportContext
+AssetImporters
+SpriteImportData
+TextureGenerationOutput
+SourceTextureInformation
+TextureGenerationSettings
+TextureGenerator
+CollectImportedDependenciesAttribute
+FBXMaterialDescriptionPreprocessor
+SketchupMaterialDescriptionPreprocessor
+ThreeDSMaterialDescriptionPreprocessor
+AssetImporterEditor
+AssetImporterEditorPostProcessAsset
+ScriptedImporterEditor
+ScriptedImporter
+ScriptedImporterAttribute
+EditorToolbarDropdownToggle
+UnityEditor
+Overlays
+BrushGUIEditFlags
+UnityEditor
+Experimental
+TerrainAPI
+RepaintFlags
+IOnPaint
+IOnSceneGUI
+IOnInspectorGUI
+TerrainPaintTool<>
+TerrainToolShortcutContext
+TerrainInspectorUtility
+TerrainPaintUtilityEditor
+ObstacleAvoidanceType
+UnityEngine
+NavMeshAgent
+NavMeshObstacleShape
+NavMeshObstacle
+OffMeshLinkType
+OffMeshLinkData
+OffMeshLink
+NavMeshHit
+NavMeshTriangulation
+NavMesh
+NavMeshPathStatus
+NavMeshPath
+AvatarMaskBodyPart
+UnityEditor
+Animations
+AvatarMask
+IAnimationJob
+UnityEngine
+Experimental
+IAnimationJobPlayable
+IAnimationWindowPreview
+AnimationHumanStream
+AnimationScriptPlayable
+AnimationStream
+TransformStreamHandle
+PropertyStreamHandle
+TransformSceneHandle
+PropertySceneHandle
+AnimationSceneHandleUtility
+AnimationStreamHandleUtility
+CustomStreamPropertyType
+AnimatorJobExtensions
+MuscleHandle
+ExpressionEvaluator
+UnityEditor
+NumericFieldDraggerUtility
+PixelPerfectRendering
+UnityEngine
+Experimental
+U2D
+SpriteBone
+Profiler
+PhotoCaptureFileOutputFormat
+XR
+WSA
+WebCam
+PhotoCapture
+PhotoCaptureFrame
+VideoCapture
+CapturePixelFormat
+WebCamMode
+CameraParameters
+PlayerLoopSystemInternal
+LowLevel
+PlayerLoopSystem
+PlayerLoop
+Initialization
+EarlyUpdate
+FixedUpdate
+PreUpdate
+Update
+PreLateUpdate
+PostLateUpdate
+ConnectionTarget
+Networking
+PlayerConnection
+IConnectionState
+VertexAttribute
+Rendering
+RenderingThreadingMode
+RayTracingSubMeshFlags
+RayTracingInstanceCullingFlags
+RayTracingInstanceCullingTest
+RayTracingInstanceCullingShaderTagConfig
+RayTracingInstanceMaterialConfig
+RayTracingInstanceCullingMaterialTest
+RayTracingInstanceTriangleCullingConfig
+RayTracingSubMeshFlagsConfig
+RayTracingInstanceCullingConfig
+RayTracingInstanceMaterialCRC
+RayTracingInstanceCullingResults
+RayTracingMeshInstanceConfig
+RayTracingAccelerationStructure
+RendererList
+RendererUtils
+RendererListStatus
+RayTracingShader
+LocalizationAsset
+UnityEditor
+SpriteShapeParameters
+UnityEngine
+Experimental
+U2D
+SpriteShapeSegment
+SpriteShapeRenderer
+SpriteShapeMetaData
+ShapeControlPoint
+AngleRangeInfo
+SpriteShapeUtility
+TerrainCallbacks
+UnityEngine
+Experimental
+TerrainAPI
+TerrainUtility
+BrushTransform
+PaintContext
+TerrainPaintUtility
+BaseCompositeField<,,>
+UnityEditor
+UIElements
+BasePopupField<,>
+BoundsField
+BoundsIntField
+RectField
+RectIntField
+Vector2Field
+Vector3Field
+Vector4Field
+Vector2IntField
+Vector3IntField
+DoubleField
+EnumField
+FloatField
+Hash128Field
+IntegerField
+LongField
+PopupField<>
+ProgressBar
+DeltaSpeed
+IValueField<>
+TextValueField<>
+TextValueFieldTraits<,>
+BaseFieldMouseDragger
+FieldMouseDragger<>
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm.rsp b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm.rsp
new file mode 100644
index 00000000..578d359f
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll.mvfrm.rsp
@@ -0,0 +1,119 @@
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Core.Runtime.ref.dll_02F9514DCF9F5D9D.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Universal.2D.Runtime.ref.dll_988E296D8F51A883.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Universal.Runtime.ref.dll_2AC8684548DD91E7.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.Timeline.ref.dll_7C45B17135AC6262.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UI.ref.dll_66C1A76E74A457C8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UI.ref.dll_23277DC97AC68033.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.Graphs.dll_5F077ED34993B193.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.AdaptivePerformanceModule.dll_424C3499B391917C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.CoreModule.dll_985FE9179966C861.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.DeviceSimulatorModule.dll_1B596B3D81663A30.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.DiagnosticsModule.dll_A3274A379F34607E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.EditorToolbarModule.dll_69F6C1C510190200.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GraphToolsFoundationModule.dll_4FDE96B46A73F442.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GraphViewModule.dll_96CB260BB8FF6095.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GridAndSnapModule.dll_ACE030B922991D6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GridModule.dll_75D10505B1BB5E58.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.Physics2DModule.dll_FC10A13C4ED97AEB.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PhysicsModule.dll_6B5A1D4F8B1AF299.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PresetsUIModule.dll_52315EEDBB57B89A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PropertiesModule.dll_5A5C1BCA1AA820B5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.QuickSearchModule.dll_2E36CB44F80B5CD7.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.RestServiceModule.dll_9512436C9A9AAC63.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SafeModeModule.dll_96FE5E0EF7462D22.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SceneTemplateModule.dll_8D9632830F05AC38.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SceneViewModule.dll_D57B0913AE222DA3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.ShaderFoundryModule.dll_CC7602C631B528C6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SketchUpModule.dll_7F13435F4277C939.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SpriteMaskModule.dll_164D4F1BC92C51F3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SpriteShapeModule.dll_85BB5C01FDDA394E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TerrainModule.dll_85A098BE60D93B87.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextCoreFontEngineModule.dll_2C44F723CF68D8BF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextCoreTextEngineModule.dll_742D2D955EEC91DD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextRenderingModule.dll_D73954BE61625D91.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TilemapModule.dll_249D003F78961C90.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TreeModule.dll_F60BDE26212C5DA0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIAutomationModule.dll_BE0ADBFD91268B3D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIBuilderModule.dll_EB53D3282BB7D9C9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIElementsModule.dll_853916E59AA075FD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIElementsSamplesModule.dll_6B9AAFE8EAC47A40.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UnityConnectModule.dll_08A3FA831996A797.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.VFXModule.dll_DFF4C23A2D82DE9A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.VideoModule.dll_CC256763756E3A6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.XRModule.dll_B9127EC22242794C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.dll_DF02D382047E1364.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AIModule.dll_767C889A0683D495.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AccessibilityModule.dll_C03B9E1A0F7BD3D5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AndroidJNIModule.dll_0381FFB8E3BFE4D3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AnimationModule.dll_6550A234935C353B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AssetBundleModule.dll_721FFE365A7211C9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AudioModule.dll_6D489F5CE4594F6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClothModule.dll_D430FC57BE762E51.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClusterInputModule.dll_88406F98CB1E7A5D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClusterRendererModule.dll_21062DAEF12147B4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CommandStateObserverModule.dll_00A28A1CAC8F6519.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ContentLoadModule.dll_0B36577728F4B9B6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CoreModule.dll_BB80BC6A416C338C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CrashReportingModule.dll_CC2EF5713D2C76A4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.DSPGraphModule.dll_976681F8ED71D5CA.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.DirectorModule.dll_9215208F7B1104A9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GIModule.dll_0EB8D1A7A232BCAF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GameCenterModule.dll_2DCF49D3AA00D5C4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GraphToolsFoundationModule.dll_D351A3CBDF494A6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GridModule.dll_98F1D85859C0C983.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.HotReloadModule.dll_E699603A6E8F50BD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.IMGUIModule.dll_A5A83EC3AA8AE34E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ImageConversionModule.dll_8CF82B5F7345FFA8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.InputLegacyModule.dll_03651954F263C7BA.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.InputModule.dll_D3BE670D5A917411.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.JSONSerializeModule.dll_205327560EB7345F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.LocalizationModule.dll_C68D39EB629A6D56.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.MarshallingModule.dll_1A889CCB3E9A3F1B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ParticleSystemModule.dll_1F413EBDAB3E0232.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PerformanceReportingModule.dll_21EF07AD7F02544B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.Physics2DModule.dll_B1F6922534592CD0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PhysicsModule.dll_5DD4D5F9F029D9DE.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ProfilerModule.dll_C45B59C6146A8BB6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PropertiesModule.dll_5B0A89121CEC3A00.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll_47F4750948003D99.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ScreenCaptureModule.dll_3A3AD4DB232360C1.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SharedInternalsModule.dll_11096A34EA73FAF8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SpriteMaskModule.dll_16FBBC63CB706B3E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SpriteShapeModule.dll_8B812B91101449D3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.StreamingModule.dll_19E58F84E2E3EC79.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SubstanceModule.dll_F690A3CE2E36EA87.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SubsystemsModule.dll_81A922C599B85351.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TLSModule.dll_6B37CC1EC6C58332.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TerrainModule.dll_781B5168C5E822CC.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TerrainPhysicsModule.dll_1FBBE790C480FCBF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextCoreFontEngineModule.dll_AAA47276E266978A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextCoreTextEngineModule.dll_F28CA8E871EA50A8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextRenderingModule.dll_637A46E5DA5AE0B6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TilemapModule.dll_1717B8E9DDA503D5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UIElementsModule.dll_85E7842D9CE48F48.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UIModule.dll_71F026C762CADA41.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UmbraModule.dll_E81D4B75717FFAE0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityAnalyticsCommonModule.dll_BD2DC4F198EAF2A9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityAnalyticsModule.dll_3EE0AF875765542E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityConnectModule.dll_F6037E92141EA842.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityCurlModule.dll_986D436603702728.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityTestProtocolModule.dll_275D65DB44BFCF96.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestAssetBundleModule.dll_246574F9D399E97F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestAudioModule.dll_99EB5B8C056D1EE3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestModule.dll_9E9733097E3A9A27.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestTextureModule.dll_ADAEB0FFD7F6BF18.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestWWWModule.dll_BD4EEE4461AA0D14.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VFXModule.dll_EC16648D9D32EC9F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VRModule.dll_C4C24D4D04855FB9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VehiclesModule.dll_09D81A0EF53AD444.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VideoModule.dll_925223C7A6EB6B12.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VirtualTexturingModule.dll_186CB5FAA15AC72A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.WindModule.dll_31CF9792D2A2B1F5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.XRModule.dll_F78110518DBFAD17.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.dll_11A71A5A62F1A049.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.LinuxStandalone.Extensions.dll_F59A400854FB25BF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.WindowsStandalone.Extensions.dll_C3732A552E79084F.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.IonicZip.dll_3753AE2E22DD17B6.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.YamlDotNet.dll_B9EB2E0105A28BA6.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.TextureAssets.dll_51095754C66FE99E.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.Antlr3.Runtime.dll_6B5854E2366B9BC5.mvfrm
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.pdb b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.pdb
new file mode 100644
index 00000000..aad1ca18
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.pdb differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.ref.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.ref.dll
new file mode 100644
index 00000000..6748806e
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.ref.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp
new file mode 100644
index 00000000..9d94420c
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp
@@ -0,0 +1,471 @@
+-target:library
+-out:"Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.dll"
+-refout:"Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.ref.dll"
+-define:UNITY_2023_2_0
+-define:UNITY_2023_2
+-define:UNITY_2023
+-define:UNITY_5_3_OR_NEWER
+-define:UNITY_5_4_OR_NEWER
+-define:UNITY_5_5_OR_NEWER
+-define:UNITY_5_6_OR_NEWER
+-define:UNITY_2017_1_OR_NEWER
+-define:UNITY_2017_2_OR_NEWER
+-define:UNITY_2017_3_OR_NEWER
+-define:UNITY_2017_4_OR_NEWER
+-define:UNITY_2018_1_OR_NEWER
+-define:UNITY_2018_2_OR_NEWER
+-define:UNITY_2018_3_OR_NEWER
+-define:UNITY_2018_4_OR_NEWER
+-define:UNITY_2019_1_OR_NEWER
+-define:UNITY_2019_2_OR_NEWER
+-define:UNITY_2019_3_OR_NEWER
+-define:UNITY_2019_4_OR_NEWER
+-define:UNITY_2020_1_OR_NEWER
+-define:UNITY_2020_2_OR_NEWER
+-define:UNITY_2020_3_OR_NEWER
+-define:UNITY_2021_1_OR_NEWER
+-define:UNITY_2021_2_OR_NEWER
+-define:UNITY_2021_3_OR_NEWER
+-define:UNITY_2022_1_OR_NEWER
+-define:UNITY_2022_2_OR_NEWER
+-define:UNITY_2023_1_OR_NEWER
+-define:UNITY_2023_2_OR_NEWER
+-define:PLATFORM_ARCH_64
+-define:UNITY_64
+-define:UNITY_INCLUDE_TESTS
+-define:ENABLE_AUDIO
+-define:ENABLE_CACHING
+-define:ENABLE_CLOTH
+-define:ENABLE_MICROPHONE
+-define:ENABLE_MULTIPLE_DISPLAYS
+-define:ENABLE_PHYSICS
+-define:ENABLE_TEXTURE_STREAMING
+-define:ENABLE_VIRTUALTEXTURING
+-define:ENABLE_LZMA
+-define:ENABLE_UNITYEVENTS
+-define:ENABLE_VR
+-define:ENABLE_WEBCAM
+-define:ENABLE_UNITYWEBREQUEST
+-define:ENABLE_WWW
+-define:ENABLE_CLOUD_SERVICES
+-define:ENABLE_CLOUD_SERVICES_COLLAB
+-define:ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS
+-define:ENABLE_CLOUD_SERVICES_ADS
+-define:ENABLE_CLOUD_SERVICES_USE_WEBREQUEST
+-define:ENABLE_CLOUD_SERVICES_CRASH_REPORTING
+-define:ENABLE_CLOUD_SERVICES_PURCHASING
+-define:ENABLE_CLOUD_SERVICES_ANALYTICS
+-define:ENABLE_CLOUD_SERVICES_BUILD
+-define:ENABLE_EDITOR_GAME_SERVICES
+-define:ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT
+-define:ENABLE_CLOUD_LICENSE
+-define:ENABLE_EDITOR_HUB_LICENSE
+-define:ENABLE_WEBSOCKET_CLIENT
+-define:ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API
+-define:ENABLE_DIRECTOR_AUDIO
+-define:ENABLE_DIRECTOR_TEXTURE
+-define:ENABLE_MANAGED_JOBS
+-define:ENABLE_MANAGED_TRANSFORM_JOBS
+-define:ENABLE_MANAGED_ANIMATION_JOBS
+-define:ENABLE_MANAGED_AUDIO_JOBS
+-define:ENABLE_MANAGED_UNITYTLS
+-define:INCLUDE_DYNAMIC_GI
+-define:ENABLE_SCRIPTING_GC_WBARRIERS
+-define:PLATFORM_SUPPORTS_MONO
+-define:RENDER_SOFTWARE_CURSOR
+-define:ENABLE_MARSHALLING_TESTS
+-define:ENABLE_VIDEO
+-define:ENABLE_ACCELERATOR_CLIENT_DEBUGGING
+-define:PLATFORM_STANDALONE
+-define:TEXTCORE_1_0_OR_NEWER
+-define:PLATFORM_STANDALONE_LINUX
+-define:UNITY_STANDALONE_LINUX
+-define:UNITY_STANDALONE
+-define:UNITY_STANDALONE_LINUX_API
+-define:ENABLE_RUNTIME_GI
+-define:ENABLE_MOVIES
+-define:ENABLE_NETWORK
+-define:ENABLE_CRUNCH_TEXTURE_COMPRESSION
+-define:ENABLE_CLUSTER_SYNC
+-define:ENABLE_CLUSTERINPUT
+-define:ENABLE_SPATIALTRACKING
+-define:ENABLE_MODULAR_UNITYENGINE_ASSEMBLIES
+-define:ENABLE_MONO
+-define:NET_STANDARD_2_0
+-define:NET_STANDARD
+-define:NET_STANDARD_2_1
+-define:NETSTANDARD
+-define:NETSTANDARD2_1
+-define:ENABLE_PROFILER
+-define:DEBUG
+-define:TRACE
+-define:UNITY_ASSERTIONS
+-define:UNITY_EDITOR
+-define:UNITY_EDITOR_64
+-define:UNITY_EDITOR_LINUX
+-define:ENABLE_UNITY_COLLECTIONS_CHECKS
+-define:ENABLE_BURST_AOT
+-define:UNITY_TEAM_LICENSE
+-define:ENABLE_CUSTOM_RENDER_TEXTURE
+-define:ENABLE_DIRECTOR
+-define:ENABLE_LOCALIZATION
+-define:ENABLE_SPRITES
+-define:ENABLE_TERRAIN
+-define:ENABLE_TILEMAP
+-define:ENABLE_TIMELINE
+-define:ENABLE_LEGACY_INPUT_MANAGER
+-define:TEXTCORE_FONT_ENGINE_1_5_OR_NEWER
+-define:TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER
+-define:CINEMACHINE_TIMELINE
+-define:CINEMACHINE_PHYSICS_2D
+-define:CINEMACHINE_PHYSICS
+-define:CINEMACHINE_UGUI
+-define:CINEMACHINE_LWRP_7_3_1
+-define:CINEMACHINE_UNITY_ANIMATION
+-define:CINEMACHINE_UNITY_IMGUI
+-define:CSHARP_7_OR_LATER
+-define:CSHARP_7_3_OR_NEWER
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEditor.Graphs.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.AdaptivePerformanceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.CoreModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.DeviceSimulatorModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.DiagnosticsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.EditorToolbarModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GraphToolsFoundationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GraphViewModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GridAndSnapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GridModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.Physics2DModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PresetsUIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PropertiesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.QuickSearchModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.RestServiceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SafeModeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SceneTemplateModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SceneViewModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.ShaderFoundryModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SketchUpModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SpriteMaskModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SpriteShapeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TerrainModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextCoreFontEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextCoreTextEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextRenderingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TilemapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TreeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIAutomationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIBuilderModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIElementsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIElementsSamplesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UnityConnectModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.VFXModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.VideoModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.XRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AndroidJNIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CommandStateObserverModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ContentLoadModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.DSPGraphModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GraphToolsFoundationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.InputLegacyModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.MarshallingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PropertiesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SubsystemsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreFontEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreTextEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsCommonModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityCurlModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityTestProtocolModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VFXModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VirtualTexturingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/Extensions/2.0.0/System.Runtime.InteropServices.WindowsRuntime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.ComponentModel.Composition.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Core.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Data.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Drawing.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.IO.Compression.FileSystem.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Net.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Numerics.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Runtime.Serialization.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.ServiceModel.Web.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Transactions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Web.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Windows.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Xml.Linq.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Xml.Serialization.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.Xml.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/System.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netfx/mscorlib.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/Microsoft.Win32.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.AppContext.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Buffers.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Collections.Concurrent.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Collections.NonGeneric.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Collections.Specialized.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Collections.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ComponentModel.EventBasedAsync.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ComponentModel.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ComponentModel.TypeConverter.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ComponentModel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Console.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Data.Common.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.Contracts.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.Debug.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.FileVersionInfo.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.Process.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.StackTrace.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.TextWriterTraceListener.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.Tools.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.TraceSource.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Diagnostics.Tracing.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Drawing.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Dynamic.Runtime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Globalization.Calendars.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Globalization.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Globalization.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.Compression.ZipFile.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.Compression.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.FileSystem.DriveInfo.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.FileSystem.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.FileSystem.Watcher.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.FileSystem.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.IsolatedStorage.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.MemoryMappedFiles.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.Pipes.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.UnmanagedMemoryStream.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.IO.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Linq.Expressions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Linq.Parallel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Linq.Queryable.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Linq.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Memory.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Http.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.NameResolution.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.NetworkInformation.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Ping.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Requests.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Security.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.Sockets.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.WebHeaderCollection.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.WebSockets.Client.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Net.WebSockets.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Numerics.Vectors.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ObjectModel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.DispatchProxy.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.Emit.ILGeneration.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.Emit.Lightweight.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.Emit.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Reflection.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Resources.Reader.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Resources.ResourceManager.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Resources.Writer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.CompilerServices.VisualC.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Handles.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.InteropServices.RuntimeInformation.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.InteropServices.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Numerics.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Serialization.Formatters.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Serialization.Json.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Serialization.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.Serialization.Xml.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Runtime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Claims.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Cryptography.Algorithms.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Cryptography.Csp.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Cryptography.Encoding.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Cryptography.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Cryptography.X509Certificates.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.Principal.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Security.SecureString.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Text.Encoding.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Text.Encoding.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Text.RegularExpressions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Overlapped.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Tasks.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Tasks.Parallel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Tasks.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Thread.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.ThreadPool.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.Timer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Threading.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.ValueTuple.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.ReaderWriter.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.XDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.XPath.XDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.XPath.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.XmlDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/compat/2.1.0/shims/netstandard/System.Xml.XmlSerializer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/NetStandard/ref/2.1.0/netstandard.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/UnityEditor.LinuxStandalone.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/UnityEditor.WindowsStandalone.Extensions.dll"
+-r:"Library/PackageCache/com.unity.ext.nunit@2.0.3/net40/unity-custom/nunit.framework.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/Dependencies/DotNetZip/Unity.VisualScripting.IonicZip.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/Dependencies/YamlDotNet/Unity.VisualScripting.YamlDotNet.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/EditorAssetResources/Unity.VisualScripting.TextureAssets.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Runtime/VisualScripting.Flow/Dependencies/NCalc/Unity.VisualScripting.Antlr3.Runtime.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Core.Runtime.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Universal.2D.Runtime.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Universal.Runtime.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.Timeline.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEditor.UI.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEngine.UI.ref.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.Properties.SourceGenerator.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.SourceGenerators.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.UIToolkit.SourceGenerator.dll"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/AssemblyInfo.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/Cinemachine3rdPersonAim.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineBlendListCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineBrain.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineCameraOffset.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineClearShot.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineCollider.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineConfiner.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineConfiner2D.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineDollyCart.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineExternalCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineFollowZoom.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineFreeLook.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineMixingCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachinePath.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachinePipeline.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachinePixelPerfect.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineRecomposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineSmoothPath.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineStateDrivenCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineStoryboard.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineTargetGroup.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Behaviours/CinemachineVirtualCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/Cinemachine3rdPersonFollow.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineBasicMultiChannelPerlin.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineComposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineFramingTransposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineGroupComposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineHardLockToTarget.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineHardLookAt.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineOrbitalTransposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachinePOV.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineSameAsFollowTarget.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineTrackedDolly.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Components/CinemachineTransposer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/AxisState.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CameraState.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineBlend.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineBlenderSettings.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineComponentBase.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineCore.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineDebug.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineExtension.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineInputAxisDriver.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachinePathBase.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachinePropertyAttribute.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/CinemachineVirtualCameraBase.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/ConfinerOven.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/GaussianFilter.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/ICinemachineCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/ICinemachineComponent.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/LensSettings.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/NoiseSettings.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/Predictor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/RuntimeUtility.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/SignalSourceAsset.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/SplineHelpers.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/TargetPositionCache.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/UnityVectorExtensions.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Core/UpdateTracker.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Experimental/CinemachineNewFreeLook.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Experimental/CinemachineNewVirtualCamera.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Helpers/CinemachineInputProvider.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Helpers/CinemachineTouchInputMapper.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Helpers/CinemachineTriggerAction.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Helpers/GroupWeightManipulator.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineCollisionImpulseSource.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineFixedSignal.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineImpulseDefinition.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineImpulseListener.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineImpulseManager.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineImpulseSource.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Impulse/CinemachineIndependentImpulseListener.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/PostProcessing/CinemachinePostProcessing.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/PostProcessing/CinemachineVolumeSettings.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/ThirdParty/clipper.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Timeline/CinemachineMixer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Timeline/CinemachineShot.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Timeline/CinemachineShotPlayable.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Runtime/Timeline/CinemachineTrack.cs"
+-langversion:9.0
+
+/deterministic
+/optimize-
+/debug:portable
+/nologo
+/RuntimeMetadataVersion:v4.0.30319
+
+/nowarn:0169
+/nowarn:0649
+/nowarn:0282
+/nowarn:1701
+/nowarn:1702
+/utf8output
+/preferreduilang:en-US
+
+-warn:0
+
+/additionalfile:"Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.UnityAdditionalFile.txt"
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp2 b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp2
new file mode 100644
index 00000000..82e019ef
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.rsp2
@@ -0,0 +1 @@
+/pathmap:"/home/sascha/current_coding/TurnBasedStrategyCourse"=.
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.UnityAdditionalFile.txt b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.UnityAdditionalFile.txt
new file mode 100644
index 00000000..e1a51109
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.UnityAdditionalFile.txt
@@ -0,0 +1 @@
+/home/sascha/current_coding/TurnBasedStrategyCourse
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll
new file mode 100644
index 00000000..27de302b
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm
new file mode 100644
index 00000000..98981315
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm
@@ -0,0 +1,196 @@
+MaterialQuality
+Utilities
+MaterialQualityUtilities
+AssetModificationProcessor
+
+Sysroot
+UnityEditor
+LinuxStandalone
+ChannelClient
+Unity
+MPE
+ChannelClientScope
+ChannelService
+ChannelScope
+EventDataSerialization
+EventService
+RoleProviderAttribute
+ProcessEvent
+ProcessLevel
+ProcessState
+RoleCapability
+ChannelInfo
+ChannelClientInfo
+ProcessService
+NavMeshBuilder
+NavMeshVisualizationSettings
+PrefabStage
+Experimental
+SceneManagement
+PrefabStageUtility
+AssetImportContext
+AssetImporters
+SpriteImportData
+TextureGenerationOutput
+SourceTextureInformation
+TextureGenerationSettings
+TextureGenerator
+CollectImportedDependenciesAttribute
+FBXMaterialDescriptionPreprocessor
+SketchupMaterialDescriptionPreprocessor
+ThreeDSMaterialDescriptionPreprocessor
+AssetImporterEditor
+AssetImporterEditorPostProcessAsset
+ScriptedImporterEditor
+ScriptedImporter
+ScriptedImporterAttribute
+EditorToolbarDropdownToggle
+UnityEditor
+Overlays
+BrushGUIEditFlags
+UnityEditor
+Experimental
+TerrainAPI
+RepaintFlags
+IOnPaint
+IOnSceneGUI
+IOnInspectorGUI
+TerrainPaintTool<>
+TerrainToolShortcutContext
+TerrainInspectorUtility
+TerrainPaintUtilityEditor
+ObstacleAvoidanceType
+UnityEngine
+NavMeshAgent
+NavMeshObstacleShape
+NavMeshObstacle
+OffMeshLinkType
+OffMeshLinkData
+OffMeshLink
+NavMeshHit
+NavMeshTriangulation
+NavMesh
+NavMeshPathStatus
+NavMeshPath
+AvatarMaskBodyPart
+UnityEditor
+Animations
+AvatarMask
+IAnimationJob
+UnityEngine
+Experimental
+IAnimationJobPlayable
+IAnimationWindowPreview
+AnimationHumanStream
+AnimationScriptPlayable
+AnimationStream
+TransformStreamHandle
+PropertyStreamHandle
+TransformSceneHandle
+PropertySceneHandle
+AnimationSceneHandleUtility
+AnimationStreamHandleUtility
+CustomStreamPropertyType
+AnimatorJobExtensions
+MuscleHandle
+ExpressionEvaluator
+UnityEditor
+NumericFieldDraggerUtility
+PixelPerfectRendering
+UnityEngine
+Experimental
+U2D
+SpriteBone
+Profiler
+PhotoCaptureFileOutputFormat
+XR
+WSA
+WebCam
+PhotoCapture
+PhotoCaptureFrame
+VideoCapture
+CapturePixelFormat
+WebCamMode
+CameraParameters
+PlayerLoopSystemInternal
+LowLevel
+PlayerLoopSystem
+PlayerLoop
+Initialization
+EarlyUpdate
+FixedUpdate
+PreUpdate
+Update
+PreLateUpdate
+PostLateUpdate
+ConnectionTarget
+Networking
+PlayerConnection
+IConnectionState
+VertexAttribute
+Rendering
+RenderingThreadingMode
+RayTracingSubMeshFlags
+RayTracingInstanceCullingFlags
+RayTracingInstanceCullingTest
+RayTracingInstanceCullingShaderTagConfig
+RayTracingInstanceMaterialConfig
+RayTracingInstanceCullingMaterialTest
+RayTracingInstanceTriangleCullingConfig
+RayTracingSubMeshFlagsConfig
+RayTracingInstanceCullingConfig
+RayTracingInstanceMaterialCRC
+RayTracingInstanceCullingResults
+RayTracingMeshInstanceConfig
+RayTracingAccelerationStructure
+RendererList
+RendererUtils
+RendererListStatus
+RayTracingShader
+LocalizationAsset
+UnityEditor
+SpriteShapeParameters
+UnityEngine
+Experimental
+U2D
+SpriteShapeSegment
+SpriteShapeRenderer
+SpriteShapeMetaData
+ShapeControlPoint
+AngleRangeInfo
+SpriteShapeUtility
+TerrainCallbacks
+UnityEngine
+Experimental
+TerrainAPI
+TerrainUtility
+BrushTransform
+PaintContext
+TerrainPaintUtility
+BaseCompositeField<,,>
+UnityEditor
+UIElements
+BasePopupField<,>
+BoundsField
+BoundsIntField
+RectField
+RectIntField
+Vector2Field
+Vector3Field
+Vector4Field
+Vector2IntField
+Vector3IntField
+DoubleField
+EnumField
+FloatField
+Hash128Field
+IntegerField
+LongField
+PopupField<>
+ProgressBar
+DeltaSpeed
+IValueField<>
+TextValueField<>
+TextValueFieldTraits<,>
+BaseFieldMouseDragger
+FieldMouseDragger<>
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm.rsp b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm.rsp
new file mode 100644
index 00000000..747d272c
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll.mvfrm.rsp
@@ -0,0 +1,125 @@
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Core.Editor.ref.dll_CE93AB90FB3862AE.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Core.Runtime.ref.dll_02F9514DCF9F5D9D.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Universal.Editor.ref.dll_31E059F8D0CF1604.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.RenderPipelines.Universal.Runtime.ref.dll_2AC8684548DD91E7.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.Timeline.Editor.ref.dll_B0AEC1412783A16F.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.Timeline.ref.dll_7C45B17135AC6262.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TestRunner.ref.dll_47F943A8BCEAAC06.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UI.ref.dll_66C1A76E74A457C8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TestRunner.ref.dll_14178E56E8AE09F1.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UI.ref.dll_23277DC97AC68033.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.Graphs.dll_5F077ED34993B193.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.AdaptivePerformanceModule.dll_424C3499B391917C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.CoreModule.dll_985FE9179966C861.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.DeviceSimulatorModule.dll_1B596B3D81663A30.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.DiagnosticsModule.dll_A3274A379F34607E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.EditorToolbarModule.dll_69F6C1C510190200.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GraphToolsFoundationModule.dll_4FDE96B46A73F442.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GraphViewModule.dll_96CB260BB8FF6095.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GridAndSnapModule.dll_ACE030B922991D6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.GridModule.dll_75D10505B1BB5E58.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.Physics2DModule.dll_FC10A13C4ED97AEB.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PhysicsModule.dll_6B5A1D4F8B1AF299.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PresetsUIModule.dll_52315EEDBB57B89A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.PropertiesModule.dll_5A5C1BCA1AA820B5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.QuickSearchModule.dll_2E36CB44F80B5CD7.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.RestServiceModule.dll_9512436C9A9AAC63.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SafeModeModule.dll_96FE5E0EF7462D22.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SceneTemplateModule.dll_8D9632830F05AC38.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SceneViewModule.dll_D57B0913AE222DA3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.ShaderFoundryModule.dll_CC7602C631B528C6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SketchUpModule.dll_7F13435F4277C939.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SpriteMaskModule.dll_164D4F1BC92C51F3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.SpriteShapeModule.dll_85BB5C01FDDA394E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TerrainModule.dll_85A098BE60D93B87.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextCoreFontEngineModule.dll_2C44F723CF68D8BF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextCoreTextEngineModule.dll_742D2D955EEC91DD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TextRenderingModule.dll_D73954BE61625D91.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TilemapModule.dll_249D003F78961C90.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.TreeModule.dll_F60BDE26212C5DA0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIAutomationModule.dll_BE0ADBFD91268B3D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIBuilderModule.dll_EB53D3282BB7D9C9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIElementsModule.dll_853916E59AA075FD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UIElementsSamplesModule.dll_6B9AAFE8EAC47A40.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.UnityConnectModule.dll_08A3FA831996A797.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.VFXModule.dll_DFF4C23A2D82DE9A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.VideoModule.dll_CC256763756E3A6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.XRModule.dll_B9127EC22242794C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.dll_DF02D382047E1364.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AIModule.dll_767C889A0683D495.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ARModule.dll_2FEF4D9D63A1335E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AccessibilityModule.dll_C03B9E1A0F7BD3D5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AndroidJNIModule.dll_0381FFB8E3BFE4D3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AnimationModule.dll_6550A234935C353B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AssetBundleModule.dll_721FFE365A7211C9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.AudioModule.dll_6D489F5CE4594F6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClothModule.dll_D430FC57BE762E51.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClusterInputModule.dll_88406F98CB1E7A5D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ClusterRendererModule.dll_21062DAEF12147B4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CommandStateObserverModule.dll_00A28A1CAC8F6519.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ContentLoadModule.dll_0B36577728F4B9B6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CoreModule.dll_BB80BC6A416C338C.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.CrashReportingModule.dll_CC2EF5713D2C76A4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.DSPGraphModule.dll_976681F8ED71D5CA.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.DirectorModule.dll_9215208F7B1104A9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GIModule.dll_0EB8D1A7A232BCAF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GameCenterModule.dll_2DCF49D3AA00D5C4.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GraphToolsFoundationModule.dll_D351A3CBDF494A6D.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.GridModule.dll_98F1D85859C0C983.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.HotReloadModule.dll_E699603A6E8F50BD.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.IMGUIModule.dll_A5A83EC3AA8AE34E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ImageConversionModule.dll_8CF82B5F7345FFA8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.InputLegacyModule.dll_03651954F263C7BA.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.InputModule.dll_D3BE670D5A917411.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.JSONSerializeModule.dll_205327560EB7345F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.LocalizationModule.dll_C68D39EB629A6D56.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.MarshallingModule.dll_1A889CCB3E9A3F1B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.NVIDIAModule.dll_CD06B77C32BE9178.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ParticleSystemModule.dll_1F413EBDAB3E0232.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PerformanceReportingModule.dll_21EF07AD7F02544B.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.Physics2DModule.dll_B1F6922534592CD0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PhysicsModule.dll_5DD4D5F9F029D9DE.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ProfilerModule.dll_C45B59C6146A8BB6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.PropertiesModule.dll_5B0A89121CEC3A00.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll_47F4750948003D99.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.ScreenCaptureModule.dll_3A3AD4DB232360C1.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SharedInternalsModule.dll_11096A34EA73FAF8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SpriteMaskModule.dll_16FBBC63CB706B3E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SpriteShapeModule.dll_8B812B91101449D3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.StreamingModule.dll_19E58F84E2E3EC79.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SubstanceModule.dll_F690A3CE2E36EA87.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.SubsystemsModule.dll_81A922C599B85351.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TLSModule.dll_6B37CC1EC6C58332.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TerrainModule.dll_781B5168C5E822CC.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TerrainPhysicsModule.dll_1FBBE790C480FCBF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextCoreFontEngineModule.dll_AAA47276E266978A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextCoreTextEngineModule.dll_F28CA8E871EA50A8.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TextRenderingModule.dll_637A46E5DA5AE0B6.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.TilemapModule.dll_1717B8E9DDA503D5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UIElementsModule.dll_85E7842D9CE48F48.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UIModule.dll_71F026C762CADA41.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UmbraModule.dll_E81D4B75717FFAE0.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityAnalyticsCommonModule.dll_BD2DC4F198EAF2A9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityAnalyticsModule.dll_3EE0AF875765542E.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityConnectModule.dll_F6037E92141EA842.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityCurlModule.dll_986D436603702728.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityTestProtocolModule.dll_275D65DB44BFCF96.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestAssetBundleModule.dll_246574F9D399E97F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestAudioModule.dll_99EB5B8C056D1EE3.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestModule.dll_9E9733097E3A9A27.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestTextureModule.dll_ADAEB0FFD7F6BF18.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.UnityWebRequestWWWModule.dll_BD4EEE4461AA0D14.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VFXModule.dll_EC16648D9D32EC9F.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VRModule.dll_C4C24D4D04855FB9.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VehiclesModule.dll_09D81A0EF53AD444.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VideoModule.dll_925223C7A6EB6B12.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.VirtualTexturingModule.dll_186CB5FAA15AC72A.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.WindModule.dll_31CF9792D2A2B1F5.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.XRModule.dll_F78110518DBFAD17.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEngine.dll_11A71A5A62F1A049.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.LinuxStandalone.Extensions.dll_F59A400854FB25BF.mvfrm
+Library/Bee/artifacts/mvdfrm/UnityEditor.WindowsStandalone.Extensions.dll_C3732A552E79084F.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.IonicZip.dll_3753AE2E22DD17B6.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.YamlDotNet.dll_B9EB2E0105A28BA6.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.TextureAssets.dll_51095754C66FE99E.mvfrm
+Library/Bee/artifacts/mvdfrm/Unity.VisualScripting.Antlr3.Runtime.dll_6B5854E2366B9BC5.mvfrm
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.pdb b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.pdb
new file mode 100644
index 00000000..9cf18e58
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.pdb differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.ref.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.ref.dll
new file mode 100644
index 00000000..695bbe10
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.ref.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp
new file mode 100644
index 00000000..3ed8ff1d
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp
@@ -0,0 +1,469 @@
+-target:library
+-out:"Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.dll"
+-refout:"Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.ref.dll"
+-define:UNITY_2023_2_0
+-define:UNITY_2023_2
+-define:UNITY_2023
+-define:UNITY_5_3_OR_NEWER
+-define:UNITY_5_4_OR_NEWER
+-define:UNITY_5_5_OR_NEWER
+-define:UNITY_5_6_OR_NEWER
+-define:UNITY_2017_1_OR_NEWER
+-define:UNITY_2017_2_OR_NEWER
+-define:UNITY_2017_3_OR_NEWER
+-define:UNITY_2017_4_OR_NEWER
+-define:UNITY_2018_1_OR_NEWER
+-define:UNITY_2018_2_OR_NEWER
+-define:UNITY_2018_3_OR_NEWER
+-define:UNITY_2018_4_OR_NEWER
+-define:UNITY_2019_1_OR_NEWER
+-define:UNITY_2019_2_OR_NEWER
+-define:UNITY_2019_3_OR_NEWER
+-define:UNITY_2019_4_OR_NEWER
+-define:UNITY_2020_1_OR_NEWER
+-define:UNITY_2020_2_OR_NEWER
+-define:UNITY_2020_3_OR_NEWER
+-define:UNITY_2021_1_OR_NEWER
+-define:UNITY_2021_2_OR_NEWER
+-define:UNITY_2021_3_OR_NEWER
+-define:UNITY_2022_1_OR_NEWER
+-define:UNITY_2022_2_OR_NEWER
+-define:UNITY_2023_1_OR_NEWER
+-define:UNITY_2023_2_OR_NEWER
+-define:PLATFORM_ARCH_64
+-define:UNITY_64
+-define:UNITY_INCLUDE_TESTS
+-define:ENABLE_AUDIO
+-define:ENABLE_CACHING
+-define:ENABLE_CLOTH
+-define:ENABLE_MICROPHONE
+-define:ENABLE_MULTIPLE_DISPLAYS
+-define:ENABLE_PHYSICS
+-define:ENABLE_TEXTURE_STREAMING
+-define:ENABLE_VIRTUALTEXTURING
+-define:ENABLE_LZMA
+-define:ENABLE_UNITYEVENTS
+-define:ENABLE_VR
+-define:ENABLE_WEBCAM
+-define:ENABLE_UNITYWEBREQUEST
+-define:ENABLE_WWW
+-define:ENABLE_CLOUD_SERVICES
+-define:ENABLE_CLOUD_SERVICES_COLLAB
+-define:ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS
+-define:ENABLE_CLOUD_SERVICES_ADS
+-define:ENABLE_CLOUD_SERVICES_USE_WEBREQUEST
+-define:ENABLE_CLOUD_SERVICES_CRASH_REPORTING
+-define:ENABLE_CLOUD_SERVICES_PURCHASING
+-define:ENABLE_CLOUD_SERVICES_ANALYTICS
+-define:ENABLE_CLOUD_SERVICES_BUILD
+-define:ENABLE_EDITOR_GAME_SERVICES
+-define:ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT
+-define:ENABLE_CLOUD_LICENSE
+-define:ENABLE_EDITOR_HUB_LICENSE
+-define:ENABLE_WEBSOCKET_CLIENT
+-define:ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API
+-define:ENABLE_DIRECTOR_AUDIO
+-define:ENABLE_DIRECTOR_TEXTURE
+-define:ENABLE_MANAGED_JOBS
+-define:ENABLE_MANAGED_TRANSFORM_JOBS
+-define:ENABLE_MANAGED_ANIMATION_JOBS
+-define:ENABLE_MANAGED_AUDIO_JOBS
+-define:ENABLE_MANAGED_UNITYTLS
+-define:INCLUDE_DYNAMIC_GI
+-define:ENABLE_SCRIPTING_GC_WBARRIERS
+-define:PLATFORM_SUPPORTS_MONO
+-define:RENDER_SOFTWARE_CURSOR
+-define:ENABLE_MARSHALLING_TESTS
+-define:ENABLE_VIDEO
+-define:ENABLE_ACCELERATOR_CLIENT_DEBUGGING
+-define:PLATFORM_STANDALONE
+-define:TEXTCORE_1_0_OR_NEWER
+-define:PLATFORM_STANDALONE_LINUX
+-define:UNITY_STANDALONE_LINUX
+-define:UNITY_STANDALONE
+-define:UNITY_STANDALONE_LINUX_API
+-define:ENABLE_RUNTIME_GI
+-define:ENABLE_MOVIES
+-define:ENABLE_NETWORK
+-define:ENABLE_CRUNCH_TEXTURE_COMPRESSION
+-define:ENABLE_CLUSTER_SYNC
+-define:ENABLE_CLUSTERINPUT
+-define:ENABLE_SPATIALTRACKING
+-define:ENABLE_MODULAR_UNITYENGINE_ASSEMBLIES
+-define:ENABLE_MONO
+-define:NET_4_6
+-define:NET_UNITY_4_8
+-define:ENABLE_PROFILER
+-define:DEBUG
+-define:TRACE
+-define:UNITY_ASSERTIONS
+-define:UNITY_EDITOR
+-define:UNITY_EDITOR_64
+-define:UNITY_EDITOR_LINUX
+-define:ENABLE_UNITY_COLLECTIONS_CHECKS
+-define:ENABLE_BURST_AOT
+-define:UNITY_TEAM_LICENSE
+-define:ENABLE_CUSTOM_RENDER_TEXTURE
+-define:ENABLE_DIRECTOR
+-define:ENABLE_LOCALIZATION
+-define:ENABLE_SPRITES
+-define:ENABLE_TERRAIN
+-define:ENABLE_TILEMAP
+-define:ENABLE_TIMELINE
+-define:ENABLE_LEGACY_INPUT_MANAGER
+-define:TEXTCORE_FONT_ENGINE_1_5_OR_NEWER
+-define:TEXTCORE_TEXT_ENGINE_1_5_OR_NEWER
+-define:CINEMACHINE_TIMELINE
+-define:CINEMACHINE_PHYSICS_2D
+-define:CINEMACHINE_PHYSICS
+-define:CINEMACHINE_UGUI
+-define:CINEMACHINE_LWRP_7_3_1
+-define:CINEMACHINE_TIMELINE_1_5_0
+-define:CINEMACHINE_UNITY_ANIMATION
+-define:CINEMACHINE_UNITY_IMGUI
+-define:CSHARP_7_OR_LATER
+-define:CSHARP_7_3_OR_NEWER
+-define:UNITY_EDITOR_ONLY_COMPILATION
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEditor.Graphs.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.AdaptivePerformanceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.CoreModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.DeviceSimulatorModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.DiagnosticsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.EditorToolbarModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GraphToolsFoundationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GraphViewModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GridAndSnapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.GridModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.Physics2DModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PresetsUIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.PropertiesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.QuickSearchModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.RestServiceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SafeModeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SceneTemplateModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SceneViewModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.ShaderFoundryModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SketchUpModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SpriteMaskModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.SpriteShapeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TerrainModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextCoreFontEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextCoreTextEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TextRenderingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TilemapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.TreeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIAutomationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIBuilderModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIElementsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UIElementsSamplesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.UnityConnectModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.VFXModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.VideoModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.XRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEditor.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AndroidJNIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CommandStateObserverModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ContentLoadModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.DSPGraphModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GraphToolsFoundationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.InputLegacyModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.MarshallingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.NVIDIAModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.PropertiesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.SubsystemsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreFontEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreTextEngineModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsCommonModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityCurlModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityTestProtocolModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VFXModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.VirtualTexturingModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Managed/UnityEngine/UnityEngine.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/PlaybackEngines/LinuxStandaloneSupport/UnityEditor.LinuxStandalone.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/UnityEditor.WindowsStandalone.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/Microsoft.Win32.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.AppContext.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Buffers.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Collections.Concurrent.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Collections.NonGeneric.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Collections.Specialized.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Collections.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ComponentModel.Annotations.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ComponentModel.EventBasedAsync.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ComponentModel.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ComponentModel.TypeConverter.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ComponentModel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Console.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Data.Common.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.Contracts.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.Debug.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.FileVersionInfo.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.Process.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.StackTrace.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.TextWriterTraceListener.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.Tools.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Diagnostics.TraceSource.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Drawing.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Dynamic.Runtime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Globalization.Calendars.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Globalization.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Globalization.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.Compression.ZipFile.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.FileSystem.DriveInfo.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.FileSystem.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.FileSystem.Watcher.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.FileSystem.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.IsolatedStorage.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.MemoryMappedFiles.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.Pipes.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.UnmanagedMemoryStream.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.IO.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Linq.Expressions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Linq.Parallel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Linq.Queryable.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Linq.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Memory.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Http.Rtc.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.NameResolution.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.NetworkInformation.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Ping.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Requests.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Security.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.Sockets.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.WebHeaderCollection.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.WebSockets.Client.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Net.WebSockets.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ObjectModel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.DispatchProxy.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.Emit.ILGeneration.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.Emit.Lightweight.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.Emit.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Reflection.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Resources.Reader.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Resources.ResourceManager.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Resources.Writer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.CompilerServices.VisualC.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Handles.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.InteropServices.RuntimeInformation.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.InteropServices.WindowsRuntime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.InteropServices.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Numerics.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Serialization.Formatters.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Serialization.Json.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Serialization.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.Serialization.Xml.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Runtime.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Claims.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Cryptography.Algorithms.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Cryptography.Csp.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Cryptography.Encoding.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Cryptography.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Cryptography.X509Certificates.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.Principal.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Security.SecureString.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ServiceModel.Duplex.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ServiceModel.Http.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ServiceModel.NetTcp.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ServiceModel.Primitives.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ServiceModel.Security.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Text.Encoding.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Text.Encoding.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Text.RegularExpressions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Overlapped.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Tasks.Extensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Tasks.Parallel.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Tasks.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Thread.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.ThreadPool.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.Timer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Threading.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.ValueTuple.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.ReaderWriter.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.XDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.XPath.XDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.XPath.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.XmlDocument.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/System.Xml.XmlSerializer.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Facades/netstandard.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/Microsoft.CSharp.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.ComponentModel.Composition.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Core.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Data.DataSetExtensions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Data.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Drawing.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.IO.Compression.FileSystem.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.IO.Compression.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Net.Http.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Numerics.Vectors.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Numerics.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Runtime.Serialization.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Transactions.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Xml.Linq.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.Xml.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/System.dll"
+-r:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/UnityReferenceAssemblies/unity-4.8-api/mscorlib.dll"
+-r:"Library/PackageCache/com.unity.ext.nunit@2.0.3/net40/unity-custom/nunit.framework.dll"
+-r:"Library/PackageCache/com.unity.ext.nunit@2.0.3/net40/unity-custom/nunit.framework.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/Dependencies/DotNetZip/Unity.VisualScripting.IonicZip.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/Dependencies/YamlDotNet/Unity.VisualScripting.YamlDotNet.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Editor/VisualScripting.Core/EditorAssetResources/Unity.VisualScripting.TextureAssets.dll"
+-r:"Library/PackageCache/com.unity.visualscripting@1.8.0/Runtime/VisualScripting.Flow/Dependencies/NCalc/Unity.VisualScripting.Antlr3.Runtime.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Cinemachine.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Core.Editor.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Core.Runtime.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Universal.Editor.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.RenderPipelines.Universal.Runtime.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.Timeline.Editor.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/Unity.Timeline.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEditor.TestRunner.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEditor.UI.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEngine.TestRunner.ref.dll"
+-r:"Library/Bee/artifacts/2400b0aEDbg.dag/UnityEngine.UI.ref.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.Properties.SourceGenerator.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.SourceGenerators.dll"
+-analyzer:"/home/sascha/Unity/Hub/Editor/2023.2.0a12/Editor/Data/Tools/Unity.SourceGenerators/Unity.UIToolkit.SourceGenerator.dll"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineEditorAnalytics.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineLensPresets.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineSceneTools.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/EmbeddedAssetHelpers.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/InspectorUtility.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/ReflectionHelpers.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/SaveDuringPlay.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/ScriptableObjectUtility.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/SerializedPropertyHelper.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/VcamStageEditor.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Windows/CinemachineColliderPrefs.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Windows/CinemachineSettings.cs"
+"Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Windows/WaveformWindow.cs"
+-langversion:9.0
+
+/deterministic
+/optimize-
+/debug:portable
+/nologo
+/RuntimeMetadataVersion:v4.0.30319
+
+/nowarn:0169
+/nowarn:0649
+/nowarn:0282
+/nowarn:1701
+/nowarn:1702
+/utf8output
+/preferreduilang:en-US
+
+-warn:0
+
+/additionalfile:"Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.UnityAdditionalFile.txt"
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp2 b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp2
new file mode 100644
index 00000000..82e019ef
--- /dev/null
+++ b/Library/Bee/artifacts/2400b0aEDbg.dag/com.unity.cinemachine.editor.rsp2
@@ -0,0 +1 @@
+/pathmap:"/home/sascha/current_coding/TurnBasedStrategyCourse"=.
\ No newline at end of file
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.dll
new file mode 100644
index 00000000..04fa2c33
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.pdb b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.pdb
new file mode 100644
index 00000000..aad1ca18
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/Cinemachine.pdb differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.dll b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.dll
new file mode 100644
index 00000000..27de302b
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.dll differ
diff --git a/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.pdb b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.pdb
new file mode 100644
index 00000000..9cf18e58
Binary files /dev/null and b/Library/Bee/artifacts/2400b0aEDbg.dag/post-processed/com.unity.cinemachine.editor.pdb differ
diff --git a/Library/BurstCache/JIT/Hashes/24ed88491b28be1880ae439618db3b6d.bhc b/Library/BurstCache/JIT/Hashes/24ed88491b28be1880ae439618db3b6d.bhc
new file mode 100644
index 00000000..9a985e75
Binary files /dev/null and b/Library/BurstCache/JIT/Hashes/24ed88491b28be1880ae439618db3b6d.bhc differ
diff --git a/Library/BurstCache/JIT/Hashes/8ebf24bdd7c9e143dc5f78b0f198297f.bhc b/Library/BurstCache/JIT/Hashes/8ebf24bdd7c9e143dc5f78b0f198297f.bhc
new file mode 100644
index 00000000..b8cf4833
Binary files /dev/null and b/Library/BurstCache/JIT/Hashes/8ebf24bdd7c9e143dc5f78b0f198297f.bhc differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/.signature b/Library/PackageCache/com.unity.cinemachine@2.9.5/.signature
new file mode 100755
index 00000000..1635389b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/.signature
@@ -0,0 +1,5 @@
+{
+ "timestamp": 1674223190,
+ "signature": "WkKQUy6p+X7tgczIjx8yxt7erQy2+z7Xd4jwbmtINsZbx/w2XjMfzHT3Vc4gM8W0KuZ4VFDerobQQEyp5mTgWtKbXpphwf9Sz2YcF2XfMqPZClV7H8SS6ektd3eRvFJJnpcbsK32agQmLtrPBNWkZAKy60VkYxhgdvFqtZZ6/8nbmMlF8CmNfn80q9eau4L8XzR420S+b1jHxXGtcZvYg7bQpuFIlY3VOZhQJxN8Mq6WHvETa7NCduhomO8B1/CeLf0YJ5gTSjbHprhP9N+HAhxjofExyM2rRY9P/mPSl4o0gq0kUu3S5rNjNDHq75l7wGtGZlLO7AkVlsSBRD8Vp4+42f0GrnrXS2WaUmIne9xG6NnGzMwTYqO8X6y6hntl1dFdipzCqJRn2YjPpyalkT0w4fhvCsb6/2K9A9LU0Bhiq3xQTRkqE9clM5lMegbCb8iTarz73us/D47tc+plAjqsTX226ufgIbfTQ0pGsQDxlgLI4BcliHzI1NcRd5k6",
+ "publicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFzdUhXYUhsZ0I1cVF4ZEJjTlJKSAordHR4SmoxcVY1NTdvMlZaRE1XaXhYRVBkRTBEMVFkT1JIRXNSS1RscmplUXlERU83ZlNQS0ZwZ1A3MU5TTnJCCkFHM2NFSU45aHNQVDhOVmllZmdWem5QTkVMenFkVmdEbFhpb2VpUnV6OERKWFgvblpmU1JWKytwbk9ySTRibG4KS0twelJlNW14OTc1SjhxZ1FvRktKT0NNRlpHdkJMR2MxSzZZaEIzOHJFODZCZzgzbUovWjBEYkVmQjBxZm13cgo2ZDVFUXFsd0E5Y3JZT1YyV1VpWXprSnBLNmJZNzRZNmM1TmpBcEFKeGNiaTFOaDlRVEhUcU44N0ZtMDF0R1ZwCjVNd1pXSWZuYVRUemEvTGZLelR5U0pka0tldEZMVGdkYXpMYlpzUEE2aHBSK0FJRTJhc0tLTi84UUk1N3UzU2cKL2xyMnZKS1IvU2l5eEN1Q20vQWJkYnJMbXk0WjlSdm1jMGdpclA4T0lLQWxBRWZ2TzV5Z2hSKy8vd1RpTFlzUQp1SllDM0V2UE16ZGdKUzdGR2FscnFLZzlPTCsxVzROY05yNWdveVdSUUJ0cktKaWlTZEJVWmVxb0RvSUY5NHpCCndGbzJJT1JFdXFqcU51M3diMWZIM3p1dGdtalFra3IxVjJhd3hmcExLWlROQWdNQkFBRT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg"
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md
new file mode 100644
index 00000000..607b25fe
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md
@@ -0,0 +1,544 @@
+# Changelog
+
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [2.9.5] - 2023-01-16
+
+- Unity 2022.2 and up: FocusDistance added to lens settings and is pushed to the camera.
+- Optimized path gizmo drawing. Now 3-5 times faster.
+- TargetGroup now ignores members whose gameObjects are inactive.
+- Bugfix: CinemachinePathBase search radius fixed for not looped paths.
+- Regression fix: POV was not handling ReferenceUp correctly
+- Bugfix: priority ordering was wrong when the difference between any priority values were smaller than integer min or
+ bigger than integer max values.
+- Bugfix: Extensions were not respecting execution order on domain reload.
+
+## [2.9.4] - 2022-11-18
+
+- Bugfix: VirtualCameras did not set the focal length property of physical cameras.
+- Bugfix: could not set main camera to physical mode while a vcam with ModeOverride = None was active
+
+## [2.9.2] - 2022-10-21
+
+- Bugfix: StateDrivenCamera/Clearshot: Transition glitch when backing out of a transition in progress
+- Bugfix: Occasional 1-frame glitch when transitioning between some freelooks
+- Bugfix: Transposer with LockToTarget binding sometimes had gimbal lock.
+- Bugfix: Collider damping is more robust with extreme FreeLook configurations
+- Add support for HDRP 14 (Unity 2022.2)
+- Bugfix: InputValueGain mode of axis input was not framerate-independent
+- Bugfix: When recording with an accumulation buffer, camera lens was not always set correctly
+- Bugfix: POV starts up in its centered position, if recentering is enabled
+- Freelook ForcePosition is more precise now.
+
+## [2.9.1] - 2022-08-24
+
+- Bugfix: CinemachineConfiner was not confining correctly when Confine Screen Edges was enabled and the camera was
+ rotated.
+- AimingRig sample is only optionally dependent on UnityEngine.UI.
+- Bugfix: A memory leak no longer occurs with PostProcessing if no PP layer is present on the camera.
+- Bugfix: Confiner2D confines to midpoint when the camera window is bigger than the axis-aligned bounding box of the
+ input confiner.
+- Bugfix: The FadeOut sample scene shader was culling some objects incorrectly.
+- Bugfix: Freelook had the wrong heading at the first frame, which could cause a slight jitter.
+- Bugfix: FramingTransposer and Composer had a slight rounding error in their Bias fields when the Screen X and Y fields
+ were modified.
+- Bugfix: Fixed spurious Z rotations during blend.
+- Regression fix: POV is relative to its parent transform.
+- Bugfix: Blending speed was not set correctly when blending back and forth between the same cameras.
+- Bugfix: AxisState.Recentering.RecenterNow() did not work reliably.
+- Bugfix: SensorSize is not saved when not using physical camera.
+- Bugfix: No redundant RepaintAllViews calls.
+- Clipper library dependency is no longer conflicting with users.
+- Bugfix: Standalone profiler no longer crashes with CM.
+- Bugfix: Cinemachine does not produce compiler error in unity editor versions older than 2020, when Input System
+ package is installed.
+- Bugfix: EmbeddedAssetProperties were not displayed correctly in the editor.
+- Bugfix: SaveDuringPlay works with ILists now.
+- Bugfix: Paste VirtualCamera and FreeLook components onto prefab works for subcomponents
+- Bugfix: CinemachineInputProvider now correctly tracks enabled state of input action
+- Bugfix: POV orientation was incorrect with World Up override
+- Added AutoEnable option to CinemachineInputHandler
+
+## [2.9.0-pre.6] - 2022-01-12
+
+- Bugfix: Negative Near Clip Plane value is kept when camera is orthographic.
+- Regression fix: could not change the projection of the main camera if a CM virtual camera is active.
+- Regression fix: Axis input was ignoring CM's IgnoreTimeScale setting.
+- New feature: CinemachineBrain may control other GameObject instead of the one it is attached to.
+- Bugfix: Cinemachine assigns a default input controller delegate that returns 0 when the legacy input system is
+ disabled.
+- Cinemachine example scenes show informative text when used with Input System instead of throwing error messages.
+- Regression fix: compilation errors when physics module is not present.
+- Regression fix: virtual cameras no longer forget that they are targeting groups on domain reload.
+- Bugfix: 3rdPersonFollow logged console messages when looking straight up or down.
+- BugFix: InputProvider no longer causes a tiny gc alloc every frame.
+- Regression fix: CinemachineCollider smoothing time did not reset correctly, so it was working once only.
+- Bugfix: Confiner2D now displays the calculated confining area when its vcam is selected.
+- Samples no longer throw errors with HDRP and URP. 3rdPersonWithAimMode and Timeline samples no longer have invalid
+ references.
+- Bugfix: 3rdPersonFollow shows a warning message when no follow target is assigned like the rest of the body
+ components.
+- Added ability to directly set the active blend in CinemachineBrain.
+- Bugfix: OnTargetObjectWarped() did not work properly for 3rdPersonFollow.
+- Bugfix: POV did not properly handle overridden up.
+- Regression fix: removed GC allocs in UpdateTargetCache.
+- Bugfix: async scene load/unload could cause jitter.
+- Bugfix: Input system should be read only once per render frame.
+- Bugfix: Blends were sometimes incorrect when src or dst camera is looking along world up axis.
+- Bugfix: Improve accuracy of Group Framing.
+- New feature: Added scene view overlay tools for Cinemachine components.
+- Cinemachine3rdPersonAim exposes AimTarget, which is the position of where the player would hit.
+
+## [2.8.0] - 2021-07-13
+
+- Bugfix: Freelook prefabs won't get corrupted after editing the Prefab via its instances.
+- Bugfix: 3rdPersonFollow works with Aim components now.
+- Bugfix: Blends between vcams, that are rotated so that their up vector is different from World up, are correct now.
+- Bugfix: POV recentering did not always recenter correctly, when an axis range was limited.
+- Bugfix: Collider sometimes bounced a little when the camera radius was large.
+- Bugfix: CinemachineVolumeSettings inspector was making the game view flicker.
+- Bugfix: CinemachineVolumeSettings inspector displayed a misleading warning message with URP when focus tracking was
+ enabled.
+- Bugfix: Rapidly toggling active cameras before the blends were finished did not use the correct blend time.
+- AimingRig sample scene updated with a better reactive crosshair design.
+- Added API accessor for Active Blend in Clearshot and StateDrivenCamera.
+- Bugfix: Virtual Cameras were not updating in Edit mode when Brain's BlendUpdateMode was FixedUpdate.
+- Bugfix: Lens mode override was not working correctly in all cases.
+- Collider2D inspector: added warning when collider is of the wrong type.
+
+## [2.8.0-pre.1] - 2021-04-21
+
+- Switching targets (Follow, LookAt) is smooth by default. For the old behaviour, set PreviousStateIsValid to false
+ after changing the targets.
+- Bugfix: Reversing a blend in progress respects asymmetric blend times.
+- Regression fix: CmPostProcessing and CmVolumeSettings components setting Depth of Field now works correctly with
+ Framing Transposer.
+- Regression fix: 3rdPersonFollow kept player in view when Z damping was high.
+- Regression fix: Physical camera properties were overwritten by vcams when "override mode: physical" was not selected.
+- New sample scene: Boss cam demonstrates how to setup a camera that follows the player and looks at the player and the
+ boss. Boss cam also shows examples of custom extensions.
+- Added simplified modes to Impulse Source.
+- Added secondary reaction settings to Impulse Listener.
+- Added Storyboard support for ScreenSpaceOverlay and ScreenSpaceCamera camera render modes.
+- Added DampingIntoCollision and DampingFromCollision properties to Cinemachine3rdPersonFollow to control how gradually
+ the camera moves to correct for occlusions.
+- Added CinemachineCore.OnTargetObjectWarped() to warp all vcams targeting an object.
+- Added ability for vcam to have a negative near clip plane.
+- Added Draggable Game Window Guides toggle in Cinemachine preferences. When disabled, Game Window guides are only for
+ visualization.
+- Added button to virtual camera inspectors to auto-generate the CinemachineInputProvider component if it is missing.
+- Default PostProcessing profile priority is now configurable and defaults to 1000.
+- Cinemachine3rdPersonFollow now operates without the physics module and without collision resolution.
+- Bugfix: 3rdPersonFollow collision resolution failed when the camera radius was large.
+- Bugfix: 3rdPersonFollow damping occured in world space instead of camera space.
+- Bugfix: 3rdPersonFollow stuttered when Z damping was high.
+- Regression fix: CinemachineInputProvider stopped providing input.
+- Bugfix: Lens aspect and sensorSize were updated when lens OverrideMode != None.
+- Bugfix: Changing targets on a live vcam misbehaved.
+- Bugfix: Framing transposer did not handle empty groups.
+- Bugfix: Interrupting a transition with InheritPosition enabled did not work.
+- Bugfix: Cinemachine3rdPersonFollow handled collisions by default, now it is disabled by default.
+- Bugfix: SaveDuringPlay saved some components that did not have the SaveDuringPlay attribute.
+- Regression fix: Entries in the custom blends editor in CM Brain inspector were not selectable.
+- GameView guides are drawn only if appropriate inspector subsection is expanded.
+- FreeLook rigs are now organized in tabs in the inspector.
+- New sample scene: **Boss cam** sample scene demonstrates a camera setup to follow the player and to look at the player
+ and the boss. The scene provides examples of custom extensions.
+- New Sample scene: **2D zoom**, showing how to zoom an orthographic camera with mouse scroll.
+- New Sample scene: **2D fighters**, showing how to add/remove targets gradually to/from a TargetGroup based on some
+ conditions (here, it is the y coord of the players).
+- Bugfix: CinemachineCollider's displacement damping was being calculated in world space instead of camera space.
+- Bugfix: TrackedDolly sometimes introduced spurious rotations if Default Up and no Aim behaviour.
+- Bugfix: 3rdPersonFollow's shoulder now changes smoothly with respect to world-up vector changes.
+
+## [2.7.2] - 2021-02-15
+
+- CinemachineConfiner2D now handles cases where camera window is oversized
+- New sample scene (FadeOutNearbyObjects) demonstrating fade out effect for objects between camera and target using
+ shaders. The example includes a cinemachine extension giving convenient control over the shader parameters
+- Bugfix (1293429) - Brain could choose vcam with not the highest priority in some cases
+- Bugfix: SaveDuringPlay also works on prefab instances
+- Bugfix (1272146) - Adding vcam to a prefab asset no longer causes errors in console
+- Bugfix (1290171) - Impulse manager was not cleared at playmode start
+- Nested Scrub Bubble sample removed (filenames too long), available now as embedded package
+- Compilation guards for physics, animation, and imgui. Cinemachine does not hard depend on anything now
+- Bugfix: CM StoryBoard had a 1 pixel border
+- Bugfix: CM StoryBoard lost viewport reference after hot reload
+- Bugfix: FramingTransposer's TargetMovementOnly damping caused a flick.
+- Bugfix: FreeLook small drift when no user input if SimpleFollowWithWorldUp
+- Bugfix: InheritPosition did not work with SimpleFollow binding mode
+- Bugfix: cleanup straggling post processing profiles when no active vcams
+- Bugfix: Checking whether the Input Action passed to CinemachineInputHandler is enabled before using it.
+- Bugfix: 3rdPersonFollow FOV was blended incorrectly when ReferenceLookAt was set to a faraway target
+- Bugfix: Position predictor not properly reset
+- Bugfix: Create via menu doesn't create as child of selected object
+- Bugfix: Post-processing profiles not cleaned up when no active vcams
+- Bugfix: Install CinemachineExamples Asset Package menu item was failing on 2018.4 / macOS
+- New sample scene (2DConfinerComplex) demonstrating new CinemachineConfiner2D extension.
+- Updated CharacterMovement2D script in 2D sample scenes (2DConfinedTargetGroup, 2DConfiner, 2DConfinerUndersized,
+ 2DTargetGroup) to make jumping responsive.
+- Updated 2DConfinedTargetGroup and 2DConfiner scenes to use new CinemachineConfiner2D extension.
+
+## [2.7.1] - 2020-11-14
+
+- New feature: CinemachineConfiner2D - Improved 2D confiner.
+- Added ApplyAfter option to ImpulseListener, to add control over the ordering of extensions
+- UI update - Moved Cinemachine menu to GameObject Create menu and Right Click context menu for Hierarchy.
+- Virtual Camera Lens inspector supports display of Horizontal FOV
+- Virtual Camera Lens can override orthographic and physical camera settings
+- Bugfix (1060230) - lens inspector sometimes displayed ortho vs perspective incorrectly for a brief time
+- Bugfix (1283984) - Error message when loading new scene with DontDestroyOnLoad
+- bugfix (1284701) - Edge-case exception when vcam is deleted
+- Storyboard Global Mute moved from Cinemachine menu to Cinemachine preferences.
+- Bugfix - long-idle vcams when reawakened sometimes had a single frame with a huge deltaTime
+- Bugfix - PostProcessing temporarily stopped being applied after exiting play mode
+
+## [2.6.3] - 2020-09-16
+
+- Regression fix (1274989) - OnTargetObjectWarped broken for OrbitalTransposer
+- Bugfix (1276391) - CM Brain Reset did not reset Custom Blends asset in inspector
+- Bugfix (1276343) - CM Brain inspector custom blends misaligned dropdown arrow
+- Bugfix (1256530) - disallow multiple components where appropriate
+- Bugfix: BlendList camera was incorrectly holding 0-length camera cuts
+- Bugfix (1174993) - CM Brain logo was not added to Hierarchy next to Main Camera after adding vcam for the first time
+ after importing CM.
+- Bugfix (1100131) - Confiner is aware of 2D collider's offset attribute.
+
+## [2.6.2] - 2020-09-02
+
+### Bugfixes
+
+- Regression fix: OnCameraCut Memory leak when using Cinemachine with PostProcessing package
+- Bugfix (1272146): Checking for null pipeline, before drawing gizmos.
+- Add support for disabling Physics module
+
+## [2.6.1] - 2020-08-13
+
+### Bugfixes
+
+- Regression Fix: PostProcessing/VolumeSettings FocusTracksTarget was not accounting for lookAt target offset
+- Regression fix: Confiner no longer confines noise and impulse
+- Bugfix: StateDrivenCamera was choosing parent state if only 1 clip in blendstate, even though there was a vcam
+ assigned to that clip
+- Bugfix: vertical group composition was not composing properly
+- Bugfix: CinemachineNewVirtualCamera.AddComponent() now works properly
+- Bugfix: removed compile errors when Physics2D module is disabled
+- Bugfix: brain updates on scene loaded or unloaded
+- Bugfix (1252431): Fixed unnecessary GC Memory allocation every frame when using timeline
+- Bugfix (1260385): check for prefab instances correctly
+- Bugfix (1266191) Clicking on foldout labels in preferences panel toggles their expanded state
+- Bugfix (1266196) Composer target Size label in preferences panel was too big
+- Bugfix: Scrubbing Cache was locking virtual camera transforms beyond the cache range
+- Improved performance of path gizmo drawing
+- Timeline Scrubbing Cache supports nested timelines, with some known limitations to be addressed with a future Timeline
+ package release
+- Added support for deterministic noise in the context of controlled rendering (via CinemachineCore.CurrentTimeOverride)
+- Added Target Offset field to Framing Transposer
+- Added Multi-object edit capabilities to virtual cameras and extensions
+- Added inspector button to clear the Scrubbing Cache
+
+## [2.6.0] - 2020-06-04
+
+### New Features and Bugfixes
+
+- Added AxisState.IInputProvider API to better support custom input systems
+- Added CinemachineInpiutProvider behaviour to support Unity's new input system
+- Added Timeline Scrubbing cache: when enabled, simulates damping and noise when scrubbing in timeline
+- Added ManualUpdate mode to the Brain, to allow for custom game loop logic
+- VolumeSettings/PostProcessing: added ability to choose custom target for focus tracking
+- Added CinemachineRecomposer for timeline-tweaking of procedural or recorded vcam Aim output
+- Added GroupWeightManipulator for animating group member weights
+- Impulse: Added PropagationSpeed, to allow the impulse to travel outward in a wave
+- Impulse: added support for continuous impulses
+- Added CinemachineIndependentImpulseListener, to give ImpulseListener ability to any game object
+- Added 3rdPersonFollow and 3rdPersonAim for dead-accurate 3rd-person aiming camera
+- Added ForceCameraPosition API of virtual cameras, to manually initialize a camera's position and rotation
+- Added example scenes: Aiming Rig and Dual Target to show different 3rd person cmera styles
+- FramingTransposer does its work after Aim, so it plays better with Aim components.
+- Framing Transposer: add Damped Rotations option. If unchecked, changes to the vcam's rotation will bypass Damping, and
+ only target motion will be damped.
+- Refactored Lookahead - better stability. New behaviour may require some parameter adjustment in existing content
+- Composer and Framing Transposer: improved handling at edge of hard zone (no juddering)
+- Orbital Transposer / FreeLook: improved damping when target is moving
+- CustomBlends editor UX improvements: allow direct editing of vcam names, as well as dropdown
+- Add Convert to TargetGroup option on LookAt and Follow target fields
+- Confiner: improved stability when ConfineScreenEdges is selected and confing shape is too small
+- Extensions now have PrePipelineMutateState callback
+- CinemachineCore.UniformDeltaTimeOverride works in Edit mode
+- Added TargetAttachment property to vcams. Normally 1, this can be used to relax attention to targets - effectively a
+ damping override
+- Bugfix: Blend Update Method handling was incorrect and caused judder in some circumstances
+- Bugfix: VolumeSettings blending was popping when weight was epsilon if volume altered a non-lerpable value
+- Bugfix (1234813) - Check for deleted freelooks
+- Bugfix (1219867) - vcam popping on disable if blending
+- Bugfix (1214301, 1213836) - disallow structural change when editing vcam prefabs
+- Bugfix (1213471, 1213434): add null check in editor
+- Bugfix (1213488): no solo for prefab vcams
+- Bugfix (1213819): repaintGameView on editor change
+- Bugfix (1217306): target group position drifting when empty or when members are descendants of the group
+- Bugfix (1218695): Fully qualify UnityEditor.Menu to avoid compile errors in some circumstances
+- Bugfix (1222740): Binding Modes, that don't have control over axis value range, are not affected by it.
+- Bugfix (1227606): Timeline preview and playmode not the same for composer with hand-animated rotations
+- Bugfix: Confiner's cache is reset, when bounding shape/volume is changed.
+- Bugfix (1232146): Vcam no longer jerks at edge of confiner bound box.
+- Bugfix (1234966): CompositeCollider scale was applied twice.
+
+## [2.5.0] - 2020-01-15
+
+### Support HDRP 7 and URP simultaneously
+
+- Accommodate simultaneous precesnce of HDRP and URP
+- Regression fix: Axis was always recentered in Edit mode, even if recentering is off
+
+## [2.4.0] - 2020-01-10
+
+### HDRP 7 support and bugfixes
+
+- Storyboard: added global mute function
+- New vcams are by default created matching the scene view camera
+- Added ApplyBeforeBody option to POV component, to support working with FramingTransposer
+- Added RectenterTarget to POV component
+- Added OnTransitionFromCamera callback to extensions
+- Added Damping to SameAsFollowTarget and HardLockToTarget components
+- URP 7.1.3: added CinemachinePixelPerfect extension
+- Added Speed Mode to AxisState, to support direct axis control without max speed
+- New example scene: OverTheShoulderAim illustrating how to do over-the-shoulder TPS cam, with Normal and Aim modes
+- Impulse Manager: added option to ignore timescale
+- Framing Transposer: added OnTransition handling for camera rotation if InheritPosition
+- Upgrade to support HDRP and Universal RP 7.0.0 API
+- Upgrade to support HDRP and Universal RP 7.1.0 API
+- Removed Resources diretories
+- Sample scenes now available via package manager
+- Added optional "Display Name" field to Cinemachine Shot in Timeline
+- Added "Adopt Current Camera Settings" item to vcam inspector context menu
+- Composer and FramingTransposer: allow the dead zone to extend to 2, and the Screen x,Y can range from -0.5 to 1.5
+- HDRP: lens presets include physical settings if physical camera
+- Regression Fix: Framing Transposer: ignore LookAt target. Use Follow exclusively
+- Bugfix: Framing Transposer was not handling dynamic changes to FOV properly
+- Bugfix: PostProcessing extension was not handling standby update correctly when on Manager Vcams
+- Bugfix: PostProcessing extension was leaking a smallamounts of memory when scenes were unloaded
+- Bugfixes: (fogbugz 1193311, 1193307, 1192423, 1192414): disallow presets for vcams
+- Bugfix: In some heading modes, FreeLook was improperly modifying the axes when activated
+- Bugfix: Orbital transposer was improperly filtering the heading in TargetForward heading mode
+- Bugfix: added EmbeddedAssetHelper null check
+- Bugfix: composer screen guides drawn in correct place for physical camera
+- Bugfix: FreeLook was not respecting wait time for X axis recentering
+- Bugfix: FreeLook X axis was not always perfectly synched between rigs
+- Bugfix (fogbugz 1176866): Collider: clean up static RigidBody on exit
+- Bugfix (fogbugz 1174180): framing transposer wrong ortho size calculation
+- Bugfix (fogbugz 1158509): Split brain.UpdateMethod into VcamUpdateMethod and BrainUpdateMethod, to make blending work
+ correctly
+- Bugfix (fogbugz 1162074): Framing transposer and group transposer only reached half maximum ortho size
+- Bugfix (fogbugz 1165599): Transposer: fix gimbal lock issue in LockToTargetWithWorldUp
+- Bugfix: VolumeSettings: handle layermask in HDAdditionalCameraData
+- Bugfix: use vcam's up when drawing gizmos (orbital transposer and free look)
+
+## [2.3.4] - 2019-05-22
+
+### PostProcessing V3 and bugfixes
+
+- Added support for PostProcessing V3 - now called CinemachineVolumeSttings
+- Added CinemachineCore.GetBlendOverride delegate to allow applications to override any vcam blend when it happens
+- When a blend is cancelled by the opposite blend, reduce the blend time
+- Orthographic cameras allow a Near Clip of 0
+- Timeline won't auto-create CM brains when something dragged onto it
+- Confiner: Improvement in automatic path invalidation when number of path points path changes
+- Added CinemachineInpuitAxisDriver utility for overriding the default AxisState behaviour
+- CinemachineCameraOffset: added customizable stage for when to apply the offset
+- Added Loop option to BlendList Camera
+- Improved Lookahead: does not automatically recenter
+- Brain no longer applies time scaling to fixed delta
+- Added dependency on Unity.ugui (2019.2 and up)
+- Bugfix: potential endless loop when using Ignore tag in Collider
+- Bugfix: Allow externally-driven FeeLook XAxis to work properly with SimpleFollow
+- Bugfix: vcams with noise would sometimes show one noiseless frame when they were activated and standby update was not
+ Always
+- Bugfix: Generate a cut event if cutting to a blend-in-progess (fogbugz 1150847)
+- Bugfix: reset lens shift if not physical camera
+- Bugfix: Collider must consider actual target position, not lookahead position
+- Bugfix: FreeLook heading RecenterNow was not working
+- Bugfix: lookahead now takes the overridden Up into account
+- Bugfix: screen composer guides drawn in wrong place for picture-in-picture
+- Bugfix: FreeLook now draws only 1 active composer guide at a time (fogbugz 1138263)
+- Bugfix: cameras sometimes snapped when interrupting blends
+- Bugfix: Path handles no longer scale with the path object
+- Bugfix: Framing Transposer Center on Activate was not working properly (fogbugz 1129824)
+- Bugfix: FreeLook inherit position
+- Bugfix: collider was pushing camera too far if there were multiple overlapping obstacles
+- Bugfix: use IsAssignableFrom instead of IsSubclass in several places
+- Bugfix: when interrupting a blend in progress, Cut was not respected
+- Bugfix: collider minimum occlusion time and smoothing time interaction
+- Bugfix: TargetGroup.RemoveMember error (fogbugz 1119028)
+- Bugfix: TargetGroup member lerping jerk when member weight near 0
+- Bugfix: Transposer angular damping should be 0 only if binding mode not LockToTarget
+
+## [2.3.3] - 2019-01-08
+
+### Temporary patch to get around a Unity bug in conditional dependencies
+
+- Removed Cinemachine.Timeline namespace, as a workaround for fogbugz 1115321
+
+## [2.3.1] - 2019-01-07
+
+### Bugfixes
+
+- Added timeline dependency
+- OnTargetObjectWarped no longer generates garbage
+
+## [2.3.0] - 2018-12-20
+
+### Support for Unity 2019.1
+
+- Added dependency on new unity.timeline
+- Added conditional dependence on PostProcessingV2
+- No copying CM gizmo into assets folder
+- FreeLook: if inherit position from similar FreeLooks, bypass damping
+- Timeline: improve handling when vcam values are tweaked inside shot inspector (fogbugz 1109024)
+
+## [2.2.8] - 2018-12-10
+
+### Bugfixes, optimizations, and some experimental stuff
+
+- Transposer: added Angular Damping Mode, to support quaternion calculations in gimbal-lock situations
+- Framing Transposer and Group Transposer: group composing bugfixes, respect min/max limits
+- Added ConemachineCameraOffset extension, to offset the camera a fixed distance at the end of the pipeline
+- Dolly Cart: added support for LateUpdate
+- State-driven-camera: added [NoSaveDuringPlay] to Animated Target and Layer Index
+- Added AxisState.Recentering.RecenterNow() API call to skip wait time and start recentering now (if enabled)
+- Added NoLens blend hint, to leave camera Lens settings alone
+- Updated documentation (corrections, and relocation to prevent importing)
+- Upgrade: added support for nested prefabs in Unity 2018.3 (fogbugz 1077395)
+- Optimization: position predictor is more efficient
+- Optimization: Composer caches some calculations
+- Optimization: Fix editor slowdown when Lens Presets asset is missing
+- Experimental: Optional new damping algorithm: attempt to reduce sensitivity to variable framerate
+- Experimental: Optional new extra-efficient versions of vcam and FreeLook (not back-compatible)
+- Timeline: play/pause doesn't kick out the timeline vcam
+- Path editor: make sure game view gets updated when a path waypoint is dragged in the scene view
+- Composer guides are shown even if Camera is attached to a renderTexture
+- Bugfix: allow impulse definition to be a non-public field (property drawer was complaining)
+- Bugfix: added null check for when there is no active virtual camera
+- Bugfix: CollisionImpulseSource typo in detection of 2D collider
+- Bugfix: PasteComponentValues to prefab vcams and FreeLooks were corrupting scene and prefabs
+- Bugfix: Timeline mixer was glitching for single frames at the end of blends
+- Bugfix: Added OnTransitionFromCamera() to POV and OrbitalTransposer, to transition axes intelligently
+- Regression fix: if no active vcam, don't set the Camera's transform
+
+## [2.2.7] - 2018-07-24
+
+### Mostly bugfixes
+
+- Bugfix: fogbugz case 1053595: Cinemachine Collider leaves hidden collider at origin that interferes with scene objects
+- Bugfix: fogbugz case 1063754: empty target group produces console messages
+- Bugfix: FreeLook Paste Component Values now pastes the CM subcomponents as well
+- Bugfix: added extra null checks to support cases where current vcam is dynamically deleted
+- Bugfix: reset BlendList when enabled
+- Regression fix: FreeLook axis values get transferred when similar vcams transition
+- Bugfix: cutting to BlendList vcam sometimes produced a few bad frames
+- Bugfix: smart update tracks the targets more efficiently and correctly, and supports RigidBody interpolation (2018.2
+ and up)
+- Enhancement: POV component interprets POV as relative to parent transform if there is one
+- API change: OnCameraLive and CameraActivated events take outgoing vcam also as parameter (may be null)
+
+## [2.2.0] - 2018-06-18
+
+### Impulse Module and More
+
+- New Cinemachine Impulse module for event-driven camera shakes
+- New Event Helper script CinemachineTriggerAction takes action on Collider and Collider2D enter/exit events, and
+ exposes them as UnityEvents
+- New performance-tuning feature: Standby Update. Controls how often to update the vcam when it's in Standby.
+- New NoiseSettings editor with signal preview
+- Added Focal Length or Named FOV presets for Camera Lens
+- Added support for Physical Camera: focal length and Lens Offset
+- New improved Group framing algorithm: tighter group framing in GroupComposer and FramingTransposer
+- Collider: now returns TargetIsObscured if the target is offscreen (great for cameras with fixed aim)
+- Collider: added Minimum Occlusion Time setting, to ignore fleeting obstructions
+- Collider: added Transparent Layers mask, to specify solid objects that don't obstruct view
+- Collider: damping will no longer take the camera through obstacles
+- Collider: Added separate damping setting for when target is being occluded vs when camera is being returned to its
+ normal position
+- Collider: added Smoothing setting, to reduce camera jumpiness in environements with lots of obstacles
+- NoiseSettings: added checkbox for pure sine-wave instead of Perlin wave
+- If no LookAt target, PostProcessing FocusTracksTarget offset is relative to camera
+- TrackedDolly: Default up mode sets Up to World Up
+- Virtual Camera: New Transitions section in inspector that gives more control over blending:
+ - Blend Hint provides some control over how the position and rotation are interpolated
+ - Inherit Position checkbox to ensure smooth positional handoff from outgoing camera
+ - OnCameraLive event gets fired when the camera activates. Useful for custom handlers.
+- Added ScreenSpaceAimWhenTargetsDiffer as a vcam blend hint. This influences what happens when blending between vcams
+ with different LookAt targets
+- Increased stability of vcams with very small FOVs
+- Framing Transposer no longer requires LookAt to be null
+- LensSettings Aspect, Orthographic, IsPhysicalCamera, SensorSize properties no longer internal
+- Noise Profiles: don't magically create assets. Prompt user for filename and location of new or cloned profiles
+- Refactored interaction between timeline and CM brain, to improve handling of edge cases (fogbugz case 1048497)
+- Bugfix: StateDrivenCamera Editor was not finding states if target was OverrideController
+- Bugfix when dragging orbital transposer transform: take bias into account
+- Bugfix: SaveDuringPlay was not handling asset fields correctly - was sometimes crushing assets
+- Bugfix: SimpleFollow transposers were not initilizing their position correctly at game start
+- Bugfix: Timeline with CM shot was causing jitter in some FixedUpdate situations
+- Bugfix: Multiple brains with heterogeneous update methods were not behaving correctly. CM will now support this, but
+ you must make sure that the brains have different layer masks.
+- Example scenes now include use of CinemachineTriggerAction script.
+
+## [2.1.13] - 2018-05-09
+
+### Removed dependency on nonexistant Timeline package, minor bugfixes
+
+- Bugfix: Custom Blends "Any to Any" was not working (regression)
+- Bugfix: Composer was sometimes getting wrong aspect if multiple brains with different aspect ratios
+- Bugfix: could not drag vcam transforms if multiple inspectors and one is hidden
+- Bugfix: Framing Transposer initializes in the wrong place - noticeable if dead zone
+
+## [2.1.12] - 2018-02-26
+
+### Storyboard, Bugfixes and other enhancements. Also some restructuring for Package Manager
+
+- Project restructure: Removed Base, Timeline, and PostFX folders from project root. PostProcessing code must now be
+ manually imported from Cinemachine menu. No more dependencies on scripting defines.
+- New Storyboard extension, to display images over the vcams. Comes with a Waveform monitor window for color grading
+- New option to specify vcam position blend style: linear, spherical, or cylindrical, based on LookAt target
+- Added API to support seamless position warping of target objects: OnTargetObjectWarped().
+- Added support for custom blend curves
+- Lookahead: added Ignore Y Axis Movement option
+- Added support for cascading blends (i.e. blending from mid-blend looks better)
+- POV/Orbital/FreeLook axis: exposed Min, Max, and Wrap in the UI, for customized axis range
+- FreeLook: added Y Axis recentering
+- POV: Added recentering feature to both axes
+- Path: Added Normalized Path units option: 0 is start of path, 1 is end.
+- Path: added length display in inspector
+- Timeline Clip Editor: vcam sections are now collapsible
+- API enhancement: added Finalize to Pipeline stages, called even for manager-style vcams
+- Bugfix: PostProcessing V2 DoF blending works better
+- Bugfix: OrbitalTransposer works better with WorldUp overrides
+- Bugfix: Remove StateDrivenCamera "not playing a controller" warning
+- Bugfix: Handle exceptions thrown by assemblies that don't want to be introspected
+- Bugfix: vcams following physics objects incorrectly snapped to origin after exiting play mode
+- Bugfix: predictor now supports time pause
+- Bugfix: Moved StartCoroutine in Brain to OnEnable()
+- Bugfix: Collider was causing problems in Physics on Android platforms
+- Bugfix: dragging a vcam's position updtaes prefabs properly
+- Bugfix: All extension now respect the "enabled" checkbox
+- Bugfix: Undo for Extasion add will no longer generate null references
+
+## [2.1.10] - 2017-11-28
+
+### This is the first UPM release of *Unity Package Cinemachine*.
+
+- New Aim component: Same As Follow Target simply uses the same orientation as the Follow target
+- Perlin Noise component: added inspector UI to clone or locate existing Noise profiles, and to create new ones
+- Noise Presets were moved outside of the Examples folder
+- Example Assets are now included as embedded package, not imported by default
+- Bugfix: FreeLook with PositionDelta was not properly updating the heading
+- Bugfix: Transitioning between FreeLooks simetimes caused a short camera freeze
+- Bugfix: Added some null checks to FreeLook, to prevent error messages at build time
+
+## [2.1.9] - 2017-11-17
+
+### Initial version.
+
+*Version 2.1.9 cloned from private development repository, corresponding to package released on the asset store*
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md.meta
new file mode 100644
index 00000000..8f9774da
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5961b2a4e47c5db438e1234cf03a2a09
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine2D.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine2D.md
new file mode 100644
index 00000000..67fed163
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine2D.md
@@ -0,0 +1,11 @@
+# 2D graphics
+
+Cinemachine supports orthographic cameras. When you set the Unity camera's projection to Orthographic, Cinemachine
+adjusts to accommodate it. In Virtual Camera properties for __Lens__, __FOV__ is replaced by __Orthographic Size__. Note
+that settings related to FOV and certain FOV-oriented behaviors such as [Follow Zoom](CinemachineFollowZoom.md) have no
+effect if the camera is orthographic.
+
+In orthographic environments, it doesn’t usually make sense to rotate the camera. Accordingly, Cinemachine offers
+the [Framing Transposer](CinemachineBodyFramingTransposer.md) to handle framing and composition without rotating the
+camera.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonAim.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonAim.md
new file mode 100644
index 00000000..e26a530c
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonAim.md
@@ -0,0 +1,24 @@
+# Cinemachine 3rd Person Aim Extension
+
+This extension is created to be a part of a 3rd-person camera rig.
+
+To preserve aiming accuracy, this extension deliberately cancels out all rotational noise, and forces a hard look at the
+target point. However, it's still possible to use camera noise with this extension, provided that the noise affects the
+camera position, instead of the rotation.
+
+See the __AimingRig__ sample scene for an example of this.
+
+Additionally, if _Aim Target Reticle_ is non-null, this extension will project a ray from the Follow target's position
+and find the first object that collides with that ray. The Aim Target Reticle object will then be placed on that point
+in the Game View, to indicate what the player would hit if a shot were to be fired. This point may be different from
+what the camera is looking at, if the found object is close enough to be affected by parallax as a result of the offset
+between player and camera.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Aim Collision Filter__ | Objects on these layers will be detected. |
+| __Ignore Tag__ | Objects with this tag are ignored. It's a good idea to set this field to the target's tag. |
+| __Aim Distance__ | How far to project the object detection ray. |
+| __Aim Target Reticle__ | This 2D object will be positioned in the Game View over the raycast hit point, if any, or will remain in the center of the screen if no hit point is detected. May be null, in which case no on-screen indicator will appear. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonFollow.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonFollow.md
new file mode 100644
index 00000000..c133cedd
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/Cinemachine3rdPersonFollow.md
@@ -0,0 +1,90 @@
+# 3rd Person Follow
+
+Use Cinemachine Virtual Camera’s **3rd Person Follow** to keep the camera at a constant position and distance relative
+to a Follow target (subject to damping controls), tracking the target’s movement and rotation.
+
+The 3rd Person Follow’s mini-rig setup defines the camera position and distance relative to the target. With a suitable
+shoulder offset, this mini-rig can produce a 3rd-person camera, where the character is offset in the frame and the
+camera looks over the character’s shoulder. With different settings, it can produce a first-person camera.
+
+For example, a rig set up with these values:
+
+| **Property:** | **Value:** |
+|:------------------------|:-------------------------|
+| Damping | X= 0.1 Y= 0.5 Z= 0.3 |
+| Shoulder Offset | X= 0.4 Y= 1 Z= -0.5 |
+| Vertical Arm Length | 0.27 |
+| Camera Side | 1 |
+| Camera Distance | 2 |
+| Camera Collision Filter | Default |
+| Camera Radius | 0.2 |
+
+Produces this virtual rig in the Scene view:
+
+
+
+Which results in this Game view:
+
+
+
+The rig and the camera position are defined by three pivot points (the origin, the shoulder, and the hand) as well as by
+a camera that is positioned behind the hand.
+
+- The **origin (A)**: The origin is the Follow target's position. When the target pivots horizontally, the rig rotates
+ with it around this point.
+- The **shoulder (B)**: By default, it is offset to one side, to create an over-the-shoulder follow position. Vertical
+ rotations of the Follow target are transferred here, so the rig rotates horizontally about the origin, and vertically
+ about the shoulder.
+- The **hand (C)**: Vertically offset in relation to the shoulder. The arm length affects the follow target's screen
+ position when the camera rotates vertically. By default, it is offset from the shoulder, so that vertical rotations
+ will keep the character nicely positioned on the screen. For 1st-person cameras, this can be set to 0.
+- The **camera (D)**: The camera's rotation will always be parallel to the Follow target's rotation, but positioned at
+ Camera Distance behind the hand. The camera always looks directly at the hand.
+
+Note the rotations on the rig;
+
+- **B rotates horizontally around A**. Using A as the origin, B's position is calculated from the Shoulder Offset's X,
+ Y, and Z values .
+ 
+
+- **C rotates vertically around B**. C's position is calculated from the Vertical Arm Length from B. Positive values
+ result with C above B, negative values result with C below B.
+ 
+
+## Controlling the Camera
+
+There is no direct input control for the camera. You must have a controller script that moves and rotates the Follow
+target; the camera will position and orient itself relative to that. When the Follow target is the character itself, the
+camera’s rotation always matches the character’s rotation. When the Follow target is an invisible GameObject that can
+rotate independently of the character, the camera will then be able to rotate around the character.
+
+For an example, see the **AimingRig** sample scene.
+
+## Built-in Collision Resolution
+
+The 3rd-person Follow component has a built-in collision resolution system, so when the target moves close to an
+obstacle, the camera position is adjusted so that it will never be inside an obstacle; the built-in collision resolution
+means the camera always keeps the target in sight, despite intervening obstacles. When the target moves too close to an
+obstacle, the rig bends and stretches to keep the camera outside the obstacle but always with the target in view.
+
+## Shaky Movement, Steady Aim
+
+When combined with the [Cinemachine3rdPersonAim](Cinemachine3rdPersonAim.md) extension, the result is a powerful rig
+that can maintain steady aim for a shooter-type game, even when the camera movement is shaky or noisy.
+Cinemachine3rdPersonAim re-adjusts the camera orientation to maintain a fixed point at the center of the screen,
+correcting for variations due to hand-held camera noise or shaking target motion.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Damping | The responsiveness of the camera in tracking the target. Each axis can have its own setting. The value is the approximate time it takes the camera to catch up to the target's new position. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| Shoulder Offset | Position of the shoulder pivot relative to the follow target origin. This offset is in target-local space. |
+| Vertical Arm Length | Vertical offset of the hand in relation to the shoulder. Arm length affects the follow target's screen position when the camera rotates vertically. |
+| Camera Side | Specifies which shoulder the camera is on (left, right, or somewhere in-between). |
+| Camera Distance | Specifies the distance from the hand to the camera. |
+| Camera Collision Filter | Specifies which layers will be included or excluded from collision resolution. |
+| Ignore Tag | Obstacles with this tag will be ignored by collision resolution. It is recommended to set this field to the target's tag. |
+| Camera Radius | Specifies how close the camera can get to collidable obstacles without adjusting its position. |
+| Damping Into Collision | Specifies how gradually the camera moves to correct for an occlusion. Higher numbers move the camera more gradually. |
+| Damping From Collision | Specifies how gradually the camera returns to its normal position after having been corrected by the built-in collision resolution system. Higher numbers move the camera more gradually back to normal. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimComposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimComposer.md
new file mode 100644
index 00000000..1c0c7182
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimComposer.md
@@ -0,0 +1,26 @@
+# Composer
+
+This Virtual Camera __Aim__ algorithm rotates the camera to face the __Look At__ target. It also applies offsets,
+damping, and composition rules. Examples of targets for aiming: the upper spine or head bone of a character, vehicles,
+or dummy objects which are controlled or animated programmatically.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:--------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Center On Activate** | Forces the camera to the center of the screen when the camera becomes live. |
+| **Tracked Object Offset** | Offset from the center of the Look At target, in target-local space. Fine-tune the tracking target position when the desired area is not the tracked object’s center. You can also use [Scene Handles](handles.md) to modify this property. |
+| __Lookahead Time__ | Adjust the offset based on the motion of the Look At target. The algorithm estimates the point that the target will be this many seconds into the future. This feature is sensitive to noisy animation. It can amplify the noise, resulting in undesirable camera jitter. If the camera jitters unacceptably when the target is in motion, turn down this property or animate the target more smoothly. |
+| __Lookahead Smoothing__ | Controls the smoothness of the lookahead algorithm. Larger values smooth out jittery predictions and increase prediction lag. |
+| __Lookahead Ignore Y__ | Toggle to ignore movement along the Y axis for lookahead calculations. |
+| __Horizontal Damping__ | How responsively the camera follows the target in the screen-horizontal direction. Use small numbers for more responsive, rapid rotation of the camera to keep the target in the dead zone. Use larger numbers for a more heavy, slowly-responding camera. |
+| __Vertical Damping__ | How responsively the camera follows the target in the screen-vertical direction. Use different vertical and horizontal settings to give a wide range of camera behaviors. |
+| __Screen X__ | Horizontal screen position for the center of the dead zone. The camera rotates so that the target appears here. |
+| __Screen Y__ | Vertical screen position for target. The camera rotates so that the target appears here. |
+| __Dead Zone Width__ | The width of the screen region within which the camera ignores any movement of the target. If the target is positioned anywhere within this region, the Virtual Camera doesn't update its rotation. This is useful for ignoring minor target movement. |
+| __Dead Zone Height__ | The height of the screen region within which the camera ignores any movement of the target. If the target is positioned anywhere within this region, the Virtual Camera doesn't update its rotation. This is useful for ignoring minor target movement. |
+| __Soft Zone Width__ | The width of the soft zone. If the target appears in this region of the screen, the camera will rotate to push it back out to the dead zone, in the time specified by the Horizontal Damping setting. |
+| __Soft Zone Height__ | The height of the soft zone. If the target appears in this region of the screen, the camera will rotate to push it back out to the dead zone, in the time specified by the Vertical Damping setting. |
+| __Bias X__ | Positions the soft zone horizontally, relative to the dead zone. |
+| __Bias Y__ | Positions the soft zone vertically, relative to the dead zone. |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimDoNothing.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimDoNothing.md
new file mode 100644
index 00000000..80b2b475
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimDoNothing.md
@@ -0,0 +1,5 @@
+# Do Nothing
+
+This Virtual Camera __Aim__ algorithm does not aim the Virtual Camera. Choose this algorithm for static shots or for
+animating the rotation directly with custom scripts.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimGroupComposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimGroupComposer.md
new file mode 100644
index 00000000..52b92470
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimGroupComposer.md
@@ -0,0 +1,6 @@
+# Group Composer
+
+This Virtual Camera __Aim__ algorithm aims the camera at multiple GameObjects. Otherwise, it behaves identically to the
+Composer and has the same settings. If the Look At target is a [Cinemachine Target Group](CinemachineTargetGroup.md),
+the algorithm adjusts the FOV and the camera distance to ensure that the group of targets is framed properly.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimHardLook.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimHardLook.md
new file mode 100644
index 00000000..1836f587
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimHardLook.md
@@ -0,0 +1,5 @@
+# Hard Look At
+
+This Virtual Camera __Aim__ algorithm rotates the Virtual Camera to keep the __Look At__ target in the center of the
+camera frame.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimPOV.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimPOV.md
new file mode 100644
index 00000000..d55032d3
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimPOV.md
@@ -0,0 +1,39 @@
+# POV
+
+This Virtual Camera __Aim__ algorithm aims the camera in response to the user’s input.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:---------------------------|:-------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Vertical Axis__ | | Controls the vertical orientation of the Virtual Camera’s aim. |
+| | _Value_ | The current value of the axis to aim the camera at, in degrees. Accepted values are -90 to 90. |
+| | _Value Range_ | The minimum and maximum values for the vertical axis of the Virtual Camera. |
+| | _Wrap_ | If checked, the axis wraps around the Value Range values, forming a loop. |
+| | _Max Speed_ | The maximum speed of this axis in degrees/second, or the multipler for the input value if Speed Mode is set to _InputValueGain_. |
+| | _Speed Mode_ | How the axis responds to input. _MaxSpeed_ (the default) clamps the maximum speed at which the axis can change, regardless of the input. _Input Value Gain_ multiplies the input value by MaxSpeed. |
+| | _Accel Time_ | The amount of time in seconds it takes to accelerate to Max Speed with the supplied axis at its maximum value. |
+| | _Decel Time_ | The amount of time in seconds it takes to decelerate the axis to zero if the supplied axis is in a neutral position. |
+| | _Input Axis Name_ | The name of this axis as specified in Unity Input Manager. To disable the automatic updating of this axis, set this property to an empty string. |
+| | _Input Axis Value_ | The value of the input axis. A value of 0 means no input. You can drive this directly from a custom input system, or you can set the Input Axis Name and have the value driven by the Unity Input Manager. |
+| | _Invert_ | Check to invert the raw value of the input axis before it is used. |
+| __Vertical Recentering__ | | Controls automatic vertical recentering when the player gives no input. |
+| | _Enabled_ | Check to enable automatic vertical recentering. |
+| | _Wait Time_ | If no user input has been detected on the vertical axis, the camera waits this long in seconds before recentering. |
+| | _Recentering Time_ | Maximum angular speed of recentering. Accelerates into and decelerates out of this. |
+| __Horizontal Axis__ | | Controls the horizontal orientation. |
+| | _Value_ | The current value of the axis, in degrees. Accepted values are -180 to 180. |
+| | _Value Range_ | The minimum and maximum values for the axis. |
+| | _Wrap_ | If checked, the axis wraps around the Value Range values, forming a loop. |
+| | _Max Speed_ | The maximum speed of this axis in degrees/second, or the multipler for the input value if Speed Mode is set to _InputValueGain_. |
+| | _Speed Mode_ | How the axis responds to input. _MaxSpeed_ (the default) clamps the maximum speed at which the axis can change, regardless of the input. _Input Value Gain_ multiplies the input value by MaxSpeed. |
+| | _Accel Time_ | The amount of time in seconds it takes to accelerate to Max Speed with the supplied Axis at its maximum value. |
+| | _Decel Time_ | The amount of time in seconds it takes to decelerate the axis to zero if the supplied axis is in a neutral position. |
+| | _Input Axis Name_ | The name of this axis as specified in the Unity Input Manager. Set this property to an empty string to disable automatic update of this axis. |
+| | _Input Axis Value_ | The value of the input axis. A value of 0 means no input. You can drive this directly from a custom input system, or you can set the Input Axis Name and have the value driven by the Unity Input Manager. |
+| | _Invert_ | Check to invert the raw value of the input axis before it is used. |
+| __Horizontal Recentering__ | | Controls automatic vertical recentering when the player gives no input. |
+| | _Enabled_ | Check to enable automatic vertical recentering. |
+| | _Wait Time_ | If no user input has been detected on the vertical axis, the camera waits this long in seconds before recentering. |
+| | _Recentering Time_ | Maximum angular speed of recentering. Accelerates into and decelerates out of this. |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimSameAsFollow.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimSameAsFollow.md
new file mode 100644
index 00000000..fa04fe98
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAimSameAsFollow.md
@@ -0,0 +1,6 @@
+# Same As Follow Target
+
+This Virtual Camera __Aim__ algorithm matches the orientation of the __Follow__ target. When used with the __Hard Lock
+to Target__ algorithm in the __Body__ properties, this algorithm makes the Virtual Camera match the path and rotation of
+a control GameObject.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAlternativeInput.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAlternativeInput.md
new file mode 100644
index 00000000..825d968b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineAlternativeInput.md
@@ -0,0 +1,35 @@
+# Alternative Input Systems
+
+Some Cinemachine components (e.g. FreeLook, POV, OrbitalTransposer) require user input to position or orient the camera.
+By default, Cinemachine gets user input by querying the standard Unity `Input.GetAxis(name)`.
+
+When alternative input systems are used in a project, this default behaviour must be overridden so that input is
+obtained from the appropriate source.
+
+Cinemachine has defined an interface: `Cinemachine.AxisState.IInputAxisProvider`. If a `MonoBehaviour` implementing this
+interface is added to a Virtual Camera or FreeLook, then it will be queried for input instead of the standard input
+system.
+
+Cinemachine ships with an example of such a behaviour that uses the new __UnityEngine.Input__ package: *
+*CinemachineInputProvider**. It has dual purpose:
+
+1. Provide a simple out-of-the-box adapter for the new UnityEngine.Input package, to cover common usecases
+2. To serve as a source code example of how to integrate Cinemachine with custom or 3rd-party input systems
+
+# CinemachineInputProvider
+
+
+
+This is a behaviour that is intended to be added to a virtual camera or FreeLook. It is an input source override, which
+causes the virtual camera to obtain input using the new __UnityEngine.Input__ package instead of the standard Unity
+Input system.
+
+This behaviour is available when the __UnityEngine.Input__ package is installed in the project.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-----------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Player Index__ | Which player's input controls to query. Leave this at the default value of -1 for single-player games. Otherwise this should be the index of the player in the `UnityEngine.Inout.InputUser.all` list |
+| __XY Axis__ | A `Vector2` input action that will supply values for the X and Y axes. Can be null if X and Y axes are not used |
+| __Z Axis__ | A `float` input action that will supply values for the Z axis. Can be null if Z axis is not used |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBindingModes.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBindingModes.md
new file mode 100644
index 00000000..25e1608e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBindingModes.md
@@ -0,0 +1,79 @@
+# Binding Modes
+
+The binding mode defines the coordinate space Unity uses to interpret the camera offset from the target and the damping.
+
+
+### Lock To Target
+
+Makes the virtual camera use the local frame of the Follow target. When the target rotates, the camera rotates with it
+to maintain the offset and to maintain the same view of the target.
+
+| | |
+|-------------------------------------------------------------------------|-----------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
+
+
+### Lock To Target No Roll
+
+Makes the virtual camera use the local frame of the Follow target, with roll set to 0.
+
+| | |
+|--------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
+
+
+### Lock To Target On Assign
+
+Makes the orientation of the virtual camera match the local frame of the Follow target, at the moment when the virtual
+camera is activated or when the target is assigned. This offset remains constant in world space. The camera does not
+rotate along with the target.
+
+| | |
+|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
+
+
+### Lock To Target With World Up
+
+Makes the virtual camera use the local frame of the Follow target with tilt and roll set to 0. This binding mode ignores
+all target rotations except yaw.
+
+| | |
+|---------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
+
+
+### World Space
+
+The offset is interpreted in world space relative to the origin of the Follow target. The camera will not change
+position when the target rotates.
+
+| | |
+|-------------------------------------------------------------------------|----------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
+
+
+### Simple Follow With World Up
+
+Simple follow with world up interprets the offset and damping values in camera-local space. This mode emulates the
+action a human camera operator would take when instructed to follow a target.
+
+The camera attempts to move as little as possible to maintain the same distance from the target; the direction of the
+camera with regard to the target does not matter. Regardless of the orientation of the target, the camera tries to
+preserve the same distance and height from it.
+
+| | |
+|-----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|
+| Start  | Pitch, 45 degrees  |
+| Yaw, 45 degrees  | Roll, 45 degrees  |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlendListCamera.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlendListCamera.md
new file mode 100644
index 00000000..74f514d0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlendListCamera.md
@@ -0,0 +1,25 @@
+# Cinemachine Blend List Camera
+
+The __Cinemachine Blend List Camera__ component executes a sequence of blends or cuts among its child Virtual Cameras.
+
+When the Blend List camera is activated, it executes its list of instructions, activating the first child Virtual Camera
+in the list, holding for a designated time, then cutting or blending to the next child, and so on. The Blend List camera
+holds the last Virtual Camera until Cinemachine Brain or Timeline deactivates the Blend List camera.
+
+**Tip**: Use a Blend List Camera instead of [Timeline](CinemachineTimeline.md) for simpler, automatic sequences.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-----------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Solo__ | Toggles whether or not the Blend List camera is temporarily live. Use this property to get immediate visual feedback in the [Game view](https://docs.unity3d.com/Manual/GameView.html) to adjust the Virtual Camera. |
+| __Game Window Guides__ | Toggles the visibility of compositional guides in the Game view. This property applies to all Virtual Cameras. |
+| __Save During Play__ | Check to [apply the changes while in Play mode](CinemachineSavingDuringPlay.md). Use this feature to fine-tune a Virtual Camera without having to remember which properties to copy and paste. This property applies to all Virtual Cameras. |
+| __Priority__ | The importance of this Blend List camera for choosing the next shot. A higher value indicates a higher priority. Cinemachine Brain chooses the next live Virtual Camera from all Virtual Cameras that are activated and have the same or higher priority as the current live Virtual Camera. This property has no effect when using a Virtual Camera with Timeline. |
+| **Standby Update** | Controls how often the virtual camera is updated when the virtual camera is not live. |
+| **Loop** | When enabled, the child virtual cameras will cycle indefintely instead of stopping on the last virtual camera in the list. |
+| __Look At__ | The default target GameObject that the children Virtual Camera move with. The Blend List camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Follow__ | The default target GameObject to aim the Unity camera at. The Blend List camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Show Debug Text__ | Check to display a textual summary of the live Virtual Camera and blend in the view. |
+| __Enable All Child Cameras__ | Check to activate all child cameras. This is useful if animating them in Timeline, but consumes extra resources. |
+| __Instructions__ | The set of instructions for enabling child cameras. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlending.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlending.md
new file mode 100644
index 00000000..a8801b09
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBlending.md
@@ -0,0 +1,48 @@
+# Blending between Virtual Cameras
+
+Use blending properties to specify how the Cinemachine Brain component performs a blend between virtual cameras.
+
+A Cinemachine blend is not a fade, wipe, or dissolve. Rather, Cinemachine Brain performs a smooth animation of the
+position, rotation, and other settings of the Unity camera from one Virtual Camera to the next.
+
+For blends between specific Virtual Cameras, use the __Custom Blends__ list in the Cinemachine Brain component. Use the
+__Default Blend__ property in Cinemachine Brain to specify blends between Virtual Cameras that do not have custom
+blends.
+
+
+
+The __From__ and __To__ settings are name-based, not references. This means that Cinemachine finds cameras by matching
+their names to the settings. They are not linked to specific GameObjects. The built-in dropdowns can be used to select a
+virtual camera from the current scene, or the name can be typed directly into the text boxes. If a name does not match
+any virtual camera in the current scene, the field will be highlighted in yellow.
+
+Use the reserved name **\*\*ANY CAMERA\*\*** to blend from or to any Virtual Camera.
+
+When Cinemachine begins a transition from one virtual camera to another, it will look in this asset for an entry that
+matches the upcoming transition, and apply that blend definition.
+
+- If none is found, then the CinemachineBrain's DefaultBlend setting will apply.
+- If multiple entries in the Custom Blends asset match the upcoming transition, Cinemachine will choose the one with the
+ strongest specificity. For example, if blending from vcam1 to vcam2, and the custom blends asset contains an entry for
+ _vcam1-to-AnyCamera_, and another entry for _vcam1-to-vcam2_, then the _vcam1-to-vcam2_ entry will apply.
+- If multiple entries in the Custom Blends asset match the upcoming transition with equally-strong specificity, then the
+ first one found will apply.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:------------------------|:--------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __From__ | | The name of the Virtual Camera to blend from. Use the name \*\*ANY CAMERA\*\* to blend from any Virtual Camera. This property is available only for custom blends. |
+| __To__ | | The name of the Virtual Camera to blend to. Use the name \*\*ANY CAMERA\*\* to blend to any Virtual Camera. This property is available only for custom blends. |
+| __Style Default Blend__ | | Shape of the blend curve. |
+| | _Cut_ | Zero-length blend. |
+| | _Ease In Out_ | S-shaped curve, giving a gentle and smooth transition. |
+| | _Ease In_ | Linear out of the outgoing Virtual Camera, and ease into the incoming Virtual Camera. |
+| | _Ease Out_ | Ease out of the outgoing Virtual Camera, and blend linearly into the incoming Virtual Camera. |
+| | _Hard In_ | Ease out of the outgoing Virtual Camera, and accelerate into the incoming Virtual Camera. |
+| | _Hard Out_ | Accelerate out of the outgoing Virtual Camera, and ease into the incoming Virtual Camera. |
+| | _Linear_ | Linear blend. mechanical-looking. |
+| | _Custom_ | Custom blend curve. Allows you to draw a custom blend curve. |
+| __Time__ | | Duration (in seconds) of the blend. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBody3rdPersonFollow.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBody3rdPersonFollow.md
new file mode 100644
index 00000000..a07c96f8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBody3rdPersonFollow.md
@@ -0,0 +1,42 @@
+# 3rd Person Follow
+
+This Virtual Camera __Body__ algorithm is intended for use to implement a 3rd-person or 1st person camera. The algorithm
+places the camera on a mini-rig with 3 pivot points:
+
+Pivot point 1 is the _origin_, which is the Follow target's position. When the target rotates horizontally, the rig
+rotates with it around this point.
+
+Pivot point 2 is the _shoulder_, and by default is offset to one side of Pivot Point 1, to create an over-the-shoulder
+follow position. To make a 1st-person camera, set this offset to 0, or to whatever will give an appropriate 1st-person
+effect given your Follow target's position. Vertical rotations of the Follow target are transferred here, so the rig
+rotates horizontally about the origin, and vertically about the shoulder.
+
+Pivot point 3 is the _hand_. This is by default offset from the shoulder, so that vertical rotations will keep the
+character nicely positioned on the screen. For 1st-person cameras, this can be set to 0.
+
+Finally, the camera is positioned behind the hand, at a specifiable distance from it. The camera's rotation will always
+be parallel to the Follow target's rotation, but positioned behind the hand.
+
+The camera's position and rotation are controlled by moving and rotating the Follow target, not by independent camera
+controls.
+
+The 3rd-person Follow module has a built-in collision resolution system, so that if the target moves close to an
+obstacle, the camera position will be adjusted so that it will never be inside an obstacle.
+
+
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:----------------------------|:-|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Damping__ | | How responsively the camera tracks the target. Each axis (camera-local) can have its own setting. Value is the approximate time it takes the camera to catch up to the target's new position. Smaller values give a more rigid effect, larger values give a squishier one |
+| __Shoulder Offset__ | | Position of the shoulder pivot relative to the Follow target origin. This offset is in target-local space. |
+| __Vertical Arm Length__ | | Vertical offset of the hand in relation to the shoulder. Arm length will affect the follow target's screen position when the camera rotates vertically. |
+| __Camera Side__ | | Specifies which shoulder (left, right, or in-between) the camera is on. |
+| __Camera Distance__ | | How far behind the hand the camera will be placed. |
+| __Camera Collision Filter__ | | Camera will avoid obstacles on these layers. |
+| __Ignore Tag__ | | Obstacles with this tag will be ignored. It is a good idea to set this field to the target's tag. |
+| __Camera Radius__ | | Specifies how close the camera can get to obstacles. |
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyDoNothing.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyDoNothing.md
new file mode 100644
index 00000000..6be0554b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyDoNothing.md
@@ -0,0 +1,5 @@
+# Do Nothing
+
+This Virtual Camera __Body__ algorithm does not move the Virtual Camera; it does not modify its position. Choose this
+algorithm for static shots or for animating the camera position directly with your custom scripts.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyFramingTransposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyFramingTransposer.md
new file mode 100644
index 00000000..045d9247
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyFramingTransposer.md
@@ -0,0 +1,61 @@
+# Framing Transposer
+
+This Virtual Camera __Body__ algorithm moves the camera in a fixed screen-space relationship to the __Follow__ target.
+You can also specify offsets, damping, and composition rules. __Framing Transposer__ only changes the camera’s position
+in space. It does not re-orient or otherwise aim the camera.
+
+__Framing Transposer__ is designed for 2D and orthographic cameras. But it works also with perspective cameras and 3D
+environments.
+
+This algorithm first moves the camera along the camera Z axis until the __Follow__ target is at the desired distance
+from the camera’s X-Y plane. It then moves the camera in its X-Y plane until the __Follow__ target is at the desired
+point on the camera’s screen.
+
+**Note**: __Framing Transposer__ ignores the LookAt target - only the Follow target is used.
+
+If the __Follow__ target is a [Target Group](CinemachineTargetGroup.md), then additional properties are available to
+frame the entire group.
+
+## Properties
+
+| **Property:** | | **Function:** |
+|:-------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Lookahead Time__ | | Adjusts the offset of the Virtual Camera from the Follow target based on the motion of the target. Cinemachine estimates the point where the target will be this many seconds into the future. This feature is sensitive to noisy animation and can amplify the noise, resulting in undesirable camera jitter. If the camera jitters unacceptably when the target is in motion, turn down this property, or animate the target more smoothly. |
+| __Lookahead Smoothing__ | | The smoothness of the lookahead algorithm. Larger values smooth out jittery predictions and increase prediction lag. |
+| __Lookahead Ignore Y__ | | If checked, ignore movement along the Y axis for lookahead calculations. |
+| __X Damping__ | | How responsively the camera tries to maintain the offset in the x-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Using different settings per axis can yield a wide range of camera behaviors. |
+| __Y Damping__ | | How responsively the camera tries to maintain the offset in the y-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Z Damping__ | | How responsively the camera tries to maintain the offset in the z-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Target Movement Only__ | | If this is enabled, then damping only applies to the motion of the target. Camera rotation changes will bypass damping. |
+| __Screen X__ | | Horizontal screen position for target. The camera moves to position the tracked object here. |
+| __Screen Y__ | | Vertical screen position for target, The camera moves to position the tracked object here. |
+| __Camera Distance__ | | The distance to maintain along the camera axis from the Follow target. |
+| __Dead Zone Width__ | | Do not move the camera horizontally when the target is within this range of the position. |
+| __Dead Zone Height__ | | Do not move the camera vertically if the target is within this range of the position. |
+| __Dead Zone Depth__ | | Do not move the camera along its z-axis if the Follow target is within this distance of the specified camera distance. |
+| __Unlimited Soft Zone__ | | If checked, then the soft zone is unlimited in size. |
+| __Soft Zone Width__ | | When the target is in this range, move the camera horizontally to frame the target in the dead zone. The Damping properties affect the rate of the camera movement. |
+| __Soft Zone Height__ | | When the target is in this range, move the camera vertically to frame the target in the dead zone. The Damping properties affect the rate of the camera movement. |
+| __Bias X__ | | Moves the target position horizontally away from the center of the soft zone. |
+| __Bias Y__ | | Moves the target position vertically away from the center of the soft zone. |
+| __Group Framing Mode__ | | Available when Follow specifies a [Target Group](CinemachineTargetGroup.md). Specifies the screen dimensions to consider when framing. |
+| | _Horizontal_ | Consider only the horizontal dimension. Ignore vertical framing. |
+| | _Vertical_ | Consider only the vertical dimension. Ignore horizontal framing. |
+| | _Horizontal And Vertical_ | Use the larger of the horizontal and vertical dimensions to get the best fit. |
+| | _None_ | Don’t do any framing adjustment. |
+| __Adjustment Mode__ | | How to adjust the camera to get the desired framing. You can zoom, dolly in or out, or do both. Available when Follow specifies a Target Group. |
+| | _Zoom Only_ | Don’t move the camera, only adjust the FOV. |
+| | _Dolly Only_ | Move the camera, don’t change the FOV. |
+| | _Dolly Then Zoom_ | Move the camera as much as permitted by the ranges, then adjust the FOV if necessary to make the shot. |
+| __Group Framing Size__ | | The bounding box that the targets should occupy. Use 1 to fill the whole screen, 0.5 to fill half the screen, and so on. Available when Follow specifies a Target Group. |
+| __Max Dolly In__ | | The maximum distance toward the target to move the camera. Available when Follow specifies a Target Group. |
+| __Max Dolly Out__ | | The maximum distance away from the target to move the camera. Available when Follow specifies a Target Group. |
+| __Minimum Distance__ | | Set this to limit how close to the target the camera can get. Available when Follow specifies a Target Group. |
+| __Maximum Distance__ | | Set this to limit how far from the target the camera can get. Available when Follow specifies a Target Group. |
+| __Minimum FOV__ | | If adjusting FOV, do not set the FOV lower than this. Available when Follow specifies a Target Group. |
+| __Maximum FOV__ | | If adjusting FOV, do not set the FOV higher than this. Available when Follow specifies a Target Group. |
+| __Minimum Ortho Size__ | | If adjusting Orthographic Size, do not set it lower than this. Available when Follow specifies a Target Group. |
+| __Maximum Ortho Size__ | | If adjusting Orthographic Size, do not set it higher than this. Available when Follow specifies a Target Group. |
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyHardLockTarget.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyHardLockTarget.md
new file mode 100644
index 00000000..530fd63f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyHardLockTarget.md
@@ -0,0 +1,5 @@
+# Hard Lock to Target
+
+This Virtual Camera __Body__ algorithm uses the same position at the __Follow__ target. In other words, the target acts
+as a mounting point for the Virtual Camera.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyOrbitalTransposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyOrbitalTransposer.md
new file mode 100644
index 00000000..adedaefc
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyOrbitalTransposer.md
@@ -0,0 +1,63 @@
+# Orbital Transposer
+
+This Virtual Camera __Body__ algorithm moves the Unity camera in a variable relationship to the Virtual Camera’s _
+_Follow__ target. It optionally accepts [player input](https://docs.unity3d.com/Manual/ConventionalGameInput.html),
+which allows the player to dynamically control the position of the camera relative to the target.
+
+The __Orbital Transposer__ introduces the concept of __heading__, which is the direction in which the target is moving
+or facing. Orbital Transposer attempts to position the camera so that it points in the same direction as the heading
+direction. By default, this position is directly behind the target. Control this relationship by adjusting the __Heading
+Bias__ property.
+
+If you attach an input controller to the __Orbital Transposer__, then the player can also control the camera. This
+allows the player to move the camera to any spot on an orbit around the target. Configure the __Orbital Transposer__ to
+take its input from any axis that you set up in
+the [Input Manager](https://docs.unity3d.com/Manual/class-InputManager.html). Or control the value directly using a
+custom input system.
+
+__Orbital Transposer__ optionally re-centers the camera automatically. When __Recenter To Target Heading__ is checked,
+Orbital Transposer automatically moves the camera back to the target heading. You can specify the length of time to wait
+after it has detected no user input and the speed of the recentering.
+
+
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-----------------------------------------------|:-------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __[Binding Mode](CinemachineBindingModes.md)__ | | The coordinate space to use to interpret the offset from the target. |
+| | _Lock To Target On Assign_ | Makes the orientation of the virtual camera match the local frame of the Follow target, at the moment when the virtual camera is activated or when the target is assigned. This offset remains constant in world space. The camera doesn't rotate along with the target. |
+| | _Lock To Target With World Up_ | Makes the virtual camera use the local frame of the Follow target with tilt and roll set to 0. This binding mode ignores all target rotations except yaw. |
+| | _Lock To Target No Roll_ | Makes the virtual camera use the local frame of the Follow target, with roll set to 0. |
+| | _Lock To Target_ | Makes the virtual camera use the local frame of the Follow target. When the target rotates, the camera moves with it to maintain the offset and to maintain the same view of the target. |
+| | _World Space_ | The offset is interpreted in world space relative to the origin of the Follow target. The camera will not change position when the target rotates. |
+| | _Simple Follow With World Up_ | Simple follow with world up interprets the offset and damping values in camera-local space. This mode emulates the action a human camera operator would take when instructed to follow a target. The camera attempts to move as little as possible to maintain the same distance from the target; the direction of the camera with regard to the target does not matter. Regardless of the orientation of the target, the camera tries to preserve the same distance and height from it. |
+| __Follow Offset__ | | The position offset to attempt to maintain from the Follow target. You can also use [Scene Handles](handles.md) to modify this property. |
+| __X Damping__ | | How responsively the camera tries to maintain the offset in the x-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Using different settings per axis can yield a wide range of camera behaviors. Not available when Binding Mode is Simple Follow With World Up. |
+| __Y Damping__ | | How responsively the camera tries to maintain the offset in the y-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Z Damping__ | | How responsively the camera tries to maintain the offset in the z-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Yaw Damping__ | | How responsively the camera tries to track the target rotation’s y angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Available when Binding Mode is Lock to Target With World Up, Lock to Target No Roll, or Lock to Target. |
+| __Pitch Damping__ | | How responsively the camera tries to track the target rotation’s x angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Available when Binding Mode is Lock to Target No Roll or Lock to Target. |
+| __Roll Damping__ | | How responsively the camera tries to track the target rotation’s z angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Available when Binding Mode is Lock to Target. |
+| __Heading__ | | Specifies how to calculate the heading of the Follow target. |
+| | _Definition_ | Choose Position Delta to calculate heading based on the difference in the position of the target from the last update and the current frame. Choose Velocity to use the velocity of the [Rigidbody](https://docs.unity3d.com/Manual/class-Rigidbody.html) of the target. If the target has no Rigidbody component, reverts to Position Delta. Choose Target Forward to use the target's local Forward axis as the heading. Choose World Forward to use a constant world-space Forward as heading. |
+| | _Velocity Filter Strength_ | Controls the smoothing of the velocity when using Position Delta or Velocity in Definition. |
+| | _Bias_ | Angular offset in the orbit to place the camera, relative to the heading. Measured in degrees. An axis value of 0 will put the camera here. |
+| __Recenter To Target Heading__ | | Controls automatic recentering when the player gives no input. |
+| | _Enabled_ | Check to enable automatic recentering. |
+| | _Wait Time_ | If no user input has been detected on the axis, the camera waits this long in seconds before recentering. |
+| | _Recentering Time_ | Maximum angular speed of recentering. Accelerates into and decelerates out of this. |
+| __X Axis__ | | Heading Control. The settings here control the behaviour of the camera in response to the player’s input. |
+| | _Value_ | The current value of the axis, in degrees. |
+| | _Min Value_ | The minimum value for the axis. |
+| | _Max Value_ | The maximum value for the axis. |
+| | _Wrap_ | If checked, then the axis wraps around at the Min and Max values, forming a loop. |
+| | _Max Speed_ | The maximum speed of this axis in degrees/second, or the multipler for the input value if Speed Mode is set to _InputValueGain_. |
+| | _Speed Mode_ | How the axis responds to input. _MaxSpeed_ (the default) clamps the maximum speed at which the axis can change, regardless of the input. _Input Value Gain_ multiplies the input value by MaxSpeed. |
+| | _Accel Time_ | The amount of time in seconds to accelerate to MaxSpeed with the supplied axis at its maximum value. |
+| | _Decel Time_ | The amount of time in seconds o decelerate the axis to zero if the supplied axis is in a neutral position. |
+| | _Input Axis Name_ | The name of this axis as specified in the Unity Input manager. Set to an empty string to disable the automatic updating of this axis. |
+| | _Input Axis Value_ | The value of the input axis. A value of 0 means no input. Drive this directly from a custom input system, or set the Input Axis Name to drive the value by the Unity Input Manager. |
+| | _Invert_ | Check to invert the raw value of the input axis before it is used. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTrackedDolly.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTrackedDolly.md
new file mode 100644
index 00000000..7478f1b2
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTrackedDolly.md
@@ -0,0 +1,46 @@
+# Tracked Dolly
+
+This Virtual Camera __Body__ algorithm restricts the Virtual Camera to move along a
+predefined [path](CinemachineDolly.md). Use the __Path Position__ property to specify where to put the Virtual Camera on
+the path.
+
+Use __Auto-Dolly__ mode to move the Virtual Camera to a position on the path that is closest to the __Follow__ target.
+When enabled, __Auto-Dolly__ automatically animates the position of the Virtual Camera to the position on the path
+that’s closest to the target.
+
+**Tip**: Choose your path shapes with care when using Auto-Dolly mode. This becomes problematic on paths that form an
+arc around some point. As an extreme example, consider a perfectly circular path with the __Follow__ target at the
+center. The closest point on the path becomes unstable because all points on the circular path are equally close to the
+target. In this situation, moving the __Follow__ target small distances can cause the camera to move large distances on
+the track.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-------------------|:------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Path__ | | The path that the camera moves along. This property must refer to a [Cinemachine Path](CinemachinePath.md) or [Cinemachine Smooth Path](CinemachineSmoothPath.md). |
+| __Path Position__ | | The position along the path to place the camera. Animate this property directly or enable Auto-Dolly. The value is in the units specified by Position Units. |
+| __Position Units__ | | The unit of measure for Path Position. |
+| | _Path Units_ | Use waypoints along the path. The value 0 represents the first waypoint on the path, 1 is the second waypoint, and so on. |
+| | _Distance_ | Use distance along the path. The path is sampled according to the Resolution property of the path. Cinemachine creates a distance lookup table, which it stores in an internal cache. |
+| | _Normalized_ | Use the beginning and end of the path. The value 0 represents the beginning of the path, 1 is the end of the path. |
+| __Path Offset__ | | The position of the camera relative to the path. X is perpendicular to the path, Y is up, and Z is parallel to the path. Use this property to offset the camera from the path itself. |
+| __X Damping__ | | How responsively the camera tries to maintain its position in a direction perpendicular to the path. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Using different settings per axis can yield a wide range of camera behaviors. |
+| __Y Damping__ | | How responsively the camera tries to maintain its position in the path-local up direction. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Z Damping__ | | How responsively the camera tries to maintain its position in a direction parallel to the path. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Camera Up__ | | How to set the up vector for the Virtual Camera. This affects the screen composition because the camera Aim algorithms try to respect the up direction. |
+| | _Default_ | Do not modify the up direction of the Virtual Camera. Instead, use the World Up Override property in Cinemachine Brain. |
+| | _Path_ | Use the path’s up vector at the current point. |
+| | _Path No Roll_ | Use the path’s up vector at the current point, but with the roll set to zero. |
+| | _Follow Target_ | Use the up vector from the Follow target’s transform. |
+| | _Follow Target No Roll_ | Use the up vector from the Follow target’s transform, but with the roll zeroed out. |
+| __Pitch Damping__ | | How responsively the camera tracks the target rotation’s x angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Yaw Damping__ | | How responsively the camera tracks the target rotation’s y angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Roll Damping__ | | How responsively the camera tracks the target rotation’s z angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Auto Dolly__ | | Controls how automatic dollying occurs. A Follow target is necessary to use this feature. |
+| | _Enabled_ | Check to enable the automatic dolly. Note: this can have some performance impact, depending on the search resolution. |
+| | _Position Offset_ | Offset, in position units, from the closest point on the path to the follow target. |
+| | _Search Radius_ | The number of segments on either side of the current segment. Use 0 for the entire path. Use a lower number when the path’s shape relative to the target position causes the closest point on the path to become unstable. |
+| | _Search Resolution_ | Cinemachine searches a segment by dividing it into many straight pieces. The higher the number, the more accurate the result. However, performance is proportionally slower for higher numbers. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTransposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTransposer.md
new file mode 100644
index 00000000..d0bfe838
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBodyTransposer.md
@@ -0,0 +1,28 @@
+# Transposer
+
+This Virtual Camera __Body__ algorithm moves the Virtual Camera in a fixed offset to the __Follow__ target. It also
+applies damping.
+
+The fixed offset can be interpreted in various ways, depending on the Binding Mode.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-----------------------------------------------|:-------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __[Binding Mode](CinemachineBindingModes.md)__ | | The coordinate space to use to interpret the offset from the target. |
+| | _Lock To Target On Assign_ | Makes the orientation of the virtual camera match the local frame of the Follow target, at the moment when the virtual camera is activated or when the target is assigned. This offset remains constant in world space. The camera does not rotate along with the target. |
+| | _Lock To Target With World Up_ | Makes the virtual camera use the local frame of the Follow target with tilt and roll set to 0. This binding mode ignores all target rotations except yaw. |
+| | _Lock To Target No Roll_ | Makes the virtual camera use the local frame of the Follow target, with roll set to 0. |
+| | _Lock To Target_ | Makes the virtual camera use the local frame of the Follow target. When the target rotates, the camera moves with it to maintain the offset and to maintain the same view of the target. |
+| | _World Space_ | The offset is interpreted in world space relative to the origin of the Follow target. The camera will not change position when the target rotates. |
+| | _Simple Follow With World Up_ | Simple follow with world up interprets the offset and damping values in camera-local space. This mode emulates the action a human camera operator would take when instructed to follow a target. The camera attempts to move as little as possible to maintain the same distance from the target; the direction of the camera with regard to the target does not matter. Regardless of the orientation of the target, the camera tries to preserve the same distance and height from it. |
+| __Follow Offset__ | | The distance to maintain the Virtual Camera relative to the Follow target. Set X, Y, and Z to 0 to place the camera at the centre of the target. The default is 0, 0, -10, respectively, which places the camera behind the target. |
+| __X Damping__ | | How responsively the camera tries to maintain the offset in the x-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Y Damping__ | | How responsively the camera tries to maintain the offset in the y-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Z Damping__ | | How responsively the camera tries to maintain the offset in the z-axis. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Pitch Damping__ | | How responsively the camera tracks the target rotation’s x angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Yaw Damping__ | | How responsively the camera tracks the target rotation’s y angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Roll Damping__ | | How responsively the camera tracks the target rotation’s z angle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBrainProperties.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBrainProperties.md
new file mode 100644
index 00000000..3019ed9c
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineBrainProperties.md
@@ -0,0 +1,62 @@
+# Setting Cinemachine Brain properties
+
+The Cinemachine Brain is a component in the Unity camera itself. Cinemachine Brain monitors all active Virtual Cameras
+in the Scene. It chooses the next Virtual Camera to control the Unity camera. It also controls
+the [cut or blend](CinemachineBlending.md) from the current Virtual Camera to the next.
+
+To add a Cinemachine Brain component to a Unity camera, do __one__ of the following:
+
+* [Add a Virtual Camera](CinemachineSetUpVCam.md), or other Cinemachine object, to your Scene. Unity adds a Cinemachine
+ Brain component to the Unity camera for you if there isn’t one already.
+
+* [Add](https://docs.unity3d.com/Manual/UsingComponents.html) a Cinemachine Brain component to the Unity camera
+ yourself.
+
+**Tip**: You can also control Virtual Cameras from [Timeline](CinemachineTimeline.md). Timeline overrides the decisions
+that Cinemachine Brain makes.
+
+Cinemachine Brain holds the following key properties:
+
+* __Blend Settings__: A list that defines how to blend from one Virtual Camera to another. For example, add an item to
+ the list for a 4 second blend from vcam1 to vcam2 then add another item for a 1 second blend from vcam2 back to vcam1.
+ If a blend between two cameras isn’t defined, Cinemachine Brain uses its default blend.
+
+* __Layer Filter__: Cinemachine Brain uses only those Virtual Cameras that pass the culling mask of the Unity camera.
+ You can set up [split-screen environments](CinemachineMultipleCameras.md) by using the culling mask to filter layers.
+
+* __Event Dispatching__: Cinemachine Brain fires events when it changes shot. It fires an event when a Virtual Camera
+ goes live. It also fires an event when it cuts from one Virtual Camera to another. Use the latter event to reset
+ temporal post effects.
+
+
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:---------------------------|:----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Show Debug Text__ | | Check to display a textual summary of the live Virtual Camera and blend in the view. |
+| __Show Camera Frustum__ | | Check to display the frustum of the camera in the Scene view. |
+| __Ignore Time Scale__ | | Check to make the Virtual Cameras respond in real time to user input and damping, even if the game is running in slow motion. |
+| __World Up Override__ | | The Y axis of the specified GameObject defines the worldspace up vector for Virtual Cameras. Use this property in top-down game environments. Set to None to use the worldspace Y axis. Setting this appropriately is important to avoid gimbal-lock in extreme up/down conditions. |
+| __Update Method__ | | When to update the position and rotation of the Virtual Cameras. |
+| | _Fixed Update_ | Synchronize Virtual Camera update with the Physics module, in FixedUpdate. |
+| | _Late Update_ | In MonoBehaviour LateUpdate. |
+| | _Smart Update_ | Update each virtual camera according to how its target is updated. This is the recommended setting. |
+| | _Manual Update_ | Virtual Cameras do not update automatically. You must explicitly call `brain.ManualUpdate()` at an appropriate time in your game loop. This should be after any camera LookAt or Follow targets have moved. This is an advanced feature. |
+| __Blend Update Method__ | | When to resolve the blends and update the main camera. |
+| | _Late Update_ | In MonoBehaviour LateUpdate. This is the recommended setting. |
+| | _Fixed Update_ | Use this setting only if your Update Method is FixedUpdate and you see judder when blending. |
+| __Default Blend__ | | The blend to use when you haven’t explicitly defined a blend between two Virtual Cameras. |
+| | _Cut_ | Zero-length blend. |
+| | _Ease In Out_ | S-shaped curve, giving a gentle and smooth transition. |
+| | _Ease In_ | Linear out of the outgoing shot, and easy into the incoming. |
+| | _Ease Out_ | Easy out of the outgoing shot, and linear into the incoming. |
+| | _Hard In_ | Easy out of the outgoing, and hard into the incoming. |
+| | _Hard Out_ | Hard out of the outgoing, and easy into the incoming. |
+| | _Linear_ | Linear blend. Mechanical-looking. |
+| | _Custom_ | Custom blend curve. Draw the curve you want. |
+| __Custom Blends__ | | The asset that contains custom settings for blends between specific Virtual Cameras in your Scene. |
+| __Create Asset__ | | Create an asset containing a [list of custom blends](CinemachineBlending.md) between Virtual Cameras. |
+| __Camera Cut Event__ | | This event fires when a Virtual Camera goes live and there is no blend. |
+| __Camera Activated Event__ | | This event fires when a Virtual Camera goes live. If a blend is involved, then the event fires on the first frame of the blend. |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineClearShot.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineClearShot.md
new file mode 100644
index 00000000..69107172
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineClearShot.md
@@ -0,0 +1,34 @@
+# Cinemachine Clear Shot Camera
+
+The __Cinemachine ClearShot Camera__ component chooses among its children Virtual Cameras for the best quality shot of
+the target. Use Clear Shot to set up complex multi-camera coverage of a Scene to guarantee a clear view of the target.
+
+This can be a very powerful tool. Virtual Camera children with [Cinemachine Collider](CinemachineCollider.md) extensions
+analyze the Scene for target obstructions, optimal target distance, and so on. Clear Shot uses this information to
+choose the best child to activate.
+
+**Tip:** To use a single [Cinemachine Collider](CinemachineCollider.md) for all Virtual Camera children, add a
+Cinemachine Collider extension to the ClearShot GameObject instead of each of its Virtual Camera children. This
+Cinemachine Collider extension applies to all of the children, as if each of them had that Collider as its own
+extension.
+
+If multiple child cameras have the same shot quality, the Clear Shot camera chooses the one with the highest priority.
+
+You can also define custom blends between the ClearShot children.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-----------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Game Window Guides** | Enables the displays of overlays in the Game window. Adjust the color and opacity in Cinemachine Preferences. This is a global setting, shared by all virtial cameras. |
+| **Save During Play** | When enabled, virtual camera setting changes made during Play mode are propagated back to the scene when Play mode is exited. This is a global setting, shared by all objects that support Save During Play. |
+| __Look At__ | The default target GameObject that the children Virtual Camera move with. The Clear Shot camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Follow__ | The target GameObject to aim the Unity camera at. The Clear Shot camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Show Debug Text__ | Check to display a textual summary of the live Virtual Camera and blend in the Game view. |
+| __Activate After__ | Wait this many seconds before activating a new child camera. |
+| __Min Duration__ | An active camera must be active for at least this many seconds, unless a higher-priority camera becomes active. |
+| __Randomize Choice__ | Check to choose a random camera if multiple cameras have equal shot quality. Uncheck to use the order of the child Virtual Cameras and their priorities. |
+| __Default Blend__ | The blend to use when you haven’t explicitly defined a blend between two Virtual Cameras. |
+| __Priority__ | Determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollider.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollider.md
new file mode 100644
index 00000000..42f13d92
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollider.md
@@ -0,0 +1,45 @@
+# Cinemachine Collider
+
+__Cinemachine Collider__ is an [extension](CinemachineVirtualCameraExtensions.md) for the Cinemachine Virtual Camera. It
+post-processes the final position of the Virtual Camera to attempt to preserve the line of sight with the __Look At__
+target of the Virtual Camera. It does this by moving away from the GameObjects that obstruct the view.
+
+Add a Cinemachine Collider extension to a Cinemachine Virtual Camera to do any of the following tasks:
+
+* Push the camera away from obstructing obstacles in the Scene.
+
+* Place the camera in front of obstacles that come between the Virtual Camera and its __Look At__ target.
+
+* Evaluate shot quality. __Shot quality__ is a measure of the distance of the Virtual Camera from its ideal position,
+ the distance of the Virtual Camera to its target, and the obstacles that block the view of the target. Other modules
+ use shot quality, including [Clear Shot](CinemachineClearShot.md).
+
+The Collider uses a [Physics Raycaster](https://docs.unity3d.com/Manual/script-PhysicsRaycaster.html). Therefore,
+Cinemachine Collider requires that potential obstacles
+have [collider](https://docs.unity3d.com/Manual/CollidersOverview.html) volumes. There is a performance cost for this
+requirement. If this cost is prohibitive in your game, consider implementing this functionality in a different way.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:---------------------------------|:---------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Collide Against__ | | Cinemachine Collider considers GameObjects in these layers to be potential obstacles. It ignores GameObjects that are not in the selected layers. |
+| __Minimum Distance From Target__ | | Ignore obstacles that are less than this distance from the target's pivot point. |
+| __Avoid Obstacles__ | | Check to allow the Collider to move the camera in the Scene when the target is obscured by an obstacle. Use the Distance Limit, Camera Radius, and Strategy properties to adjust how to avoid obstacles. If left unchecked, the Cinemachine Collider will report shot quality based on obstacles, but will not attempt to move the camera to improve the shot. |
+| __Distance Limit__ | | The maximum raycast distance when checking if the line of sight to this camera’s target is clear. Enter 0 to use the current actual distance to the target. Available when Avoid Obstacles is checked. |
+| __Camera Radius__ | | Distance to maintain from any obstacle. Try to keep this value small for best results. Increase it if you are seeing inside obstacles due to a large FOV on the camera. Available when Avoid Obstacles is checked. |
+| __Strategy__ | | The way in which the Collider attempts to preserve sight of the target. Available when Avoid Obstacles is checked. |
+| | _Pull Camera Forward_ | Move the camera forward along its Z axis until it is in front of the obstacle that is nearest to the target. |
+| | _Preserve Camera Height_ | Move the camera to an alternate point of view while attempting to keep the camera at its original height. |
+| | _Preserve Camera Distance_ | Move the camera to an alternate point of view while attempting to keep the camera at its original distance from the target. |
+| __Smoothing Time__ | | Minimum number of seconds to hold the camera at the nearest point to the target. Can be used to reduce excess camera movement in environments with lots of obstacles. Available when Avoid Obstacles is checked. |
+| __Damping__ | | How quickly to return the camera to its normal position after an occlusion has gone away. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Available when Avoid Obstacles is checked. |
+| __Damping When Occluded__ | | How quickly to move the camera to avoid an obstacle. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. Available when Avoid Obstacles is checked. |
+| __Optimal Target Distance__ | | If greater than zero, give a higher score to shots when the target is closer to this distance. Set this property to 0 to disable this feature. |
+| __Transparent Layers__ | | Objects on these layers will never obstruct the view of the target. |
+| __Minimum Occlusion Time__ | | Do not take action action unless the occulsion has lasted at least this long. |
+| __Maximum Effort__ | | Upper limit on how many obstacle hits to process. Higher numbers may impact performance. In most environments four (4) hits is enough. |
+| **Ignore Tag** | | Obstacles with this tag will be ignored. It is recommended to set this field to the target's tag. |
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineColliderConfiner.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineColliderConfiner.md
new file mode 100644
index 00000000..d5827331
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineColliderConfiner.md
@@ -0,0 +1,9 @@
+# Avoiding collisions and evaluating shots
+
+As characters and objects move around in a complex Scene, obstacles in the Scene sometimes come between a camera and its
+target. Similarly, you might need to move a camera to a position in the Scene that another GameObject already occupies.
+Cinemachine provides extensions to handle these situations:
+
+* [Cinemachine Collider](CinemachineCollider.md)
+* [Cinemachine Confiner](CinemachineConfiner.md)
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollisionImpulseSource.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollisionImpulseSource.md
new file mode 100644
index 00000000..3c1c35a9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineCollisionImpulseSource.md
@@ -0,0 +1,102 @@
+#Cinemachine Collision Impulse Source
+
+For collision-based impulses, attach a **CinemachineCollisionImpulseSource** component to a GameObject that has a
+Collider or Collider2D component. **CinemachineCollisionImpulseSource** generates an impulse when something collides
+with the GameObject or enters a trigger zone.
+
+To add a Collision Impulse Source component:
+
+1. Select the GameObject that you want to trigger impulses, navigate to its Inspector, and click the **Add Component**
+ button.
+
+2. Go to **Scripts > Cinemachine** and select **Cinemachine Collision Impulse Source**.
+
+By default, an Impulse Source affects every [Impulse Listener](CinemachineImpulseListener.md) in range, but you can
+apply [channel filtering](CinemachineImpulseFiltering.md#ChannelFiltering) to make Impulse Sources affect some Impulse
+Listeners and not others.
+
+## Properties:
+
+The properties in the Cinemachine Collision Impulse Source Inspector window are divided into the following sections.
+
+- [Impulse Channel](#ImpulseChannel)
+- [Impulse Type](#ImpulseType)
+- [Impulse Shape](#ImpulseShape)
+- [Trigger Object Filter](#TriggerObject)
+- [How to Generate The Impulse](#GenerateImpulse)
+
+
+
+### Impulse Channel
+
+Impulse Listeners filter impulses based on channels to control which Impulse Sources they react to. Channels work like
+Camera Layers, but are distinct from them. These properties control the channels that the Collision Impulse Source
+broadcasts impulse signals on. For details, see documentation on [Filtering](CinemachineImpulseFiltering.md).
+
+
+
+| **Property:** | **Function:** |
+|---------------------|------------------------------------------------------------------------------------------------------------------------|
+| **Impulse Channel** | Choose one or more channels from the drop-down.
Click **Edit** to modify existing channels or add new ones. |
+
+
+
+### Impulse Type
+
+You can choose the level of complexity, depending on your needs. Changing the Impulse Type brings up range, dissipation,
+and propagation speed controls, as appropriate.
+
+
+
+| Property: | Function: |
+|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Impulse Type** | You can choose from the following Impulse types:
**Uniform**: The impulse travels with infinite speed, and will be heard at the same time and in the same way by all listeners, no matter where they are in space.
**Dissipating**: The strength of the impulse decreases as the distance from the source increases. Listeners that are farther away will feel a weaker signal than listeners that are closer.
**Propagating**: In addition to being dissipating, the impulse signal travels with finite speed outward from the source. Listeners that are farther away will feel the impulse at a later time than listeners that are close.
**Legacy**: This mode exists to support projects made with earlier versions of Impulse, and has a more complex way of defining the impulse signal. We recommend using one of the other settings. |
+| **Dissipation Distance** | This setting defines the distance over which the impulse dissipates. Beyond this distance, the impulse will not be felt. |
+| **Propagation Speed** | This defines, in m/s, how quickly the impulse signal propagates outwards through space from its origin. The default value, 343, is the speed of sound. |
+| **Dissipation Rate** | This defines how quickly the dissipation occurs over the dissipation distance. As shown in the image below, expanding the curve shows a graph illustrating the signal strength across the dissipation radius. The origin is in the center of the X axis. Moving the slider adjusts the blue picture.
 |
+
+
+
+### Impulse Shape
+
+This defines the curve that specifies the shape of the signal, and the time over which the curve is emitted.
+
+
+
+| Property: | Function: |
+|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Predefined Impulse Shape** | You can choose from one of the following predefined Shapes: **Recoil**, **Bump**, **Explosion**, or **Rumble**.
**s (seconds)** field: Sets the duration of the impulse. Opening up the property shows you a picture of the impulse:
 |
+| **Custom Impulse Shape** | You can draw your own custom impulse shape (animation curve). Select **Custom** from the drop-down menu and click on the green icon to pop up an editor as shown below.
 |
+| **Default Velocity** | Specifies the direction in space that the impulse will have by default. |
+| **Test with Force** | Allows you to **invoke** the default impulse from the inspector (when playing) with the specified force multiplier, to see what it looks like. |
+
+
+
+### Trigger Object Filter
+
+These properties filter the GameObjects that trigger an impulse when they collide or enter the trigger zone. GameObjects
+in layers specified by the **Layer Mask** trigger impulses unless you tag them with the **Ignore Tag** value. For
+details, see documentation on [Filtering](CinemachineImpulseFiltering.md).
+
+
+
+| Property: | Function: |
+|----------------|----------------------------------------------------------------------------------------------------------------------------------------------|
+| **Layer Mask** | Rigidbody components in these layers that collide with an Impulse Source or enter the trigger zone cause the Source to broadcast its signal. |
+| **Ignore Tag** | GameObjects with this tag do not generate an impulse, even if they are in a layer specified in **Layer Mask**. |
+
+
+
+### How To Generate The Impulse
+
+An impulse is triggered at a location by an impact mass moving at an impact velocity. Unity dynamically calculates the
+mass and velocity of the Rigidbody or Rigidbody 2D component that triggers the impulse. The **How To Generate The
+Impulse** properties control how the mass and velocity of the Rigidbody affect the strength and direction of the signal.
+
+
+
+| Property: | Function: |
+|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Use Impact Direction** | Enable this setting to rotate the impulse signal to correspond to the direction of the impact velocity. For example, if the raw signal vibrates vertically but the impact direction is horizontal, you could check this property to make the resulting impulse signal vibrate horizontally.
Disable to use the direction of the raw signal irrespective of the impact direction. |
+| **Scale Impact With Mass** | Enable this setting to increase or decrease the amplitude of the impulse signal based on the mass of the colliding GameObjects. The masses are specified in the Rigidbody or RigidBody2D component of the GameObject that contains the Cinemachine Impulse Source, and of the colliding GameObject.
Disable this setting to use a constant mass of 1. |
+| **Scale Impact With Speed** | Enable this setting to scale the amplitude of the signal based on the speed of the impact. Faster moving GameObjects have a greater momentum, and therefore produce a stronger signal.
Disable this setting to ignore the speed of the colliding GameObject. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner.md
new file mode 100644
index 00000000..1c5748e8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner.md
@@ -0,0 +1,23 @@
+# Cinemachine Confiner
+
+Use the __Cinemachine Confiner__ [extension](CinemachineVirtualCameraExtensions.md) to limit the camera’s position to a
+volume or area.
+
+Confiner operates in 2D or 3D mode. The mode influences the kind of bounding shape it accepts. In 3D mode, the camera’s
+position in 3D is confined to a volume. This also works for 2D games, but you need to take the depth into account. In 2D
+mode, you don’t have to worry about depth.
+
+For orthographic cameras, there is an additional option to confine the screen edges, not just the camera point. This
+ensures that the entire screen area stays within the bounding area.
+
+| **Property:** | | **Function:** |
+|:-------------------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Confine Mode__ | | Operate using a 2D bounding area or a 3D bounding volume. |
+| | _Confine 2D_ | Use a Collider2D bounding area. |
+| | _Confine 3D_ | Use a 3D Collider bounding volume. |
+| __Bounding Volume__ | | The 3D volume to contain the camera in. This property is available when Confine Mode is set to Confine 3D. |
+| __Bounding Shape 2D__ | | The 2D area to contain the camera in. This property is available when Confine Mode is set to Confine 2D. |
+| __Confine Screen Edges__ | | Check to confine screen edges to the area when the camera is orthographic. When unchecked, confine only the camera center. Has no effect if camera is in perspective mode. |
+| __Damping__ | | How gradually to return the camera to the bounding volume or area if it goes beyond the borders. Higher numbers are more gradual. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner2D.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner2D.md
new file mode 100644
index 00000000..5afe0e24
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineConfiner2D.md
@@ -0,0 +1,47 @@
+# Cinemachine Confiner 2D
+
+
+
+Use the Cinemachine Confiner
+2D [extension](https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/CinemachineVirtualCameraExtensions.html)
+to confine the camera’s position so that the screen edges stay within a shape defined by a 2D polygon. This works for
+orthographic or perspective cameras, provided that the camera's forward vector remains parallel to the bounding shape’s
+normal (that is, that the camera is looking straight at the polygon, and not obliquely at it).
+
+When confining the camera, the Cinemachine Confiner 2D considers the camera’s view size at the polygon plane, and its
+aspect ratio. Based on this information and the input polygon, it computes a second (smaller) polygon, and constrains
+the camera’s transform to it. Computation of this secondary polygon is resource-intensive, so you should only do this
+when absolutely necessary.
+
+Necessary use cases in which you need to recompute the cached secondary polygon include:
+
+- when the input polygon’s points change,
+- when the input polygon is non-uniformly scaled.
+
+In these cases, for efficiency reasons, Cinemachine does not automatically regenerate the inner polygon. The client
+needs to call the InvalidateCache() method to trigger the recalculation. You can do this from;
+
+- the script by calling InvalidateCache, or
+- the component inspector; to do so, press the **Invalidate Cache** button.
+
+If the input polygon scales uniformly or translates or rotates, the cache remains valid.
+
+## Oversize Windows
+
+If sections of the confining polygon are too small to fully contain the camera window, Cinemachine calculates a polygon
+skeleton for those regions. This is a shape with no area, that serves as a place to put the camera when it is confined
+to this region of the shape.
+
+Skeleton computation is the most resource-heavy part of the cache calculation, so it is a good idea to tune this with
+some care:
+
+- To optimize the skeleton calculation, set the **Max Window Size** property to the largest size you expect the camera
+ window to have. Cinemachine does not spend time calculating the skeleton for window sizes larger than that.
+
+# Properties:
+
+| **Property:** | **Function:** |
+|:------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Bounding Shape 2D | Set the 2D shape you want to confine the camera viewport to. |
+| Damping | Damping Is applied around corners to avoid jumps. Higher numbers are more gradual. |
+| Max Window Size | To optimize computation and memory performance, set this to the largest view size that the camera is expected to have. The Confiner 2D does not compute a polygon cache for frustum sizes larger than this. This refers to the size in world units of the frustum at the confiner plane (for orthographic cameras, this is just the orthographic size). If set to 0, then Cinemachine ignores this parameter and calculates a polygon cache for all potential window sizes. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDolly.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDolly.md
new file mode 100644
index 00000000..07975832
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDolly.md
@@ -0,0 +1,54 @@
+# Using dolly paths
+
+A dolly path is an array of waypoints in a Scene. Use a dolly path to specify a fixed course to position or animate a
+Virtual Camera. Use the [Tracked Dolly](CinemachineBodyTrackedDolly.md) algorithm to use a dolly path with your Virtual
+Camera.
+
+
+
+
+
+Cinemachine provides two types of dolly paths:
+
+* [Smooth Path](CinemachineSmoothPath.md): Each waypoint has a position and roll. Cinemachine uses Bezier interpolation
+ between the waypoints. Smooth Path gives you less control over the position of the path but animation along the path
+ is always smooth and continuous. This is the recommended path type.
+
+* [Path](CinemachinePath.md): Each waypoint has a position, tangent, and roll. Use Path for finer control of the track’s
+ position between waypoints. Animating a VIrtual Camera along a Path might cause jerky motion over waypoints when
+ tangents don’t allow a smooth transition to and from the waypoint.
+
+To create a Virtual Camera with a dolly path:
+
+1. In the Unity menu, choose __GameObject > Cinemachine > Dolly Camera with Track__.
+ A new Virtual Camera and dolly track appears in
+ the [Hierarchy]([https://docs.unity3d.com/Manual/Hierarchy.html](https://docs.unity3d.com/Manual/Hierarchy.html)). By
+ default, the dolly track GameObject is a Smooth Path.
+
+2. In the [Hierarchy]([https://docs.unity3d.com/Manual/Hierarchy.html](https://docs.unity3d.com/Manual/Hierarchy.html))
+ window, select the new dolly track GameObject.
+
+3. In
+ the [Inspector]([https://docs.unity3d.com/Manual/UsingTheInspector.html](https://docs.unity3d.com/Manual/UsingTheInspector.html)),
+ add and adjust waypoints.
+
+To create a path GameObject:
+
+1. In the Unity menu, choose __GameObject > Create Empty.__
+
+2. [Add the path component](https://docs.unity3d.com/Manual/UsingComponents.html), either __CinemachinePath__ or _
+ _CinemachineSmoothPath__
+
+To edit a waypoint in a path:
+
+1. In the [Hierarchy]([https://docs.unity3d.com/Manual/Hierarchy.html](https://docs.unity3d.com/Manual/Hierarchy.html))
+ window, select the path GameObject.
+
+2. Select a waypoint by either clicking its index number in
+ the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view or clicking its number in the __Path Details
+ __ section in the [ Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html).
+
+3. Edit the waypoint by [manipulating its Gizmo](https://docs.unity3d.com/Manual/PositioningGameObjects.html) in the
+ Scene view or edit its properties in the Inspector.
__Note__: When editing a waypoint for a regular path in the
+ Scene view, the waypoint has two Gizmos: for the position and for the tangent.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDollyCart.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDollyCart.md
new file mode 100644
index 00000000..69e09349
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineDollyCart.md
@@ -0,0 +1,17 @@
+# Cinemachine Dolly Cart
+
+__Cinemachine Dolly Cart__ is a component that constrains the transform of its GameObject to a __Cinemachine Path__ or _
+_Cinemachine Smooth Path__. Use it to animate a GameObject along a path, or as a __Follow__ target for Virtual Cameras.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-------------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+| __Path__ | | The path to follow. |
+| __Update Method__ | | When to move the cart when velocity is non-zero. Use __Update__ for normal `MonoBehaviour` updating, __Fixed Update__ for updates in sync with the Physics module, `FixedUpdate()`. |
+| __Position Units__ | | The unit of measure for __Position__. |
+| | _Path Units_ | Use waypoints along the path. The value 0 represents the first waypoint on the path, 1 is the second waypoint, and so on. |
+| | _Distance_ | Use distance along the path. The path is sampled according to the Resolution property of the path. Cinemachine creates a distance lookup table, which it stores in an internal cache. |
+| | _Normalized_ | Use the beginning and end of the path. The value 0 represents the beginning of the path, 1 is the end of the path. |
+| __Speed__ | | Move the cart with this speed. The value is interpreted according to __Position Units__. |
+| __Position__ | | The position along the path to place the cart. This can be animated directly or, if the speed is non-zero, will be updated automatically. The value is interpreted according to __Position Units__. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineExternalCamera.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineExternalCamera.md
new file mode 100644
index 00000000..0dc96b1e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineExternalCamera.md
@@ -0,0 +1,15 @@
+# Cinemachine External Camera - (deprecated)
+
+**Note:** This component is **deprecated** in favour of using a normal CinemachineVirtualCamera with Do Nothing in both
+Aim and Body.
+
+This component will expose a non-cinemachine camera to the cinemachine system, allowing it to participate in blends.
+Just add it as a component alongside an existing Unity Camera component. You will need to take steps (e.g. disabling the
+Camera component) to ensure that the Camera doesn't fight with the main Cinemachine Camera.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:---------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Look At__ | The object that the camera is looking at, if defined. This can be empty, but setting this may improve the quality of the blends to and from this camera. |
+| __Blend Hint__ | Hint for blending positions to and from this camera. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFollowZoom.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFollowZoom.md
new file mode 100644
index 00000000..952a3109
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFollowZoom.md
@@ -0,0 +1,14 @@
+# Cinemachine Follow Zoom
+
+This [extension](CinemachineVirtualCameraExtensions.md) adjusts the FOV of the lens to keep the target object at a
+constant size on the screen, regardless of camera and target position.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:--------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Width__ | The shot width to maintain, in world units, at target distance. The FOV will be adjusted so that an object of this size, at target distance, will fill the screen. |
+| __Damping__ | Increase this value to soften the responsiveness of the follow-zoom. Small numbers make the camera more responsive. Larger numbers make the camera respond more slowly. |
+| __Min FOV__ | Lower limit for the FOV that this behavior generates. |
+| __Max FOV__ | Upper limit for the FOV that this behavior generates. |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFreeLook.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFreeLook.md
new file mode 100644
index 00000000..83c7913b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineFreeLook.md
@@ -0,0 +1,65 @@
+# Cinemachine Free Look Camera
+
+The __Cinemachine Free Look Camera__ component provides a third-person camera experience. This Cinemachine Virtual
+Camera orbits around its subject along a position specified by three separate camera rigs: __Top__, __Middle__, and _
+_Bottom__.
+
+
+
+Each rig defines a ring around the target, with its own radius, height offset, composer, lens properties, and Noise
+settings. These are the same as the [properties for a regular Virtual Camera](CinemachineVirtualCamera.md).
+
+Cinemachine Free Look Camera also defines a spline that connects the rigs. The spline defines the camera’s position when
+blending between the rigs.
+
+
+
+Free Look uses player input along the x and y axes. The x axis controls the orbital position along the __Top__, __Middle
+__, or __Bottom__ horizontal orbits, like the [Orbital Transposer](CinemachineBodyOrbitalTransposer.md). The y-axis
+controls the vertical position, using the spline to determine the position between rigs.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-----------------------------------------------|:-------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Solo__ | | Toggles whether or not the Virtual Camera is temporarily live. Use this property to get immediate visual feedback in the [Game view](https://docs.unity3d.com/Manual/GameView.html) to adjust the Virtual Camera. |
+| __Game Window Guides__ | | Toggles the visibility of compositional guides in the Game view. These guides are available when Look At specifies a GameObject and the Aim section uses Composer or Group Composer, or when Follow specifies a target and the Body section uses Framing Composer. This property applies to all Virtual Cameras. |
+| __Save During Play__ | | Check to [apply the changes while in Play mode](CinemachineSavingDuringPlay.md). Use this feature to fine-tune a Virtual Camera without having to remember which properties to copy and paste. This property applies to all Virtual Cameras. |
+| __Priority__ | | The importance of this Virtual Camera for choosing the next shot. A higher value indicates a higher priority. Cinemachine Brain chooses the next live Virtual Camera from all Virtual Cameras that are activated and have the same or higher priority as the current live Virtual Camera. This property has no effect when using a Virtual Camera with Timeline. |
+| __Follow__ | | The target GameObject to move with. The [Body properties](CinemachineVirtualCameraBody.md) use this target to update the position of the Unity camera. |
+| __Look At__ | | The target GameObject to aim at. The [Aim properties](CinemachineVirtualCameraAim.md) use this target to update the rotation of the Unity camera. This property is normally the same as the Follow target. |
+| __Common Lens__ | | Check to apply a common lens setting to all three child rigs. Uncheck to use separate lens settings for each child rig. |
+| __Lens__ | | If Common Lens is checked, these lens settings apply to all three rigs. These properties mirror their counterparts in the property settings for the [Unity camera](https://docs.unity3d.com/Manual/class-Camera.html). |
+| | _Vertical FOV_ | This is the camera view in vertical degrees. For example, to specify the equivalent of a 50mm lens on a Super 35 sensor, enter a Field of View of 19.6 degrees. This property is available when the Unity camera with the Cinemachine Brain component uses a Projection of Perspective. |
+| | _Orthographic Size_ | When using an orthographic camera, this defines the half-height, in world coordinates, of the camera view. This property is available when the Unity camera with the Cinemachine Brain component uses a Projection of Orthographic. |
+| | _Near Clip Plane_ | The closest point relative to the camera where drawing occurs. |
+| | _Far Clip Plane_ | The furthest point relative to the camera where drawing occurs. |
+| | _Dutch_ | Dutch angle. Tilts the Unity camera on the Z axis, in degrees. This property is unique to the Virtual Camera; there is no counterpart property in the Unity camera. |
+| __Transitions__ | | |
+| | _Blend Hint_ | How to blend to and from the Free Look camera. Use None for default linear interpolation of position and aim. Use Spherical Position to blend spherically about the Look At position, linearly blending between Look At targets. Use Cylindrical Position to blend in a cylindrical path around the Look At target and interpolate linearly on the vertical axis. Use Screen Space Aim When Targets Differ for a standard linear position blend, with screen-space angular blend between differing Look At targets. |
+| | _Inherit Position_ | When this virtual camera goes Live, attempt to force the position to be the same as the current position of the Unity Camera, allowing the virtual camera to apply its damping to accomplish the blend |
+| | _Camera Activated_ | This event is invoked when the Virtual Camera becomes live. Attach custom handlers here if you need them. |
+| __Y Axis, X Axis__ | | The vertical and horizontal axes for blending between rigs. For Y Axis the Value range is 0 to 1 and represents the blend position between the Top, Middle, and Bottom rigs. The value 0.5 represents the middle rig. For X Axis, the Value is the angular deviation (in degrees) of the camera from directly behind the target. |
+| | _Max Speed_ | The maximum speed of this axis in degrees/second, or the multipler for the input value if Speed Mode is set to _InputValueGain_. |
+| | _Speed Mode_ | How the axis responds to input. _MaxSpeed_ (the default) clamps the maximum speed at which the axis can change, regardless of the input. _Input Value Gain_ multiplies the input value by MaxSpeed. |
+| | _Accel Time_ | The amount of time in seconds to accelerate to Max Speed. |
+| | _Decel Time_ | The amount of time in seconds to decelerate to zero. |
+| | _Input Axis Name_ | The name of this axis as specified in Unity Input manager. Setting to an empty string disables the automatic updating of the axis. |
+| | _Input Axis Value_ | The value of the input axis. A value of 0 means no input. To drive this directly, use a custom input system. Or you set the Axis Name to control the value with the Unity Input Manager. |
+| | _Invert_ | Check to invert the raw value of the input axis. The X Axis and Y Axis have opposite defaults. Checking this box causes the view to move **opposite** the input for the X Axis. Checking the box for the Y Axis causes the view to move in the **same** direction as the input. |
+| __Y Axis Recentering__ | | Controls the automatic recentering on the y axis. |
+| | _Enabled_ | Check to enable automatic recentering. |
+| | _Wait Time_ | When no user input has been detected on the axis, the camera waits this long in seconds before recentering. |
+| | _Recentering Time_ | Maximum angular speed of recentering. Accelerates into and decelerates out of the centered position. |
+| __Orbits__ | | Properties for defining the Top, Middle, and Bottom rigs. |
+| __[Binding Mode](CinemachineBindingModes.md)__ | | The coordinate space to use to interpret the offset from the target. |
+| | _Lock To Target On Assign_ | Makes the orientation of the virtual camera match the local frame of the Follow target, at the moment when the virtual camera is activated or when the target is assigned. This offset remains constant in world space. The camera does not rotate along with the target. |
+| | _Lock To Target With World Up_ | Makes the virtual camera use the local frame of the Follow target with tilt and roll set to 0. This binding mode ignores all target rotations except yaw. |
+| | _Lock To Target No Roll_ | Makes the virtual camera use the local frame of the Follow target, with roll set to 0. |
+| | _Lock To Target_ | Makes the virtual camera use the local frame of the Follow target. When the target rotates, the camera moves with it to maintain the offset and to maintain the same view of the target. |
+| | _World Space_ | The offset is interpreted in world space relative to the origin of the Follow target. The camera will not change position when the target rotates. |
+| | _Simple Follow With World Up_ | Simple follow with world up interprets the offset and damping values in camera-local space. This mode emulates the action a human camera operator would take when instructed to follow a target. The camera attempts to move as little as possible to maintain the same distance from the target; the direction of the camera with regard to the target does not matter. Regardless of the orientation of the target, the camera tries to preserve the same distance and height from it. |
+| __Spline Curvature__ | | The tautness of the line that connects the rigs’ orbits. This line determines the final placement on the y axis. |
+| __Height, Radius__ | | The radius and height of the Top, Middle, and Bottom rigs relative to the Follow target. |
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulse.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulse.md
new file mode 100644
index 00000000..5e6d1df8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulse.md
@@ -0,0 +1,33 @@
+# Impulse
+
+Cinemachine Impulse generates and manages camera shake in response to game events. For example, you can use Impulse to
+make a Cinemachine Virtual Camera shake when one GameObject collides with another, or when something in your Scene
+explodes.
+
+Impulse has two parts:
+
+**1. [Impulse Source](CinemachineImpulseSourceOverview.md)**: a component that emits a signal that originates at a point
+in space and propagates outwards, much like a sound wave or a shock wave. This emission is triggered by events in the
+game.
+
+The signal consists of a direction, and a curve specifying the strength of the signal as a function of time. Together,
+these effectively define a shake along a specified axis, lasting a specified amount of time. This shake travels outward
+from the point of origin, and when it reaches the location of an Impulse Listener, that listener can respond to it.
+
+**2. [Impulse Listener](CinemachineImpulseListener.md)**: a Cinemachine extension that allows a Virtual Camera to “hear”
+an impulse, and react to it by shaking.
+
+It’s useful to think about this in terms of individual “impulses.” An impulse is a single occurrence of an Impulse
+Source emitting a signal. Collisions and events in your Scenes _trigger_ impulses, Impulse Sources _generate_ impulses,
+and Impulse Listeners _react_ to impulses.
+
+## Getting started with Impulse
+
+To set up and use Impulse in a Scene, do the following:
+
+- Add **[Cinemachine Impulse Source](CinemachineImpulseSource.md)** or *
+ *[Cinemachine Collision Impulse Source](CinemachineCollisionImpulseSource.md)** components to one or more GameObjects
+ that you want to trigger camera shake.
+
+- Add a **[Cinemachine Impulse Listener](CinemachineImpulseListener.md)** extension to one or more Cinemachine virtual
+ cameras so they can detect and react to impulses.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseFiltering.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseFiltering.md
new file mode 100644
index 00000000..e49f3799
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseFiltering.md
@@ -0,0 +1,90 @@
+# Filtering impulses
+
+Filtering lets you fine-tune how and when an Impulse Source generates impulses. Cinemachine Impulse allows two types of
+filtering:
+
+- Use channel filtering to set things up so that an Impulse Listener reacts to certain Impulse Sources and ignores
+ others. See [Filtering with channels](#ChannelFiltering) below for details.
+
+- Use Trigger Object Filtering with Collision Impulse Sources to set things up so that only certain GameObjects trigger
+ an impulse. See [Filtering with layers and tags](#TriggerObjectFiltering) for details.
+
+
+
+## Filtering with channels
+
+By default, every Impulse Listener reacts to every Impulse Source within range. Channels allow you to more precisely
+control which Impulse Sources an Impulse Listener reacts to. To set up channel filtering, you need to do three things:
+
+- Set up your channels
+- Set your Impulse Sources to broadcast on one or more channels
+- Set your Impulse Listeners to listen to one or more channels
+
+When an Impulse Listener is listening to specific channels, it only reacts to Impulse Sources that broadcast on those
+channels.
+
+### Adding channels
+
+The **CinemachineImpulseChannels** script creates channels in your Scene. It has one channel by default, and you can add
+as many new channels as you need, up to a maximum of 31.
+
+To add new channels:
+
+1. Inspect the **CinemachineImpulseChannels** (**Impulse Channel > Edit**) script by doing one of the following:
+
+ - In the Cinemachine Impulse Listener inspector, navigate to the **Channel Mask** drop-down and click the **Edit**
+ button next to it.
+
+ - In the Cinemachine Impulse Source or Cinemachine Collision Impulse Source inspector, navigate to the **Impulse
+ Channel** drop-down and click the **Edit** button next to it.
+
+2. Expand the **Impulse Channels** property group and set the **Size** property to the number of channels you want. A
+ new entry appears for each channel.
+
+3. Rename your new channels.
+
+ 
+
+ Channels are available from the channel drop-down in the Inspector as soon as you add them.
+
+### Setting listen / broadcast channels
+
+After setting up your channels, you need to define how your Impulse Listeners and Impulse Sources use them.
+
+- Inspect each Impulse Listener, and choose the channels you want it to listen to from the **Channel Mask** drop-down.
+
+ 
+
+- Inspect each Impulse Source or Collision Impulse Source, and choose the channels you want it to broadcast on from the
+ **Impulse Channel** drop-down.
+
+ 
+
+ You can select multiple filters from the drop down. You can also choose **Everything** to use all filters, or *
+ *Nothing** to use none of them.
+
+
+
+## Filtering with layers and tags
+
+You can use Unity’s [Layers](https://docs.unity3d.com/Manual/Layers.html)
+and [Tags]() to specify which GameObjects trigger an impulse when they
+collide with a Collision Impulse Source, or enter a trigger zone. This is called **Trigger Object Filtering**.
+
+The Cinemachine Collision Impulse Source component has two **Trigger Object Filter** properties:
+
+- The **Layer Mask** drop-down lists all of the Scene’s layers. When you select one or more layers, GameObjects in those
+ layers trigger impulses when they collide with the Impulse Source. The Impulse Source ignores collisions with
+ GameObjects on other layers.
+
+- The **Ignore Tag** drop-down lists all of the Scene’s tags. When you select a tag, GameObjects with that tag do not
+ trigger impulses when they collide with the Impulse Source, even if they are in a layer specified in Layer Mask.
+
+For example, in a Scene where a large animal is lumbering through a forest, you might want the camera to shake when it
+collides with large trees, but not small saplings.
+
+One way to set that up would be to make the animal a Collision Impulse Source, put all of the large trees on their own
+layer, and select that as the Layer Mask.
+
+If all of the trees, large ones and saplings alike, are already on the same layer, you could assign a special tag to the
+saplings, and use the **Ignore Tag** property to filter them out.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseListener.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseListener.md
new file mode 100644
index 00000000..a931a0b7
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseListener.md
@@ -0,0 +1,49 @@
+# Cinemachine Impulse Listener
+
+Impulse signals and [sources](CinemachineImpulseSourceOverview.md) don’t do anything on their own. An **Impulse Listener
+** is a Cinemachine extension that allows a virtual camera to “hear” impulse vibration signals and react to them.
+
+Default implementations shipped with Cinemachine respond by applying the received signal directly to the listener’s
+transform position, causing it to shake along with the signal. Additionally, it’s possible to specify a secondary
+response - usually a randomized vibration along all positions and rotation axes - to give character to the listener’s
+movement. It’s as if the listener were supported on springs and then kicked by the impulse signal. In addition to the
+thrust given by the kick itself, there will be randomized shaking due to the springs.
+
+When you add an **Impulse Listener** extension to a virtual camera, it makes the camera shake in response to the signals
+emitted from Impulse Sources. In the simplest case, the Impulse Listener applies the signal verbatim to the camera’s
+Transform, causing it to shake.
+
+In the image below, the figure’s feet are Impulse Sources. When they collide with the floor (A) they generate impulses.
+The camera is an Impulse Listener and reacts to the impulses by shaking (B), which shakes the resulting image in the
+Game view (C).
+
+
+
+To add an Impulse Listener to a Cinemachine virtual camera:
+
+1. Select the virtual camera, navigate to the Inspector window and expand the **Cinemachine Virtual Camera** script.
+
+2. Go to **Extensions > Add Extension**, and select **CinemachineImpulseListener**.
+
+
+
+In the real world, some cameras are mounted less rigidly than others, and tend to shake more as a result. The Impulse
+Listener’s **Gain** property emulates this behavior by amplifying or attenuating impulse vibration signals. Higher
+values cause the camera to shake more.
+
+> **TIP:** You can create your own Impulse Listener to interpret vibration signals any way you like.
+
+By default, an Impulse Listener reacts to every Impulse Source in range, but you can
+apply [channel filtering](CinemachineImpulseFiltering.md#ChannelFiltering) to make a Listener respond to some Sources
+and ignore others.
+
+##Properties:
+
+| Property: | Function: |
+|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Apply After** | Obstacles with this tag will be ignored. It is recommended to set this field to the target's tag. |
+| **Channel Mask** | Specifies the Impulse channels to react to. For details, see [Filtering with channels](CinemachineImpulseFiltering.md#ChannelFiltering). |
+| **Gain** | This is how much the received impulse signal will be magnified by for the purposes of reacting. It’s a simple multiplier applied to the incoming signal. The default value is 1. |
+| **Use 2D Distance** | Enable this setting to ignore the z axis when calculating camera distance from the Impulse Source. Use this property for 2D games. |
+| **Use Camera Space** | Interprets the impulse signal in camera space as opposed to world space. So if the impulse Y axis is vibrating, then the listener will move up and down on its local Y axis. |
+| **Reaction Settings** | Lets you set a secondary noise that gets triggered by the impulse signal. Choose the noise setting and tune it with the amplitude and frequency gain. Duration sets the fade-out time for the secondary noise. Time is approximate. This will scale automatically with stronger impulses.
The listener combines the original impulse signal and the reaction and applies it to the object it’s on. This could be a camera, a vcam, or any other object. Custom listeners can easily be authored to apply the signal in nonstandard ways (for example, convert Z motion to FOV). |
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSource.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSource.md
new file mode 100644
index 00000000..bebe8060
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSource.md
@@ -0,0 +1,73 @@
+# Cinemachine Impulse Source
+
+Use the **Cinemachine Impulse Source** component to generate impulses on events that are not collisions or Collider
+triggers. This is a generic Impulse Source that exposes a family of `GenerateImpulse()` API methods. These methods
+generate impulses at the specified locations and with the specified velocities and strengths. Call these methods
+directly from your game logic, or use them with [UnityEvents](https://docs.unity3d.com/Manual/UnityEvents.html).
+
+> **TIP:** You can use the script for this component as an example to reference when creating your own custom
+> impulse-generating classes.
+
+To add a Cinemachine Impulse Source to your Scene:
+
+1. Select the GameObject that you want to trigger camera shake, navigate to its Inspector, and click the **Add Component
+ ** button.
+
+2. Go to **Scripts > Cinemachine**, and select **Cinemachine Impulse Source**.
+
+By default, an Impulse Source affects every [Impulse Listener](CinemachineImpulseListener.md) in range, but you can
+apply [channel filtering](CinemachineImpulseFiltering.md#ChannelFiltering) to make Impulse Sources affect some Impulse
+Listeners and not others.
+
+##Properties:
+
+The properties in the Cinemachine Impulse Source Inspector window are divided into the following sections.
+
+- [Impulse Channel](#ImpulseChannel)
+- [Impulse Type](#ImpulseType)
+- [Impulse Shape](#ImpulseShape)
+
+
+
+### Impulse Channel
+
+Impulse Listeners filter impulses based on channels to control which Impulse Sources they react to. Channels work like
+Camera Layers, but are distinct from them. These properties control the channels that the Impulse Source broadcasts
+impulse signals on. For details, see documentation on [Filtering](CinemachineImpulseFiltering.md).
+
+
+
+| **Property:** | **Function:** |
+|---------------------|------------------------------------------------------------------------------------------------------------------------|
+| **Impulse Channel** | Choose one or more channels from the drop-down.
Click **Edit** to modify existing channels or add new ones. |
+
+
+
+### Impulse Type
+
+You can choose the level of complexity, depending on your needs. Changing the Impulse Type brings up range, dissipation,
+and propagation speed controls, as appropriate.
+
+
+
+| Property: | Function: |
+|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Impulse Type** | You can choose from the following Impulse types:
**Uniform**: The impulse travels with infinite speed, and will be heard at the same time and in the same way by all listeners, no matter where they are in space.
**Dissipating**: The strength of the impulse decreases as the distance from the source increases. Listeners that are farther away will feel a weaker signal than listeners that are closer.
**Propagating**: In addition to being dissipating, the impulse signal travels with finite speed outward from the source. Listeners that are farther away will feel the impulse at a later time than listeners that are close.
**Legacy**: This mode exists to support projects made with earlier versions of Impulse, and has a more complex way of defining the impulse signal. We recommend using one of the other settings. |
+| **Dissipation Distance** | This setting defines the distance over which the impulse dissipates. Beyond this distance, the impulse will not be felt. |
+| **Propagation Speed** | This defines, in m/s, how quickly the impulse signal propagates outwards through space from its origin. The default value, 343, is the speed of sound. |
+| **Dissipation Rate** | This defines how quickly the dissipation occurs over the dissipation distance. As shown in the image below, expanding the curve shows a graph illustrating the signal strength across the dissipation radius. The origin is in the center of the X axis. Moving the slider adjusts the blue picture.
 |
+
+
+
+### Impulse Shape
+
+This defines the curve that specifies the shape of the signal, and the time over which the curve is emitted.
+
+
+
+| Property: | Function: |
+|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Predefined Impulse Shape** | You can choose from one of the following predefined Shapes: **Recoil**, **Bump**, **Explosion**, or **Rumble**.
**s (seconds)** field: Sets the duration of the impulse. Opening up the property shows you a picture of the impulse:
 |
+| **Custom Impulse Shape** | You can draw your own custom impulse shape (animation curve). Select **Custom** from the drop-down menu and click on the green icon to pop up an editor as shown below.
 |
+| **Default Velocity** | Specifies the direction in space that the impulse will have by default. |
+| **Test with Force** | Allows you to **invoke** the default impulse from the inspector (when playing) with the specified force multiplier, to see what it looks like. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSourceOverview.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSourceOverview.md
new file mode 100644
index 00000000..4ef7e677
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineImpulseSourceOverview.md
@@ -0,0 +1,41 @@
+# Cinemachine Impulse Sources
+
+An Impulse Source is a component that emits a vibration signal from a point in Scene space. Game events can cause an
+Impulse Source to emit a signal from the place where the event occurs. The event _triggers_ impulses, and the source
+_generates_ impulses. Virtual cameras with an Impulse Listener extension _react_ to impulses by shaking.
+
+In the image below, the figure's feet are Impulse Sources. When they collide with the floor (A) they generate impulses.
+The camera is an Impulse Listener and reacts to the impulses by shaking (B), which shakes the resulting image in the
+game view (C).
+
+
+
+Cinemachine ships with two types of Impulse Source components.
+
+- **[Cinemachine Collision Impulse Source](CinemachineCollisionImpulseSource.md)** generates impulses in reaction to
+ collisions and trigger zones.
+
+- **[Cinemachine Impulse Source](CinemachineImpulseSource.md)** generates impulses in reaction to events other than
+ collisions.
+
+Your Scene can have as many Impulse Sources as you want. Here are a few examples of where you might use Impulse Source
+components in a Scene:
+
+- On each of a giant’s feet, so that the ground shakes when the giant walks.
+
+- On a projectile that explodes when it hits a target.
+
+- On the surface of a gelatin planet that wobbles when something touches it.
+
+By default, an Impulse Source affects every [Impulse Listener](CinemachineImpulseListener.md) in range, but you can
+apply [channel filtering](CinemachineImpulseFiltering.md#ChannelFiltering) to make Sources affect some Listeners and not
+others.
+
+## Key Impulse Source properties
+
+While the vibration signal defines the basic “shape” of the camera shake, the Impulse Source controls several other
+important properties that define the impulses it generates.
+
+For descriptions of all Impulse Source properties, as well as instructions for adding Impulse Sources to your scene, see
+documentation on the [Impulse Source](CinemachineImpulseSource.md)
+and [Collision Impulse Source](CinemachineCollisionImpulseSource.md) components.
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineManagerCameras.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineManagerCameras.md
new file mode 100644
index 00000000..60301da4
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineManagerCameras.md
@@ -0,0 +1,23 @@
+# Managing and grouping Virtual Cameras
+
+A __manager__ camera oversees many Virtual Cameras but acts as a single Virtual Camera from the point of view of
+Cinemachine Brain and Timeline.
+
+Cinemachine includes these manager cameras:
+
+* [Free Look Camera](CinemachineFreeLook.md): an enhanced [Orbital Transposer](CinemachineBodyOrbitalTransposer.md). It
+ manages three horizontal orbits, arranged vertically to surround an avatar.
+
+* [Mixing Camera](CinemachineMixingCamera.md): uses the weighted average of up to eight child Virtual Cameras.
+
+* [Blend List Camera](CinemachineBlendListCamera.md): executes a sequence of blends or cuts of its child Virtual
+ Cameras.
+
+* [Clear Shot Camera](CinemachineClearShot.md): picks the child Virtual Camera with the best view of the target.
+
+* [State-Driven Camera](CinemachineStateDrivenCamera.md): picks a child Virtual Camera in reaction to changes in
+ animation state.
+
+Because manager cameras act like normal Virtual Cameras, you can nest them. In other words, create arbitrarily complex
+camera rigs that combine regular Virtual Cameras and manager cameras.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMixingCamera.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMixingCamera.md
new file mode 100644
index 00000000..7d75db95
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMixingCamera.md
@@ -0,0 +1,39 @@
+# Cinemachine Mixing Camera
+
+The __Cinemachine Mixing Camera__ component uses the weighted average of its child Virtual Cameras to compute the
+position and other properties of the Unity camera.
+
+
+
+Mixing Camera manages up to eight child Virtual Cameras. In the Mixing Camera component, these Virtual Cameras are fixed
+slots, not a dynamic array. Mixing Camera uses this implementation to support weight animation in Timeline. Timeline
+cannot animate array elements.
+
+To create a Mixing Camera:
+
+1. In the Unity menu, choose __GameObject > Cinemachine > Mixing Camera__.
+ A new Mixing Camera appears in the [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window. By default,
+ Unity also adds two Virtual Cameras as children of the Mixing Camera.
+
+2. Adjust the children Virtual Cameras.
+
+3. Add up to six more child cameras.
+
+4. Select the Mixing Camera in the Hierarchy window then adjust the Child Camera Weights in
+ the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html) window.
+
+
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Solo__ | Toggles whether or not the Mixing Camera is temporarily live. Use this property to get immediate visual feedback in the [Game view](https://docs.unity3d.com/Manual/GameView.html) to adjust the Virtual Camera. |
+| __Game Window Guides__ | Toggles the visibility of compositional guides in the Game view. This property applies to all Virtual Cameras. |
+| __Save During Play__ | Check to [apply the changes while in Play mode](CinemachineSavingDuringPlay.md). Use this feature to fine-tune a Virtual Camera without having to remember which properties to copy and paste. This property applies to all Virtual Cameras. |
+| __Priority__ | The importance of this Mixing Camera for choosing the next shot. A higher value indicates a higher priority. Cinemachine Brain chooses the next live Virtual Camera from all Virtual Cameras that are activated and have the same or higher priority as the current live Virtual Camera. This property has no effect when using a Virtual Camera with Timeline. |
+| __Standby Updates__ | Controls how often the virtual camera is updated when the virtual camera is not live. |
+| __Child Camera Weights__ | The weight of the Virtual Camera. Each child Virtual Camera has a corresponding Weight property. Note that setting one camera's weight to 1 does not put the other weights to zero. The contribution of any individual camera is its weight divided by the sum of all the child weights. |
+| __Mix Result__ | A graphical representation of the weights of the child Virtual Cameras. The light part of the bar of each child camera represents the proportion of its contribution to the final position of the Mixing Camera. When the bar is completely dark, the camera makes no contribution to the position of the Mixing Camera. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMultipleCameras.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMultipleCameras.md
new file mode 100644
index 00000000..9ecdfb9f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineMultipleCameras.md
@@ -0,0 +1,17 @@
+# Multiple Unity cameras
+
+Split-screen and picture-in-picture effects require the use of more than one Unity camera. Each Unity camera presents
+its own view on the player’s screen.
+
+To use a multi-camera split-screen for two players:
+
+1. For each player, [create a layer](https://docs.unity3d.com/Manual/Layers.html). For example, for two players, create
+ layers named P1 and P2.
+
+2. Add two Unity cameras to your Scene, set up their viewports, and give each one its own Cinemachine Brain component.
+
+3. For each Unity camera, set the __Culling Mask__ to the appropriate layer while excluding the other layer. For
+ example, set the first Unity camera to include layer P1 while excluding P2.
+
+4. Add 2 Virtual Cameras, one to follow each player to follow the players. Assign each Virtual Camera to a player layer.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineNoiseProfiles.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineNoiseProfiles.md
new file mode 100644
index 00000000..9c22a61e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineNoiseProfiles.md
@@ -0,0 +1,52 @@
+# Working with noise profiles
+
+A __noise profile__ is an asset that defines a procedural curve for camera noise. The __Basic Multi Channel Perlin__
+component applies a noise profile to the movement of the camera. Cinemachine applies noise movement after computing the
+position of the camera. This way, camera noise does not affect the computation of camera movement in future updates.
+
+Cinemachine includes some predefined profile assets. Choose a predefined noise profile in the Noise component. Create
+your own noise profile asset by choosing __Create > Cinemachine > NoiseSettings__ in
+the [Project window](https://docs.unity3d.com/Manual/ProjectView.html).
+
+The properties in the Inspector show graphs that give a visual representation of the noise profile. There are properties
+for the x, y, and z axes for position and rotation. Each axis may have more than one layer.
+
+
+
+For realistic procedural noise, choose frequencies and amplitudes with care to ensure an interesting noise quality that
+is not obviously repetitive. The most convincing camera shakes use __Rotation__ noise because that’s where the camera is
+aiming. Handheld camera operators tend to shake more rotationally than they do positionally. After specifying __Rotation
+__ noise, add __Position__ noise.
+
+Convincing noise profiles typically mix low, medium, and high frequencies together. When creating a new noise profile,
+start with these three layers of noise for each axis.
+
+For amplitude, use larger values for wider lenses to shake the camera noticeably. For telephoto lenses, use smaller
+amplitude values because the narrower FOV amplifies the effect.
+
+For frequency, a typical low range is 0.1-0.5 Hz, the mid range 0.8-1.5, and the high 3-4. The highest useful frequency
+depends on the frame rate of your game. A game typically runs at 30 or 60Hz. Noise frequencies higher than the frame
+rate of your game fall between the cracks of the Nyquist rate. In other words, they will not be directly tracked.
+
+For example, if your game runs at 60 frames/second and you set a frequency to 100, you will get choppy camera noise.
+This is because your game can’t render something that moves faster than the frame rate.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:-----------------------------------------------|:-----------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Preview Time__ | | The number of seconds to display in the graphs in the Inspector. This property is for editing in the Inspector; it does not affect the content of the noise profile asset that you are editing. |
+| __Preview Height__ | | The vertical height of the graphs of the noise profile in the Inspector. This property is for editing noise profiles; it does not affect the noise profile asset. |
+| __Animated__ | | Check to show a moving representation of an example of the noise profile in the graph. This property is for editing noise profiles; it does not affect the noise profile asset. |
+| __Position Noise__ | | A graphical representation of all noise layers for all axes for camera movement. |
+| __Position X__, __Position Y__, __Position Z__ | | The layers of noise for each axis to apply to camera movement. Each axis has a graphical representation of its layers. Each layer has properties for Frequency, Amplitude, and optional Perlin noise. Click + or - to add and remove layers, respectively. |
+| | _Frequency_ | The frequency of the wave in the noise layer, in Hz. |
+| | _Amplitude_ | The amplitude (height) of the wave in the noise layer, in distance units. |
+| | _Non-random wave if checked_ | Check to remove the Perlin noise from the noise layer. Without Perlin noise, Cinemachine uses a regular sine wave. Uncheck to apply Perlin noise to the layer, randomizing both the frequency and the amplitude while remaining in the neighbourhood of the selected values. |
+| __Rotation Noise__ | | A graphical representation of all noise layers for all axes for camera rotation. |
+| __Rotation X__, __Rotation Y__, __Rotation Z__ | | The layers of noise for each axis to apply to camera rotation. Each layer has properties for Frequency, Amplitude, and optional Perlin Noise. Click + or - to add and remove layers, respectively. |
+| | _Frequency_ | The frequency of the wave in the noise layer, in Hz. |
+| | _Amplitude_ | The amplitude (height) of the wave in the noise layer, in degrees. |
+| | _Non-random wave if checked_ | Check to remove the Perlin noise from the noise layer. Without Perlin noise, Cinemachine uses a regular sine wave. Uncheck to include random Perlin noise variation, randomizing both the frequency and the amplitude while remaining in the neighbourhood of the selected values. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePath.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePath.md
new file mode 100644
index 00000000..a3656a97
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePath.md
@@ -0,0 +1,30 @@
+# Cinemachine Path
+
+__Cinemachine Path__ is a component that defines a world-space path, consisting of an array of waypoints. Each waypoint
+specifies position, tangent, and roll settings. Bezier interpolation is performed between the waypoints, to get a smooth
+and continuous path.
+
+**Tip**: While the path position will always be smooth and continuous, it is still possible to get jarring movement when
+animating along the path. This happens when tangents aren’t set to ensure continuity of both the first and second order
+derivatives. It is not easy to get this right. To avoid this potentially jarring movement, use Cinemachine Smooth Path.
+CinemachineSmoothPath sets the tangents automatically to ensure complete smoothness.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:------------------------|:----------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Resolution__ | | Path samples per waypoint. Cinemachine uses this value to limit the granularity when calculating path distances. The crosshatches on the path gizmo in the scene view reflect this value |
+| __Appearance__ | | The settings that control how the path appears in the Scene view. |
+| | _Path Color_ | The color of the path when it is selected. |
+| | _Inactive Path Color_ | The color of the path when it is not selected. |
+| | _Width_ | The width of the railroad tracks that represent the path. |
+| __Looped__ | | Check to join the ends of the path to form a continuous loop. |
+| __Path Length__ | | The length of the path in distance units (read-only). |
+| __Selected Waypoint__ | | Properties for the waypoint you selected in the Scene view or in the Waypoints list. |
+| __Prefer Tangent Drag__ | | Check to use the Gizmo for the tangent of a waypoint when the Gizmos for the tangent and position coincide in the Scene view. |
+| __Path Details__ | | The list of waypoints that define the path. |
+| | _Position_ | Position in path-local space (i.e. relative to the transform of the path object itself) |
+| | _Tangent_ | Offset from the position, which defines the tangent of the curve at the waypoint. The length of the tangent encodes the strength of the bezier handle. The same handle is used symmetrically on both sides of the waypoint, to ensure smoothness. |
+| | _Roll_ | The roll of the path at this waypoint. The other orientation axes are inferred from the tangent and world up. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePixelPerfect.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePixelPerfect.md
new file mode 100644
index 00000000..7b3637c0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePixelPerfect.md
@@ -0,0 +1,33 @@
+# Using the Cinemachine Pixel Perfect extension
+
+Both the __Pixel Perfect Camera__ and Cinemachine modify the Camera’s orthographic size. Using these two systems
+together in a single Scene would cause them to fight for control over the Camera and produce unwanted results. The _
+_Cinemachine Pixel Perfect__ extension solves this incompatibility.
+
+__Cinemachine Pixel Perfect__ is an [extension](CinemachineVirtualCameraExtensions.md) for the __Cinemachine Virtual
+Camera__ that alters the orthographic size of the virtual camera. The extension detects the presence of the Pixel
+Perfect Camera component, and uses the component settings to calculate for the correct orthographic size of the virtual
+camera that best retains the Sprites in a pixel-perfect resolution.
+
+To add this extension to your virtual cameras, use the __Add Extension__ dropdown menu on the Cinemachine Virtual Camera
+Inspector window. Add this extension to each virtual camera in your Project.
+
+
+
+For each virtual camera attached with this extension, the Pixel Perfect Camera component then calculates a pixel-perfect
+orthographic size that best matches the original size of the virtual camera during __Play Mode __ or when __Run In Edit
+Mode__ is enabled. This is done to match the original framing of each virtual camera as close as possible when the
+pixel-perfect calculations are implemented.
+
+When the [Cinemachine Brain](CinemachineBrainProperties.md) component [blends](CinemachineBlending.md) between multiple
+virtual cameras, the rendered image is temporarily not pixel-perfect during the transition between cameras. The image
+becomes pixel-perfect once the view fully transitions to a single virtual camera.
+
+The following are the current limitations of the extension:
+
+- When a virtual camera with the Pixel Perfect extension is set to follow a [Target Group](CinemachineTargetGroup.md),
+ there may be visible choppiness when the virtual camera is positioned with the Framing Transposer component.
+- If the __Upscale Render Texture__ option is enabled on the Pixel Perfect Camera, there are less possible pixel-perfect
+ resolutions that match the original orthographic size of the virtual cameras. This may cause the framing of the
+ virtual cameras to be off by quite a large margin after the pixel-perfect calculations.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePostProcessing.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePostProcessing.md
new file mode 100644
index 00000000..942a48a7
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachinePostProcessing.md
@@ -0,0 +1,55 @@
+# Post Processing Extension
+
+Use the Cinemachine Post Processing [extension](CinemachineVirtualCameraExtensions.md) to attach a Postprocessing V2
+profile to a Virtual Camera.
+
+**Note 1**: Unity recommends using Postprocessing V2 instead of Postprocessing V1.
+
+**Note 2**: With HDRP and URP 7 and up, The PostProcessing package is deprecated, and is implemented natively by HDRP
+and URP. In that case, please see the __CinemachineVolumeSettings__ extension.
+
+The Cinemachine Post Processing extension holds a Post-Processing Profile asset to apply to a Virtual Camera when it is
+activated. If the camera is blending with another Virtual Camera, then the blend weight is applied to the Post Process
+effects also.
+
+Before attaching post processing profiles to Virtual Cameras, you first need to set up your project to use post
+processing.
+
+To set up project to use Post Processing V2 with Cinemachine:
+
+1. [Install](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html) the Postprocessing V2
+ package.
+
+2. Select your Unity camera with Cinemachine Brain in
+ the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view.
+
+3. [Add the component](https://docs.unity3d.com/Manual/UsingComponents.html) named __Post-Process Layer__. This will
+ enable Post Process profiles to affect the Camera.
+
+To add a Post Process profile to a Virtual Camera
+
+4. Select your Virtual Camera in the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view
+ or [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window.
+
+5. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), choose __Add Extension >
+ CinemachinePostProcessing__, then configre the Profile asset to have the effects you want when this virtual camera is
+ live.
+
+## Properties:
+
+| **Property:** || **Function:** |
+|:---||:---|
+| __Profile__ || The Post-Processing profile to activate when this Virtual Camera is live. |
+| __Focus Tracks Target__ || This is obsolete, please use __Focus Tracking__. |
+| __Focus Tracking__ || If the profile has the appropriate overrides, will set the base focus distance to be the
+distance from the selected target to the camera. The __Focus Offset__ field will then modify that distance. |
+|| _None_ | No focus tracking |
+|| _Look At Target_ | Focus offset is relative to the LookAt target |
+|| _Follow Target_ | Focus offset is relative to the Follow target |
+|| _Custom Target_ | Focus offset is relative to the Custom target |
+|| _Camera_ | Focus offset is relative to the camera |
+| __Focus Target__ || The target to use if __Focus Tracks Target__ is set to _Custom Target_ |
+| __Focus Offset__ || Used when __Focus Tracking__ is not _None_. Offsets the sharpest point away from the location of
+the focus target. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineRecomposer.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineRecomposer.md
new file mode 100644
index 00000000..66c02830
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineRecomposer.md
@@ -0,0 +1,25 @@
+# Cinemachine Recomposer Extension
+
+Use the Cinemachine Recomposer [extension](CinemachineVirtualCameraExtensions.md) is an add-on module for Cinemachine
+Virtual Camera that adds a final tweak to the camera composition. It is intended for use in a Timeline context, where
+you want to hand-adjust the output of procedural or recorded camera aiming.
+
+All of these properties can be animated within the Timeline.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:-----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Apply After__ | The Volume Settings profile to activate when this Virtual Camera is live. |
+| _Body_ | Camera has been positioned but not yet rotated |
+| _Aim_ | Camera has been rotated and positioned, but no noise or collision resolution applied |
+| _Noise_ | Camera has been positioned, rotated, and noise and other corrections applied |
+| _Finalize_ | Default setting. Applied after all standard virtual camera processing has occurred |
+| __Tilt__ | Add a vertical rotation to the camera's current rotation |
+| __Pan__ | Add a horizontal rotation to the camera's current rotation |
+| __Dutch__ | Add a tilt (local Z rotation) to the current camera's rotation |
+| __Zoom Scale__ | Scale the current zoom |
+| __Follow Attachment__ | When this is less than 1, damping on the Follow target is increased. When the value is zero, damping is infinite - effectively "letting go" of the target |
+| __Look At Attachment__ | When this is less than 1, damping on the Look At target is increased. When the value is zero, damping is infinite - effectively "letting go" of the target |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSavingDuringPlay.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSavingDuringPlay.md
new file mode 100644
index 00000000..45b87202
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSavingDuringPlay.md
@@ -0,0 +1,18 @@
+# Saving in Play Mode
+
+It’s often most convenient to adjust camera settings while the game is playing. But normally, Unity does not save your
+changes to the Scene when you exit Play Mode. Cinemachine has a special feature to preserve the tweaks you make during
+Play Mode. It doesn’t save structural changes, like adding or removing a behavior. With the exception of certain
+properties, Cinemachine preserves most of the settings in your Virtual Cameras when you exit Play Mode.
+
+When you exit Play Mode, Cinemachine scans the Scene to collect any changed properties in the Virtual Cameras.
+Cinemachine saves these changes a second or so after exiting. Use the __Edit > Undo__ command to revert these changes.
+
+Check __Save During Play__ on any Virtual Camera in
+the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html) to enable this feature. This is a global
+property, not per-camera, so you only need to check or uncheck it once.
+
+Cinemachine components have the special attribute `[SaveDuringPlay]` to enable this functionality. Feel free to use it
+on classes within your own custom scripts too if you need it. To exclude a field in a class with the `[SaveDuringPlay]`
+attribute, add the `[NoSaveDuringPlay]` attribute to the field.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSetUpVCam.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSetUpVCam.md
new file mode 100644
index 00000000..ef49dd60
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSetUpVCam.md
@@ -0,0 +1,23 @@
+# Setting up Virtual Cameras
+
+In your project, organize your Scene Hierarchy to have a single Unity camera with a CinemachineBrain component and many
+Virtual Cameras.
+
+To add a Virtual Camera to a Scene:
+
+1. In the Unity menu, choose __GameObject > Cinemachine > Virtual Camera__.
Unity adds a new GameObject with a
+ Cinemachine Virtual Camera component. If necessary, Unity also adds
+ a [Cinemachine Brain](CinemachineBrainProperties.md) component to the Unity camera GameObject for you.
+
+2. Use the __Follow__ property to specify a GameObject to follow.
The Virtual Camera automatically positions the
+ Unity camera relative to this GameObject at all times, even as you move it in the Scene.
+
+3. Use the __Look At__ property to specify the GameObject that the Virtual Camera should aim at.
The Virtual Camera
+ automatically rotates the Unity camera to face this GameObject at all times, even as you move it in the Scene.
+
+4. [Customize the Virtual Camera](CinemachineVirtualCamera.md) as needed.
Choose the algorithm for following and
+ looking at, and adjust settings such as the follow offset, the follow damping, the screen composition, and the
+ damping used when re-aiming the camera.
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSmoothPath.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSmoothPath.md
new file mode 100644
index 00000000..bffc8cba
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineSmoothPath.md
@@ -0,0 +1,27 @@
+# Cinemachine Smooth Path
+
+A __Cinemachine Smooth Path__ is a component that defines a world-space path, consisting of an array of waypoints. Each
+waypoint has position and roll settings. Cinemachine uses Bezier interpolation to calculate positions between the
+waypoints to get a smooth and continuous path. The path passes through all waypoints. Unlike Cinemachine Path, first and
+second order continuity is guaranteed, which means that not only the positions but also the angular velocities of
+objects animated along the path will be smooth and continuous.
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:----------------------|:----------------------|:----------------------------------------------------------------------------------------------------------------------|
+| __Resolution__ | | Path samples per waypoint. Cinemachine uses this value to calculate path distances. |
+| __Looped__ | | If checked, then the path ends are joined to form a continuous loop. |
+| __Resolution__ | | Path samples per waypoint. This is used for calculating path distances. |
+| __Appearance__ | | The settings that control how the path appears in the Scene view. |
+| | _Path Color_ | The color of the path when it is selected. |
+| | _Inactive Path Color_ | The color of the path when it is not selected. |
+| | _Width_ | The width of the railroad tracks that represent the path. |
+| __Looped__ | | Check to join the ends of the path to form a continuous loop. |
+| __Path Length__ | | The length of the path in distance units (read-only). |
+| __Selected Waypoint__ | | Properties for the waypoint you selected in the Scene view or in the Waypoints list. |
+| __Waypoints__ | | The list of waypoints that define the path. They are interpolated using a bezier curve. |
+| | _Position_ | Position in path-local space. |
+| | _Roll_ | Defines the roll of the path at this waypoint. The other orientation axes are inferred from the tangent and world up. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStateDrivenCamera.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStateDrivenCamera.md
new file mode 100644
index 00000000..0791468d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStateDrivenCamera.md
@@ -0,0 +1,63 @@
+# Cinemachine State-Driven Camera
+
+The __Cinemachine State-Driven Camera__ component activates a child Virtual Camera when an animation target changes
+states. For example, consider your avatar’s local-motion system and orbit camera. Your game feels more alive to the
+player when the camera shakes more as your avatar runs. When the avatar walks, blend for example to a Virtual Camera
+with more damping.
+
+
+
+The animation target for a State-Driven Camera is a GameObject with
+an [Animator](https://docs.unity3d.com/Manual/class-Animator.html) component controlled by
+an [Animator Controller](https://docs.unity3d.com/Manual/class-AnimatorController.html).
+
+Assign normal __Look At__ and __Follow__ targets to each child Virtual Camera. If a child Virtual Camera has no __Look
+At__ or __Follow__ target, State-Driven camera uses its own, respective targets.
+
+State-Driven Camera has a list that assigns child Virtual Cameras to animation states. You can define default and custom
+blends between the State-Driven children.
+
+In the Inspector, the State-Driven camera lists its Virtual Camera children. Use this list to add and delete child
+Virtual Cameras, and assign priorities.
+
+
+
+To create a State-Driven camera:
+
+1. Set up the animation target GameObject
+ to [control it with an Animator Controller](https://docs.unity3d.com/Manual/AnimatorControllers.html).
+
+2. In the Unity menu, choose __GameObject > Cinemachine > State-Driven Camera__.
A new State-Driven camera appears
+ in the hierarchy with a new child Virtual Camera.
+
+3. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), assign the animation target you created
+ in step 1 to the Animated Target property.
+
+4. If needed, add more child VIrtual Cameras either by clicking + in Virtual Camera Children or dragging and dropping
+ existing Virtual Cameras in the [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window.
+
+5. Use the __State__ to assign child Virtual Cameras to the animation states.
+
+## Properties:
+
+| **Property:** | **Function:** |
+|:----------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Solo__ | Toggles whether or not the Virtual Camera is temporarily live. Use this property to get immediate visual feedback in the [Game view](https://docs.unity3d.com/Manual/GameView.html) to adjust the Virtual Camera. |
+| __Standby Update__ | Controls how often the virtual camera is updated when the virtual camera is not live. |
+| __Game Window Guides__ | Toggles the visibility of compositional guides in the Game view. These guides are available when Look At specifies a GameObject and the Aim section uses Composer or Group Composer, or when Follow specifies a target and the Body section uses Framing Composer. This property applies to all Virtual Cameras. |
+| __Save During Play__ | Check to [apply the changes while in Play mode](CinemachineSavingDuringPlay.md). Use this feature to fine-tune a Virtual Camera without having to remember which properties to copy and paste. This property applies to all Virtual Cameras. |
+| __Priority__ | The importance of this State-Driven camera for choosing the next shot. A higher value indicates a higher priority. This property has no effect when using a State-Driven camera with Timeline. |
+| __Look At__ | The default target GameObject that the children Virtual Camera move with. The State-Driven camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Follow__ | The default target GameObject to aim the Unity camera at. The State-Driven camera uses this target when the child does not specify this target. May be empty if all of the children define targets of their own. |
+| __Animated Target__ | The GameObject that contains the Animator Controller. The State-Drive camera reacts to the animation state changes from this GameObject. |
+| __Layer__ | The animation layer to observe in the Animated Target. |
+| __Show Debug Text__ | Check to display a textual summary of the live Virtual Camera and blend in the game view. |
+| __Default Blend__ | The blend which is used if you don’t explicitly define a blend between two Virtual Cameras. |
+| __Custom Blends__ | The asset which contains custom settings for specific child blends. |
+| __State__ | The state to which the virtual camera will be mapped. |
+| __Camera__ | The virtual camera to activate for this state. |
+| __Wait__ | The delay to activate the virtual camera (in seconds) once this state is entered. For example, the animation target moves from an active Walk state, to a Jog state, to a Run state. If the Jog Wait time is set to four seconds, the Walk virtual camera remains active for those four seconds even though the Jog state is now active. If the Jog state duration is less than the Wait time before the animation target passes into another state, the Jog virtual camera will not activate and is bypassed. |
+| __Min__ | The minimum length of time (in seconds) the virtual camera must remain active once it is activated. For example, the animation target enters the Run state from the Jog state. It has spent five seconds in the Jog state before moving to the Run state. The Jog Min is set to 12 seconds. This means that the Jog virtual camera remains the active camera for an additional seven seconds even though the animation target is in the Run state. |
+| __Virtual Camera Children__ | The list of Virtual Cameras that are children of the State-Driven camera. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStoryboard.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStoryboard.md
new file mode 100644
index 00000000..0115fe17
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineStoryboard.md
@@ -0,0 +1,37 @@
+# Storyboard
+
+Use the Cinemachine Storyboard [extension](CinemachineVirtualCameraExtensions.md) to let artists, producers, and
+directors contribute to your game development. Cinemachine Storyboard places a still image in screen space over the
+output of the Unity camera.
+
+Storyboard simplifies animatics for your team. Start with still images to pre-visualize terrain, layout, movement,
+lighting, timing, and so on. Following the intentions of the Storyboard image, developers incrementally add the assets,
+GameObjects, and settings that implement the Scene.
+
+Use the properties in the Storyboard component to hide and show the image to compare it to the actual rendering of the
+Unity camera.
+
+Storyboards can be muted at a global level - completely disabling them. To toggle this, go to the Cinemachine Storyboard
+component and enable _Storyboard Global Mute_.
+
+
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:---------------------------|:--------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Storyboard Global Mute__ | | When enabled, all storyboards are globally muted. |
+| __Show Image__ | | Toggle the visibility of the storyboard image. |
+| __Image__ | | The image to display as an overlay over the output of the Virtual Camera. |
+| __Aspect__ | | How to handle differences between image aspect and screen aspect. |
+| | _Best Fit_ | Resize the image as large as possible on the screen without cropping. Preserve the vertical and horizontal proportions. |
+| | _Crop Image To Fit_ | Resize the image to fill the screen, cropping if necessary. Preserve the vertical and horizontal proportions. |
+| | _Stretch To Fit_ | Resize the image to fill the screen, adjusting the vertical or horizontal width if necessary. |
+| __Alpha__ | | The opacity of the image. Use 0 for transparent, 1 for opaque. |
+| __Center__ | | The screen-space position of the image. Use 0 for center. |
+| __Rotation__ | | The screen-space rotation of the image. |
+| __Scale__ | | The screen-space scaling of the image. |
+| __Sync Scale__ | | Check to synchronize the scale of the x and y axes. |
+| __Mute Camera__ | | Check to prevent the Virtual Camera from updating the position, rotation, or scale of the Unity camera. Use this feature to prevent Timeline from [blending](CinemachineBlending.md) the camera to an unintended position in the Scene. |
+| __Split View__ | | Wipe the image on and off horizontally. |
+| __Waveform Monitor__ | | Opens the Waveform monitor window. This is very performance-intensive, use with care. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTargetGroup.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTargetGroup.md
new file mode 100644
index 00000000..95e1e55f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTargetGroup.md
@@ -0,0 +1,40 @@
+# Cinemachine Target Group
+
+Use Cinemachine Target Group to treat multiple GameObjects as a single Look At target. Use a Target Group with
+the [Group Composer](CinemachineAimGroupComposer.md) algorithm.
+
+To create a Virtual Camera with a Target Group:
+
+1. In the Unity menu, choose __GameObject > Cinemachine > Target Group Camera__.
Unity adds a new Virtual Camera
+ and Target Group to the Scene. The __Follow__ and __Look At__ targets in the Virtual Camera refer to the new Target
+ Group.
+
+2. In the [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html), select the new Target Group object.
+
+3. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), click the + sign to add a new item to the
+ group.
+
+4. In the new item, assign a GameObject (you can drag and drop from the Hierarchy), and edit the __Weight__ and __Radius
+ __ properties.
+
+5. To add more GameObjects to the Target Group, repeat steps 3-4.
+
+
+
+## Properties:
+
+| **Property:** | | **Function:** |
+|:------------------|:----------------|:-----------------------------------------------------------------------------------------------------------------------|
+| __Position Mode__ | | How to calculate the position of the Target Group. |
+| | _Group Center_ | Use the center of the axis-aligned bounding box that contains all items of the Target Group. |
+| | _Group Average_ | Use the weighted average of the positions of the items in the Target Group. |
+| __Rotation Mode__ | | How to calculate the rotation of the Target Group. |
+| | _Manual_ | Use the values specified in the Rotation properties of the Target Group’s transform. This is the recommended setting. |
+| | _Group Average_ | Weighted average of the orientation of the items in the Target Group. |
+| __Update Method__ | | When to update the transform of the Target Group. |
+| | _Update_ | Update in the normal MonoBehaviour Update() method. |
+| | _Fixed Update_ | Updated in sync with the Physics module, in FixedUpdate(). |
+| | _Late Update_ | Updated in MonoBehaviour `LateUpdate()`. |
+| __Targets__ | | The list of target GameObjects. |
+| | _Weight_ | How much weight to give the item when averaging. Cannot be negative. |
+| | _Radius_ | The radius of the item, used for calculating the bounding box. Cannot be negative. |
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTimeline.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTimeline.md
new file mode 100644
index 00000000..fdf7b40e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTimeline.md
@@ -0,0 +1,61 @@
+# Cinemachine and Timeline
+
+Use [Timeline](https://docs.unity3d.com/Packages/com.unity.timeline@latest) to activate, deactivate, and blend between
+Virtual Cameras. In Timeline, combine Cinemachine with other GameObjects and assets to interactively implement and tune
+rich cutscenes, even interactive ones.
+
+**Tip**: For simple shot sequences, use a [Cinemachine Blend List Camera](CinemachineBlendListCamera.md) instead of
+Timeline.
+
+Timeline overrides the priority-based decisions made by [Cinemachine Brain](CinemachineBrainProperties.md). When the
+timeline finishes, control returns to the Cinemachine Brain, which chooses the Virtual Camera with the highest Priority
+setting.
+
+You control Virtual Cameras in Timeline with a __Cinemachine Shot Clip__. Each shot clip points to a Virtual Camera to
+activate then deactivate. Use a sequence of shot clips to specify the order and duration of each shot.
+
+To cut between two Virtual Cameras, place the clips next to each other. To blend between two Virtual Cameras, overlap
+the clips.
+
+
+
+To create a Timeline for Cinemachine:
+
+1. Create an empty GameObject in your Scene by choosing the __GameObject > Create Empty __menu item.
+
+2. Give the empty GameObject a descriptive name. For example, `IntroTimeline`.
+
+3. In your Scene, select your empty Timeline object as the focus to create a Timeline Asset and instance.
+
+4. Click the padlock button to lock the TImeline window to make it easier to add and adjust tracks.
+
+5. Drag a Unity camera with a CinemachineBrain component onto the Timeline Editor, then choose __Create Cinemachine
+ Track__ from the drop-down menu.
+
+6. Add other tracks to the Timeline for controlling the subjects of your Scene. For example, add an Animation track to
+ animate your main character.
+
+**Tip**: Delete the default track that refers to your Timeline object. This track isn’t necessary for Timeline. For
+example, in the Timeline editor, right-click the track for IntroTimeline and choose __Delete__.
+
+To add Cinemachine Shot Clips to a Cinemachine Track:
+
+1. In the Cinemachine Track, right-click and choose __Add Cinemachine Shot Clip__.
+
+2. Do one of the following:
+
+ * To add an existing Virtual Camera to the shot clip, drag and drop it onto the Virtual Camera property in the
+ Cinemachine Shot component.
+
+ * To create a new Virtual Camera and add it to the shot clip, click Create in the Cinemachine Shot component.
+
+3. In the Timeline editor, adjust the order, duration, cutting, and blending of the shot clip.
+
+4. [Adjust the properties of the Virtual Camera](CinemachineVirtualCamera.md) to place it in the Scene and specify what
+ to aim at or follow.
+
+5. To animate properties of the Virtual Camera, create an Animation Track for it and animate as you would any other
+ GameObject.
+
+6. Organize your Timeline tracks to fine-tune your Scene.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTopDown.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTopDown.md
new file mode 100644
index 00000000..4ba4e50f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineTopDown.md
@@ -0,0 +1,16 @@
+# Top-down games
+
+Cinemachine Virtual Cameras are modelled after human camera operators and how they operate real-life cameras. As such,
+they have a sensitivity to the up/down axis, and always try to avoid introducing roll into the camera framing. Because
+of this sensitivity, the Virtual Camera avoids looking straight up or down for extended periods. They may do it in
+passing, but if the __Look At__ target is straight up or down for extended periods, they will not always give the
+desired result.
+
+**Tip:** You can deliberately roll by animating properties like __Dutch__ in a Virtual Camera.
+
+If you are building a top-down game where the cameras look straight down, the best practice is to redefine the up
+direction, for the purposes of the camera. You do this by setting the __World Up Override__ in
+the [Cinemachine Brain](CinemachineBrainProperties.md) to a GameObject whose local up points in the direction that you
+want the Virtual Camera’s up to normally be. This is applied to all Virtual Cameras controlled by that Cinemachine
+Brain.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineUsing.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineUsing.md
new file mode 100644
index 00000000..5a2389ba
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineUsing.md
@@ -0,0 +1,131 @@
+# Using Cinemachine
+
+Using Cinemachine requires a new way of thinking about working with cameras. For example, you might have invested
+heavily in carefully scripted camera behaviors. However, Cinemachine can give the same results, if not better, in less
+time.
+
+## Virtual Cameras
+
+Cinemachine does not create new cameras. Instead, it directs a single Unity camera for multiple shots. You compose these
+shots with __Virtual Cameras__. Virtual Cameras move and rotate the Unity camera and control its settings.
+
+The Virtual Cameras are separate GameObjects from the Unity Camera, and behave independently. They are not nested within
+each other. For example, a Scene might look like this:
+
+
+
+The main tasks that the Virtual Camera does for you:
+
+* Positions the Unity camera in the Scene.
+* Aims the Unity camera at something.
+* Adds procedural noise to the Unity camera. Noise simulates things like handheld effects or vehicle shakes.
+
+Cinemachine encourages you to create many Virtual Cameras. The Virtual Camera is designed to consume little processing
+power. If your Scene is performance-sensitive, deactivate all but the essential Virtual Cameras at any given moment for
+best performance.
+
+It is recommended that you use a single Virtual Camera for a single shot. Take advantage of this to create dramatic or
+subtle cuts or blends. Examples:
+
+* For a cutscene where two characters exchange dialog, use three Virtual Cameras: one camera for a mid-shot of both
+ characters, and separate Virtual Cameras for a close-up of each character. Use Timeline to synchronize audio with the
+ Virtual Cameras.
+
+* Duplicate an existing Virtual Camera so that both Virtual Cameras are in the same position in the Scene. For the
+ second Virtual Camera, change the FOV or composition. When a player enters a trigger volume, Cinemachine blends from
+ the first to the second Virtual Camera to emphasize a change in action.
+
+One Virtual Camera has control of the Unity camera at any point in time. This is the __live__ Virtual Camera. The
+exception to this rule is when a blend occurs from one Virtual Camera to the next. During the blend, both Virtual
+Cameras are live.
+
+## Cinemachine Brain
+
+The Cinemachine Brain is a component in the Unity Camera itself. The Cinemachine Brain monitors all active Virtual
+Cameras in the Scene. To specify the next live Virtual Camera,
+you [activate or deactivate](https://docs.unity3d.com/Manual/DeactivatingGameObjects.html) the desired Virtual Camera's
+game object. Cinemachine Brain then chooses the most recently activated Virtual Camera with the same or higher priority
+as the live Virtual Camera. It performs a cut or blend between the previous and new Virtual Cameras.
+
+**Tip**: Use Cinemachine Brain to respond to dynamic game events in real time. It allows your game logic to control the
+camera by manipulating priorities. This is particularly useful for live gameplay, where action isn’t always predictable.
+Use [Timeline](CinemachineTimeline.md) to choreograph cameras in predictable situations, like cutscenes. Timeline
+overrides the Cinemachine Brain priority system to give you precise, to-the-frame camera control.
+
+## Moving and aiming
+
+Use the [__Body__ properties](CinemachineVirtualCameraBody.md) in a Virtual Camera to specify how to move it in the
+Scene. Use the [__Aim__ properties](CinemachineVirtualCameraAim.md) to specify how to rotate it.
+
+A Virtual Camera has two targets:
+
+* The __Follow__ target specifies a GameObject for the Virtual Camera to move with.
+* The __Look At__ target specifies the GameObject to aim at.
+
+Cinemachine includes a variety of procedural algorithms to control moving and aiming. Each algorithm solves a specific
+problem, and has properties to customize the algorithm for your specific needs. Cinemachine implements these algorithms
+as `CinemachineComponent` objects. Use the `CinemachineComponent` class to implement a custom moving or aiming behavior.
+
+The __Body__ properties offer the following procedural algorithms for moving the Virtual Camera in a Scene:
+
+* __Transposer__: Move in a fixed relationship to the __Follow__ target, with optional damping.
+* __Do Nothing__: Do not move the Virtual Camera.
+* __Framing Transposer__: Move in a fixed screen-space relationship to the __Follow__ target, with optional damping.
+* __Orbital Transposer__: Move in a variable relationship to the __Follow__ target, optionally accepting player input.
+* __Tracked Dolly__: Move along a predefined path.
+* __Hard Lock to Target__: Use the same position at the __Follow__ target.
+
+The __Aim__ properties offer the following procedural algorithms for rotating a Virtual Camera to face the __Look At__
+target:
+
+* __Composer__: Keep the __Look At__ target in the camera frame, with compositional constraints.
+* __Group Composer__: Keep multiple __Look At__ targets in the camera frame.
+* __Do Nothing__: Do not rotate the Virtual Camera.
+* __POV__: Rotate the Virtual Camera based on the user’s input.
+* __Same As Follow Target__: Set the camera’s rotation to the rotation of the __Follow__ target.
+* __Hard Look At__: Keep the __Look At__ target in the center of the camera frame.
+
+## Composing a shot
+
+The [__Framing Transposer__](CinemachineBodyFramingTransposer.md), [__Composer__](CinemachineAimComposer.md), and [_
+_Group Composer__](CinemachineAimGroupComposer.md) algorithms define areas in the camera frame for you to compose a
+shot:
+
+* __Dead zone__: The area of the frame that Cinemachine keeps the target in.
+
+* __Soft zone__: If the target enters this region of the frame, the camera will re-orient to put it back in the dead
+ zone. It will do this slowly or quickly, according to the time specified in the Damping settings.
+
+* __Screen__: The screen position of the center of the dead zone. 0.5 is the center of the screen.
+
+* __Damping__: Simulates the lag that a real camera operator introduces while operating a heavy physical camera. Damping
+ specifies quickly or slowly the camera reacts when the target enters the __soft zone__ while the camera tracks the
+ target. Use small numbers to simulate a more responsive camera, rapidly moving or aiming the camera to keep the target
+ in the __dead zone__. Larger numbers simulate heavier cameras, The larger the value, the more Cinemachine allows the
+ target to enter the soft zone.
+
+The __Game Window Guides__ gives an interactive, visual indication of these areas. The guides appear as tinted areas in
+the [Game view](https://docs.unity3d.com/Manual/GameView.html).
+
+
+
+The clear area indicates the __dead zone__. The blue-tinted area indicates the __soft zone__. The position of the soft
+and dead zones indicates the __screen__ position. The red-tinted area indicates the __no pass__ area, which the target
+never enters. The yellow square indicates the target.
+
+Adjust these areas to get a wide range of camera behaviors. To do this, drag their edges in the Game view or edit their
+properties in the Inspector window. For example, use larger damping values to simulate a larger, heavier camera, or
+enlarge the __soft zone__ and __dead zone__ to create an area in the middle of the camera frame that is immune to target
+motion. Use this feature for things like animation cycles, where you don’t want the camera to track the target if it
+moves just a little.
+
+## Using noise to simulate camera shake
+
+Real-world physical cameras are often heavy and cumbersome. They are hand-held by the camera operator or mounted on
+unstable objects like moving vehicles. Use [Noise properties](CinemachineVirtualCameraNoise.md) to simulate these
+real-world qualities for cinematic effect. For example, you could add a camera shake when following a running character
+to immerse the player in the action.
+
+At each frame update, Cinemachine adds noise separately from the movement of the camera to follow a target. Noise does
+not influence the camera’s position in future frames. This separation ensures that properties like __damping__ behave as
+expected.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCamera.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCamera.md
new file mode 100644
index 00000000..78258cc5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCamera.md
@@ -0,0 +1,61 @@
+# Setting Virtual Camera properties
+
+The Cinemacine Virtual Camera is a component that you add to an empty GameObject. It represents a Virtual Camera in the
+Unity Scene.
+
+Use the __Aim__, __Body__, and __Noise__ properties to specify how the Virtual Camera animates position, rotation, and
+other properties. The Virtual Camera applies these settings to the Unity Camera
+when [Cinemachine Brain](CinemachineBrainProperties.md) or [Timeline](CinemachineTimeline.md) transfers control of the
+Unity camera to the Virtual Camera. You can also use [Scene Handles](handles.md) to modify some common properties.
+
+At any time, each Virtual Camera may be in one of these states:
+
+* __Live__: The Virtual Camera actively controls a Unity camera that has a Cinemachine Brain. When a Cinemachine Brain
+ blends from one Virtual Camera to the next, both Virtual Cameras are live. When the blend is complete, there is only
+ one live Virtual Camera.
+
+* __Standby__: The Virtual Camera doesn’t control the Unity camera. However, it still follows and aims at its targets,
+ and updates at every frame. A Virtual Camera in this state is activated and has a priority that is the same as or
+ lower than the live Virtual Camera.
+
+* __Disabled__: The Virtual Camera doesn’t control the Unity camera and doesn’t actively follow or aim at its targets. A
+ Virtual Camera in this state doesn’t consume processing power. To disable a Virtual Camera, deactivate its game
+ object. The Virtual Camera is present but disabled in the Scene. However, even though the game object is deactivated,
+ the virtual camera can still control the Unity camera if the virtual camera is participating in a blend, or if it is
+ invoked by Timeline.
+
+
+
+### Properties
+
+| **Property:** | | **Function:** |
+|:-----------------------|:--------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Solo__ | | Toggles whether or not the Virtual Camera is temporarily live. Use this property to get immediate visual feedback in the [Game view](https://docs.unity3d.com/Manual/GameView.html) to adjust the Virtual Camera. |
+| __Game Window Guides__ | | Toggles the visibility of compositional guides in the Game view. These guides are available when Look At specifies a GameObject and the Aim section uses Composer or Group Composer, or when Follow specifies a target and the Body section uses Framing Composer. This property applies to all Virtual Cameras. |
+| __Save During Play__ | | Check to [apply the changes while in Play mode](CinemachineSavingDuringPlay.md). Use this feature to fine-tune a Virtual Camera without having to remember which properties to copy and paste. This property applies to all Virtual Cameras. |
+| __Priority__ | | The importance of this Virtual Camera for choosing the next shot. A higher value indicates a higher priority. Cinemachine Brain chooses the next live Virtual Camera from all Virtual Cameras that are activated and have the same or higher priority as the current live Virtual Camera. This property has no effect when using a Virtual Camera with Timeline. |
+| __Follow__ | | The target GameObject that the Virtual Camera moves with. The [Body properties](CinemachineVirtualCameraBody.md) use this target to update the position of the Unity camera. Keep this property empty to make the Unity camera use the position of the Virtual Camera’ transform. For example, you might choose to animate the Virtual Camera in Timeline. |
+| __Look At__ | | The target GameObject to aim the Unity camera at. The [Aim properties](CinemachineVirtualCameraAim.md) use this target to update the rotation of the Unity camera. Keep this property empty to make the Unity camera use the orientation of the Virtual Camera. |
+| __Standby Update__ | | Controls how often the virtual camera is updated when the virtual camera is not live. |
+| __Position Blending__ | | Style for blending positions to and from this Virtual Camera. |
+| | _Linear_ | Standard linear position blend. |
+| | _Spherical_ | Spherical blend about the Look At position, if there is a Look At target. |
+| | _Cylindrical_ | Cylindrical blend about the Look At position, if there is a Look At target. Vertical coordinate is linearly interpolated. |
+| __Lens__ | | These properties mirror their counterparts in the properties for the [Unity camera](https://docs.unity3d.com/Manual/class-Camera.html). |
+| | _Field Of View_ | The camera view in vertical degrees. For example, to specify the equivalent of a 50mm lens on a Super 35 sensor, enter a Field of View of 19.6 degrees. This property is available when the Unity camera with the Cinemachine Brain component uses a Projection of Perspective. You can also use [Scene Handles](handles.md) to modify this property. |
+| | _Presets_ | A drop-down menu of settings for commonly-used lenses. Choose **Edit Presets** to add or edit the asset that contains a default list of lenses. |
+| | _Orthographic Size_ | When using an orthographic camera, defines the half-height of the camera view, in world coordinates. Available when the Unity camera with the Cinemachine Brain component uses a Projection of Orthographic. |
+| | _Near Clip Plane_ | The closest point relative to the camera where drawing occurs. You can also use [Scene Handles](handles.md) to modify this property. |
+| | _Far Clip Plane_ | The furthest point relative to the camera where drawing occurs. You can also use [Scene Handles](handles.md) to modify this property. |
+| | _Dutch_ | Dutch angle. Tilts the Unity camera on the z-axis, in degrees. This property is unique to the Virtual Camera; there is no counterpart property in the Unity camera. |
+| __Mode Override__ | | Allows you to select a different camera mode to apply to the [Unity camera](https://docs.unity3d.com/Manual/class-Camera.html) component when Cinemachine activates this Virtual Camera.
__Important:__ All the changes applied to the Camera component through this setting will remain after the Virtual Camera deactivation. If you set a mode override in any Virtual Camera, you should set one in all Virtual Cameras. |
+| | _None_ | Leaves the __Projection__ and __Physical Camera__ properties unchanged in the Camera. |
+| | _Orthographic_ | Sets the __Projection__ property to __Orthographic__. |
+| | _Perspective_ | Sets the __Projection__ property to __Perspective__ and *disables* the __Physical Camera__ feature and properties. |
+| | _Physical_ | Sets the __Projection__ property to __Perspective__ and *enables* the __Physical Camera__ feature and properties. |
+| __Blend Hint__ | | Provides hints for blending positions to and from the virtual camera. |
+| __Inherit Position__ | | When enabled, whenever this virtual camera goes live, forces the initial position to be the same as the current position of the Unity Camera, if possible. |
+| __Extensions__ | | Components that add extra behaviors to the Virtual Camera. |
+| | _Add Extension_ | Choose a new [extension](CinemachineVirtualCameraExtensions.md) to add to the Virtual Camera. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraAim.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraAim.md
new file mode 100644
index 00000000..56c5c3a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraAim.md
@@ -0,0 +1,16 @@
+# Aim properties
+
+Use the Aim properties to specify how to rotate the Virtual Camera. To change the camera’s position, use
+the [Body properties](CinemachineVirtualCameraBody.md).
+
+
+
+* [__Do Nothing__](CinemachineAimDoNothing.md): Do not procedurally rotate the Virtual Camera.
+
+
+- [__Composer__](CinemachineAimComposer.md): Keep the __Look At__ target in the camera frame.
+- [__Group Composer__](CinemachineAimGroupComposer.md): Keep multiple __Look At__ targets in the camera frame.
+- [__Hard Look At__](CinemachineAimHardLook.md): Keep the __Look At__ target in the center of the camera frame.
+- [__POV__](CinemachineAimPOV.md): Rotate the Virtual Camera based on the user’s input.
+- [__Same As Follow Target__](CinemachineAimSameAsFollow.md): Set the camera’s rotation to the rotation of the __Follow
+ __ target.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraBody.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraBody.md
new file mode 100644
index 00000000..36943a96
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraBody.md
@@ -0,0 +1,30 @@
+# Body properties
+
+Use the Body properties to specify the algorithm that moves the Virtual Camera in the Scene. To rotate the camera, set
+the [Aim properties](CinemachineVirtualCameraAim.md).
+
+
+
+Cinemachine includes these algorithms for moving a Virtual Camera:
+
+- [__Do Nothing__](CinemachineBodyDoNothing.md): does not move the Virtual Camera.
+- [__3rd Person follow__](Cinemachine3rdPersonFollow.md): Pivots the camera horizontally and vertically around the
+ player, to the __Follow__ target.
+- [__Framing Transposer__](CinemachineBodyFramingTransposer.md): moves in a fixed screen-space relationship to the _
+ _Follow__ target.
+- [__Hard Lock to Target__](CinemachineBodyHardLockTarget.md): uses the same position at the __Follow__ target.
+- [__Orbital Transposer__](CinemachineBodyOrbitalTransposer.md): moves in a variable relationship to the __Follow__
+ target, optionally accepting player input.
+- [__Tracked Dolly__](CinemachineBodyTrackedDolly.md): moves along a predefined path.
+- [__Transposer__](CinemachineBodyTransposer.md): moves in a fixed relationship to the __Follow__ target.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraExtensions.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraExtensions.md
new file mode 100644
index 00000000..372c6bdd
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraExtensions.md
@@ -0,0 +1,17 @@
+# Extensions
+
+Extensions are components that augment the behavior of a Virtual Camera. For example,
+the [Collider](CinemachineCollider.md) extension moves a camera out of the way of GameObjects that obstruct the camera’s
+view of its target.
+
+Cinemachine includes a variety of extensions. Create your own custom extensions by deriving from
+the `CinemachineExtension` class.
+
+To add an extension to a Virtual Camera:
+
+1. Select your Virtual Camera in the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view
+ or [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window.
+
+2. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), use the __Add Extension__ drop-down menu
+ to choose the extension.
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraNoise.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraNoise.md
new file mode 100644
index 00000000..b9b11ac9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVirtualCameraNoise.md
@@ -0,0 +1,35 @@
+# Noise properties
+
+Use Noise properties in a Virtual Camera to simulate camera shake. Cinemachine includes a __Basic Multi Channel Perlin__
+component, which adds Perlin noise to the movement of the Virtual Camera. __Perlin noise__ is a technique to compute
+random movement with a natural behavior.
+
+
+
+The Basic Multi Channel Perlin component applies a noise profile. A noise profile is an Asset that defines the behavior
+of noise over time. Cinemachine includes a few noise profile assets. You
+can [edit these and create your own](CinemachineNoiseProfiles.md).
+
+To apply noise:
+
+1. Select your Virtual Camera in the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view
+ or [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window.
+
+2. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), use the __Noise__ drop-down menu to
+ choose __Basic Multi Channel Perlin__.
+
+3. In __Noise Profile__, choose an existing profile asset or [create your own profile](CinemachineNoiseProfiles.md).
+
+4. Use __Amplitude Gain__ and __Frequency Gain__ to fine-tune the noise.
+
+## Properties
+
+| **Property:** | **Function:** |
+|:-------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| __Noise Profile__ | The noise profile asset to use. |
+| __Amplitude Gain__ | Gain to apply to the amplitudes defined in the noise profile. Use 1 to use the amplitudes defined in the noise profile. Setting this to 0 mutes the noise. Tip: Animate this property to ramp the noise effect up and down. |
+| __Frequency Gain__ | Factor to apply to the frequencies defined in the noise profile. Use 1 to use the frequencies defined in the noise profile. Use larger values to shake the camera more rapidly. Tip: Animate this property to ramp the noise effect up and down. |
+| __Pivot Offset__ | When rotating the camera, offset the camera's pivot by the indicated x, y, and z distance when applying rotational noise. This generates some positional variation that corresponds to the rotation noise. |
+
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVolumeSettings.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVolumeSettings.md
new file mode 100644
index 00000000..3e9b3599
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/CinemachineVolumeSettings.md
@@ -0,0 +1,36 @@
+# Cinemachine Volume Settings Extension
+
+Use the Cinemachine Volume Settings [extension](CinemachineVirtualCameraExtensions.md) to attach an HDRP/URP
+VolumeSettings profile to a Virtual Camera.
+
+The Cinemachine Volume Settings extension holds a Volume Settings Profile asset to apply to a Virtual Camera when it is
+activated. If the camera is blending with another Virtual Camera, then the blend weight is applied to the Volume
+Settings effects also.
+
+To add a Volume Settings profile to a Virtual Camera
+
+1. Select your Virtual Camera in the [Scene](https://docs.unity3d.com/Manual/UsingTheSceneView.html) view
+ or [Hierarchy](https://docs.unity3d.com/Manual/Hierarchy.html) window.
+
+2. In the [Inspector](https://docs.unity3d.com/Manual/UsingTheInspector.html), choose __Add Extension >
+ CinemachineVolumeSettings__, then configure the Profile asset to have the effects you want when this virtual camera
+ is live.
+
+## Properties:
+
+| **Property:** || **Function:** |
+|:---||:---|
+| __Profile__ || The Volume Settings profile to activate when this Virtual Camera is live. |
+| __Focus Tracks Target__ || This is obsolete, please use __Focus Tracking__. |
+| __Focus Tracking__ || If the profile has the appropriate overrides, will set the base focus distance to be the
+distance from the selected target to the camera. The __Focus Offset__ field will then modify that distance. |
+|| _None_ | No focus tracking |
+|| _Look At Target_ | Focus offset is relative to the LookAt target |
+|| _Follow Target_ | Focus offset is relative to the Follow target |
+|| _Custom Target_ | Focus offset is relative to the Custom target |
+|| _Camera_ | Focus offset is relative to the camera |
+| __Focus Target__ || The target to use if __Focus Tracks Target__ is set to _Custom Target_ |
+| __Focus Offset__ || Used when __Focus Tracking__ is not _None_. Offsets the sharpest point away from the location of
+the focus target. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/TableOfContents.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/TableOfContents.md
new file mode 100644
index 00000000..c229f871
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/TableOfContents.md
@@ -0,0 +1,61 @@
+* [About Cinemachine](index.md)
+ * [Using Cinemachine](CinemachineUsing.md)
+ * [Using Virtual Cameras](CinemachineSetUpVCam.md)
+ * [Setting Virtual Camera properties](CinemachineVirtualCamera.md)
+ * [Scene Handles](handles.md)
+ * [Body properties](CinemachineVirtualCameraBody.md)
+ * [Do Nothing](CinemachineBodyDoNothing.md)
+ * [3rd Person Follow](Cinemachine3rdPersonFollow.md)
+ * [Framing Transposer](CinemachineBodyFramingTransposer.md)
+ * [Hard Lock to Target](CinemachineBodyHardLockTarget.md)
+ * [Orbital Transposer](CinemachineBodyOrbitalTransposer.md)
+ * [Tracked Dolly](CinemachineBodyTrackedDolly.md)
+ * [Transposer](CinemachineBodyTransposer.md)
+ * [Binding Modes](CinemachineBindingModes.md)
+ * [Aim properties](CinemachineVirtualCameraAim.md)
+ * [Composer](CinemachineAimComposer.md)
+ * [Group Composer](CinemachineAimGroupComposer.md)
+ * [Do Nothing](CinemachineAimDoNothing.md)
+ * [POV](CinemachineAimPOV.md)
+ * [Same As Follow Target](CinemachineAimSameAsFollow.md)
+ * [Hard Look At](CinemachineAimHardLook.md)
+ * [Noise properties](CinemachineVirtualCameraNoise.md)
+ * [Working with noise profiles](CinemachineNoiseProfiles.md)
+ * [Blending between Virtual Cameras](CinemachineBlending.md)
+ * [Managing and grouping Virtual Cameras](CinemachineManagerCameras.md)
+ * [Cinemachine Free Look](CinemachineFreeLook.md)
+ * [Cinemachine Mixing Camera](CinemachineMixingCamera.md)
+ * [Cinemachine Blend List Camera](CinemachineBlendListCamera.md)
+ * [Cinemachine Clear Shot](CinemachineClearShot.md)
+ * [Cinemachine State-Driven camera](CinemachineStateDrivenCamera.md)
+ * [Virtual Camera extensions](CinemachineVirtualCameraExtensions.md)
+ * [Extensions for avoiding collisions and evaluating shots](CinemachineColliderConfiner.md)
+ * [Cinemachine Collider](CinemachineCollider.md)
+ * [Cinemachine Confiner](CinemachineConfiner.md)
+ * [Cinemachine Confiner2D](CinemachineConfiner2D.md)
+ * [Follow Zoom extension](CinemachineFollowZoom.md)
+ * [Pixel Perfect extension](CinemachinePixelPerfect.md)
+ * [Post Processing extension](CinemachinePostProcessing.md)
+ * [Volume Settings extension](CinemachineVolumeSettings.md)
+ * [Storyboard extension](CinemachineStoryboard.md)
+ * [3rd Person Aim extension](Cinemachine3rdPersonAim.md)
+ * [Recomposer extension](CinemachineRecomposer.md)
+ * [Saving in Play Mode](CinemachineSavingDuringPlay.md)
+ * [Using dolly paths](CinemachineDolly.md)
+ * [Cinemachine Path](CinemachinePath.md)
+ * [Cinemachine Smooth Path](CinemachineSmoothPath.md)
+ * [Cinemachine Dolly Cart](CinemachineDollyCart.md)
+ * [Multiple Unity cameras](CinemachineMultipleCameras.md)
+ * [Cinemachine External Camera](CinemachineExternalCamera.md)
+ * [Cinemachine Target Group](CinemachineTargetGroup.md)
+ * [Cinemachine Brain](CinemachineBrainProperties.md)
+ * [Cinemachine and Timeline](CinemachineTimeline.md)
+ * [Cinemachine and 2D graphics](Cinemachine2D.md)
+ * [Cinemachine and top-down games](CinemachineTopDown.md)
+ * [Alternative Input Systems](CinemachineAlternativeInput.md)
+ * [Cinemachine Impulse](CinemachineImpulse.md)
+ * [Cinemachine Impulse Sources](CinemachineImpulseSourceOverview.md)
+ * [Cinemachine Collision Impulse Source](CinemachineCollisionImpulseSource.md)
+ * [Cinemachine Impulse Source](CinemachineImpulseSource.md)
+ * [Cinemachine Impulse Listener](CinemachineImpulseListener.md)
+ * [Filtering impulses](CinemachineImpulseFiltering.md)
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachine.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachine.md
new file mode 100644
index 00000000..4db3203d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachine.md
@@ -0,0 +1,27 @@
+# Cinemachine
+
+
+
+Cinemachine is a suite of modules for operating the Unity camera. Cinemachine solves the complex mathematics and logic
+of tracking targets, composing, blending, and cutting between shots. It's designed to significantly reduce the number of
+time-consuming manual manipulations and script revisions that take place during development.
+
+The procedural nature of these modules makes Cinemachine bug-resistant. When you make adjustments—for example, change an
+animation, vehicle speed, terrain, or other GameObjects in your Scene—Cinemachine dynamically adjusts its behavior to
+make the best shot. There is no need, for example, to re-write camera scripts just because a character turns left
+instead of right.
+
+Cinemachine works in real time across all genres including FPS, third person, 2D, side-scroller, top down, and RTS. It
+supports as many shots in your Scene as you need. Its modular system lets you compose sophisticated behaviors.
+
+Cinemachine works well with other Unity tools, acting as a powerful complement to Timeline, animation, and
+post-processing assets. Create your own [extensions](CinemachineVirtualCameraExtensions.md) or integrate it with your
+custom camera scripts.
+
+## Requirements
+
+Cinemachine has no external dependencies. Just install it and start using it.
+
+This version of Cinemachine is compatible with the following versions of the Unity Editor:
+
+* 2018.4.17f1 and later
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachineAPI.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachineAPI.md
new file mode 100644
index 00000000..fef7a036
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/cinemachineAPI.md
@@ -0,0 +1,2195 @@
+### AxisState
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Axis state for defining how to react to player input. The settings here control the responsiveness of the axis to player
+input.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Value** | Single | The current value of the axis. |
+| **m_MaxSpeed** | Single | The maximum speed of this axis in units/second. |
+| **m_AccelTime** | Single | The amount of time in seconds it takes to accelerate to MaxSpeed with the supplied Axis at its maximum value. |
+| **m_DecelTime** | Single | The amount of time in seconds it takes to decelerate the axis to zero if the supplied axis is in a neutral position. |
+| **m_InputAxisName** | String | The name of this axis as specified in Unity Input manager. Setting to an empty string will disable the automatic updating of this axis. |
+| **m_InputAxisValue** | Single | The value of the input axis. A value of 0 means no input. You can drive this directly from a custom input system, or you can set the Axis Name and have the value driven by the internal Input Manager. |
+| **m_InvertInput** | Boolean | If checked, then the raw value of the input axis will be inverted before it is used. |
+| **m_MinValue** | Single | The minimum value for the axis. |
+| **m_MaxValue** | Single | The maximum value for the axis. |
+| **m_Wrap** | Boolean | If checked, then the axis will wrap around at the min/max values, forming a loop. |
+
+#### Methods
+
+``Void Validate()``
+
+Call from OnValidate: Make sure the fields are sensible.
+
+``Boolean Update(Single deltaTime)``
+
+Updates the state of this axis based on the axis defined by AxisState.m_AxisName.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------|------------------------|
+| **deltaTime** | Single | Delta time in seconds. |
+
+_Returns:_ Returns true if this axis' input was non-zero this Update, false otherwise.
+
+### AxisState.Recentering
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Helper for automatic axis recentering.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-----------------------|---------|-------------------------------------------------------------------------------------------------------------|
+| **m_enabled** | Boolean | If checked, will enable automatic recentering of the axis. If unchecked, recenting is disabled. |
+| **m_WaitTime** | Single | If no user input has been detected on the axis, the axis will wait this long in seconds before recentering. |
+| **m_RecenteringTime** | Single | Maximum angular speed of recentering. Will accelerate into and decelerate out of this. |
+
+#### Methods
+
+``Void Validate()``
+
+Call this from OnValidate().
+
+``Void CancelRecentering()``
+
+Cancel any recentering in progress.
+
+``Void DoRecentering(AxisState& axis, Single deltaTime, Single recenterTarget)``
+
+Bring the axis back to the centered state.
+
+| _Param_ | _Type_ | _Description_ |
+|--------------------|------------|---------------|
+| **axis** | AxisState& | |
+| **deltaTime** | Single | |
+| **recenterTarget** | Single | |
+
+### CinemachineBasicMultiChannelPerlin
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+As a part of the Cinemachine Pipeline implementing the Noise stage, this component adds Perlin Noise to the Camera
+state, in the Correction channel of the CameraState.
+
+The noise is created by using a predefined noise profile asset. This defines the shape of the noise over time. You can
+scale this in amplitude or in time, to produce a large family of different noises using the same profile.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if the component is valid, i.e. it has a noise definition and is enabled. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Noise stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_NoiseProfile** | NoiseSettings | The asset containing the Noise Profile. Define the frequencies and amplitudes there to make a characteristic noise profile. Make your own or just use one of the many presets. |
+| **m_AmplitudeGain** | Single | Gain to apply to the amplitudes defined in the NoiseSettings asset. 1 is normal. Setting this to 0 completely mutes the noise. |
+| **m_FrequencyGain** | Single | Scale factor to apply to the frequencies defined in the NoiseSettings asset. 1 is normal. Larger magnitudes will make the noise shake more rapidly. |
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies noise to the Correction channel of the CameraState if the delta time is greater than 0. Otherwise, does nothing.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------------------------------------------------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | How much to advance the perlin noise generator. Noise is only applied if this value is greater than or equal to 0. |
+
+### CinemachineBlendDefinition
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Definition of a Camera blend. This struct holds the information necessary to generate a suitable AnimationCurve for a
+Cinemachine Blend.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|----------------|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **BlendCurve** | AnimationCurve | _[Get]_ A normalized AnimationCurve specifying the interpolation curve for this camera blend. Y-axis values must be in range [0,1] (internally clamped within Blender) and time must be in range of [0, 1]. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Style** | Style | Shape of the blend curve.
_Possible Values:_
- **Cut**: Zero-length blend.
- **EaseInOut**: S-shaped curve, giving a gentle and smooth transition.
- **EaseIn**: Linear out of the outgoing shot, and easy into the incoming.
- **EaseOut**: Easy out of the outgoing shot, and linear into the incoming.
- **HardIn**: Easy out of the outgoing, and hard into the incoming.
- **HardOut**: Hard out of the outgoing, and easy into the incoming.
- **Linear**: Linear blend. Mechanical-looking.
- **Custom**: Custom blend curve.
|
+| **m_Time** | Single | Duration of the blend, in seconds. |
+| **m_CustomCurve** | AnimationCurve | A user-defined AnimationCurve, used only if style is Custom. Curve MUST be normalized, i.e. time range [0...1], value range [0...1]. |
+
+### CinemachineBlenderSettings
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ ScriptableObject
+
+Asset that defines the rules for blending between Virtual Cameras.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------|---------------|-----------------------------------------------------------------------------|
+| **m_CustomBlends** | CustomBlend[] | The array containing explicitly defined blends between two Virtual Cameras. |
+
+#### Methods
+
+``AnimationCurve GetBlendCurveForVirtualCameras(String fromCameraName, String toCameraName, AnimationCurve defaultCurve)``
+
+Attempts to find a blend curve which matches the to and from cameras as specified. If no match is found, the function
+returns either the default blend for this Blender or NULL depending on the state of returnDefaultOnNoMatch.
+
+| _Param_ | _Type_ | _Description_ |
+|--------------------|----------------|--------------------------------------------------|
+| **fromCameraName** | String | The game object name of the from camera. |
+| **toCameraName** | String | The game object name of the to camera. |
+| **defaultCurve** | AnimationCurve | Curve to return if no curve found. Can be NULL. |
+
+### CinemachineBlenderSettings.CustomBlend
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Container specifying how two specific Cinemachine Virtual Cameras blend together.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|----------------------------|---------------------------------|
+| **m_From** | String | When blending from this camera. |
+| **m_To** | String | When blending to this camera. |
+| **m_Blend** | CinemachineBlendDefinition | Blend curve definition. |
+
+### CinemachineBlendListCamera
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+This is a virtual camera "manager" that owns and manages a collection of child Virtual Cameras. When the camera goes
+live, these child vcams are enabled, one after another, holding each camera for a designated time. Blends between
+cameras are specified. The last camera is held indefinitely.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| **Description** | String | _[Get]_ Gets a brief debug description of this virtual camera, for use when displaying debug info. |
+| **LiveChild** | ICinemachineCamera | _[Get,Set]_ Get the current "best" child virtual camera, that would be chosen if the State Driven Camera were active. |
+| **LiveChildOrSelf** | ICinemachineCamera | _[Get]_ Return the live child. |
+| **State** | CameraState | _[Get]_ The State of the current live child. |
+| **LookAt** | Transform | _[Get,Set]_ Get the current LookAt target. Returns parent's LookAt if parent is non-null and no specific LookAt defined for this camera. |
+| **Follow** | Transform | _[Get,Set]_ Get the current Follow target. Returns parent's Follow if parent is non-null and no specific Follow defined for this camera. |
+| **ChildCameras** | CinemachineVirtualCameraBase[] | _[Get]_ The list of child cameras. These are just the immediate children in the hierarchy. |
+| **IsBlending** | Boolean | _[Get]_ Is there a blend in progress? |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | Default object for the camera children to look at (the aim target), if not specified in a child camera. May be empty if all of the children define targets of their own. |
+| **m_Follow** | Transform | Default object for the camera children wants to move with (the body target), if not specified in a child camera. May be empty if all of the children define targets of their own. |
+| **m_ShowDebugText** | Boolean | When enabled, the current child camera and blend will be indicated in the game window, for debugging. |
+| **m_EnableAllChildCameras** | Boolean | Force all child cameras to be enabled. This is useful if animating them in Timeline, but consumes extra resources. |
+| **m_ChildCameras** | CinemachineVirtualCameraBase[] | Internal API for the editor. Do not use this field. |
+| **m_Instructions** | Instruction[] | The set of instructions for enabling child cameras. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``virtual Boolean IsLiveChild(ICinemachineCamera vcam)``
+
+Check whether the vcam a live child of this camera.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|------------------------------|
+| **vcam** | ICinemachineCamera | The Virtual Camera to check. |
+
+_Returns:_ True if the vcam is currently actively influencing the state of this vcam.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void OnTransitionFromCamera(ICinemachineCamera fromCam, Vector3 worldUp, Single deltaTime)``
+
+Notification that this virtual camera is going live.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------------|------------------------------------------------------------------------|
+| **fromCam** | ICinemachineCamera | The camera being deactivated. May be null. |
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than or equal to 0). |
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Called by CinemachineCore at designated update time so the vcam can position itself and track its targets. This
+implementation updates all the children, chooses the best one, and implements any required blending.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|------------------------------------------------------------------------|
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than or equal to 0). |
+
+``protected virtual Void OnEnable()``
+
+Makes sure the internal child cache is up to date.
+
+``Void OnTransformChildrenChanged()``
+
+Makes sure the internal child cache is up to date.
+
+``protected virtual Void OnGUI()``
+
+Displays the current active camera on the game screen, if requested.
+
+``Void ValidateInstructions()``
+
+Internal API for the inspector editor.
+
+### CinemachineBrain
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ MonoBehaviour
+
+CinemachineBrain is the link between the Unity Camera and the Cinemachine Virtual Cameras in the scene. It monitors the
+priority stack to choose the current Virtual Camera, and blend with another if necessary. Finally and most importantly,
+it applies the Virtual Camera state to the attached Unity Camera.
+
+The CinemachineBrain is also the place where rules for blending between virtual cameras are defined. Camera blending is
+an interpolation over time of one virtual camera position and state to another. If you think of virtual cameras as
+cameramen, then blending is a little like one cameraman smoothly passing the camera to another cameraman. You can
+specify the time over which to blend, as well as the blend curve shape. Note that a camera cut is just a zero-time
+blend.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-----------------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
+| **OutputCamera** | Camera | _[Get]_ Get the Unity Camera that is attached to this GameObject. This is the camera that will be controlled by the brain. |
+| **PostProcessingComponent** | Component | _[Get,Set]_ Internal support for opaque post-processing module. |
+| **SoloCamera** | ICinemachineCamera | _(static)_ _[Get,Set]_ API for the Unity Editor. Show this camera no matter what. This is static, and so affects all Cinemachine brains. |
+| **DefaultWorldUp** | Vector3 | _[Get]_ Get the default world up for the virtual cameras. |
+| **IsBlending** | Boolean | _[Get]_ Is there a blend in progress? |
+| **ActiveBlend** | CinemachineBlend | _[Get]_ Get the current blend in progress. Returns null if none. |
+| **ActiveVirtualCamera** | ICinemachineCamera | _[Get]_ Get the current active virtual camera. |
+| **CurrentCameraState** | CameraState | _[Get]_ The current state applied to the unity camera (may be the result of a blend). |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------------|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_ShowDebugText** | Boolean | When enabled, the current camera and blend will be indicated in the game window, for debugging. |
+| **m_ShowCameraFrustum** | Boolean | When enabled, the camera's frustum will be shown at all times in the scene view. |
+| **m_IgnoreTimeScale** | Boolean | When enabled, the cameras will always respond in real-time to user input and damping, even if the game is running in slow motion. |
+| **m_WorldUpOverride** | Transform | If set, this object's Y axis will define the worldspace Up vector for all the virtual cameras. This is useful for instance in top-down game environments. If not set, Up is worldspace Y. Setting this appropriately is important, because Virtual Cameras don't like looking straight up or straight down. |
+| **m_UpdateMethod** | UpdateMethod | Use FixedUpdate if all your targets are animated during FixedUpdate (e.g. RigidBodies), LateUpdate if all your targets are animated during the normal Update loop, and SmartUpdate if you want Cinemachine to do the appropriate thing on a per-target basis. SmartUpdate is the recommended setting.
_Possible Values:_
- **FixedUpdate**: Virtual cameras are updated in sync with the Physics module, in FixedUpdate.
- **LateUpdate**: Virtual cameras are updated in MonoBehaviour LateUpdate.
- **SmartUpdate**: Virtual cameras are updated according to how the target is updated.
|
+| **m_DefaultBlend** | CinemachineBlendDefinition | The blend that is used in cases where you haven't explicitly defined a blend between two Virtual Cameras. |
+| **m_CustomBlends** | CinemachineBlenderSettings | This is the asset that contains custom settings for blends between specific virtual cameras in your scene. |
+| **m_CameraCutEvent** | BrainEvent | This event will fire whenever a virtual camera goes live and there is no blend. |
+| **m_CameraActivatedEvent** | VcamEvent | This event will fire whenever a virtual camera goes live. If a blend is involved, then the event will fire on the first frame of the blend. |
+
+#### Methods
+
+``static Color GetSoloGUIColor()``
+
+API for the Unity Editor.
+
+_Returns:_ Color used to indicate that a camera is in Solo mode.
+``Boolean IsLive(ICinemachineCamera vcam)``
+
+True if the ICinemachineCamera the current active camera, or part of a current blend, either directly or indirectly
+because its parents are live.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|----------------------------------------|
+| **vcam** | ICinemachineCamera | The camera to test whether it is live. |
+
+_Returns:_ True if the camera is live (directly or indirectly) or part of a blend in progress.
+
+### CinemachineClearShot
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+Cinemachine ClearShot is a "manager camera" that owns and manages a set of Virtual Camera gameObject children. When
+Live, the ClearShot will check the children, and choose the one with the best quality shot and make it Live.
+
+This can be a very powerful tool. If the child cameras have CinemachineCollider extensions, they will analyze the scene
+for target obstructions, optimal target distance, and other items, and report their assessment of shot quality back to
+the ClearShot parent, who will then choose the best one. You can use this to set up complex multi-camera coverage of a
+scene, and be assured that a clear shot of the target will always be available.
+
+If multiple child cameras have the same shot quality, the one with the highest priority will be chosen.
+
+You can also define custom blends between the ClearShot children.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| **Description** | String | _[Get]_ Gets a brief debug description of this virtual camera, for use when displaying debug info. |
+| **LiveChild** | ICinemachineCamera | _[Get,Set]_ Get the current "best" child virtual camera, that would be chosen if the ClearShot camera were active. |
+| **State** | CameraState | _[Get]_ The CameraState of the currently live child. |
+| **LiveChildOrSelf** | ICinemachineCamera | _[Get]_ Return the live child. |
+| **LookAt** | Transform | _[Get,Set]_ Get the current LookAt target. Returns parent's LookAt if parent is non-null and no specific LookAt defined for this camera. |
+| **Follow** | Transform | _[Get,Set]_ Get the current Follow target. Returns parent's Follow if parent is non-null and no specific Follow defined for this camera. |
+| **IsBlending** | Boolean | _[Get]_ Is there a blend in progress? |
+| **ChildCameras** | CinemachineVirtualCameraBase[] | _[Get]_ The list of child cameras. These are just the immediate children in the hierarchy. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | Default object for the camera children to look at (the aim target), if not specified in a child camera. May be empty if all children specify targets of their own. |
+| **m_Follow** | Transform | Default object for the camera children wants to move with (the body target), if not specified in a child camera. May be empty if all children specify targets of their own. |
+| **m_ShowDebugText** | Boolean | When enabled, the current child camera and blend will be indicated in the game window, for debugging. |
+| **m_ChildCameras** | CinemachineVirtualCameraBase[] | Internal API for the editor. Do not use this filed. |
+| **m_ActivateAfter** | Single | Wait this many seconds before activating a new child camera. |
+| **m_MinDuration** | Single | An active camera must be active for at least this many seconds. |
+| **m_RandomizeChoice** | Boolean | If checked, camera choice will be randomized if multiple cameras are equally desirable. Otherwise, child list order and child camera priority will be used. |
+| **m_DefaultBlend** | CinemachineBlendDefinition | The blend which is used if you don't explicitly define a blend between two Virtual Cameras. |
+| **m_CustomBlends** | CinemachineBlenderSettings | This is the asset which contains custom settings for specific blends. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``virtual Boolean IsLiveChild(ICinemachineCamera vcam)``
+
+Check whether the vcam a live child of this camera.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|------------------------------|
+| **vcam** | ICinemachineCamera | The Virtual Camera to check. |
+
+_Returns:_ True if the vcam is currently actively influencing the state of this vcam.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Called by CinemachineCore at designated update time so the vcam can position itself and track its
+targets. This implementation updates all the children, chooses the best one, and implements any required blending.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|------------------------------------------------------------|
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than 0). |
+
+``protected virtual Void OnEnable()``
+
+Makes sure the internal child cache is up to date.
+
+``Void OnTransformChildrenChanged()``
+
+Makes sure the internal child cache is up to date.
+
+``protected virtual Void OnGUI()``
+
+Displays the current active camera on the game screen, if requested.
+
+``Void ResetRandomization()``
+
+If RandomizeChoice is enabled, call this to re-randomize the children next frame. This is useful if you want to freshen
+up the shot.
+
+``virtual Void OnTransitionFromCamera(ICinemachineCamera fromCam, Vector3 worldUp, Single deltaTime)``
+
+Notification that this virtual camera is going live. This implementation resets the child randomization.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------------|------------------------------------------------------------------------|
+| **fromCam** | ICinemachineCamera | The camera being deactivated. May be null. |
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than or equal to 0). |
+
+### CinemachineCollider
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineExtension
+
+An add-on module for Cinemachine Virtual Camera that post-processes the final position of the virtual camera. Based on
+the supplied settings, the Collider will attempt to preserve the line of sight with the LookAt target of the virtual
+camera by moving away from objects that will obstruct the view.
+
+Additionally, the Collider can be used to assess the shot quality and report this as a field in the camera State.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|----------------|--------|----------------------------------------------------------------|
+| **DebugPaths** | List`1 | _[Get]_ Inspector API for debugging collision resolution path. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_CollideAgainst** | LayerMask | The Unity layer mask against which the collider will raycast. |
+| **m_IgnoreTag** | String | Obstacles with this tag will be ignored. It is a good idea to set this field to the target's tag. |
+| **m_MinimumDistanceFromTarget** | Single | Obstacles closer to the target than this will be ignored. |
+| **m_AvoidObstacles** | Boolean | When enabled, will attempt to resolve situations where the line of sight to the target is blocked by an obstacle. |
+| **m_DistanceLimit** | Single | The maximum raycast distance when checking if the line of sight to this camera's target is clear. If the setting is 0 or less, the current actual distance to target will be used. |
+| **m_CameraRadius** | Single | Camera will try to maintain this distance from any obstacle. Try to keep this value small. Increase it if you are seeing inside obstacles due to a large FOV on the camera. |
+| **m_Strategy** | ResolutionStrategy | The way in which the Collider will attempt to preserve sight of the target.
_Possible Values:_
- **PullCameraForward**
- **PreserveCameraHeight**
- **PreserveCameraDistance**
|
+| **m_MaximumEffort** | Int32 | Upper limit on how many obstacle hits to process. Higher numbers may impact performance. In most environments, 4 is enough. |
+| **m_Damping** | Single | The gradualness of collision resolution. Higher numbers will move the camera more gradually away from obstructions. |
+| **m_OptimalTargetDistance** | Single | If greater than zero, a higher score will be given to shots when the target is closer to this distance. Set this to zero to disable this feature. |
+
+#### Methods
+
+``Boolean IsTargetObscured(ICinemachineCamera vcam)``
+
+See whether an object is blocking the camera's view of the target.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **vcam** | ICinemachineCamera | The virtual camera in question. This might be different from the virtual camera that owns the collider, in the event that the camera has children. |
+
+_Returns:_ True if something is blocking the view.
+``Boolean CameraWasDisplaced(CinemachineVirtualCameraBase vcam)``
+
+See whether the virtual camera has been moved by the collider.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **vcam** | CinemachineVirtualCameraBase | The virtual camera in question. This might be different from the virtual camera that owns the collider, in the event that the camera has children. |
+
+_Returns:_ True if the virtual camera has been displaced due to collision or target obstruction.
+``protected virtual Void OnDestroy()``
+
+Cleanup.
+
+``protected virtual Void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, Stage stage, CameraState& state, Single deltaTime)``
+
+Callback to to the collision resolution and shot evaluation.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|------------------------------|---------------|
+| **vcam** | CinemachineVirtualCameraBase | |
+| **stage** | Stage | |
+| **state** | CameraState& | |
+| **deltaTime** | Single | |
+
+### CinemachineComposer
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to aim the camera at the vcam's
+LookAt target object, with configurable offsets, damping, and composition rules.
+
+The composer does not change the camera's position. It will only pan and tilt the camera where it is, in order to get
+the desired framing. To move the camera, you have to use the virtual camera's Body section.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a LookAt defined. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Aim stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+| **TrackedPoint** | Vector3 | _[Get]_ Internal API for inspector. |
+| **SoftGuideRect** | Rect | _[Get,Set]_ Internal API for the inspector editor. |
+| **HardGuideRect** | Rect | _[Get,Set]_ Internal API for the inspector editor. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **OnGUICallback** | Action | Used by the Inspector Editor to display on-screen guides. |
+| **m_TrackedObjectOffset** | Vector3 | Target offset from the target object's center in target-local space. Use this to fine-tune the tracking target position when the desired area is not the tracked object's center. |
+| **m_LookaheadTime** | Single | This setting will instruct the composer to adjust its target offset based on the motion of the target. The composer will look at a point where it estimates the target will be this many seconds into the future. Note that this setting is sensitive to noisy animation, and can amplify the noise, resulting in undesirable camera jitter. If the camera jitters unacceptably when the target is in motion, turn down this setting, or animate the target more smoothly. |
+| **m_LookaheadSmoothing** | Single | Controls the smoothness of the lookahead algorithm. Larger values smooth out jittery predictions and also increase prediction lag. |
+| **m_LookaheadIgnoreY** | Boolean | If checked, movement along the Y axis will be ignored for lookahead calculations. |
+| **m_HorizontalDamping** | Single | How aggressively the camera tries to follow the target in the screen-horizontal direction. Small numbers are more responsive, rapidly orienting the camera to keep the target in the dead zone. Larger numbers give a more heavy slowly responding camera. Using different vertical and horizontal settings can yield a wide range of camera behaviors. |
+| **m_VerticalDamping** | Single | How aggressively the camera tries to follow the target in the screen-vertical direction. Small numbers are more responsive, rapidly orienting the camera to keep the target in the dead zone. Larger numbers give a more heavy slowly responding camera. Using different vertical and horizontal settings can yield a wide range of camera behaviors. |
+| **m_ScreenX** | Single | Horizontal screen position for target. The camera will rotate to position the tracked object here. |
+| **m_ScreenY** | Single | Vertical screen position for target, The camera will rotate to position the tracked object here. |
+| **m_DeadZoneWidth** | Single | Camera will not rotate horizontally if the target is within this range of the position. |
+| **m_DeadZoneHeight** | Single | Camera will not rotate vertically if the target is within this range of the position. |
+| **m_SoftZoneWidth** | Single | When target is within this region, camera will gradually rotate horizontally to re-align towards the desired position, depending on the damping speed. |
+| **m_SoftZoneHeight** | Single | When target is within this region, camera will gradually rotate vertically to re-align towards the desired position, depending on the damping speed. |
+| **m_BiasX** | Single | A non-zero bias will move the target position horizontally away from the center of the soft zone. |
+| **m_BiasY** | Single | A non-zero bias will move the target position vertically away from the center of the soft zone. |
+
+#### Methods
+
+``protected virtual Vector3 GetLookAtPointAndSetTrackedPoint(Vector3 lookAt)``
+
+Apply the target offsets to the target location. Also set the TrackedPoint property, taking lookahead into account.
+
+| _Param_ | _Type_ | _Description_ |
+|------------|---------|----------------------------|
+| **lookAt** | Vector3 | The unoffset LookAt point. |
+
+_Returns:_ The LookAt point with the offset applied.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the us that a target got warped, so that we can update its internal state to make the camera
+also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void PrePipelineMutateCameraState(CameraState& curState)``
+
+| _Param_ | _Type_ | _Description_ |
+|--------------|--------------|---------------|
+| **curState** | CameraState& | |
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies the composer rules and orients the camera accordingly.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------------------------------------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for calculating damping. If less than zero, then target will snap to the center of the dead zone. |
+
+### CinemachineConfiner
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineExtension
+
+An add-on module for Cinemachine Virtual Camera that post-processes the final position of the virtual camera. It will
+confine the virtual camera's position to the volume specified in the Bounding Volume field.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|--------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ Check if the bounding volume is defined. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------------|------------|---------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_ConfineMode** | Mode | The confiner can operate using a 2D bounding shape or a 3D bounding volume.
_Possible Values:_
- **Confine2D**
- **Confine3D**
|
+| **m_BoundingVolume** | Collider | The volume within which the camera is to be contained. |
+| **m_BoundingShape2D** | Collider2D | The 2D shape within which the camera is to be contained. |
+| **m_ConfineScreenEdges** | Boolean | If camera is orthographic, screen edges will be confined to the volume. If not checked, then only the camera center will be confined. |
+| **m_Damping** | Single | How gradually to return the camera to the bounding volume if it goes beyond the borders. Higher numbers are more gradual. |
+
+#### Methods
+
+``Boolean CameraWasDisplaced(CinemachineVirtualCameraBase vcam)``
+
+See whether the virtual camera has been moved by the confiner.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **vcam** | CinemachineVirtualCameraBase | The virtual camera in question. This might be different from the virtual camera that owns the confiner, in the event that the camera has children. |
+
+_Returns:_ True if the virtual camera has been repositioned.
+``protected virtual Void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, Stage stage, CameraState& state, Single deltaTime)``
+
+Callback to to the camera confining.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|------------------------------|---------------|
+| **vcam** | CinemachineVirtualCameraBase | |
+| **stage** | Stage | |
+| **state** | CameraState& | |
+| **deltaTime** | Single | |
+
+``Void InvalidatePathCache()``
+
+Call this if the bounding shape's points change at runtime.
+
+### CinemachineDollyCart
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ MonoBehaviour
+
+This is a very simple behaviour that constrains its transform to a CinemachinePath. It can be used to animate any
+objects along a path, or as a Follow target for Cinemachine Virtual Cameras.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Path** | CinemachinePathBase | The path to follow. |
+| **m_UpdateMethod** | UpdateMethod | When to move the cart, if Velocity is non-zero.
_Possible Values:_
- **Update**
- **FixedUpdate**
|
+| **m_PositionUnits** | PositionUnits | How to interpret the Path Position. If set to Path Units, values are as follows: 0 represents the first waypoint on the path, 1 is the second, and so on. Values in-between are points on the path in between the waypoints. If set to Distance, then Path Position represents distance along the path.
_Possible Values:_
- **PathUnits**
- **Distance**
- **Normalized**
|
+| **m_Speed** | Single | Move the cart with this speed along the path. The value is interpreted according to the Position Units setting. |
+| **m_Position** | Single | The position along the path at which the cart will be placed. This can be animated directly or, if the velocity is non-zero, will be updated automatically. The value is interpreted according to the Position Units setting. |
+
+### CinemachineExternalCamera
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+This component will expose a non-cinemachine camera to the cinemachine system, allowing it to participate in blends.
+Just add it as a component alongside an existing Unity Camera component.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|------------|-------------|-------------------------------------------------------------------------------------|
+| **State** | CameraState | _[Get]_ Get the CameraState, as we are able to construct one from the Unity Camera. |
+| **LookAt** | Transform | _[Get,Set]_ The object that the camera is looking at. |
+| **Follow** | Transform | _[Get,Set]_ This vcam defines no targets. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | The object that the camera is looking at. Setting this will improve the quality of the blends to and from this camera. |
+| **m_PositionBlending** | PositionBlendMethod | Hint for blending positions to and from this virtual camera.
_Possible Values:_
- **Linear**
- **Spherical**
- **Cylindrical**
|
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Do not call this method.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|---------------|
+| **worldUp** | Vector3 | |
+| **deltaTime** | Single | |
+
+### CinemachineFollowZoom
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineExtension
+
+An add-on module for Cinemachine Virtual Camera that adjusts the FOV of the lens to keep the target object at a constant
+size on the screen, regardless of camera and target position.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Width** | Single | The shot width to maintain, in world units, at target distance. |
+| **m_Damping** | Single | Increase this value to soften the aggressiveness of the follow-zoom. Small numbers are more responsive, larger numbers give a more heavy slowly responding camera. |
+| **m_MinFOV** | Single | Lower limit for the FOV that this behaviour will generate. |
+| **m_MaxFOV** | Single | Upper limit for the FOV that this behaviour will generate. |
+
+#### Methods
+
+``protected virtual Void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, Stage stage, CameraState& state, Single deltaTime)``
+
+Callback to preform the zoom adjustment.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|------------------------------|---------------|
+| **vcam** | CinemachineVirtualCameraBase | |
+| **stage** | Stage | |
+| **state** | CameraState& | |
+| **deltaTime** | Single | |
+
+### CinemachineFramingTransposer
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a Cinemachine Component in the Body section of the component pipeline. Its job is to position the camera in a
+fixed screen-space relationship to the vcam's Follow target object, with offsets and damping.
+
+The camera will be first moved along the camera Z axis until the Follow target is at the desired distance from the
+camera's X-Y plane. The camera will then be moved in its XY plane until the Follow target is at the desired point on the
+camera's screen.
+
+The FramingTansposer will only change the camera's position in space. It will not re-orient or otherwise aim the camera.
+
+For this component to work properly, the vcam's LookAt target must be null. The Follow target will define what the
+camera is looking at.
+
+If the Follow target is a CinemachineTargetGroup, then additional controls will be available to dynamically adjust the
+camera's view in order to frame the entire group.
+
+Although this component was designed for orthographic cameras, it works equally well with perspective cameras and can be
+used in 3D environments.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|------------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **SoftGuideRect** | Rect | _[Get,Set]_ Internal API for the inspector editor. |
+| **HardGuideRect** | Rect | _[Get,Set]_ Internal API for the inspector editor. |
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a valid Follow target. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Body stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+| **TrackedPoint** | Vector3 | _[Get]_ Internal API for inspector. |
+| **m_LastBounds** | Bounds | _[Get]_ For editor visulaization of the calculated bounding box of the group. |
+| **m_lastBoundsMatrix** | Matrix4x4 | _[Get]_ For editor visualization of the calculated bounding box of the group. |
+| **TargetGroup** | CinemachineTargetGroup | _[Get]_ Get Follow target as CinemachineTargetGroup, or null if target is not a group. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------------|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **OnGUICallback** | Action | Used by the Inspector Editor to display on-screen guides. |
+| **m_LookaheadTime** | Single | This setting will instruct the composer to adjust its target offset based on the motion of the target. The composer will look at a point where it estimates the target will be this many seconds into the future. Note that this setting is sensitive to noisy animation, and can amplify the noise, resulting in undesirable camera jitter. If the camera jitters unacceptably when the target is in motion, turn down this setting, or animate the target more smoothly. |
+| **m_LookaheadSmoothing** | Single | Controls the smoothness of the lookahead algorithm. Larger values smooth out jittery predictions and also increase prediction lag. |
+| **m_LookaheadIgnoreY** | Boolean | If checked, movement along the Y axis will be ignored for lookahead calculations. |
+| **m_XDamping** | Single | How aggressively the camera tries to maintain the offset in the X-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's x-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_YDamping** | Single | How aggressively the camera tries to maintain the offset in the Y-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's y-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_ZDamping** | Single | How aggressively the camera tries to maintain the offset in the Z-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's z-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_ScreenX** | Single | Horizontal screen position for target. The camera will move to position the tracked object here. |
+| **m_ScreenY** | Single | Vertical screen position for target, The camera will move to position the tracked object here. |
+| **m_CameraDistance** | Single | The distance along the camera axis that will be maintained from the Follow target. |
+| **m_DeadZoneWidth** | Single | Camera will not move horizontally if the target is within this range of the position. |
+| **m_DeadZoneHeight** | Single | Camera will not move vertically if the target is within this range of the position. |
+| **m_DeadZoneDepth** | Single | The camera will not move along its z-axis if the Follow target is within this distance of the specified camera distance. |
+| **m_UnlimitedSoftZone** | Boolean | If checked, then soft zone will be unlimited in size. |
+| **m_SoftZoneWidth** | Single | When target is within this region, camera will gradually move horizontally to re-align towards the desired position, depending on the damping speed. |
+| **m_SoftZoneHeight** | Single | When target is within this region, camera will gradually move vertically to re-align towards the desired position, depending on the damping speed. |
+| **m_BiasX** | Single | A non-zero bias will move the target position horizontally away from the center of the soft zone. |
+| **m_BiasY** | Single | A non-zero bias will move the target position vertically away from the center of the soft zone. |
+| **m_GroupFramingMode** | FramingMode | What screen dimensions to consider when framing. Can be Horizontal, Vertical, or both.
_Possible Values:_
- **Horizontal**: Consider only the horizontal dimension. Vertical framing is ignored.
- **Vertical**: Consider only the vertical dimension. Horizontal framing is ignored.
- **HorizontalAndVertical**: The larger of the horizontal and vertical dimensions will dominate, to get the best fit.
- **None**: Don't do any framing adjustment.
|
+| **m_AdjustmentMode** | AdjustmentMode | How to adjust the camera to get the desired framing. You can zoom, dolly in/out, or do both.
_Possible Values:_
- **ZoomOnly**
- **DollyOnly**
- **DollyThenZoom**
|
+| **m_GroupFramingSize** | Single | The bounding box of the targets should occupy this amount of the screen space. 1 means fill the whole screen. 0.5 means fill half the screen, etc. |
+| **m_MaxDollyIn** | Single | The maximum distance toward the target that this behaviour is allowed to move the camera. |
+| **m_MaxDollyOut** | Single | The maximum distance away the target that this behaviour is allowed to move the camera. |
+| **m_MinimumDistance** | Single | Set this to limit how close to the target the camera can get. |
+| **m_MaximumDistance** | Single | Set this to limit how far from the target the camera can get. |
+| **m_MinimumFOV** | Single | If adjusting FOV, will not set the FOV lower than this. |
+| **m_MaximumFOV** | Single | If adjusting FOV, will not set the FOV higher than this. |
+| **m_MinimumOrthoSize** | Single | If adjusting Orthographic Size, will not set it lower than this. |
+| **m_MaximumOrthoSize** | Single | If adjusting Orthographic Size, will not set it higher than this. |
+
+#### Methods
+
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the us that a target got warped, so that we can update its internal state to make the camera
+also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Positions the virtual camera according to the transposer rules.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|--------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for damping. If less than 0, no damping is done. |
+
+### CinemachineFreeLook
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+A Cinemachine Camera geared towards a 3rd person camera experience. The camera orbits around its subject with three
+separate camera rigs defining rings around the target. Each rig has its own radius, height offset, composer, and lens
+settings. Depending on the camera's position along the spline connecting these three rigs, these settings are
+interpolated to give the final camera position and state.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| **RigNames** | String[] | _(static)_ _[Get]_ Names of the 3 child rigs. |
+| **State** | CameraState | _[Get]_ The camera state, which will be a blend of the child rig states. |
+| **LookAt** | Transform | _[Get,Set]_ Get the current LookAt target. Returns parent's LookAt if parent is non-null and no specific LookAt defined for this camera. |
+| **Follow** | Transform | _[Get,Set]_ Get the current Follow target. Returns parent's Follow if parent is non-null and no specific Follow defined for this camera. |
+| **LiveChildOrSelf** | ICinemachineCamera | _[Get]_ Returns the rig with the greatest weight. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | Object for the camera children to look at (the aim target). |
+| **m_Follow** | Transform | Object for the camera children wants to move with (the body target). |
+| **m_PositionBlending** | PositionBlendMethod | Hint for blending positions to and from this virtual camera.
_Possible Values:_
- **Linear**
- **Spherical**
- **Cylindrical**
|
+| **m_CommonLens** | Boolean | If enabled, this lens setting will apply to all three child rigs, otherwise the child rig lens settings will be used. |
+| **m_Lens** | LensSettings | Specifies the lens properties of this Virtual Camera. This generally mirrors the Unity Camera's lens settings, and will be used to drive the Unity camera when the vcam is active. |
+| **m_YAxis** | AxisState | The Vertical axis. Value is 0..1. Chooses how to blend the child rigs. |
+| **m_YAxisRecentering** | Recentering | Controls how automatic recentering of the Y axis is accomplished. |
+| **m_XAxis** | AxisState | The Horizontal axis. Value is -180...180. This is passed on to the rigs' OrbitalTransposer component. |
+| **m_Heading** | Heading | The definition of Forward. Camera will follow behind. |
+| **m_RecenterToTargetHeading** | Recentering | Controls how automatic recentering of the X axis is accomplished. |
+| **m_BindingMode** | BindingMode | The coordinate space to use when interpreting the offset from the target. This is also used to set the camera's Up vector, which will be maintained when aiming the camera.
_Possible Values:_
- **LockToTargetOnAssign**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame at the moment when the virtual camera was enabled, or when the target was assigned.
- **LockToTargetWithWorldUp**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the tilt and roll zeroed out.
- **LockToTargetNoRoll**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the roll zeroed out.
- **LockToTarget**: Camera will be bound to the Follow target using the target's local frame.
- **WorldSpace**: Camera will be bound to the Follow target using a world space offset.
- **SimpleFollowWithWorldUp**: Offsets will be calculated relative to the target, using Camera-local axes.
|
+| **m_SplineCurvature** | Single | Controls how taut is the line that connects the rigs' orbits, which determines final placement on the Y axis. |
+| **m_Orbits** | Orbit[] | The radius and height of the three orbiting rigs. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``protected virtual Void OnValidate()``
+
+Enforce bounds for fields, when changed in inspector.
+
+``CinemachineVirtualCamera GetRig(Int32 i)``
+
+Get a child rig.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------|
+| **i** | Int32 | Rig index. Can be 0, 1, or 2. |
+
+_Returns:_ The rig, or null if index is bad.
+``protected virtual Void OnEnable()``
+
+Updates the child rig cache.
+
+``protected virtual Void OnDestroy()``
+
+Makes sure that the child rigs get destroyed in an undo-firndly manner. Invalidates the rig cache.
+
+``virtual Boolean IsLiveChild(ICinemachineCamera vcam)``
+
+Check whether the vcam a live child of this camera. Returns true if the child is currently contributing actively to the
+camera state.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|------------------------------|
+| **vcam** | ICinemachineCamera | The Virtual Camera to check. |
+
+_Returns:_ True if the vcam is currently actively influencing the state of this vcam.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Called by CinemachineCore at designated update time so the vcam can position itself and track its
+targets. All 3 child rigs are updated, and a blend calculated, depending on the value of the Y axis.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|------------------------------------------------------------|
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than 0). |
+
+``virtual Void OnTransitionFromCamera(ICinemachineCamera fromCam, Vector3 worldUp, Single deltaTime)``
+
+If we are transitioning from another FreeLook, grab the axis values from it.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------------|------------------------------------------------------------------------|
+| **fromCam** | ICinemachineCamera | The camera being deactivated. May be null. |
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than or equal to 0). |
+
+``Vector3 GetLocalPositionForCameraFromInput(Single t)``
+
+Returns the local position of the camera along the spline used to connect the three camera rigs. Does not take into
+account the current heading of the camera (or its target).
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|-----------------------------------------------------------------------------------|
+| **t** | Single | The t-value for the camera on its spline. Internally clamped to the value [0,1]. |
+
+_Returns:_ The local offset (back + up) of the camera WRT its target based on the supplied t-value.
+
+### CinemachineGroupComposer
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComposer
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to aim the camera at a target
+object, with configurable offsets, damping, and composition rules.
+
+In addition, if the target is a CinemachineTargetGroup, the behaviour will adjust the FOV and the camera distance to
+ensure that the entire group of targets is framed properly.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|------------------------|------------------------|----------------------------------------------------------------------------------------|
+| **TargetGroup** | CinemachineTargetGroup | _[Get]_ Get LookAt target as CinemachineTargetGroup, or null if target is not a group. |
+| **m_LastBounds** | Bounds | _[Get]_ For editor visulaization of the calculated bounding box of the group. |
+| **m_lastBoundsMatrix** | Matrix4x4 | _[Get]_ For editor visualization of the calculated bounding box of the group. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------------|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_GroupFramingSize** | Single | The bounding box of the targets should occupy this amount of the screen space. 1 means fill the whole screen. 0.5 means fill half the screen, etc. |
+| **m_FramingMode** | FramingMode | What screen dimensions to consider when framing. Can be Horizontal, Vertical, or both.
_Possible Values:_
- **Horizontal**: Consider only the horizontal dimension. Vertical framing is ignored.
- **Vertical**: Consider only the vertical dimension. Horizontal framing is ignored.
- **HorizontalAndVertical**: The larger of the horizontal and vertical dimensions will dominate, to get the best fit.
|
+| **m_FrameDamping** | Single | How aggressively the camera tries to frame the group. Small numbers are more responsive, rapidly adjusting the camera to keep the group in the frame. Larger numbers give a more heavy slowly responding camera. |
+| **m_AdjustmentMode** | AdjustmentMode | How to adjust the camera to get the desired framing. You can zoom, dolly in/out, or do both.
_Possible Values:_
- **ZoomOnly**
- **DollyOnly**
- **DollyThenZoom**
|
+| **m_MaxDollyIn** | Single | The maximum distance toward the target that this behaviour is allowed to move the camera. |
+| **m_MaxDollyOut** | Single | The maximum distance away the target that this behaviour is allowed to move the camera. |
+| **m_MinimumDistance** | Single | Set this to limit how close to the target the camera can get. |
+| **m_MaximumDistance** | Single | Set this to limit how far from the target the camera can get. |
+| **m_MinimumFOV** | Single | If adjusting FOV, will not set the FOV lower than this. |
+| **m_MaximumFOV** | Single | If adjusting FOV, will not set the FOV higher than this. |
+| **m_MinimumOrthoSize** | Single | If adjusting Orthographic Size, will not set it lower than this. |
+| **m_MaximumOrthoSize** | Single | If adjusting Orthographic Size, will not set it higher than this. |
+| **OnGUICallback** | Action | Used by the Inspector Editor to display on-screen guides. |
+| **m_TrackedObjectOffset** | Vector3 | Target offset from the target object's center in target-local space. Use this to fine-tune the tracking target position when the desired area is not the tracked object's center. |
+| **m_LookaheadTime** | Single | This setting will instruct the composer to adjust its target offset based on the motion of the target. The composer will look at a point where it estimates the target will be this many seconds into the future. Note that this setting is sensitive to noisy animation, and can amplify the noise, resulting in undesirable camera jitter. If the camera jitters unacceptably when the target is in motion, turn down this setting, or animate the target more smoothly. |
+| **m_LookaheadSmoothing** | Single | Controls the smoothness of the lookahead algorithm. Larger values smooth out jittery predictions and also increase prediction lag. |
+| **m_LookaheadIgnoreY** | Boolean | If checked, movement along the Y axis will be ignored for lookahead calculations. |
+| **m_HorizontalDamping** | Single | How aggressively the camera tries to follow the target in the screen-horizontal direction. Small numbers are more responsive, rapidly orienting the camera to keep the target in the dead zone. Larger numbers give a more heavy slowly responding camera. Using different vertical and horizontal settings can yield a wide range of camera behaviors. |
+| **m_VerticalDamping** | Single | How aggressively the camera tries to follow the target in the screen-vertical direction. Small numbers are more responsive, rapidly orienting the camera to keep the target in the dead zone. Larger numbers give a more heavy slowly responding camera. Using different vertical and horizontal settings can yield a wide range of camera behaviors. |
+| **m_ScreenX** | Single | Horizontal screen position for target. The camera will rotate to position the tracked object here. |
+| **m_ScreenY** | Single | Vertical screen position for target, The camera will rotate to position the tracked object here. |
+| **m_DeadZoneWidth** | Single | Camera will not rotate horizontally if the target is within this range of the position. |
+| **m_DeadZoneHeight** | Single | Camera will not rotate vertically if the target is within this range of the position. |
+| **m_SoftZoneWidth** | Single | When target is within this region, camera will gradually rotate horizontally to re-align towards the desired position, depending on the damping speed. |
+| **m_SoftZoneHeight** | Single | When target is within this region, camera will gradually rotate vertically to re-align towards the desired position, depending on the damping speed. |
+| **m_BiasX** | Single | A non-zero bias will move the target position horizontally away from the center of the soft zone. |
+| **m_BiasY** | Single | A non-zero bias will move the target position vertically away from the center of the soft zone. |
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies the composer rules and orients the camera accordingly.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------------------------------------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for calculating damping. If less than zero, then target will snap to the center of the dead zone. |
+
+### CinemachineHardLockToTarget
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to place the camera on the
+Follow Target.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a LookAt defined. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Aim stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies the composer rules and orients the camera accordingly.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------------------------------------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for calculating damping. If less than zero, then target will snap to the center of the dead zone. |
+
+### CinemachineHardLookAt
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to aim the camera hard at the
+LookAt target.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a LookAt defined. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Aim stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies the composer rules and orients the camera accordingly.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------------------------------------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for calculating damping. If less than zero, then target will snap to the center of the dead zone. |
+
+### CinemachineMixingCamera
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+CinemachineMixingCamera is a "manager camera" that takes on the state of the weighted average of the states of its child
+virtual cameras.
+
+A fixed number of slots are made available for cameras, rather than a dynamic array. We do it this way in order to
+support weight animation from the Timeline. Timeline cannot animate array elements.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **State** | CameraState | _[Get]_ The blended CameraState. |
+| **LookAt** | Transform | _[Get,Set]_ Not used. |
+| **Follow** | Transform | _[Get,Set]_ Not used. |
+| **LiveChildOrSelf** | ICinemachineCamera | _[Get]_ Return the live child. |
+| **ChildCameras** | CinemachineVirtualCameraBase[] | _[Get]_ Get the cached list of child cameras. These are just the immediate children in the hierarchy. Note: only the first entries of this list participate in the final blend, up to MaxCameras. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Weight0** | Single | The weight of the first tracked camera. |
+| **m_Weight1** | Single | The weight of the second tracked camera. |
+| **m_Weight2** | Single | The weight of the third tracked camera. |
+| **m_Weight3** | Single | The weight of the fourth tracked camera. |
+| **m_Weight4** | Single | The weight of the fifth tracked camera. |
+| **m_Weight5** | Single | The weight of the sixth tracked camera. |
+| **m_Weight6** | Single | The weight of the seventh tracked camera. |
+| **m_Weight7** | Single | The weight of the eighth tracked camera. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``Single GetWeight(Int32 index)``
+
+Get the weight of the child at an index.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|--------|-------------------------------------------------------------------------------------|
+| **index** | Int32 | The child index. Only immediate CinemachineVirtualCameraBase children are counted. |
+
+_Returns:_ The weight of the camera. Valid only if camera is active and enabled.
+``Void SetWeight(Int32 index, Single w)``
+
+Set the weight of the child at an index.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|--------|-------------------------------------------------------------------------------------|
+| **index** | Int32 | The child index. Only immediate CinemachineVirtualCameraBase children are counted. |
+| **w** | Single | The weight to set. Can be any non-negative number. |
+
+``Single GetWeight(CinemachineVirtualCameraBase vcam)``
+
+Get the weight of the child CinemachineVirtualCameraBase.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|------------------------------|-------------------|
+| **vcam** | CinemachineVirtualCameraBase | The child camera. |
+
+_Returns:_ The weight of the camera. Valid only if camera is active and enabled.
+``Void SetWeight(CinemachineVirtualCameraBase vcam, Single w)``
+
+Set the weight of the child CinemachineVirtualCameraBase.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|------------------------------|-----------------------------------------------------|
+| **vcam** | CinemachineVirtualCameraBase | The child camera. |
+| **w** | Single | The weight to set. Can be any non-negative number. |
+
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``protected virtual Void OnEnable()``
+
+Makes sure the internal child cache is up to date.
+
+``Void OnTransformChildrenChanged()``
+
+Makes sure the internal child cache is up to date.
+
+``protected virtual Void OnValidate()``
+
+Makes sure the weights are non-negative.
+
+``virtual Boolean IsLiveChild(ICinemachineCamera vcam)``
+
+Check whether the vcam a live child of this camera.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|------------------------------|
+| **vcam** | ICinemachineCamera | The Virtual Camera to check. |
+
+_Returns:_ True if the vcam is currently actively influencing the state of this vcam.
+``protected Void InvalidateListOfChildren()``
+
+Invalidate the cached list of child cameras.
+
+``protected Void ValidateListOfChildren()``
+
+Rebuild the cached list of child cameras.
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Do not call this method. Called by CinemachineCore at designated update time so the vcam can position
+itself and track its targets. This implementation computes and caches the weighted blend of the tracked cameras.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|------------------------------------------------------------|
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than 0). |
+
+### CinemachineOrbitalTransposer
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineTransposer
+
+This is a CinemachineComponent in the Body section of the component pipeline. Its job is to position the camera in a
+variable relationship to a the vcam's Follow target object, with offsets and damping.
+
+This component is typically used to implement a camera that follows its target. It can accept player input from an input
+device, which allows the player to dynamically control the relationship between the camera and the target, for example
+with a joystick.
+
+The OrbitalTransposer introduces the concept of __Heading__, which is the direction in which the target is moving, and
+the OrbitalTransposer will attempt to position the camera in relationship to the heading, which is by default directly
+behind the target. You can control the default relationship by adjusting the Heading Bias setting.
+
+If you attach an input controller to the OrbitalTransposer, then the player can also control the way the camera
+positions itself in relation to the target heading. This allows the camera to move to any spot on an orbit around the
+target.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Heading** | Heading | The definition of Forward. Camera will follow behind. |
+| **m_RecenterToTargetHeading** | Recentering | Automatic heading recentering. The settings here defines how the camera will reposition itself in the absence of player input. |
+| **m_XAxis** | AxisState | Heading Control. The settings here control the behaviour of the camera in response to the player's input. |
+| **m_HeadingIsSlave** | Boolean | Drive the x-axis setting programmatically. Automatic heading updating will be disabled. |
+| **m_BindingMode** | BindingMode | The coordinate space to use when interpreting the offset from the target. This is also used to set the camera's Up vector, which will be maintained when aiming the camera.
_Possible Values:_
- **LockToTargetOnAssign**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame at the moment when the virtual camera was enabled, or when the target was assigned.
- **LockToTargetWithWorldUp**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the tilt and roll zeroed out.
- **LockToTargetNoRoll**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the roll zeroed out.
- **LockToTarget**: Camera will be bound to the Follow target using the target's local frame.
- **WorldSpace**: Camera will be bound to the Follow target using a world space offset.
- **SimpleFollowWithWorldUp**: Offsets will be calculated relative to the target, using Camera-local axes.
|
+| **m_FollowOffset** | Vector3 | The distance vector that the transposer will attempt to maintain from the Follow target. |
+| **m_XDamping** | Single | How aggressively the camera tries to maintain the offset in the X-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's x-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_YDamping** | Single | How aggressively the camera tries to maintain the offset in the Y-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's y-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_ZDamping** | Single | How aggressively the camera tries to maintain the offset in the Z-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's z-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_PitchDamping** | Single | How aggressively the camera tries to track the target rotation's X angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_YawDamping** | Single | How aggressively the camera tries to track the target rotation's Y angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_RollDamping** | Single | How aggressively the camera tries to track the target rotation's Z angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+
+#### Methods
+
+``protected virtual Void OnValidate()``
+
+``Single UpdateHeading(Single deltaTime, Vector3 up, AxisState& axis)``
+
+Update the X axis and calculate the heading. This can be called by a delegate with a custom axis. Used for damping. If
+less than 0, no damping is done.World Up, set by the CinemachineBrainAxis value.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|------------|--------------------------------------------------------|
+| **deltaTime** | Single | Used for damping. If less than 0, no damping is done. |
+| **up** | Vector3 | World Up, set by the CinemachineBrain. |
+| **axis** | AxisState& | |
+
+_Returns:_ Axis value.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the us that a target got warped, so that we can update its internal state to make the camera
+also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Positions the virtual camera according to the transposer rules.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|--------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for damping. If less than 0, no damping is done. |
+
+### CinemachineOrbitalTransposer.Heading
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+How the "forward" direction is defined. Orbital offset is in relation to the forward direction.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------------------------|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Definition** | HeadingDefinition | How 'forward' is defined. The camera will be placed by default behind the target. PositionDelta will consider 'forward' to be the direction in which the target is moving.
_Possible Values:_
- **PositionDelta**: Target heading calculated from the difference between its position on the last update and current frame.
- **Velocity**: Target heading calculated from its Rigidbody's velocity. If no Rigidbody exists, it will fall back to HeadingDerivationMode.PositionDelta.
- **TargetForward**: Target heading calculated from the Target Transform's euler Y angle.
- **WorldForward**: Default heading is a constant world space heading.
|
+| **m_VelocityFilterStrength** | Int32 | Size of the velocity sampling window for target heading filter. This filters out irregularities in the target's movement. Used only if deriving heading from target's movement (PositionDelta or Velocity). |
+| **m_Bias** | Single | Where the camera is placed when the X-axis value is zero. This is a rotation in degrees around the Y axis. When this value is 0, the camera will be placed behind the target. Nonzero offsets will rotate the zero position around the target. |
+
+### CinemachinePath
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachinePathBase
+
+Defines a world-space path, consisting of an array of waypoints, each of which has position, tangent, and roll settings.
+Bezier interpolation is performed between the waypoints, to get a smooth and continuous path.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------------------------|---------|----------------------------------------------------------------------------------------------|
+| **MinPos** | Single | _[Get]_ The minimum value for the path position. |
+| **MaxPos** | Single | _[Get]_ The maximum value for the path position. |
+| **Looped** | Boolean | _[Get]_ True if the path ends are joined to form a continuous loop. |
+| **DistanceCacheSampleStepsPerSegment** | Int32 | _[Get]_ When calculating the distance cache, sample the path this many times between points. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------------|------------|--------------------------------------------------------------------------------------|
+| **m_Looped** | Boolean | If checked, then the path ends are joined to form a continuous loop. |
+| **m_Waypoints** | Waypoint[] | The waypoints that define the path. They will be interpolated using a bezier curve. |
+| **m_Resolution** | Int32 | Path samples per waypoint. This is used for calculating path distances. |
+| **m_Appearance** | Appearance | The settings that control how the path will appear in the editor scene view. |
+
+#### Methods
+
+``virtual Vector3 EvaluatePosition(Single pos)``
+
+Get a worldspace position of a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space position of the point along at path at pos.
+``virtual Vector3 EvaluateTangent(Single pos)``
+
+Get the tangent of the curve at a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space direction of the path tangent. Length of the vector represents the tangent strength.
+``virtual Quaternion EvaluateOrientation(Single pos)``
+
+Get the orientation the curve at a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space orientation of the path, as defined by tangent, up, and roll.
+
+### CinemachinePath.Waypoint
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+A waypoint along the path.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **position** | Vector3 | Position in path-local space. |
+| **tangent** | Vector3 | Offset from the position, which defines the tangent of the curve at the waypoint. The length of the tangent encodes the strength of the bezier handle. The same handle is used symmetrically on both sides of the waypoint, to ensure smoothness. |
+| **roll** | Single | Defines the role of the path at this waypoint. The other orientation axes are inferred from the tangent and world up. |
+
+### CinemachinePathBase.Appearance
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+This class holds the settings that control how the path will appear in the editor scene view. The path is not visible in
+the game view.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-----------------------|--------|------------------------------------------------------------------------|
+| **pathColor** | Color | The color of the path itself when it is active in the editor. |
+| **inactivePathColor** | Color | The color of the path itself when it is inactive in the editor. |
+| **width** | Single | The width of the railroad-tracks that are drawn to represent the path. |
+
+### CinemachinePOV
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to aim the camera in response to
+the user's mouse or joystick input.
+
+The composer does not change the camera's position. It will only pan and tilt the camera where it is, in order to get
+the desired framing. To move the camera, you have to use the virtual camera's Body section.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a LookAt defined. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Aim stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-----------------------------|-------------|---------------------------------------------------------------------------------|
+| **m_VerticalAxis** | AxisState | The Vertical axis. Value is -90..90. Controls the vertical orientation. |
+| **m_VerticalRecentering** | Recentering | Controls how automatic recentering of the Vertical axis is accomplished. |
+| **m_HorizontalAxis** | AxisState | The Horizontal axis. Value is -180..180. Controls the horizontal orientation. |
+| **m_HorizontalRecentering** | Recentering | Controls how automatic recentering of the Horizontal axis is accomplished. |
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Applies the axis values and orients the camera accordingly.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for calculating damping. Not used. |
+
+### CinemachineSameAsFollowTarget
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Aim section of the component pipeline. Its job is to match the orientation of the
+Follow target.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a Follow target defined. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Aim stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Orients the camera to match the Follow target's orientation.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Not used. |
+
+### CinemachineSmoothPath
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachinePathBase
+
+Defines a world-space path, consisting of an array of waypoints, each of which has position and roll settings. Bezier
+interpolation is performed between the waypoints, to get a smooth and continuous path. The path will pass through all
+waypoints, and (unlike CinemachinePath) first and second order continuity is guaranteed.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------------------------|---------|----------------------------------------------------------------------------------------------|
+| **MinPos** | Single | _[Get]_ The minimum value for the path position. |
+| **MaxPos** | Single | _[Get]_ The maximum value for the path position. |
+| **Looped** | Boolean | _[Get]_ True if the path ends are joined to form a continuous loop. |
+| **DistanceCacheSampleStepsPerSegment** | Int32 | _[Get]_ When calculating the distance cache, sample the path this many times between points. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------------|------------|--------------------------------------------------------------------------------------|
+| **m_Looped** | Boolean | If checked, then the path ends are joined to form a continuous loop. |
+| **m_Waypoints** | Waypoint[] | The waypoints that define the path. They will be interpolated using a bezier curve. |
+| **m_Resolution** | Int32 | Path samples per waypoint. This is used for calculating path distances. |
+| **m_Appearance** | Appearance | The settings that control how the path will appear in the editor scene view. |
+
+#### Methods
+
+``virtual Void InvalidateDistanceCache()``
+
+Call this if the path changes in such a way as to affect distances or other cached path elements.
+
+``virtual Vector3 EvaluatePosition(Single pos)``
+
+Get a worldspace position of a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space position of the point along at path at pos.
+``virtual Vector3 EvaluateTangent(Single pos)``
+
+Get the tangent of the curve at a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space direction of the path tangent. Length of the vector represents the tangent strength.
+``virtual Quaternion EvaluateOrientation(Single pos)``
+
+Get the orientation the curve at a point along the path.
+
+| _Param_ | _Type_ | _Description_ |
+|---------|--------|--------------------------------------------------|
+| **pos** | Single | Postion along the path. Need not be normalized. |
+
+_Returns:_ World-space orientation of the path, as defined by tangent, up, and roll.
+
+### CinemachineSmoothPath.Waypoint
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+A waypoint along the path.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------|---------|------------------------------------------------------------------------------------------------------------------------|
+| **position** | Vector3 | Position in path-local space. |
+| **roll** | Single | Defines the roll of the path at this waypoint. The other orientation axes are inferred from the tangent and world up. |
+
+### CinemachineStateDrivenCamera
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+This is a virtual camera "manager" that owns and manages a collection of child Virtual Cameras. These child vcams are
+mapped to individual states in an animation state machine, allowing you to associate specific vcams to specific
+animation states. When that state is active in the state machine, then the associated camera will be activated.
+
+You can define custom blends and transitions between child cameras.
+
+In order to use this behaviour, you must have an animated target (i.e. an object animated with a state machine) to drive
+the behaviour.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
+| **Description** | String | _[Get]_ Gets a brief debug description of this virtual camera, for use when displaying debug info. |
+| **LiveChild** | ICinemachineCamera | _[Get,Set]_ Get the current "best" child virtual camera, that would be chosen if the State Driven Camera were active. |
+| **LiveChildOrSelf** | ICinemachineCamera | _[Get]_ Return the live child. |
+| **State** | CameraState | _[Get]_ The State of the current live child. |
+| **LookAt** | Transform | _[Get,Set]_ Get the current LookAt target. Returns parent's LookAt if parent is non-null and no specific LookAt defined for this camera. |
+| **Follow** | Transform | _[Get,Set]_ Get the current Follow target. Returns parent's Follow if parent is non-null and no specific Follow defined for this camera. |
+| **ChildCameras** | CinemachineVirtualCameraBase[] | _[Get]_ The list of child cameras. These are just the immediate children in the hierarchy. |
+| **IsBlending** | Boolean | _[Get]_ Is there a blend in progress? |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | Default object for the camera children to look at (the aim target), if not specified in a child camera. May be empty if all of the children define targets of their own. |
+| **m_Follow** | Transform | Default object for the camera children wants to move with (the body target), if not specified in a child camera. May be empty if all of the children define targets of their own. |
+| **m_AnimatedTarget** | Animator | The state machine whose state changes will drive this camera's choice of active child. |
+| **m_LayerIndex** | Int32 | Which layer in the target state machine to observe. |
+| **m_ShowDebugText** | Boolean | When enabled, the current child camera and blend will be indicated in the game window, for debugging. |
+| **m_EnableAllChildCameras** | Boolean | Force all child cameras to be enabled. This is useful if animating them in Timeline, but consumes extra resources. |
+| **m_ChildCameras** | CinemachineVirtualCameraBase[] | Internal API for the editor. Do not use this field. |
+| **m_Instructions** | Instruction[] | The set of instructions associating virtual cameras with states. These instructions are used to choose the live child at any given moment. |
+| **m_DefaultBlend** | CinemachineBlendDefinition | The blend which is used if you don't explicitly define a blend between two Virtual Camera children. |
+| **m_CustomBlends** | CinemachineBlenderSettings | This is the asset which contains custom settings for specific child blends. |
+| **m_ParentHash** | ParentHash[] | Internal API for the Inspector editor. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``virtual Boolean IsLiveChild(ICinemachineCamera vcam)``
+
+Check whether the vcam a live child of this camera.
+
+| _Param_ | _Type_ | _Description_ |
+|----------|--------------------|------------------------------|
+| **vcam** | ICinemachineCamera | The Virtual Camera to check. |
+
+_Returns:_ True if the vcam is currently actively influencing the state of this vcam.
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Do not call this method. Called by CinemachineCore at designated update time so the vcam can position
+itself and track its targets. This implementation updates all the children, chooses the best one, and implements any
+required blending.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|------------------------------------------------------------------------|
+| **worldUp** | Vector3 | Default world Up, set by the CinemachineBrain. |
+| **deltaTime** | Single | Delta time for time-based effects (ignore if less than or equal to 0). |
+
+``protected virtual Void OnEnable()``
+
+Makes sure the internal child cache is up to date.
+
+``Void OnTransformChildrenChanged()``
+
+Makes sure the internal child cache is up to date.
+
+``protected virtual Void OnGUI()``
+
+Displays the current active camera on the game screen, if requested.
+
+``static String CreateFakeHashName(Int32 parentHash, String stateName)``
+
+API for the inspector editor. Animation module does not have hashes for state parents, so we have to invent them in
+order to implement nested state handling.
+
+| _Param_ | _Type_ | _Description_ |
+|----------------|--------|---------------|
+| **parentHash** | Int32 | |
+| **stateName** | String | |
+
+``Void ValidateInstructions()``
+
+Internal API for the inspector editor.
+
+### CinemachineStoryboard
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineExtension
+
+An add-on module for Cinemachine Virtual Camera that places an image in screen space over the camera's output.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_ShowImage** | Boolean | If checked, the specified image will be displayed as an overlay over the virtual camera's output. |
+| **m_Image** | Texture | The image to display. |
+| **m_Aspect** | FillStrategy | How to handle differences between image aspect and screen aspect.
_Possible Values:_
- **BestFit**
- **CropImageToFit**
- **StretchToFit**
|
+| **m_Alpha** | Single | The opacity of the image. 0 is transparent, 1 is opaque. |
+| **m_Center** | Vector2 | The screen-space position at which to display the image. Zero is center. |
+| **m_Rotation** | Vector3 | The screen-space rotation to apply to the image. |
+| **m_Scale** | Vector2 | The screen-space scaling to apply to the image. |
+| **m_SyncScale** | Boolean | If checked, X and Y scale are synchronized. |
+| **m_MuteCamera** | Boolean | If checked, Camera transform will not be controlled by this virtual camera. |
+| **m_SplitView** | Single | Wipe the image on and off horizontally. |
+
+#### Methods
+
+``protected virtual Void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, Stage stage, CameraState& state, Single deltaTime)``
+
+Standard CinemachineExtension callback.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|------------------------------|---------------|
+| **vcam** | CinemachineVirtualCameraBase | |
+| **stage** | Stage | |
+| **state** | CameraState& | |
+| **deltaTime** | Single | |
+
+``protected virtual Void OnDestroy()``
+
+``protected virtual Void ConnectToVcam(Boolean connect)``
+
+| _Param_ | _Type_ | _Description_ |
+|-------------|---------|---------------|
+| **connect** | Boolean | |
+
+### CinemachineTargetGroup
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ MonoBehaviour
+
+Defines a group of target objects, each with a radius and a weight. The weight is used when calculating the average
+position of the target group. Higher-weighted members of the group will count more. The bounding box is calculated by
+taking the member positions, weight, and radii into account.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-----------------|---------|-----------------------------------------------------------------------------------------------------|
+| **BoundingBox** | Bounds | _[Get]_ The axis-aligned bounding box of the group, computed using the targets positions and radii. |
+| **IsEmpty** | Boolean | _[Get]_ Return true if there are no members with weight > 0. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_PositionMode** | PositionMode | How the group's position is calculated. Select GroupCenter for the center of the bounding box, and GroupAverage for a weighted average of the positions of the members.
_Possible Values:_
- **GroupCenter**: Group position will be the center of the group's axis-aligned bounding box.
- **GroupAverage**: Group position will be the weighted average of the positions of the members.
|
+| **m_RotationMode** | RotationMode | How the group's rotation is calculated. Select Manual to use the value in the group's transform, and GroupAverage for a weighted average of the orientations of the members.
_Possible Values:_
- **Manual**: Manually set in the group's transform.
- **GroupAverage**: Weighted average of the orientation of its members.
|
+| **m_UpdateMethod** | UpdateMethod | When to update the group's transform based on the position of the group members.
_Possible Values:_
- **Update**
- **FixedUpdate**
- **LateUpdate**
|
+| **m_Targets** | Target[] | The target objects, together with their weights and radii, that will contribute to the group's average position, orientation, and size. |
+
+#### Methods
+
+``Bounds GetViewSpaceBoundingBox(Matrix4x4 mView)``
+
+The axis-aligned bounding box of the group, in a specific reference frame.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|-----------|--------------------------------------------------------------|
+| **mView** | Matrix4x4 | The frame of reference in which to compute the bounding box. |
+
+_Returns:_ The axis-aligned bounding box of the group, in the desired frame of reference.
+
+### CinemachineTargetGroup.Target
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Holds the information that represents a member of the group.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **target** | Transform | The target objects. This object's position and orientation will contribute to the group's average position and orientation, in accordance with its weight. |
+| **weight** | Single | How much weight to give the target when averaging. Cannot be negative. |
+| **radius** | Single | The radius of the target, used for calculating the bounding box. Cannot be negative. |
+
+### CinemachineTrackedDolly
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+A Cinemachine Virtual Camera Body component that constrains camera motion to a CinemachinePath. The camera can move
+along the path.
+
+This behaviour can operate in two modes: manual positioning, and Auto-Dolly positioning. In Manual mode, the camera's
+position is specified by animating the Path Position field. In Auto-Dolly mode, the Path Position field is animated
+automatically every frame by finding the position on the path that's closest to the virtual camera's Follow target.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|-------------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a path. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Body stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Path** | CinemachinePathBase | The path to which the camera will be constrained. This must be non-null. |
+| **m_PathPosition** | Single | The position along the path at which the camera will be placed. This can be animated directly, or set automatically by the Auto-Dolly feature to get as close as possible to the Follow target. The value is interpreted according to the Position Units setting. |
+| **m_PositionUnits** | PositionUnits | How to interpret Path Position. If set to Path Units, values are as follows: 0 represents the first waypoint on the path, 1 is the second, and so on. Values in-between are points on the path in between the waypoints. If set to Distance, then Path Position represents distance along the path.
_Possible Values:_
- **PathUnits**
- **Distance**
- **Normalized**
|
+| **m_PathOffset** | Vector3 | Where to put the camera relative to the path position. X is perpendicular to the path, Y is up, and Z is parallel to the path. This allows the camera to be offset from the path itself (as if on a tripod, for example). |
+| **m_XDamping** | Single | How aggressively the camera tries to maintain its position in a direction perpendicular to the path. Small numbers are more responsive, rapidly translating the camera to keep the target's x-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_YDamping** | Single | How aggressively the camera tries to maintain its position in the path-local up direction. Small numbers are more responsive, rapidly translating the camera to keep the target's y-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_ZDamping** | Single | How aggressively the camera tries to maintain its position in a direction parallel to the path. Small numbers are more responsive, rapidly translating the camera to keep the target's z-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_CameraUp** | CameraUpMode | How to set the virtual camera's Up vector. This will affect the screen composition, because the camera Aim behaviours will always try to respect the Up direction.
_Possible Values:_
- **Default**: Leave the camera's up vector alone. It will be set according to the Brain's WorldUp.
- **Path**: Take the up vector from the path's up vector at the current point.
- **PathNoRoll**: Take the up vector from the path's up vector at the current point, but with the roll zeroed out.
- **FollowTarget**: Take the up vector from the Follow target's up vector.
- **FollowTargetNoRoll**: Take the up vector from the Follow target's up vector, but with the roll zeroed out.
|
+| **m_PitchDamping** | Single | How aggressively the camera tries to track the target rotation's X angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_YawDamping** | Single | How aggressively the camera tries to track the target rotation's Y angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_RollDamping** | Single | How aggressively the camera tries to track the target rotation's Z angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_AutoDolly** | AutoDolly | Controls how automatic dollying occurs. A Follow target is necessary to use this feature. |
+
+#### Methods
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Positions the virtual camera according to the transposer rules.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|--------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for damping. If less that 0, no damping is done. |
+
+### CinemachineTrackedDolly.AutoDolly
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Controls how automatic dollying occurs.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|------------------------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Enabled** | Boolean | If checked, will enable automatic dolly, which chooses a path position that is as close as possible to the Follow target. Note: this can have significant performance impact. |
+| **m_PositionOffset** | Single | Offset, in current position units, from the closest point on the path to the follow target. |
+| **m_SearchRadius** | Int32 | Search up to how many waypoints on either side of the current position. Use 0 for Entire path. |
+| **m_SearchResolution** | Int32 | We search between waypoints by dividing the segment into this many straight pieces. The higher the number, the more accurate the result, but performance is proportionally slower for higher numbers. |
+
+### CinemachineTransposer
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineComponentBase
+
+This is a CinemachineComponent in the Body section of the component pipeline. Its job is to position the camera in a
+fixed relationship to the vcam's Follow target object, with offsets and damping.
+
+The Transposer will only change the camera's position in space. It will not re-orient or otherwise aim the camera. To
+that, you need to instruct the vcam in the Aim section of its pipeline.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|---------------------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **EffectiveOffset** | Vector3 | _[Get]_ Get the target offset, with sanitization. |
+| **IsValid** | Boolean | _[Get]_ True if component is enabled and has a valid Follow target. |
+| **Stage** | Stage | _[Get]_ Get the Cinemachine Pipeline stage that this component implements. Always returns the Body stage.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_BindingMode** | BindingMode | The coordinate space to use when interpreting the offset from the target. This is also used to set the camera's Up vector, which will be maintained when aiming the camera.
_Possible Values:_
- **LockToTargetOnAssign**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame at the moment when the virtual camera was enabled, or when the target was assigned.
- **LockToTargetWithWorldUp**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the tilt and roll zeroed out.
- **LockToTargetNoRoll**: Camera will be bound to the Follow target using a frame of reference consisting of the target's local frame, with the roll zeroed out.
- **LockToTarget**: Camera will be bound to the Follow target using the target's local frame.
- **WorldSpace**: Camera will be bound to the Follow target using a world space offset.
- **SimpleFollowWithWorldUp**: Offsets will be calculated relative to the target, using Camera-local axes.
|
+| **m_FollowOffset** | Vector3 | The distance vector that the transposer will attempt to maintain from the Follow target. |
+| **m_XDamping** | Single | How aggressively the camera tries to maintain the offset in the X-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's x-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_YDamping** | Single | How aggressively the camera tries to maintain the offset in the Y-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's y-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_ZDamping** | Single | How aggressively the camera tries to maintain the offset in the Z-axis. Small numbers are more responsive, rapidly translating the camera to keep the target's z-axis offset. Larger numbers give a more heavy slowly responding camera. Using different settings per axis can yield a wide range of camera behaviors. |
+| **m_PitchDamping** | Single | How aggressively the camera tries to track the target rotation's X angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_YawDamping** | Single | How aggressively the camera tries to track the target rotation's Y angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+| **m_RollDamping** | Single | How aggressively the camera tries to track the target rotation's Z angle. Small numbers are more responsive. Larger numbers give a more heavy slowly responding camera. |
+
+#### Methods
+
+``protected virtual Void OnValidate()``
+
+Derived classes should call this from their OnValidate() implementation.
+
+``virtual Void MutateCameraState(CameraState& curState, Single deltaTime)``
+
+Positions the virtual camera according to the transposer rules.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|--------------------------------------------------------|
+| **curState** | CameraState& | The current camera state. |
+| **deltaTime** | Single | Used for damping. If less than 0, no damping is done. |
+
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the us that a target got warped, so that we can update its internal state to make the camera
+also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+``protected Void InitPrevFrameStateInfo(CameraState& curState, Single deltaTime)``
+
+Initializes the state for previous frame if appropriate.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|--------------|---------------|
+| **curState** | CameraState& | |
+| **deltaTime** | Single | |
+
+``protected Void TrackTarget(Single deltaTime, Vector3 up, Vector3 desiredCameraOffset, Vector3& outTargetPosition, Quaternion& outTargetOrient)``
+
+Positions the virtual camera according to the transposer rules.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------------|-------------|----------------------------------------------------------------|
+| **deltaTime** | Single | Used for damping. If less than 0, no damping is done. |
+| **up** | Vector3 | Current camera up. |
+| **desiredCameraOffset** | Vector3 | Where we want to put the camera relative to the follow target. |
+| **outTargetPosition** | Vector3& | Resulting camera position. |
+| **outTargetOrient** | Quaternion& | Damped target orientation. |
+
+``Vector3 GeTargetCameraPosition(Vector3 worldUp)``
+
+Internal API for the Inspector Editor, so it can draw a marker at the target.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------|---------|---------------|
+| **worldUp** | Vector3 | |
+
+``Quaternion GetReferenceOrientation(Vector3 worldUp)``
+
+Internal API for the Inspector Editor, so it can draw a marker at the target.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------|---------|---------------|
+| **worldUp** | Vector3 | |
+
+### CinemachineVirtualCamera
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ CinemachineVirtualCameraBase
+
+_Implements:_ ICinemachineCamera
+
+This behaviour is intended to be attached to an empty Transform GameObject, and it represents a Virtual Camera within
+the Unity scene.
+
+The Virtual Camera will animate its Transform according to the rules contained in its CinemachineComponent pipeline (
+Aim, Body, and Noise). When the virtual camera is Live, the Unity camera will assume the position and orientation of the
+virtual camera.
+
+A virtual camera is not a camera. Instead, it can be thought of as a camera controller, not unlike a cameraman. It can
+drive the Unity Camera and control its position, orientation, lens settings, and PostProcessing effects. Each Virtual
+Camera owns its own Cinemachine Component Pipeline, through which you provide the instructions for dynamically tracking
+specific game objects.
+
+A virtual camera is very lightweight, and does no rendering of its own. It merely tracks interesting GameObjects, and
+positions itself accordingly. A typical game can have dozens of virtual cameras, each set up to follow a particular
+character or capture a particular event.
+
+A Virtual Camera can be in any of three states:
+
+* **Live**: The virtual camera is actively controlling the Unity Camera. The virtual camera is tracking its targets and
+ being updated every frame.
+* **Standby**: The virtual camera is tracking its targets and being updated every frame, but no Unity Camera is actively
+ being controlled by it. This is the state of a virtual camera that is enabled in the scene but perhaps at a lower
+ priority than the Live virtual camera.
+* **Disabled**: The virtual camera is present but disabled in the scene. It is not actively tracking its targets and so
+ consumes no processing power. However, the virtual camera can be made live from the Timeline.
+
+The Unity Camera can be driven by any virtual camera in the scene. The game logic can choose the virtual camera to make
+live by manipulating the virtual cameras' enabled flags and their priorities, based on game logic.
+
+In order to be driven by a virtual camera, the Unity Camera must have a CinemachineBrain behaviour, which will select
+the most eligible virtual camera based on its priority or on other criteria, and will manage blending.
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|--------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **State** | CameraState | _[Get]_ The CameraState object holds all of the information necessary to position the Unity camera. It is the output of this class. |
+| **LookAt** | Transform | _[Get,Set]_ Get the LookAt target for the Aim component in the CinemachinePipeline. If this vcam is a part of a meta-camera collection, then the owner's target will be used if the local target is null. |
+| **Follow** | Transform | _[Get,Set]_ Get the Follow target for the Body component in the CinemachinePipeline. If this vcam is a part of a meta-camera collection, then the owner's target will be used if the local target is null. |
+| **UserIsDragging** | Boolean | _[Get,Set]_ API for the editor, to make the dragging of position handles behave better. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_LookAt** | Transform | The object that the camera wants to look at (the Aim target). If this is null, then the vcam's Transform orientation will define the camera's orientation. |
+| **m_Follow** | Transform | The object that the camera wants to move with (the Body target). If this is null, then the vcam's Transform position will define the camera's position. |
+| **m_PositionBlending** | PositionBlendMethod | Hint for blending positions to and from this virtual camera.
_Possible Values:_
- **Linear**
- **Spherical**
- **Cylindrical**
|
+| **m_Lens** | LensSettings | Specifies the lens properties of this Virtual Camera. This generally mirrors the Unity Camera's lens settings, and will be used to drive the Unity camera when the vcam is active. |
+| **CinemachineGUIDebuggerCallback** | Action | This is deprecated. It is here to support the soon-to-be-removed Cinemachine Debugger in the Editor. |
+| **m_ExcludedPropertiesInInspector** | String[] | Inspector control - Use for hiding sections of the Inspector UI. |
+| **m_LockStageInInspector** | Stage[] | Inspector control - Use for enabling sections of the Inspector UI. |
+| **m_Priority** | Int32 | The priority will determine which camera becomes active based on the state of other cameras and this camera. Higher numbers have greater priority. |
+
+#### Methods
+
+``virtual Void InternalUpdateCameraState(Vector3 worldUp, Single deltaTime)``
+
+Internal use only. Do not call this method. Called by CinemachineCore at the appropriate Update time so the vcam can
+position itself and track its targets. This class will invoke its pipeline and generate a CameraState for this frame.
+
+| _Param_ | _Type_ | _Description_ |
+|---------------|---------|---------------|
+| **worldUp** | Vector3 | |
+| **deltaTime** | Single | |
+
+``protected virtual Void OnEnable()``
+
+Make sure that the pipeline cache is up-to-date.
+
+``protected virtual Void OnDestroy()``
+
+Calls the DestroyPipelineDelegate for destroying the hidden child object, to support undo.
+
+``protected virtual Void OnValidate()``
+
+Enforce bounds for fields, when changed in inspector.
+
+``Void InvalidateComponentPipeline()``
+
+Editor API: Call this when changing the pipeline from the editor. Will force a rebuild of the pipeline cache.
+
+``Transform GetComponentOwner()``
+
+Get the hidden CinemachinePipeline child object.
+
+``CinemachineComponentBase[] GetComponentPipeline()``
+
+Get the component pipeline owned by the hidden child pipeline container. For most purposes, it is preferable to use the
+GetCinemachineComponent method.
+
+``CinemachineComponentBase GetCinemachineComponent(Stage stage)``
+
+Get the component set for a specific stage.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|--------|----------------------------------------------------------------------------------------------------------------------------------|
+| **stage** | Stage | The stage for which we want the component.
_Possible Values:_
- **Body**
- **Aim**
- **Noise**
- **Finalize**
|
+
+_Returns:_ The Cinemachine component for that stage, or null if not defined.
+``T GetCinemachineComponent[T]()``
+
+Get an existing component of a specific type from the cinemachine pipeline.
+
+``T AddCinemachineComponent[T]()``
+
+Add a component to the cinemachine pipeline.
+
+``Void DestroyCinemachineComponent[T]()``
+
+Remove a component from the cinemachine pipeline.
+
+``virtual Void OnTargetObjectWarped(Transform target, Vector3 positionDelta)``
+
+This is called to notify the vcam that a target got warped, so that the vcam can update its internal state to make the
+camera also warp seamlessly.
+
+| _Param_ | _Type_ | _Description_ |
+|-------------------|-----------|-------------------------------------------|
+| **target** | Transform | The object that was warped. |
+| **positionDelta** | Vector3 | The amount the target's position changed. |
+
+### LensSettings
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Describes the FOV and clip planes for a camera. This generally mirrors the Unity Camera's lens settings, and will be
+used to drive the Unity camera when the vcam is active.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **FieldOfView** | Single | This is the camera view in vertical degrees. For cinematic people, a 50mm lens on a super-35mm sensor would equal a 19.6 degree FOV. |
+| **OrthographicSize** | Single | When using an orthographic camera, this defines the half-height, in world coordinates, of the camera view. |
+| **NearClipPlane** | Single | This defines the near region in the renderable range of the camera frustum. Raising this value will stop the game from drawing things near the camera, which can sometimes come in handy. Larger values will also increase your shadow resolution. |
+| **FarClipPlane** | Single | This defines the far region of the renderable range of the camera frustum. Typically you want to set this value as low as possible without cutting off desired distant objects. |
+| **Dutch** | Single | Camera Z roll, or tilt, in degrees. |
+
+#### Methods
+
+``static LensSettings FromCamera(Camera fromCamera)``
+
+Creates a new LensSettings, copying the values from the supplied Camera.
+
+| _Param_ | _Type_ | _Description_ |
+|----------------|--------|-------------------------------------------------------------------------|
+| **fromCamera** | Camera | The Camera from which the FoV, near and far clip planes will be copied. |
+
+``static LensSettings Lerp(LensSettings lensA, LensSettings lensB, Single t)``
+
+Linearly blends the fields of two LensSettings and returns the result.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|--------------|------------------------------------------------------------------|
+| **lensA** | LensSettings | The LensSettings to blend from. |
+| **lensB** | LensSettings | The LensSettings to blend to. |
+| **t** | Single | The interpolation value. Internally clamped to the range [0,1]. |
+
+_Returns:_ Interpolated settings.
+``Void Validate()``
+
+Make sure lens settings are sane. Call this from OnValidate().
+
+### NoiseSettings
+
+_Type:_ class
+
+_Namespace:_ Cinemachine
+
+_Inherits:_ ScriptableObject
+
+This is an asset that defines a noise profile. A noise profile is the shape of the noise as a function of time. You can
+build arbitrarily complex shapes by combining different base perlin noise frequencies at different amplitudes.
+
+The frequencies and amplitudes should be chosen with care, to ensure an interesting noise quality that is not obviously
+repetitive.
+
+As a mathematical side-note, any arbitrary periodic curve can be broken down into a series of fixed-amplitude sine-waves
+added together. This is called fourier decomposition, and is the basis of much signal processing. It doesn't really have
+much to do with this asset, but it's super interesting!
+
+#### Properties
+
+| _Name_ | _Type_ | _Description_ |
+|----------------------|------------------------|------------------------------------------------------------------------------|
+| **PositionNoise** | TransformNoiseParams[] | _[Get]_ Gets the array of positional noise channels for this NoiseSettings. |
+| **OrientationNoise** | TransformNoiseParams[] | _[Get]_ Gets the array of orientation noise channels for this NoiseSettings. |
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|-------------------|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **m_Position** | TransformNoiseParams[] | These are the noise channels for the virtual camera's position. Convincing noise setups typically mix low, medium and high frequencies together, so start with a size of 3. |
+| **m_Orientation** | TransformNoiseParams[] | These are the noise channels for the virtual camera's orientation. Convincing noise setups typically mix low, medium and high frequencies together, so start with a size of 3. |
+
+#### Methods
+
+``Void CopyFrom(NoiseSettings other)``
+
+Clones the contents of the other asset into this one.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------|---------------|---------------|
+| **other** | NoiseSettings | |
+
+``static Vector3 GetCombinedFilterResults(TransformNoiseParams[] noiseParams, Single time, Vector3 timeOffsets)``
+
+Get the noise signal value at a specific time.
+
+| _Param_ | _Type_ | _Description_ |
+|-----------------|------------------------|-------------------------------------------------|
+| **noiseParams** | TransformNoiseParams[] | The parameters that define the noise function. |
+| **time** | Single | The time at which to sample the noise function. |
+| **timeOffsets** | Vector3 | Start time offset for each channel. |
+
+_Returns:_ The 3-channel noise signal value at the specified time.
+
+### NoiseSettings.NoiseParams
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Describes the behaviour for a channel of noise.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|---------------|--------|------------------------------------------------------------------------------|
+| **Amplitude** | Single | The amplitude of the noise for this channel. Larger numbers vibrate higher. |
+| **Frequency** | Single | The frequency of noise for this channel. Higher magnitudes vibrate faster. |
+
+### NoiseSettings.TransformNoiseParams
+
+_Type:_ struct
+
+_Namespace:_ Cinemachine
+
+Contains the behaviour of noise for the noise module for all 3 cardinal axes of the camera.
+
+#### Fields
+
+| _Name_ | _Type_ | _Description_ |
+|--------|-------------|------------------------------|
+| **X** | NoiseParams | Noise definition for X-axis. |
+| **Y** | NoiseParams | Noise definition for Y-axis. |
+| **Z** | NoiseParams | Noise definition for Z-axis. |
+
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/handles.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/handles.md
new file mode 100644
index 00000000..fbe63344
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/handles.md
@@ -0,0 +1,72 @@
+# Cinemachine Scene Handles
+
+Cinemachine Scene Handles are a group of 3D controls that allow you to manipulate virtual camera parameters visually in
+the Scene view. You can use the handle tools to interactively adjust the selected object's parameters quickly and
+efficiently rather than controlling them via the inspector.
+
+Cinemachine Scene Handles automatically appear in the Scene view **toolbar overlay** when you select a type of virtual
+camera with an associated handle.
+
+
+
+## Types of Scene Handles
+
+The following four Cinemachine Handle tools are available in the toolbar:
+
+
+
+**1. Field of View (FOV)**
+
+The FOV tool can adjust Vertical FOV, Horizontal FOV, Orthographic Size, or Focal Length depending on what's selected by
+the user. It can control:
+
+* Vertical or Horizontal FOV (depending on the selection in the Main Camera) when the camera is in **Perspective** mode.
+* Orthographic Size when the camera is in **Orthographic** mode.
+* Focal length when the camera is in **Physical** mode.
+
+
+
+For more information on the Field of View (FOV) property,
+see [Setting Virtual Camera properties](CinemachineVirtualCamera.md).
+
+**2. Far/Near clip planes**
+
+* You can drag the points to increase the far clip plane and near clip plane.
+
+
+
+For more information on the Far and Near clip plane properties,
+see [Setting Virtual Camera properties](CinemachineVirtualCamera.md).
+
+**3. Follow offset**
+
+The Follow offset is an offset from the Follow Target. You can drag the points to increase or decrease the Follow offset
+position.
+
+
+
+For more information on the Follow offset property,
+see [Orbital Transposer properties](CinemachineBodyOrbitalTransposer.md).
+
+**4. Tracked object offset**
+
+This starts from where the camera is placed. You can drag the points to increase or decrease the tracking target
+position when the desired area isn't the tracked object’s center.
+
+
+
+For more information on the Tracked object offset property, see [Composer properties](CinemachineAimComposer.md).
+
+## Cinemachine tool settings
+
+Cinemachine tool settings are automatically displayed when a Free Look camera is selected. These settings allow you to
+adjust the position of the three separate camera rigs: **Top**, **Middle**, and **Bottom**.
+
+
+
+For more information, see [Cinemachine Free Look Camera](CinemachineFreeLook.md).
+
+To deactivate the Cinemachine tool settings for a Free Look camera:
+
+1. Right-click on the **Scene** tab in the Scene view.
+2. Select **Overlays** and then **Cinemachine tools** from the pop-up menu.
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/2Dpixelperfect_ex.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/2Dpixelperfect_ex.png
new file mode 100644
index 00000000..92d50f87
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/2Dpixelperfect_ex.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/3rdPersonFollow.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/3rdPersonFollow.png
new file mode 100644
index 00000000..8df73dbd
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/3rdPersonFollow.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMShoulderOffsetexample.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMShoulderOffsetexample.png
new file mode 100644
index 00000000..d84ca2f9
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMShoulderOffsetexample.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMVerticalDistanceexample.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMVerticalDistanceexample.png
new file mode 100644
index 00000000..f858f6f1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CMVerticalDistanceexample.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CineMachineStoryboard.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CineMachineStoryboard.png
new file mode 100644
index 00000000..cb7a65f2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CineMachineStoryboard.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAim.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAim.png
new file mode 100644
index 00000000..d9283a6b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAim.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAimingRigHighlight.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAimingRigHighlight.png
new file mode 100644
index 00000000..b4191693
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAimingRigHighlight.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAssetStore.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAssetStore.png
new file mode 100644
index 00000000..f657b239
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineAssetStore.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBasicMultiChannelPerlin.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBasicMultiChannelPerlin.png
new file mode 100644
index 00000000..19dcc1bf
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBasicMultiChannelPerlin.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBody.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBody.png
new file mode 100644
index 00000000..e7a28764
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBody.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBrain.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBrain.png
new file mode 100644
index 00000000..fe790d62
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineBrain.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2D.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2D.png
new file mode 100644
index 00000000..9d7b6df7
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2D.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Db.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Db.png
new file mode 100644
index 00000000..d529b589
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Db.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Dc.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Dc.png
new file mode 100644
index 00000000..d529b589
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineConfiner2Dc.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineCustomBlends.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineCustomBlends.png
new file mode 100644
index 00000000..17e957d7
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineCustomBlends.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreeLookProperties.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreeLookProperties.png
new file mode 100644
index 00000000..2ba1bde1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreeLookProperties.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreelook.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreelook.png
new file mode 100644
index 00000000..13c32e19
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineFreelook.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineGameWindowGuides.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineGameWindowGuides.png
new file mode 100644
index 00000000..224c4e14
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineGameWindowGuides.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineInputProvider.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineInputProvider.png
new file mode 100644
index 00000000..536c4947
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineInputProvider.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineIntroImage.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineIntroImage.png
new file mode 100644
index 00000000..07350212
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineIntroImage.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMenu.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMenu.png
new file mode 100644
index 00000000..2157615d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMenu.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCamera.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCamera.png
new file mode 100644
index 00000000..1875361c
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCamera.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCameraChildren.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCameraChildren.png
new file mode 100644
index 00000000..83b65cdd
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineMixingCameraChildren.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNewVCam.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNewVCam.png
new file mode 100644
index 00000000..b149149c
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNewVCam.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfile.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfile.png
new file mode 100644
index 00000000..fcfd95e6
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfile.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfileb.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfileb.png
new file mode 100644
index 00000000..08664821
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineNoiseProfileb.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineOrbitalTransposer.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineOrbitalTransposer.png
new file mode 100644
index 00000000..a431521a
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineOrbitalTransposer.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePackage.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePackage.png
new file mode 100644
index 00000000..0336dc68
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePackage.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathInspector.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathInspector.png
new file mode 100644
index 00000000..0e5eb2ec
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathInspector.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathScene.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathScene.png
new file mode 100644
index 00000000..e86d2e32
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachinePathScene.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRig.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRig.png
new file mode 100644
index 00000000..aa4ae0d5
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRig.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigGameViewExample.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigGameViewExample.png
new file mode 100644
index 00000000..448520a4
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigGameViewExample.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigSceneView.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigSceneView.png
new file mode 100644
index 00000000..c1202dc1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineRigSceneView.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSceneHierarchy.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSceneHierarchy.png
new file mode 100644
index 00000000..f4dc8624
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSceneHierarchy.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSplash.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSplash.png
new file mode 100644
index 00000000..e95236f3
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineSplash.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenCamera.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenCamera.png
new file mode 100644
index 00000000..bf437d7c
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenCamera.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenChildren.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenChildren.png
new file mode 100644
index 00000000..c907b40d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineStateDrivenChildren.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTargetGroup.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTargetGroup.png
new file mode 100644
index 00000000..0b4605a2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTargetGroup.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTimelineShotClips.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTimelineShotClips.png
new file mode 100644
index 00000000..0c4f8c2b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineTimelineShotClips.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineVCamProperties.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineVCamProperties.png
new file mode 100644
index 00000000..44fc36f8
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/CinemachineVCamProperties.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/DissipationRate.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/DissipationRate.png
new file mode 100644
index 00000000..9d982a9e
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/DissipationRate.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FOV.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FOV.png
new file mode 100644
index 00000000..a3395e8b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FOV.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FixedSignalEditor.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FixedSignalEditor.png
new file mode 100644
index 00000000..78efb788
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/FixedSignalEditor.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/GenerateImpulse.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/GenerateImpulse.png
new file mode 100644
index 00000000..ce91656b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/GenerateImpulse.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseCollision.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseCollision.png
new file mode 100644
index 00000000..6d8fd200
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseCollision.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseGraphEditor.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseGraphEditor.png
new file mode 100644
index 00000000..b32241dc
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseGraphEditor.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseHammerStrike.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseHammerStrike.png
new file mode 100644
index 00000000..e74166cd
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseHammerStrike.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseListener.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseListener.png
new file mode 100644
index 00000000..0108c69f
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseListener.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseOverview.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseOverview.png
new file mode 100644
index 00000000..72a16dd3
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseOverview.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulsePicture.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulsePicture.png
new file mode 100644
index 00000000..e59f28ba
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulsePicture.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShape.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShape.png
new file mode 100644
index 00000000..eb0fdc99
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShape.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShapeCustom.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShapeCustom.png
new file mode 100644
index 00000000..77ed0846
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseShapeCustom.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseSpatialRange.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseSpatialRange.png
new file mode 100644
index 00000000..56eb466f
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseSpatialRange.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseType.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseType.png
new file mode 100644
index 00000000..02812858
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/ImpulseType.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorCollisionImpulseSource.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorCollisionImpulseSource.png
new file mode 100644
index 00000000..ee6c79d2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorCollisionImpulseSource.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorFixedSignalTiles.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorFixedSignalTiles.png
new file mode 100644
index 00000000..77109ecf
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorFixedSignalTiles.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseChannelsScript.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseChannelsScript.png
new file mode 100644
index 00000000..7bfb5d24
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseChannelsScript.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseCollisionSourceChannel.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseCollisionSourceChannel.png
new file mode 100644
index 00000000..85d7054c
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseCollisionSourceChannel.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListener.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListener.png
new file mode 100644
index 00000000..0b5f626d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListener.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListenerChannelsMenu.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListenerChannelsMenu.png
new file mode 100644
index 00000000..2d681d72
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseListenerChannelsMenu.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSource.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSource.png
new file mode 100644
index 00000000..f4b6ebb2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSource.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannel.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannel.png
new file mode 100644
index 00000000..353f89b4
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannel.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannelsMenu.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannelsMenu.png
new file mode 100644
index 00000000..3186edcb
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceChannelsMenu.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceHowToGenerate.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceHowToGenerate.png
new file mode 100644
index 00000000..07663a9d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceHowToGenerate.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourcePresetsGear.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourcePresetsGear.png
new file mode 100644
index 00000000..2b7c5ebc
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourcePresetsGear.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceRawSignalMenu.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceRawSignalMenu.png
new file mode 100644
index 00000000..fdc1a0d7
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceRawSignalMenu.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSignal.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSignal.png
new file mode 100644
index 00000000..a17b3ac7
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSignal.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSpatialRange.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSpatialRange.png
new file mode 100644
index 00000000..9dbbc223
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceSpatialRange.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTimeEnvelope.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTimeEnvelope.png
new file mode 100644
index 00000000..166fa5f5
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTimeEnvelope.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTriggerObject.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTriggerObject.png
new file mode 100644
index 00000000..7b90465e
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseSourceTriggerObject.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseTimeEnvelope.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseTimeEnvelope.png
new file mode 100644
index 00000000..dff018a4
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorImpulseTimeEnvelope.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorNoiseProfile.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorNoiseProfile.png
new file mode 100644
index 00000000..b8a795c2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/InspectorNoiseProfile.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/TriggerObjectFilter.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/TriggerObjectFilter.png
new file mode 100644
index 00000000..8c77ff20
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/TriggerObjectFilter.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/clip-plane.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/clip-plane.png
new file mode 100644
index 00000000..fa8e6097
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/clip-plane.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-pitch45.png
new file mode 100644
index 00000000..d0dfbbe8
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-roll45.png
new file mode 100644
index 00000000..a4cdebf2
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-start.png
new file mode 100644
index 00000000..fd288407
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-yaw45.png
new file mode 100644
index 00000000..5be426b6
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-no-roll-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-pitch45.png
new file mode 100644
index 00000000..3771c21b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-roll45.png
new file mode 100644
index 00000000..48b64414
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-start.png
new file mode 100644
index 00000000..0825c91d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-yaw45.png
new file mode 100644
index 00000000..1b0a199b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-on-assign-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-pitch45.png
new file mode 100644
index 00000000..bd273b99
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-roll45.png
new file mode 100644
index 00000000..e25bebb1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-start.png
new file mode 100644
index 00000000..07700d83
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-pitch45.png
new file mode 100644
index 00000000..b3b69e90
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-roll45.png
new file mode 100644
index 00000000..778e0ff0
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-start.png
new file mode 100644
index 00000000..0961ccdc
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-yaw45.png
new file mode 100644
index 00000000..ecaf64a1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-world-up-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-yaw45.png
new file mode 100644
index 00000000..cadfd22a
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-lock-target-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-pitch45.png
new file mode 100644
index 00000000..cef89de5
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-roll45.png
new file mode 100644
index 00000000..c32b70e3
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-start.png
new file mode 100644
index 00000000..636e6da6
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-yaw45.png
new file mode 100644
index 00000000..305b14b0
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-simple-follow-world-up-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-pitch45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-pitch45.png
new file mode 100644
index 00000000..afc60392
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-pitch45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-roll45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-roll45.png
new file mode 100644
index 00000000..2849542e
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-roll45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-start.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-start.png
new file mode 100644
index 00000000..5f7672ca
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-start.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-yaw45.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-yaw45.png
new file mode 100644
index 00000000..2dea07c1
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/cm-binding-mode-world-space-yaw45.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/follow-offset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/follow-offset.png
new file mode 100644
index 00000000..897a9297
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/follow-offset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/handle-toolbar.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/handle-toolbar.png
new file mode 100644
index 00000000..fece5bea
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/handle-toolbar.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/overlays-menu.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/overlays-menu.png
new file mode 100644
index 00000000..05c74072
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/overlays-menu.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/scene-view.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/scene-view.png
new file mode 100644
index 00000000..b09bd504
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/scene-view.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/tracked-object-offset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/tracked-object-offset.png
new file mode 100644
index 00000000..78052873
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/images/tracked-object-offset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/index.md b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/index.md
new file mode 100644
index 00000000..a9826e9c
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Documentation~/index.md
@@ -0,0 +1,59 @@
+# About Cinemachine
+
+
+
+Cinemachine is a suite of modules for operating the Unity camera. Cinemachine solves the complex mathematics and logic
+of tracking targets, composing, blending, and cutting between shots. It is designed to significantly reduce the number
+of time-consuming manual manipulations and script revisions that take place during development.
+
+The procedural nature of these modules makes Cinemachine bug-resistant. When you make adjustments—for example, change an
+animation, vehicle speed, terrain, or other GameObjects in your Scene—Cinemachine dynamically adjusts its behavior to
+make the best shot. There is no need, for example, to re-write camera scripts just because a character turns left
+instead of right.
+
+Cinemachine works in real time across all genres including FPS, third person, 2D, side-scroller, top down, and RTS. It
+supports as many shots in your Scene as you need. Its modular system lets you compose sophisticated behaviors.
+
+Cinemachine works well with other Unity tools, acting as a powerful complement to Timeline, animation, and
+post-processing assets. Create your own [extensions](CinemachineVirtualCameraExtensions.md) or integrate it with your
+custom camera scripts.
+
+## Installing Cinemachine
+
+Cinemachine is a free package, available for any project. You install Cinemachine
+like [any other package](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html).
+
+After you install Cinemachine, a new *Cinemachine* folder appears in the Gizmos folder of your Project window, and a new
+__GameObject > Cinemachine__ menu is available. You can also access this menu when you right click inside the Hierarchy
+view.
+
+
+
+## Requirements
+
+Cinemachine has no external dependencies. Just install it and start using it. If you are also using the Post Processing
+Stack (version 2), then adapter modules are provided - protected by `ifdef` directives which auto-define if the presence
+of the Post Processing Stack is detected.
+
+There are similar `ifdef`-protected behaviours for other packages, such as HDRP Volumes, Timeline, and Pixel-Perfect.
+
+This version of Cinemachine is supported by the following versions of the Unity Editor:
+
+* 2019.4+ and later
+
+### Upgrading from the Cinemachine Asset Package
+
+If you already installed Cinemachine from the Unity Asset Store, you can upgrade to the Cinemachine Package.
+
+To upgrade to the Cinemachine Package:
+
+1. In Unity Editor, 2019.4+ or later, open your project.
+
+2. Save the current Scene you are working on.
+
+3. Create a new, empty Scene.
+
+4. In the [Project window](https://docs.unity3d.com/Manual/ProjectView.html), delete the Cinemachine Asset and any
+ CinemachinePostProcessing adaptor assets you may have installed.
+
+5. Install the Cinemachine package.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor.meta
new file mode 100644
index 00000000..ac430f15
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b46f22104d80d4c4e8d58f046ed45054
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources.meta
new file mode 100644
index 00000000..9328714e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1112226500c624c40a5a3e75030be2f0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute
new file mode 100644
index 00000000..9c9e2b4d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute
@@ -0,0 +1,60 @@
+#include "StdLib.hlsl"
+
+RWStructuredBuffer _WaveformBuffer;
+Texture2D _Source;
+SamplerState sampler_Source;
+
+cbuffer name
+{
+ float4 _Params; // x: source width, y: source height, z: linear, w: histogramResolution
+};
+
+#if defined SHADER_API_GLES3
+ #define GROUP_SIZE 128
+ #define GROUP_SIZE_X 16
+ #define GROUP_SIZE_Y 8
+#else
+ #define GROUP_SIZE 256
+ #define GROUP_SIZE_X 16
+ #define GROUP_SIZE_Y 16
+#endif
+
+half3 LinearToSRGB(half3 c)
+{
+ half3 sRGBLo = c * 12.92;
+ half3 sRGBHi = (PositivePow(c, half3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055;
+ half3 sRGB = (c <= 0.0031308) ? sRGBLo : sRGBHi;
+ return sRGB;
+}
+
+#pragma kernel KCMWaveformGather
+[numthreads(1, GROUP_SIZE, 1)]
+void KCMWaveformGather(uint2 dispatchThreadId : SV_DispatchThreadID)
+{
+ // Gather local group histogram
+ if (dispatchThreadId.x < uint(_Params.x) && dispatchThreadId.y < uint(_Params.y))
+ {
+ float3 color = _Source[dispatchThreadId].rgb;
+ color = saturate(color);
+
+ // We want a gamma-corrected histogram (like Photoshop & all)
+ if (_Params.z > 0)
+ color = LinearToSRGB(color);
+
+ // Convert channel values to histogram bins
+ uint3 idx = (uint3)(round(color * (_Params.w - 1)));
+ idx += dispatchThreadId.x * _Params.w;
+
+ if (idx.x > 0u) InterlockedAdd(_WaveformBuffer[idx.x].x, 1u); // Red
+ if (idx.y > 0u) InterlockedAdd(_WaveformBuffer[idx.y].y, 1u); // Green
+ if (idx.z > 0u) InterlockedAdd(_WaveformBuffer[idx.z].z, 1u); // Blue
+ }
+}
+
+#pragma kernel KCMWaveformClear
+[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)]
+void KCMWaveformClear(uint2 dispatchThreadId : SV_DispatchThreadID)
+{
+ if (dispatchThreadId.x < uint(_Params.x) && dispatchThreadId.y < uint(_Params.w))
+ _WaveformBuffer[dispatchThreadId.y * uint(_Params.x) + dispatchThreadId.x] = uint4(0u, 0u, 0u, 0u);
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute.meta
new file mode 100644
index 00000000..c52d56ab
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.compute.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6dd3f00b9032de54c8784df7bdc6fdf8
+timeCreated: 1517591688
+licenseType: Pro
+ComputeShaderImporter:
+ externalObjects: {}
+ currentAPIMask: 4
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader
new file mode 100644
index 00000000..4e640789
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader
@@ -0,0 +1,57 @@
+Shader "CMWaveform"
+{
+ HLSLINCLUDE
+
+ #pragma target 4.5
+ #include "StdLib.hlsl"
+
+ StructuredBuffer _WaveformBuffer;
+ float3 _Params; // x: buffer width, y: buffer height, z: exposure, w: unused
+
+ float3 Tonemap(float3 x, float exposure)
+ {
+ const float a = 6.2;
+ const float b = 0.5;
+ const float c = 1.7;
+ const float d = 0.06;
+ x *= exposure;
+ x = max((0.0).xxx, x - (0.004).xxx);
+ x = (x * (a * x + b)) / (x * (a * x + c) + d);
+ return x * x;
+ }
+
+ float4 Frag(VaryingsDefault i) : SV_Target
+ {
+ const float3 red = float3(1.4, 0.03, 0.02);
+ const float3 green = float3(0.02, 1.1, 0.05);
+ const float3 blue = float3(0.0, 0.25, 1.5);
+ float3 color = float3(0.0, 0.0, 0.0);
+
+ uint2 uvI = i.vertex.xy;
+ float3 w = _WaveformBuffer[uvI.x * _Params.y + uvI.y].xyz;
+
+ color += red * w.r;
+ color += green * w.g;
+ color += blue * w.b;
+ color = Tonemap(color, _Params.z);
+
+ return float4(saturate(color), 1.0);
+ }
+
+ ENDHLSL
+
+ SubShader
+ {
+ Cull Off ZWrite Off ZTest Always
+
+ Pass
+ {
+ HLSLPROGRAM
+
+ #pragma vertex VertDefault
+ #pragma fragment Frag
+
+ ENDHLSL
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader.meta
new file mode 100644
index 00000000..2142f5e8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/CMWaveform.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e4e5d566a8aa9914c906555a6857fcb9
+timeCreated: 1517591688
+licenseType: Pro
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif
new file mode 100644
index 00000000..30b5272d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif.meta
new file mode 100644
index 00000000..df6ada0f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Cinemachine_header.tif.meta
@@ -0,0 +1,74 @@
+fileFormatVersion: 2
+guid: 372fe04232d5ed94d8d71524616c1543
+timeCreated: 1503608963
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles.meta
new file mode 100644
index 00000000..68dfd792
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fae74d622a2c6434f9c597a6bbde0140
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected.meta
new file mode 100644
index 00000000..35121817
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0e325619dfd3c438a8b622eec81fe341
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png
new file mode 100644
index 00000000..ca34c903
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png.meta
new file mode 100644
index 00000000..418e7727
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FOV.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 321dd32fc6122420299d8fb7978c77cc
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png
new file mode 100644
index 00000000..d16cae3d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png.meta
new file mode 100644
index 00000000..0a4a6c95
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FarNearClip.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 3438c1a20bf054a9f987a531b43f0a08
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png
new file mode 100644
index 00000000..7f1fd0dc
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png.meta
new file mode 100644
index 00000000..dd97a5a2
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/FollowOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 176778e4c3a9640d8aca4ca14b80aefd
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png
new file mode 100644
index 00000000..4e8e4d49
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png.meta
new file mode 100644
index 00000000..71d7d828
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark-Selected/TrackedObjectOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: abf5fad07c5e3473192deab2278caf13
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark.meta
new file mode 100644
index 00000000..d80b2c57
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 091323c914fdf4a39a5d1555432e0289
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png
new file mode 100644
index 00000000..74266ca0
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png.meta
new file mode 100644
index 00000000..73864af4
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FOV.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: e19681a513069400aa38220f89283d8d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png
new file mode 100644
index 00000000..a24886ea
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png.meta
new file mode 100644
index 00000000..60d44eb5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FarNearClip.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: ada37388502cc47db96a985a8eeca2c1
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png
new file mode 100644
index 00000000..8b367d75
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png.meta
new file mode 100644
index 00000000..c809694a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/FollowOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 9e355d6040d494ded95f7b8bd325e899
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png
new file mode 100644
index 00000000..f148fc96
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png.meta
new file mode 100644
index 00000000..8b435404
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 1edfbc3a6b2e0423483a2af98a4bb746
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png
new file mode 100644
index 00000000..b854165f
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png.meta
new file mode 100644
index 00000000..089165e0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigBottom.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 500ec004d017c47f0a8ac54fcdfcc55c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png
new file mode 100644
index 00000000..312b291c
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png.meta
new file mode 100644
index 00000000..d132e99e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigMiddle.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 00a6f4168c1f24f9383a7cdbf9cb484d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png
new file mode 100644
index 00000000..968f8974
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png.meta
new file mode 100644
index 00000000..25685ccb
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/FreelookRigTop.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 73aa031d2843e47a3a18d390a8ce7c22
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected.meta
new file mode 100644
index 00000000..51143386
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d7ca46c830e1d423ea223bfb97d614eb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png
new file mode 100644
index 00000000..ca34c903
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png.meta
new file mode 100644
index 00000000..36ee9e69
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FOV.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: caaef75bbc86548719301167f1fff52b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png
new file mode 100644
index 00000000..d16cae3d
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png.meta
new file mode 100644
index 00000000..3c81b99b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FarNearClip.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 741a8111b35484dd283a7008a3a8373b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png
new file mode 100644
index 00000000..7f1fd0dc
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png.meta
new file mode 100644
index 00000000..b4063a14
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/FollowOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: cb2ae02bbb5ba42b8890f2b3d7b153a6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png
new file mode 100644
index 00000000..4e8e4d49
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png.meta
new file mode 100644
index 00000000..433e886d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light-Selected/TrackedObjectOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: c43a523f221264730a86d6095aae8153
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light.meta
new file mode 100644
index 00000000..2bcee830
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 869dbd005b74b458fb4c14ea0dcfd0ba
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png
new file mode 100644
index 00000000..e15af187
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png.meta
new file mode 100644
index 00000000..629352d1
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FOV.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 2298d7737762c4efbbac29ffd335454a
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png
new file mode 100644
index 00000000..cd76ec98
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png.meta
new file mode 100644
index 00000000..999c4dc9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FarNearClip.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 22b1f48a2b5804151ae7f1171cc64c8c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png
new file mode 100644
index 00000000..a1279833
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png.meta
new file mode 100644
index 00000000..f66b168a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/FollowOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: 7cd5c9cd9de00488ebbdd134c8a20a40
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png
new file mode 100644
index 00000000..f16dfb1e
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png.meta
new file mode 100644
index 00000000..a123a806
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/Handles/Light/TrackedObjectOffset.png.meta
@@ -0,0 +1,99 @@
+fileFormatVersion: 2
+guid: b880c0b2ad1ba404391179484fbf51bf
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png
new file mode 100644
index 00000000..c0a61de7
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png.meta
new file mode 100644
index 00000000..5588fe95
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/PostProcessLayer.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ba6fb66d108240a4a98dea11660dc646
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png
new file mode 100644
index 00000000..b124d88b
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png.meta
new file mode 100644
index 00000000..e1f2bae0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/SceneToolsLabelBackground.png.meta
@@ -0,0 +1,98 @@
+fileFormatVersion: 2
+guid: 5ca5d3d4919ce4b4bbbc4e3c67bf6320
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl
new file mode 100644
index 00000000..4cd863f0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl
@@ -0,0 +1,63 @@
+// Subset of PostProcessing's stdlib.hlsl
+
+#ifndef UNITY_CMWAVEFORM_STDLIB
+#define UNITY_CMWAVEFORM_STDLIB
+
+const float _RenderViewportScaleFactor = 1;
+
+#define FLT_EPSILON 1.192092896e-07 // Smallest positive number, such that 1.0 + FLT_EPSILON != 1.0
+
+float3 PositivePow(float3 base, float3 power)
+{
+ return pow(max(abs(base), float3(FLT_EPSILON, FLT_EPSILON, FLT_EPSILON)), power);
+}
+
+#if defined(UNITY_SINGLE_PASS_STEREO)
+float2 TransformStereoScreenSpaceTex(float2 uv, float w)
+{
+ float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
+ scaleOffset.xy *= _RenderViewportScaleFactor;
+ return uv.xy * scaleOffset.xy + scaleOffset.zw * w;
+}
+#else
+float2 TransformStereoScreenSpaceTex(float2 uv, float w)
+{
+ return uv * _RenderViewportScaleFactor;
+}
+#endif
+
+// Vertex manipulation
+float2 TransformTriangleVertexToUV(float2 vertex)
+{
+ float2 uv = (vertex + 1.0) * 0.5;
+ return uv;
+}
+
+struct AttributesDefault
+{
+ float3 vertex : POSITION;
+};
+
+struct VaryingsDefault
+{
+ float4 vertex : SV_POSITION;
+ float2 texcoord : TEXCOORD0;
+ float2 texcoordStereo : TEXCOORD1;
+};
+
+VaryingsDefault VertDefault(AttributesDefault v)
+{
+ VaryingsDefault o;
+ o.vertex = float4(v.vertex.xy, 0.0, 1.0);
+ o.texcoord = TransformTriangleVertexToUV(v.vertex.xy);
+
+#if UNITY_UV_STARTS_AT_TOP
+ o.texcoord = o.texcoord * float2(1.0, -1.0) + float2(0.0, 1.0);
+#endif
+
+ o.texcoordStereo = TransformStereoScreenSpaceTex(o.texcoord, 1.0);
+
+ return o;
+}
+
+#endif // UNITY_CMWAVEFORM_STDLIB
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl.meta
new file mode 100644
index 00000000..791b28ba
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/StdLib.hlsl.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f34d110791e602a418f182fbec6b699d
+timeCreated: 1517597295
+licenseType: Pro
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png
new file mode 100644
index 00000000..47f19039
Binary files /dev/null and b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png differ
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png.meta
new file mode 100644
index 00000000..2fe92a72
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/EditorResources/cm_logo_sm.png.meta
@@ -0,0 +1,82 @@
+fileFormatVersion: 2
+guid: 5f2a108eb023faf43a809979fd3d38f2
+timeCreated: 1481660562
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 1
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 2048
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors.meta
new file mode 100644
index 00000000..77eabb3e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6b46e8ffe448f084ab12938cb774d063
+folderAsset: yes
+timeCreated: 1489096338
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs
new file mode 100644
index 00000000..aad4113a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs
@@ -0,0 +1,173 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(Cinemachine3rdPersonFollow))]
+ [CanEditMultipleObjects]
+ internal class Cinemachine3rdPersonFollowEditor : BaseEditor
+ {
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(Cinemachine3rdPersonFollow))]
+ static void Draw3rdPersonGizmos(Cinemachine3rdPersonFollow target, GizmoType selectionType)
+ {
+ if (target.IsValid)
+ {
+ var isLive = CinemachineCore.Instance.IsLive(target.VirtualCamera);
+ Color originalGizmoColour = Gizmos.color;
+ Gizmos.color = isLive
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+
+ target.GetRigPositions(out Vector3 root, out Vector3 shoulder, out Vector3 hand);
+ Gizmos.DrawLine(root, shoulder);
+ Gizmos.DrawLine(shoulder, hand);
+ Gizmos.DrawSphere(root, 0.02f);
+ Gizmos.DrawSphere(shoulder, 0.02f);
+#if CINEMACHINE_PHYSICS
+ Gizmos.DrawSphere(hand, target.CameraRadius);
+
+ if (isLive)
+ Gizmos.color = CinemachineSettings.CinemachineCoreSettings.BoundaryObjectGizmoColour;
+
+ Gizmos.DrawSphere(target.VirtualCamera.State.RawPosition, target.CameraRadius);
+#endif
+
+ Gizmos.color = originalGizmoColour;
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as Cinemachine3rdPersonFollow).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "3rd Person Follow requires a Follow Target. Change Body to Do Nothing if you don't want a Follow target.",
+ MessageType.Warning);
+ DrawRemainingPropertiesInInspector();
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ protected virtual void OnEnable()
+ {
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+ }
+
+ protected virtual void OnDisable()
+ {
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+ }
+
+ void OnSceneGUI()
+ {
+ DrawSceneTools();
+ }
+
+ void DrawSceneTools()
+ {
+ var thirdPerson = Target;
+ if (thirdPerson == null || !thirdPerson.IsValid)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ var originalColor = Handles.color;
+
+ thirdPerson.GetRigPositions(out var followTargetPosition, out var shoulderPosition,
+ out var armPosition);
+ var followTargetRotation = thirdPerson.FollowTargetRotation;
+ var targetForward = followTargetRotation * Vector3.forward;
+ var heading = Cinemachine3rdPersonFollow.GetHeading(
+ followTargetRotation, thirdPerson.VirtualCamera.State.ReferenceUp);
+
+ EditorGUI.BeginChangeCheck();
+ // shoulder handle
+#if UNITY_2022_2_OR_NEWER
+ var sHandleIds = Handles.PositionHandleIds.@default;
+ var newShoulderPosition = Handles.PositionHandle(sHandleIds, shoulderPosition, heading);
+ var sHandleMinId = sHandleIds.x - 1;
+ var sHandleMaxId = sHandleIds.xyz + 1;
+#else
+ var sHandleMinId = GUIUtility.GetControlID(FocusType.Passive);
+ var newShoulderPosition = Handles.PositionHandle(shoulderPosition, heading);
+ var sHandleMaxId = GUIUtility.GetControlID(FocusType.Passive);
+#endif
+
+ Handles.color = Handles.preselectionColor;
+ // arm handle
+ var followUp = followTargetRotation * Vector3.up;
+ var aHandleId = GUIUtility.GetControlID(FocusType.Passive);
+ var newArmPosition = Handles.Slider(aHandleId, armPosition, followUp,
+ CinemachineSceneToolHelpers.CubeHandleCapSize(armPosition), Handles.CubeHandleCap, 0.5f);
+
+ // cam distance handle
+ var camDistance = thirdPerson.CameraDistance;
+ var camPos = armPosition - targetForward * camDistance;
+ var cdHandleId = GUIUtility.GetControlID(FocusType.Passive);
+ var newCamPos = Handles.Slider(cdHandleId, camPos, targetForward,
+ CinemachineSceneToolHelpers.CubeHandleCapSize(camPos), Handles.CubeHandleCap, 0.5f);
+ if (EditorGUI.EndChangeCheck())
+ {
+ // Modify via SerializedProperty for OnValidate to get called automatically, and scene repainting too
+ var so = new SerializedObject(thirdPerson);
+
+ var shoulderOffset = so.FindProperty(() => thirdPerson.ShoulderOffset);
+ shoulderOffset.vector3Value +=
+ CinemachineSceneToolHelpers.PositionHandleDelta(heading, newShoulderPosition, shoulderPosition);
+ var verticalArmLength = so.FindProperty(() => thirdPerson.VerticalArmLength);
+ verticalArmLength.floatValue +=
+ CinemachineSceneToolHelpers.SliderHandleDelta(newArmPosition, armPosition, followUp);
+ var cameraDistance = so.FindProperty(() => thirdPerson.CameraDistance);
+ cameraDistance.floatValue -=
+ CinemachineSceneToolHelpers.SliderHandleDelta(newCamPos, camPos, targetForward);
+
+ so.ApplyModifiedProperties();
+ }
+
+ var isDragged = IsHandleDragged(sHandleMinId, sHandleMaxId, shoulderPosition, "Shoulder Offset "
+ + thirdPerson.ShoulderOffset.ToString("F1"), followTargetPosition, shoulderPosition);
+ isDragged |= IsHandleDragged(aHandleId, aHandleId, armPosition, "Vertical Arm Length ("
+ + thirdPerson.VerticalArmLength.ToString("F1") + ")", shoulderPosition, armPosition);
+ isDragged |= IsHandleDragged(cdHandleId, cdHandleId, camPos, "Camera Distance ("
+ + camDistance.ToString("F1") + ")", armPosition, camPos);
+
+ CinemachineSceneToolHelpers.SoloOnDrag(isDragged, thirdPerson.VirtualCamera, sHandleMaxId);
+
+ Handles.color = originalColor;
+ }
+
+ // local function that draws label and guide lines, and returns true if a handle has been dragged
+ static bool IsHandleDragged
+ (int handleMinId, int handleMaxId, Vector3 labelPos, string text, Vector3 lineStart, Vector3 lineEnd)
+ {
+ bool handleIsDragged;
+ bool handleIsDraggedOrHovered;
+ if (handleMinId == handleMaxId) {
+ handleIsDragged = GUIUtility.hotControl == handleMinId;
+ handleIsDraggedOrHovered = handleIsDragged || HandleUtility.nearestControl == handleMinId;
+ }
+ else
+ {
+ handleIsDragged = handleMinId < GUIUtility.hotControl && GUIUtility.hotControl < handleMaxId;
+ handleIsDraggedOrHovered = handleIsDragged ||
+ (handleMinId < HandleUtility.nearestControl && HandleUtility.nearestControl < handleMaxId);
+ }
+
+ if (handleIsDraggedOrHovered)
+ CinemachineSceneToolHelpers.DrawLabel(labelPos, text);
+
+ Handles.color = handleIsDraggedOrHovered ?
+ Handles.selectedColor : CinemachineSceneToolHelpers.HelperLineDefaultColor;
+ Handles.DrawLine(lineStart, lineEnd, CinemachineSceneToolHelpers.LineThickness);
+
+ return handleIsDragged;
+ }
+ }
+#endif
+ }
+}
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs.meta
new file mode 100644
index 00000000..785c9d94
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/Cinemachine3rdPersonFollowEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 137fce2acc78adb45b30ac59c3b89b11
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs
new file mode 100644
index 00000000..c9e8a6bd
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs
@@ -0,0 +1,37 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineBasicMultiChannelPerlin))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineBasicMultiChannelPerlinEditor
+ : BaseEditor
+ {
+ private void OnEnable()
+ {
+ NoiseSettingsPropertyDrawer.InvalidateProfileList();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineBasicMultiChannelPerlin).m_NoiseProfile == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "A Noise Profile is required. You may choose from among the NoiseSettings assets defined in the project.",
+ MessageType.Warning);
+ DrawRemainingPropertiesInInspector();
+
+ Rect rect = EditorGUILayout.GetControlRect(true);
+ rect.width -= EditorGUIUtility.labelWidth; rect.x += EditorGUIUtility.labelWidth;
+ if (GUI.Button(rect, "New random seed"))
+ {
+ for (int i = 0; i < targets.Length; ++i)
+ (targets[i] as CinemachineBasicMultiChannelPerlin).ReSeed();
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs.meta
new file mode 100644
index 00000000..a25727fd
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBasicMultiChannelPerlinEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ee42f1964a0e8224c90be81905946699
+timeCreated: 1484091313
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs
new file mode 100644
index 00000000..fabdc628
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs
@@ -0,0 +1,215 @@
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineBlendListCamera))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineBlendListCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Instructions));
+ }
+
+ private UnityEditorInternal.ReorderableList mChildList;
+ private UnityEditorInternal.ReorderableList mInstructionList;
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ mChildList = null;
+ mInstructionList = null;
+ }
+
+ protected override void OnDisable()
+ {
+ base.OnDisable();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mInstructionList == null)
+ SetupInstructionList();
+ if (mChildList == null)
+ SetupChildList();
+
+ // Ordinary properties
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawRemainingPropertiesInInspector();
+
+ if (targets.Length == 1)
+ {
+ // Instructions
+ UpdateCameraCandidates();
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.Separator();
+ mInstructionList.DoLayoutList();
+
+ EditorGUILayout.Separator();
+
+ mChildList.DoLayoutList();
+ if (EditorGUI.EndChangeCheck())
+ {
+ serializedObject.ApplyModifiedProperties();
+ Target.ValidateInstructions();
+ }
+ }
+ else
+ {
+ EditorGUILayout.HelpBox(Styles.virtualCameraChildrenInfoMsg.text, MessageType.Info);
+ }
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ private string[] mCameraCandidates;
+ private Dictionary mCameraIndexLookup;
+ private void UpdateCameraCandidates()
+ {
+ List vcams = new List();
+ mCameraIndexLookup = new Dictionary();
+ vcams.Add("(none)");
+ CinemachineVirtualCameraBase[] children = Target.ChildCameras;
+ foreach (var c in children)
+ {
+ mCameraIndexLookup[c] = vcams.Count;
+ vcams.Add(c.Name);
+ }
+ mCameraCandidates = vcams.ToArray();
+ }
+
+ private int GetCameraIndex(Object obj)
+ {
+ if (obj == null || mCameraIndexLookup == null)
+ return 0;
+ CinemachineVirtualCameraBase vcam = obj as CinemachineVirtualCameraBase;
+ if (vcam == null)
+ return 0;
+ if (!mCameraIndexLookup.ContainsKey(vcam))
+ return 0;
+ return mCameraIndexLookup[vcam];
+ }
+
+ void SetupInstructionList()
+ {
+ mInstructionList = new UnityEditorInternal.ReorderableList(serializedObject,
+ serializedObject.FindProperty(() => Target.m_Instructions),
+ true, true, true, true);
+
+ // Needed for accessing field names as strings
+ CinemachineBlendListCamera.Instruction def = new CinemachineBlendListCamera.Instruction();
+
+ float vSpace = 2;
+ float hSpace = 3;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+ float hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3;
+ mInstructionList.drawHeaderCallback = (Rect rect) =>
+ {
+ float sharedWidth = rect.width - EditorGUIUtility.singleLineHeight
+ - floatFieldWidth - hSpace - hBigSpace;
+ rect.x += EditorGUIUtility.singleLineHeight; rect.width = sharedWidth / 2;
+ EditorGUI.LabelField(rect, "Child");
+
+ rect.x += rect.width + hSpace;
+ EditorGUI.LabelField(rect, "Blend in");
+
+ rect.x += rect.width + hBigSpace; rect.width = floatFieldWidth;
+ EditorGUI.LabelField(rect, "Hold");
+ };
+
+ mInstructionList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ SerializedProperty instProp = mInstructionList.serializedProperty.GetArrayElementAtIndex(index);
+ float sharedWidth = rect.width - floatFieldWidth - hSpace - hBigSpace;
+ rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+
+ rect.width = sharedWidth / 2;
+ SerializedProperty vcamSelProp = instProp.FindPropertyRelative(() => def.m_VirtualCamera);
+ int currentVcam = GetCameraIndex(vcamSelProp.objectReferenceValue);
+ int vcamSelection = EditorGUI.Popup(rect, currentVcam, mCameraCandidates);
+ if (currentVcam != vcamSelection)
+ vcamSelProp.objectReferenceValue = (vcamSelection == 0)
+ ? null : Target.ChildCameras[vcamSelection - 1];
+
+ rect.x += rect.width + hSpace; rect.width = sharedWidth / 2;
+ if (index > 0 || Target.m_Loop)
+ EditorGUI.PropertyField(rect, instProp.FindPropertyRelative(() => def.m_Blend),
+ GUIContent.none);
+
+ if (index < mInstructionList.count - 1 || Target.m_Loop)
+ {
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = hBigSpace;
+
+ rect.x += rect.width; rect.width = floatFieldWidth + hBigSpace;
+ SerializedProperty holdProp = instProp.FindPropertyRelative(() => def.m_Hold);
+ EditorGUI.PropertyField(rect, holdProp, new GUIContent(" ", holdProp.tooltip));
+ holdProp.floatValue = Mathf.Max(holdProp.floatValue, 0);
+
+ EditorGUIUtility.labelWidth = oldWidth;
+ }
+ };
+ }
+
+ void SetupChildList()
+ {
+ float vSpace = 2;
+ mChildList = new UnityEditorInternal.ReorderableList(serializedObject,
+ serializedObject.FindProperty(() => Target.m_ChildCameras),
+ true, true, true, true);
+
+ mChildList.drawHeaderCallback = (Rect rect) =>
+ {
+ EditorGUI.LabelField(rect, "Virtual Camera Children");
+ };
+ mChildList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ rect.y += vSpace;
+ Vector2 pos = rect.position;
+ rect.height = EditorGUIUtility.singleLineHeight;
+ SerializedProperty element
+ = mChildList.serializedProperty.GetArrayElementAtIndex(index);
+ EditorGUI.PropertyField(rect, element, GUIContent.none);
+ };
+ mChildList.onChangedCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ if (l.index < 0 || l.index >= l.serializedProperty.arraySize)
+ return;
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ vcam.transform.SetSiblingIndex(l.index);
+ };
+ mChildList.onAddCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ var vcam = CinemachineMenu.CreateDefaultVirtualCamera();
+ Undo.SetTransformParent(vcam.transform, Target.transform, "");
+ vcam.transform.SetSiblingIndex(index);
+ };
+ mChildList.onRemoveCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ Undo.DestroyObjectImmediate(vcam.gameObject);
+ };
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs.meta
new file mode 100644
index 00000000..d4a700e9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlendListCameraEditor.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 0181db608628b494d8ae50728e507ce1
+timeCreated: 1509479768
+licenseType: Pro
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs
new file mode 100644
index 00000000..458febe6
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs
@@ -0,0 +1,161 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEditorInternal;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineBlenderSettings))]
+ internal sealed class CinemachineBlenderSettingsEditor : BaseEditor
+ {
+ private ReorderableList mBlendList;
+
+ ///
+ /// Called when building the Camera popup menus, to get the domain of possible
+ /// cameras. If no delegate is set, will find all top-level (non-slave)
+ /// virtual cameras in the scene.
+ ///
+ public GetAllVirtualCamerasDelegate GetAllVirtualCameras;
+ public delegate CinemachineVirtualCameraBase[] GetAllVirtualCamerasDelegate();
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_CustomBlends));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mBlendList == null)
+ SetupBlendList();
+
+ DrawRemainingPropertiesInInspector();
+
+ UpdateCameraCandidates();
+ mBlendList.DoLayoutList();
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ private const string kNoneLabel = "(none)";
+ private string[] mCameraCandidates;
+ private Dictionary mCameraIndexLookup;
+ private void UpdateCameraCandidates()
+ {
+ List vcams = new List();
+ mCameraIndexLookup = new Dictionary();
+
+ CinemachineVirtualCameraBase[] candidates;
+ if (GetAllVirtualCameras != null)
+ candidates = GetAllVirtualCameras();
+ else
+ {
+ // Get all top-level (i.e. non-slave) virtual cameras
+ candidates = Resources.FindObjectsOfTypeAll(
+ typeof(CinemachineVirtualCameraBase)) as CinemachineVirtualCameraBase[];
+
+ for (int i = 0; i < candidates.Length; ++i)
+ if (candidates[i].ParentCamera != null)
+ candidates[i] = null;
+ }
+ vcams.Add(kNoneLabel);
+ vcams.Add(CinemachineBlenderSettings.kBlendFromAnyCameraLabel);
+ foreach (CinemachineVirtualCameraBase c in candidates)
+ if (c != null && !vcams.Contains(c.Name))
+ vcams.Add(c.Name);
+
+ mCameraCandidates = vcams.ToArray();
+ for (int i = 0; i < mCameraCandidates.Length; ++i)
+ mCameraIndexLookup[mCameraCandidates[i]] = i;
+ }
+
+ private int GetCameraIndex(string name)
+ {
+ if (name == null || mCameraIndexLookup == null)
+ return 0;
+ if (!mCameraIndexLookup.ContainsKey(name))
+ return 0;
+ return mCameraIndexLookup[name];
+ }
+
+ void DrawVcamSelector(Rect r, SerializedProperty prop)
+ {
+ r.width -= EditorGUIUtility.singleLineHeight;
+ int current = GetCameraIndex(prop.stringValue);
+ var oldColor = GUI.color;
+ if (current == 0)
+ GUI.color = new Color(1, 193.0f/255.0f, 7.0f/255.0f); // the "warning" icon color
+ EditorGUI.PropertyField(r, prop, GUIContent.none);
+ r.x += r.width; r.width = EditorGUIUtility.singleLineHeight;
+ int sel = EditorGUI.Popup(r, current, mCameraCandidates);
+ if (current != sel)
+ prop.stringValue = (mCameraCandidates[sel] == kNoneLabel)
+ ? string.Empty : mCameraCandidates[sel];
+ GUI.color = oldColor;
+ }
+
+ void SetupBlendList()
+ {
+ mBlendList = new ReorderableList(serializedObject,
+ serializedObject.FindProperty(() => Target.m_CustomBlends),
+ true, true, true, true);
+
+ // Needed for accessing string names of fields
+ CinemachineBlenderSettings.CustomBlend def = new CinemachineBlenderSettings.CustomBlend();
+ CinemachineBlendDefinition def2 = new CinemachineBlendDefinition();
+
+ float vSpace = 2;
+ float hSpace = 3;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+ mBlendList.drawHeaderCallback = (Rect rect) =>
+ {
+ rect.width -= (EditorGUIUtility.singleLineHeight + 2 * hSpace);
+ rect.width /= 3;
+ rect.x += EditorGUIUtility.singleLineHeight;
+ EditorGUI.LabelField(rect, "From");
+
+ rect.x += rect.width + hSpace;
+ EditorGUI.LabelField(rect, "To");
+
+ rect.x += rect.width + hSpace; rect.width -= floatFieldWidth + hSpace;
+ EditorGUI.LabelField(rect, "Style");
+
+ rect.x += rect.width + hSpace; rect.width = floatFieldWidth;
+ EditorGUI.LabelField(rect, "Time");
+ };
+
+ mBlendList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ SerializedProperty element
+ = mBlendList.serializedProperty.GetArrayElementAtIndex(index);
+
+ rect.y += vSpace;
+ rect.height = EditorGUIUtility.singleLineHeight;
+ rect.width -= 2 * hSpace; rect.width /= 3;
+ DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_From));
+
+ rect.x += rect.width + hSpace;
+ DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_To));
+
+ SerializedProperty blendProp = element.FindPropertyRelative(() => def.m_Blend);
+ rect.x += rect.width + hSpace;
+ EditorGUI.PropertyField(rect, blendProp, GUIContent.none);
+ };
+
+ mBlendList.onAddCallback = (ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ ++l.serializedProperty.arraySize;
+ SerializedProperty blendProp = l.serializedProperty.GetArrayElementAtIndex(
+ index).FindPropertyRelative(() => def.m_Blend);
+
+ blendProp.FindPropertyRelative(() => def2.m_Style).enumValueIndex
+ = (int)CinemachineBlendDefinition.Style.EaseInOut;
+ blendProp.FindPropertyRelative(() => def2.m_Time).floatValue = 2f;
+ };
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs.meta
new file mode 100644
index 00000000..abb60606
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBlenderSettingsEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1ff9d8296ed1f02419bf4f417ff2265e
+timeCreated: 1486495673
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs
new file mode 100644
index 00000000..14d338ff
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs
@@ -0,0 +1,189 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+using Cinemachine.Utility;
+using System.IO;
+
+namespace Cinemachine.Editor
+{
+ ///
+ /// Inspector for CinemachineBrain
+ ///
+ [CustomEditor(typeof(CinemachineBrain))]
+ [CanEditMultipleObjects]
+ public sealed class CinemachineBrainEditor : BaseEditor
+ {
+ EmbeddeAssetEditor m_BlendsEditor;
+ bool mEventsExpanded = false;
+
+ /// Obsolete, do not use. Use the overload, which is more performant
+ /// List of property names to exclude
+ protected override List GetExcludedPropertiesInInspector()
+ { return base.GetExcludedPropertiesInInspector(); }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_CameraCutEvent));
+ excluded.Add(FieldPath(x => x.m_CameraActivatedEvent));
+ excluded.Add(FieldPath(x => x.m_CustomBlends));
+ }
+
+ private void OnEnable()
+ {
+ m_BlendsEditor = new EmbeddeAssetEditor(FieldPath(x => x.m_CustomBlends), this);
+ m_BlendsEditor.OnChanged = (CinemachineBlenderSettings b) => { InspectorUtility.RepaintGameView(); };
+ }
+
+ private void OnDisable()
+ {
+ if (m_BlendsEditor != null)
+ m_BlendsEditor.OnDisable();
+ }
+
+ /// Create the contents of the inspector panel
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+
+ // Show the active camera and blend
+ GUI.enabled = false;
+ ICinemachineCamera vcam = Target.ActiveVirtualCamera;
+ Transform activeCam = (vcam != null && vcam.VirtualCameraGameObject != null)
+ ? vcam.VirtualCameraGameObject.transform : null;
+ EditorGUILayout.ObjectField("Live Camera", activeCam, typeof(Transform), true);
+ EditorGUILayout.DelayedTextField(
+ "Live Blend", Target.ActiveBlend != null
+ ? Target.ActiveBlend.Description : string.Empty);
+ GUI.enabled = true;
+
+ // Normal properties
+ DrawRemainingPropertiesInInspector();
+
+ if (targets.Length == 1)
+ {
+ // Blender
+ m_BlendsEditor.DrawEditorCombo(
+ "Create New Blender Asset",
+ Target.gameObject.name + " Blends", "asset", string.Empty,
+ "Custom Blends", false);
+
+ mEventsExpanded = EditorGUILayout.Foldout(mEventsExpanded, "Events", true);
+ if (mEventsExpanded)
+ {
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_CameraCutEvent));
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_CameraActivatedEvent));
+ }
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected, typeof(CinemachineBrain))]
+ private static void DrawBrainGizmos(CinemachineBrain brain, GizmoType drawType)
+ {
+ if (brain.OutputCamera != null && brain.m_ShowCameraFrustum && brain.isActiveAndEnabled)
+ {
+ DrawCameraFrustumGizmo(
+ brain, LensSettings.FromCamera(brain.OutputCamera),
+ brain.transform.localToWorldMatrix,
+ Color.white); // GML why is this color hardcoded?
+ }
+ }
+
+ internal static void DrawCameraFrustumGizmo(
+ CinemachineBrain brain, LensSettings lens,
+ Matrix4x4 transform, Color color)
+ {
+ float aspect = 1;
+ bool ortho = false;
+ if (brain != null)
+ {
+ aspect = brain.OutputCamera.aspect;
+ ortho = brain.OutputCamera.orthographic;
+ }
+
+ Matrix4x4 originalMatrix = Gizmos.matrix;
+ Color originalGizmoColour = Gizmos.color;
+
+ Gizmos.color = color;
+ Gizmos.matrix = transform;
+ if (ortho)
+ {
+ Vector3 size = new Vector3(
+ aspect * lens.OrthographicSize * 2,
+ lens.OrthographicSize * 2,
+ lens.FarClipPlane - lens.NearClipPlane);
+ Gizmos.DrawWireCube(
+ new Vector3(0, 0, (size.z / 2) + lens.NearClipPlane), size);
+ }
+ else
+ {
+ Gizmos.DrawFrustum(
+ Vector3.zero, lens.FieldOfView,
+ lens.FarClipPlane, lens.NearClipPlane, aspect);
+ }
+ Gizmos.matrix = originalMatrix;
+ Gizmos.color = originalGizmoColour;
+ }
+
+ /// Draw the gizmo for a virtual camera in the scene view
+ /// The virtual camera
+ /// How the object is selected
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy | GizmoType.Pickable, typeof(CinemachineVirtualCameraBase))]
+ public static void DrawVirtualCameraBaseGizmos(CinemachineVirtualCameraBase vcam, GizmoType selectionType)
+ {
+ // Don't draw gizmos on hidden stuff
+ if ((vcam.gameObject.hideFlags & (HideFlags.HideInHierarchy | HideFlags.HideInInspector)) != 0)
+ return;
+
+ if (vcam.ParentCamera != null && (selectionType & GizmoType.Active) == 0)
+ return;
+
+ CameraState state = vcam.State;
+ Gizmos.DrawIcon(state.FinalPosition, kGizmoFileName, true);
+
+ DrawCameraFrustumGizmo(
+ CinemachineCore.Instance.FindPotentialTargetBrain(vcam),
+ state.Lens,
+ Matrix4x4.TRS(
+ state.FinalPosition,
+ UnityQuaternionExtensions.Normalized(state.FinalOrientation), Vector3.one),
+ CinemachineCore.Instance.IsLive(vcam)
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour);
+ }
+
+#if UNITY_2019_1_OR_NEWER
+ static string kGizmoFileName = "Packages/com.unity.cinemachine/Gizmos/cm_logo.png";
+#else
+ static string kGizmoFileName = "Cinemachine/cm_logo_lg.png";
+ [InitializeOnLoad]
+ static class InstallGizmos
+ {
+ static InstallGizmos()
+ {
+ string srcFile = ScriptableObjectUtility.CinemachineInstallPath + "/Gizmos/" + kGizmoFileName;
+ if (File.Exists(srcFile))
+ {
+ string dstFile = Application.dataPath + "/Gizmos";
+ if (!Directory.Exists(dstFile))
+ Directory.CreateDirectory(dstFile);
+ dstFile += "/" + kGizmoFileName;
+ if (!File.Exists(dstFile)
+ || (File.GetLastWriteTime(dstFile) < File.GetLastWriteTime(srcFile)
+ && (File.GetAttributes(dstFile) & FileAttributes.ReadOnly) == 0))
+ {
+ if (!Directory.Exists(Path.GetDirectoryName(dstFile)))
+ Directory.CreateDirectory(Path.GetDirectoryName(dstFile));
+ File.Copy(srcFile, dstFile, true);
+ File.SetAttributes(
+ dstFile, File.GetAttributes(dstFile) & ~FileAttributes.ReadOnly);
+ }
+ }
+ }
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs.meta
new file mode 100644
index 00000000..a6c202ab
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineBrainEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 711aad28b4057bd4783120e26ff2ee25
+timeCreated: 1483406727
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs
new file mode 100644
index 00000000..831a972b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs
@@ -0,0 +1,226 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS
+ [CustomEditor(typeof(CinemachineClearShot))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineClearShotEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ EmbeddeAssetEditor m_BlendsEditor;
+ ColliderState m_ColliderState;
+
+ private UnityEditorInternal.ReorderableList mChildList;
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ m_BlendsEditor = new EmbeddeAssetEditor(
+ FieldPath(x => x.m_CustomBlends), this);
+ m_BlendsEditor.OnChanged = (CinemachineBlenderSettings b) =>
+ {
+ InspectorUtility.RepaintGameView();
+ };
+ m_BlendsEditor.OnCreateEditor = (UnityEditor.Editor ed) =>
+ {
+ CinemachineBlenderSettingsEditor editor = ed as CinemachineBlenderSettingsEditor;
+ if (editor != null)
+ editor.GetAllVirtualCameras = () => { return Target.ChildCameras; };
+ };
+ mChildList = null;
+ }
+
+ protected override void OnDisable()
+ {
+ base.OnDisable();
+ if (m_BlendsEditor != null)
+ m_BlendsEditor.OnDisable();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mChildList == null)
+ SetupChildList();
+
+ m_ColliderState = GetColliderState();
+ switch (m_ColliderState)
+ {
+ case ColliderState.ColliderOnParent:
+ case ColliderState.ColliderOnAllChildren:
+ break;
+ case ColliderState.NoCollider:
+ EditorGUILayout.HelpBox(
+ "ClearShot requires a Collider extension to rank the shots. Either add one to the ClearShot itself, or to each of the child cameras.",
+ MessageType.Warning);
+ break;
+ case ColliderState.ColliderOnSomeChildren:
+ EditorGUILayout.HelpBox(
+ "Some child cameras do not have a Collider extension. ClearShot requires a Collider on all the child cameras, or alternatively on the ClearShot iself.",
+ MessageType.Warning);
+ break;
+ case ColliderState.ColliderOnChildrenAndParent:
+ EditorGUILayout.HelpBox(
+ "There is a Collider extension on the ClearShot camera, and also on some of its child cameras. You can't have both.",
+ MessageType.Error);
+ break;
+ }
+
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawRemainingPropertiesInInspector();
+
+ // Blends
+ m_BlendsEditor.DrawEditorCombo(
+ "Create New Blender Asset",
+ Target.gameObject.name + " Blends", "asset", string.Empty,
+ "Custom Blends", false);
+
+ // vcam children
+ EditorGUILayout.Separator();
+
+ if (Selection.objects.Length == 1)
+ {
+ EditorGUI.BeginChangeCheck();
+ mChildList.DoLayoutList();
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+ else
+ {
+ EditorGUILayout.HelpBox(Styles.virtualCameraChildrenInfoMsg.text, MessageType.Info);
+ }
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ enum ColliderState
+ {
+ NoCollider,
+ ColliderOnAllChildren,
+ ColliderOnSomeChildren,
+ ColliderOnParent,
+ ColliderOnChildrenAndParent
+ }
+
+ ColliderState GetColliderState()
+ {
+ int numChildren = 0;
+ int numColliderChildren = 0;
+ bool colliderOnParent = ObjectHasCollider(Target);
+
+ var children = Target.m_ChildCameras;
+ numChildren = children == null ? 0 : children.Length;
+ for (int i = 0; i < numChildren; ++i)
+ if (ObjectHasCollider(children[i]))
+ ++numColliderChildren;
+ if (colliderOnParent)
+ return (numColliderChildren > 0)
+ ? ColliderState.ColliderOnChildrenAndParent : ColliderState.ColliderOnParent;
+ if (numColliderChildren > 0)
+ return (numColliderChildren == numChildren)
+ ? ColliderState.ColliderOnAllChildren : ColliderState.ColliderOnSomeChildren;
+ return ColliderState.NoCollider;
+ }
+
+ bool ObjectHasCollider(object obj)
+ {
+ CinemachineVirtualCameraBase vcam = obj as CinemachineVirtualCameraBase;
+ var collider = (vcam == null) ? null : vcam.GetComponent();
+ return (collider != null && collider.enabled);
+ }
+
+ void SetupChildList()
+ {
+ float vSpace = 2;
+ float hSpace = 3;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+
+ mChildList = new UnityEditorInternal.ReorderableList(
+ serializedObject, FindProperty(x => x.m_ChildCameras), true, true, true, true);
+
+ mChildList.drawHeaderCallback = (Rect rect) =>
+ {
+ EditorGUI.LabelField(rect, "Virtual Camera Children");
+ GUIContent priorityText = new GUIContent("Priority");
+ var textDimensions = GUI.skin.label.CalcSize(priorityText);
+ rect.x += rect.width - textDimensions.x;
+ rect.width = textDimensions.x;
+ EditorGUI.LabelField(rect, priorityText);
+ };
+ mChildList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ rect.y += vSpace;
+ rect.width -= floatFieldWidth + hSpace;
+ rect.height = EditorGUIUtility.singleLineHeight;
+ SerializedProperty element = mChildList.serializedProperty.GetArrayElementAtIndex(index);
+ if (m_ColliderState == ColliderState.ColliderOnSomeChildren
+ || m_ColliderState == ColliderState.ColliderOnChildrenAndParent)
+ {
+ bool hasCollider = ObjectHasCollider(element.objectReferenceValue);
+ if ((m_ColliderState == ColliderState.ColliderOnSomeChildren && !hasCollider)
+ || (m_ColliderState == ColliderState.ColliderOnChildrenAndParent && hasCollider))
+ {
+ float width = rect.width;
+ rect.width = rect.height;
+ GUIContent label = new GUIContent("");
+ label.image = EditorGUIUtility.IconContent("console.warnicon.sml").image;
+ EditorGUI.LabelField(rect, label);
+ width -= rect.width; rect.x += rect.width; rect.width = width;
+ }
+ }
+ EditorGUI.PropertyField(rect, element, GUIContent.none);
+
+ SerializedObject obj = new SerializedObject(element.objectReferenceValue);
+ rect.x += rect.width + hSpace; rect.width = floatFieldWidth;
+ SerializedProperty priorityProp = obj.FindProperty(() => Target.m_Priority);
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = hSpace * 2;
+ EditorGUI.PropertyField(rect, priorityProp, new GUIContent(" "));
+ EditorGUIUtility.labelWidth = oldWidth;
+ obj.ApplyModifiedProperties();
+ };
+ mChildList.onChangedCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ if (l.index < 0 || l.index >= l.serializedProperty.arraySize)
+ return;
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ vcam.transform.SetSiblingIndex(l.index);
+ };
+ mChildList.onAddCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ var vcam = CinemachineMenu.CreateDefaultVirtualCamera();
+ Undo.SetTransformParent(vcam.transform, Target.transform, "");
+ var collider = Undo.AddComponent(vcam.gameObject);
+ collider.m_AvoidObstacles = false;
+ Undo.RecordObject(collider, "create ClearShot child");
+ vcam.transform.SetSiblingIndex(index);
+ };
+ mChildList.onRemoveCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ Undo.DestroyObjectImmediate(vcam.gameObject);
+ };
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs.meta
new file mode 100644
index 00000000..8043f7ed
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineClearShotEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6036af5730313e54699c5a693891fe90
+timeCreated: 1484508430
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs
new file mode 100644
index 00000000..b5f8d21a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs
@@ -0,0 +1,88 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS
+ [CustomEditor(typeof(CinemachineCollider))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineColliderEditor : BaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ if (!Target.m_AvoidObstacles)
+ {
+ excluded.Add(FieldPath(x => x.m_DistanceLimit));
+ excluded.Add(FieldPath(x => x.m_CameraRadius));
+ excluded.Add(FieldPath(x => x.m_Strategy));
+ excluded.Add(FieldPath(x => x.m_MaximumEffort));
+ excluded.Add(FieldPath(x => x.m_Damping));
+ excluded.Add(FieldPath(x => x.m_DampingWhenOccluded));
+ excluded.Add(FieldPath(x => x.m_SmoothingTime));
+ }
+ else if (Target.m_Strategy == CinemachineCollider.ResolutionStrategy.PullCameraForward)
+ {
+ excluded.Add(FieldPath(x => x.m_MaximumEffort));
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+
+ if (Target.m_AvoidObstacles && Target.VirtualCamera != null
+ && !Target.VirtualCamera.State.HasLookAt)
+ EditorGUILayout.HelpBox(
+ "Avoid Obstacles requires a LookAt target.",
+ MessageType.Warning);
+
+ DrawRemainingPropertiesInInspector();
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineCollider))]
+ private static void DrawColliderGizmos(CinemachineCollider collider, GizmoType type)
+ {
+ CinemachineVirtualCameraBase vcam = (collider != null) ? collider.VirtualCamera : null;
+ if (vcam != null && collider.enabled)
+ {
+ Color oldColor = Gizmos.color;
+ Vector3 pos = vcam.State.FinalPosition;
+ if (collider.m_AvoidObstacles && vcam.State.HasLookAt)
+ {
+ Gizmos.color = CinemachineColliderPrefs.FeelerColor;
+ if (collider.m_CameraRadius > 0)
+ Gizmos.DrawWireSphere(pos, collider.m_CameraRadius);
+
+ Vector3 forwardFeelerVector = (vcam.State.ReferenceLookAt - pos).normalized;
+ float distance = collider.m_DistanceLimit;
+ Gizmos.DrawLine(pos, pos + forwardFeelerVector * distance);
+
+ // Show the avoidance path, for debugging
+ List> debugPaths = collider.DebugPaths;
+ foreach (var path in debugPaths)
+ {
+ Gizmos.color = CinemachineColliderPrefs.FeelerHitColor;
+ Vector3 p0 = vcam.State.ReferenceLookAt;
+ foreach (var p in path)
+ {
+ Gizmos.DrawLine(p0, p);
+ p0 = p;
+ }
+ Gizmos.DrawLine(p0, pos);
+ }
+ }
+ Gizmos.color = oldColor;
+ }
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs.meta
new file mode 100644
index 00000000..394fc4c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineColliderEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: bf34fbe7a6e71634493d770ed0031f9d
+timeCreated: 1486652356
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs
new file mode 100644
index 00000000..c4f86bed
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs
@@ -0,0 +1,159 @@
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Utility;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineComposer))]
+ [CanEditMultipleObjects]
+ internal class CinemachineComposerEditor : BaseEditor
+ {
+ CinemachineScreenComposerGuides m_ScreenGuideEditor;
+ GameViewEventCatcher m_GameViewEventCatcher;
+
+ protected virtual void OnEnable()
+ {
+ m_ScreenGuideEditor = new CinemachineScreenComposerGuides();
+ m_ScreenGuideEditor.GetHardGuide = () => { return Target.HardGuideRect; };
+ m_ScreenGuideEditor.GetSoftGuide = () => { return Target.SoftGuideRect; };
+ m_ScreenGuideEditor.SetHardGuide = (Rect r) => { Target.HardGuideRect = r; };
+ m_ScreenGuideEditor.SetSoftGuide = (Rect r) => { Target.SoftGuideRect = r; };
+ m_ScreenGuideEditor.Target = () => { return serializedObject; };
+
+ m_GameViewEventCatcher = new GameViewEventCatcher();
+ m_GameViewEventCatcher.OnEnable();
+
+ CinemachineDebug.OnGUIHandlers -= OnGUI;
+ CinemachineDebug.OnGUIHandlers += OnGUI;
+ if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ InspectorUtility.RepaintGameView();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(TrackedObjectOffsetTool));
+#endif
+ }
+
+ protected virtual void OnDisable()
+ {
+ m_GameViewEventCatcher.OnDisable();
+ CinemachineDebug.OnGUIHandlers -= OnGUI;
+ if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ InspectorUtility.RepaintGameView();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(TrackedObjectOffsetTool));
+#endif
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineComposer).LookAtTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "A LookAt target is required. Change Aim to Do Nothing if you don't want a LookAt target.",
+ MessageType.Warning);
+
+ // First snapshot some settings
+ Rect oldHard = Target.HardGuideRect;
+ Rect oldSoft = Target.SoftGuideRect;
+
+ // Draw the properties
+ DrawRemainingPropertiesInInspector();
+ m_ScreenGuideEditor.SetNewBounds(oldHard, oldSoft, Target.HardGuideRect, Target.SoftGuideRect);
+ }
+
+ protected virtual void OnGUI()
+ {
+ // Draw the camera guides
+ if (Target == null || !CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ return;
+
+ // If inspector is collapsed in the vcam editor, don't draw the guides
+ if (!VcamStageEditor.ActiveEditorRegistry.IsActiveEditor(this))
+ return;
+
+ // Don't draw the guides if rendering to texture
+ var vcam = Target.VirtualCamera;
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(vcam);
+ if (brain == null || (brain.OutputCamera.activeTexture != null && CinemachineCore.Instance.BrainCount > 1))
+ return;
+
+ // Screen guides
+ bool isLive = targets.Length <= 1 && brain.IsLive(vcam, true);
+ m_ScreenGuideEditor.OnGUI_DrawGuides(isLive, brain.OutputCamera, Target.VcamState.Lens, true);
+
+ // Draw an on-screen gizmo for the target
+ if (Target.LookAtTarget != null && isLive)
+ {
+ Vector3 targetScreenPosition = brain.OutputCamera.WorldToScreenPoint(Target.TrackedPoint);
+ if (targetScreenPosition.z > 0)
+ {
+ targetScreenPosition.y = Screen.height - targetScreenPosition.y;
+
+ GUI.color = CinemachineSettings.ComposerSettings.TargetColour;
+ Rect r = new Rect(targetScreenPosition, Vector2.zero);
+ float size = (CinemachineSettings.ComposerSettings.TargetSize
+ + CinemachineScreenComposerGuides.kGuideBarWidthPx) / 2;
+ GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
+ size -= CinemachineScreenComposerGuides.kGuideBarWidthPx;
+ if (size > 0)
+ {
+ Vector4 overlayOpacityScalar
+ = new Vector4(1f, 1f, 1f, CinemachineSettings.ComposerSettings.OverlayOpacity);
+ GUI.color = Color.black * overlayOpacityScalar;
+ GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
+ }
+ }
+ }
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void OnSceneGUI()
+ {
+ DrawSceneTools();
+ }
+
+ void DrawSceneTools()
+ {
+ var composer = Target;
+ if (composer == null || !composer.IsValid)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(TrackedObjectOffsetTool)))
+ {
+ CinemachineSceneToolHelpers.TrackedObjectOffsetTool(composer,
+ new SerializedObject(composer).FindProperty(() => composer.m_TrackedObjectOffset));
+ }
+ }
+#endif
+
+#if false
+ // debugging only
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineComposer))]
+ static void DrawComposerGizmos(CinemachineComposer target, GizmoType selectionType)
+ {
+ // Draw lookahead path
+ if (target.m_LookaheadTime > 0)
+ {
+ Color originalGizmoColour = Gizmos.color;
+ Gizmos.color = CinemachineSettings.ComposerSettings.TargetColour;
+
+ var p0 = target.m_Predictor.PredictPosition(0);
+ int numSteps = 20;
+ for (int i = 1; i <= numSteps; ++i)
+ {
+ var p1 = target.m_Predictor.PredictPosition(i * target.m_LookaheadTime / numSteps);
+ Gizmos.DrawLine(p0, p1);
+ p0 = p1;
+ }
+ Gizmos.color = originalGizmoColour;
+ }
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs.meta
new file mode 100644
index 00000000..1c9b69a5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineComposerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2bb09c3bc24a82648a2e4fc008a28d8b
+timeCreated: 1484088329
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs
new file mode 100644
index 00000000..19faeb17
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs
@@ -0,0 +1,174 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS_2D
+ [CustomEditor(typeof(CinemachineConfiner2D))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineConfiner2DEditor : BaseEditor
+ {
+ SerializedProperty m_MaxWindowSizeProperty;
+ GUIContent m_ComputeSkeletonLabel = new GUIContent(
+ "Oversize Window", "If enabled, the confiner will compute a skeleton polygon to "
+ + "support cases where camera window size is bigger than some regions of the "
+ + "confining polygon. Enable only if needed, because it's costly");
+ GUIContent m_MaxWindowSizeLabel;
+ GUIContent m_InvalidateCacheLabel = new GUIContent(
+ "Invalidate Cache", "Force a recomputation of the polygon cache. "
+ + "This needs to be done if points inside the bounding polygon change");
+
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_MaxWindowSize));
+ }
+
+ private void OnEnable()
+ {
+ m_MaxWindowSizeProperty = FindProperty(x => x.m_MaxWindowSize);
+ m_MaxWindowSizeLabel = new GUIContent(
+ m_MaxWindowSizeProperty.displayName,
+ "To optimize computation and memory costs, set this to the largest view size that the "
+ + "camera is expected to have. The confiner will not compute a polygon cache for frustum "
+ + "sizes larger than this. This refers to the size in world units of the frustum at the "
+ + "confiner plane (for orthographic cameras, this is just the orthographic size). If set "
+ + "to 0, then this parameter is ignored and a polygon cache will be calculated for all "
+ + "potential window sizes.");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+
+ if (Target.m_BoundingShape2D == null)
+ EditorGUILayout.HelpBox("A Bounding Shape is required.", MessageType.Warning);
+ else if (Target.m_BoundingShape2D.GetType() != typeof(PolygonCollider2D)
+ && Target.m_BoundingShape2D.GetType() != typeof(CompositeCollider2D))
+ {
+ EditorGUILayout.HelpBox(
+ "Must be a PolygonCollider2D or CompositeCollider2D.",
+ MessageType.Warning);
+ }
+ else if (Target.m_BoundingShape2D.GetType() == typeof(CompositeCollider2D))
+ {
+ CompositeCollider2D poly = Target.m_BoundingShape2D as CompositeCollider2D;
+ if (poly.geometryType != CompositeCollider2D.GeometryType.Polygons)
+ {
+ EditorGUILayout.HelpBox(
+ "CompositeCollider2D geometry type must be Polygons",
+ MessageType.Warning);
+ }
+ }
+
+#if false
+ // Debugging info
+ if (Target.GetGizmoPaths(out var originalPath, ref s_currentPathCache, out var pathLocalToWorld))
+ {
+ int pointCount0 = 0;
+ foreach (var path in originalPath )
+ pointCount0 += path.Count;
+
+ int pointCount1 = 1;
+ foreach (var path in s_currentPathCache)
+ pointCount1 += path.Count;
+
+ EditorGUILayout.HelpBox(
+ $"Original Path: {pointCount0} points in {originalPath.Count} paths\n"
+ + $"Confiner Path: {pointCount1} points in {s_currentPathCache.Count} paths",
+ MessageType.Info);
+ }
+#endif
+
+ DrawRemainingPropertiesInInspector();
+
+ float vSpace = EditorGUIUtility.standardVerticalSpacing;
+ float lineHeight = EditorGUIUtility.singleLineHeight;
+ float maxSize = m_MaxWindowSizeProperty.floatValue;
+ bool computeSkeleton = maxSize >= 0;
+ var rect = EditorGUILayout.GetControlRect(true, (lineHeight + vSpace) * (computeSkeleton ? 2 : 1));
+ EditorGUI.BeginProperty(rect, m_ComputeSkeletonLabel, m_MaxWindowSizeProperty);
+ {
+ var r = rect; r.height = lineHeight;
+ computeSkeleton = EditorGUI.Toggle(r, m_ComputeSkeletonLabel, maxSize >= 0);
+ if (!computeSkeleton)
+ maxSize = -1;
+ else
+ {
+ r.y += lineHeight + vSpace;
+ maxSize = Mathf.Max(0, EditorGUI.FloatField(
+ r, m_MaxWindowSizeLabel, Mathf.Max(0, maxSize)));
+ }
+ m_MaxWindowSizeProperty.floatValue = maxSize;
+ m_MaxWindowSizeProperty.serializedObject.ApplyModifiedProperties();
+ EditorGUI.EndProperty();
+ }
+
+ rect = EditorGUILayout.GetControlRect(true);
+ if (GUI.Button(rect, m_InvalidateCacheLabel))
+ {
+ Target.InvalidateCache();
+ EditorUtility.SetDirty(Target);
+ }
+
+ bool timedOut = Target.ConfinerOvenTimedOut();
+ if (computeSkeleton)
+ {
+ var progress = Target.BakeProgress();
+ EditorGUI.ProgressBar(EditorGUILayout.GetControlRect(), progress,
+ timedOut ? "Timed out" : progress == 0 ? "" : progress < 1f ? "Baking" : "Baked");
+ if (progress > 0 && progress < 1 && Event.current.type == EventType.Repaint)
+ EditorUtility.SetDirty(target);
+ }
+
+ if (timedOut)
+ {
+ EditorGUILayout.HelpBox(
+ "Polygon skeleton computation timed out. Confiner result might be incomplete."
+ + "\n\nTo fix this, reduce the number of points in the confining shape, "
+ + "or set the MaxWindowSize parameter to limit skeleton computation.",
+ MessageType.Warning);
+ }
+ }
+
+ private static List> s_currentPathCache = new List>();
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineConfiner2D))]
+ private static void DrawConfinerGizmos(CinemachineConfiner2D confiner2D, GizmoType type)
+ {
+ if (!confiner2D.GetGizmoPaths(out var originalPath, ref s_currentPathCache, out var pathLocalToWorld))
+ return;
+
+ Color color = CinemachineSettings.CinemachineCoreSettings.BoundaryObjectGizmoColour;
+ Color colorDimmed = new Color(color.r, color.g, color.b, color.a / 2f);
+
+ var oldMatrix = Gizmos.matrix;
+ Gizmos.matrix = pathLocalToWorld;
+
+ // Draw input confiner
+ Gizmos.color = color;
+ foreach (var path in originalPath )
+ {
+ for (var index = 0; index < path.Count; index++)
+ Gizmos.DrawLine(path[index], path[(index + 1) % path.Count]);
+ }
+
+ // Draw confiner for current camera size
+ Gizmos.color = colorDimmed;
+ foreach (var path in s_currentPathCache)
+ {
+ for (var index = 0; index < path.Count; index++)
+ Gizmos.DrawLine(path[index], path[(index + 1) % path.Count]);
+ }
+
+ Gizmos.matrix = oldMatrix;
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs.meta
new file mode 100644
index 00000000..77f554d3
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfiner2DEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 002b168e31e0479e8b470eb4c02d87cf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs
new file mode 100644
index 00000000..d742ab3d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs
@@ -0,0 +1,197 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS || CINEMACHINE_PHYSICS_2D
+ [CustomEditor(typeof(CinemachineConfiner))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineConfinerEditor : BaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(Target.VirtualCamera);
+ bool ortho = brain != null ? brain.OutputCamera.orthographic : false;
+ if (!ortho)
+ excluded.Add(FieldPath(x => x.m_ConfineScreenEdges));
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ if (Target.m_ConfineMode == CinemachineConfiner.Mode.Confine2D)
+ excluded.Add(FieldPath(x => x.m_BoundingVolume));
+ else
+ excluded.Add(FieldPath(x => x.m_BoundingShape2D));
+#endif
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ if (Target.m_ConfineMode == CinemachineConfiner.Mode.Confine2D)
+ {
+#endif
+#if CINEMACHINE_PHYSICS_2D
+ if (Target.m_BoundingShape2D == null)
+ EditorGUILayout.HelpBox("A Bounding Shape is required.", MessageType.Warning);
+ else if (Target.m_BoundingShape2D.GetType() != typeof(PolygonCollider2D)
+ && Target.m_BoundingShape2D.GetType() != typeof(CompositeCollider2D))
+ {
+ EditorGUILayout.HelpBox(
+ "Must be a PolygonCollider2D or CompositeCollider2D.",
+ MessageType.Warning);
+ }
+ else if (Target.m_BoundingShape2D.GetType() == typeof(CompositeCollider2D))
+ {
+ CompositeCollider2D poly = Target.m_BoundingShape2D as CompositeCollider2D;
+ if (poly.geometryType != CompositeCollider2D.GeometryType.Polygons)
+ {
+ EditorGUILayout.HelpBox(
+ "CompositeCollider2D geometry type must be Polygons",
+ MessageType.Warning);
+ }
+ }
+#endif
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ }
+ else
+ {
+#endif
+#if CINEMACHINE_PHYSICS
+ if (Target.m_BoundingVolume == null)
+ EditorGUILayout.HelpBox("A Bounding Volume is required.", MessageType.Warning);
+ else if (Target.m_BoundingVolume.GetType() != typeof(BoxCollider)
+ && Target.m_BoundingVolume.GetType() != typeof(SphereCollider)
+ && Target.m_BoundingVolume.GetType() != typeof(CapsuleCollider))
+ {
+ EditorGUILayout.HelpBox(
+ "Must be a BoxCollider, SphereCollider, or CapsuleCollider.",
+ MessageType.Warning);
+ }
+#endif
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ }
+#endif
+ DrawRemainingPropertiesInInspector();
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineConfiner))]
+ private static void DrawColliderGizmos(CinemachineConfiner confiner, GizmoType type)
+ {
+ CinemachineVirtualCameraBase vcam = (confiner != null) ? confiner.VirtualCamera : null;
+ if (vcam != null && confiner.IsValid)
+ {
+ Matrix4x4 oldMatrix = Gizmos.matrix;
+ Color oldColor = Gizmos.color;
+ Gizmos.color = Color.yellow;
+
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ if (confiner.m_ConfineMode == CinemachineConfiner.Mode.Confine3D)
+ {
+#endif
+#if CINEMACHINE_PHYSICS
+ Transform t = confiner.m_BoundingVolume.transform;
+ Gizmos.matrix = Matrix4x4.TRS(t.position, t.rotation, t.lossyScale);
+
+ Type colliderType = confiner.m_BoundingVolume.GetType();
+ if (colliderType == typeof(BoxCollider))
+ {
+ BoxCollider c = confiner.m_BoundingVolume as BoxCollider;
+ Gizmos.DrawWireCube(c.center, c.size);
+ }
+ else if (colliderType == typeof(SphereCollider))
+ {
+ SphereCollider c = confiner.m_BoundingVolume as SphereCollider;
+ Gizmos.DrawWireSphere(c.center, c.radius);
+ }
+ else if (colliderType == typeof(CapsuleCollider))
+ {
+ CapsuleCollider c = confiner.m_BoundingVolume as CapsuleCollider;
+ Vector3 size = Vector3.one * c.radius * 2;
+ switch (c.direction)
+ {
+ case 0: size.x = c.height; break;
+ case 1: size.y = c.height; break;
+ case 2: size.z = c.height; break;
+ }
+ Gizmos.DrawWireCube(c.center, size);
+ }
+ else if (colliderType == typeof(MeshCollider))
+ {
+ MeshCollider c = confiner.m_BoundingVolume as MeshCollider;
+ Gizmos.DrawWireMesh(c.sharedMesh);
+ }
+ else
+ {
+ // Just draw an AABB - not very nice!
+ Gizmos.matrix = oldMatrix;
+ Bounds bounds = confiner.m_BoundingVolume.bounds;
+ Gizmos.DrawWireCube(t.position, bounds.extents * 2);
+ }
+#endif
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ }
+ else
+ {
+#endif
+#if CINEMACHINE_PHYSICS_2D
+ Transform t = confiner.m_BoundingShape2D.transform;
+ Gizmos.matrix = Matrix4x4.TRS(t.position, t.rotation, t.lossyScale);
+
+ Type colliderType = confiner.m_BoundingShape2D.GetType();
+ if (colliderType == typeof(PolygonCollider2D))
+ {
+ PolygonCollider2D poly = confiner.m_BoundingShape2D as PolygonCollider2D;
+ for (int i = 0; i < poly.pathCount; ++i)
+ DrawPath(poly.GetPath(i), -1, poly.offset);
+ }
+ else if (colliderType == typeof(CompositeCollider2D))
+ {
+ CompositeCollider2D poly = confiner.m_BoundingShape2D as CompositeCollider2D;
+ Vector2[] path = new Vector2[poly.pointCount];
+ Vector2 revertCompositeColliderScale = new Vector2(1f / t.lossyScale.x, 1f / t.lossyScale.y);
+ for (int i = 0; i < poly.pathCount; ++i)
+ {
+ int numPoints = poly.GetPath(i, path);
+ for (int j = 0; j < path.Length; ++j)
+ {
+ path[j] *= revertCompositeColliderScale;
+ }
+ DrawPath(path, numPoints, poly.offset);
+ }
+ }
+#endif
+#if CINEMACHINE_PHYSICS && CINEMACHINE_PHYSICS_2D
+ }
+#endif
+ Gizmos.color = oldColor;
+ Gizmos.matrix = oldMatrix;
+ }
+ }
+
+ static void DrawPath(Vector2[] path, int numPoints, Vector2 offset)
+ {
+ if (numPoints < 0)
+ numPoints = path.Length;
+ if (numPoints > 0)
+ {
+ Vector2 v0 = path[numPoints-1];
+ for (int j = 0; j < numPoints; ++j)
+ {
+ Vector2 v = path[j];
+ Gizmos.DrawLine(v0 + offset, v + offset);
+ v0 = v;
+ }
+ }
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs.meta
new file mode 100644
index 00000000..763f3d06
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineConfinerEditor.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 3f7c779802a73d5448e38af7c39fbaa5
+timeCreated: 1503423096
+licenseType: Pro
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs
new file mode 100644
index 00000000..2a5feb06
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineExternalCamera))]
+ [CanEditMultipleObjects]
+ internal class CinemachineExternalCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add("Extensions");
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs.meta
new file mode 100644
index 00000000..97a0d816
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineExternalCameraEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3226d9f88577be74197693bd17cff8c3
+timeCreated: 1506455627
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs
new file mode 100644
index 00000000..dea9adfa
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs
@@ -0,0 +1,267 @@
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Utility;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineFramingTransposer))]
+ [CanEditMultipleObjects]
+ internal class CinemachineFramingTransposerEditor : BaseEditor
+ {
+ CinemachineScreenComposerGuides m_ScreenGuideEditor;
+ GameViewEventCatcher m_GameViewEventCatcher;
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ if (Target.m_UnlimitedSoftZone)
+ {
+ excluded.Add(FieldPath(x => x.m_SoftZoneWidth));
+ excluded.Add(FieldPath(x => x.m_SoftZoneHeight));
+ excluded.Add(FieldPath(x => x.m_BiasX));
+ excluded.Add(FieldPath(x => x.m_BiasY));
+ }
+ ICinemachineTargetGroup group = Target.AbstractFollowTargetGroup;
+ if (group == null || Target.m_GroupFramingMode == CinemachineFramingTransposer.FramingMode.None)
+ {
+ excluded.Add(FieldPath(x => x.m_GroupFramingSize));
+ excluded.Add(FieldPath(x => x.m_AdjustmentMode));
+ excluded.Add(FieldPath(x => x.m_MaxDollyIn));
+ excluded.Add(FieldPath(x => x.m_MaxDollyOut));
+ excluded.Add(FieldPath(x => x.m_MinimumDistance));
+ excluded.Add(FieldPath(x => x.m_MaximumDistance));
+ excluded.Add(FieldPath(x => x.m_MinimumFOV));
+ excluded.Add(FieldPath(x => x.m_MaximumFOV));
+ excluded.Add(FieldPath(x => x.m_MinimumOrthoSize));
+ excluded.Add(FieldPath(x => x.m_MaximumOrthoSize));
+ if (group == null)
+ excluded.Add(FieldPath(x => x.m_GroupFramingMode));
+ }
+ else
+ {
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(Target.VirtualCamera);
+ bool ortho = brain != null ? brain.OutputCamera.orthographic : false;
+ if (ortho)
+ {
+ excluded.Add(FieldPath(x => x.m_AdjustmentMode));
+ excluded.Add(FieldPath(x => x.m_MaxDollyIn));
+ excluded.Add(FieldPath(x => x.m_MaxDollyOut));
+ excluded.Add(FieldPath(x => x.m_MinimumDistance));
+ excluded.Add(FieldPath(x => x.m_MaximumDistance));
+ excluded.Add(FieldPath(x => x.m_MinimumFOV));
+ excluded.Add(FieldPath(x => x.m_MaximumFOV));
+ }
+ else
+ {
+ excluded.Add(FieldPath(x => x.m_MinimumOrthoSize));
+ excluded.Add(FieldPath(x => x.m_MaximumOrthoSize));
+ switch (Target.m_AdjustmentMode)
+ {
+ case CinemachineFramingTransposer.AdjustmentMode.DollyOnly:
+ excluded.Add(FieldPath(x => x.m_MinimumFOV));
+ excluded.Add(FieldPath(x => x.m_MaximumFOV));
+ break;
+ case CinemachineFramingTransposer.AdjustmentMode.ZoomOnly:
+ excluded.Add(FieldPath(x => x.m_MaxDollyIn));
+ excluded.Add(FieldPath(x => x.m_MaxDollyOut));
+ excluded.Add(FieldPath(x => x.m_MinimumDistance));
+ excluded.Add(FieldPath(x => x.m_MaximumDistance));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ protected virtual void OnEnable()
+ {
+ m_ScreenGuideEditor = new CinemachineScreenComposerGuides();
+ m_ScreenGuideEditor.GetHardGuide = () => { return Target.HardGuideRect; };
+ m_ScreenGuideEditor.GetSoftGuide = () => { return Target.SoftGuideRect; };
+ m_ScreenGuideEditor.SetHardGuide = (Rect r) => { Target.HardGuideRect = r; };
+ m_ScreenGuideEditor.SetSoftGuide = (Rect r) => { Target.SoftGuideRect = r; };
+ m_ScreenGuideEditor.Target = () => { return serializedObject; };
+
+ m_GameViewEventCatcher = new GameViewEventCatcher();
+ m_GameViewEventCatcher.OnEnable();
+
+ CinemachineDebug.OnGUIHandlers -= OnGUI;
+ CinemachineDebug.OnGUIHandlers += OnGUI;
+ if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ InspectorUtility.RepaintGameView();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(TrackedObjectOffsetTool));
+#endif
+ }
+
+ protected virtual void OnDisable()
+ {
+ m_GameViewEventCatcher.OnDisable();
+ CinemachineDebug.OnGUIHandlers -= OnGUI;
+ if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ InspectorUtility.RepaintGameView();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(TrackedObjectOffsetTool));
+#endif
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineFramingTransposer).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Framing Transposer requires a Follow target. "
+ + "Change Body to Do Nothing if you don't want a Follow target.",
+ MessageType.Warning);
+
+ // First snapshot some settings
+ Rect oldHard = Target.HardGuideRect;
+ Rect oldSoft = Target.SoftGuideRect;
+
+ // Draw the properties
+ DrawRemainingPropertiesInInspector();
+ m_ScreenGuideEditor.SetNewBounds(oldHard, oldSoft, Target.HardGuideRect, Target.SoftGuideRect);
+ }
+
+ protected virtual void OnGUI()
+ {
+ // Draw the camera guides
+ if (Target == null || !CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
+ return;
+
+ // If inspector is collapsed in the vcam editor, don't draw the guides
+ if (!VcamStageEditor.ActiveEditorRegistry.IsActiveEditor(this))
+ return;
+
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(Target.VirtualCamera);
+ if (brain == null || (brain.OutputCamera.activeTexture != null && CinemachineCore.Instance.BrainCount > 1))
+ return;
+
+ bool isLive = targets.Length <= 1 && brain.IsLive(Target.VirtualCamera, true);
+
+ // Screen guides
+ m_ScreenGuideEditor.OnGUI_DrawGuides(isLive, brain.OutputCamera, Target.VcamState.Lens, !Target.m_UnlimitedSoftZone);
+
+ // Draw an on-screen gizmo for the target
+ if (Target.FollowTarget != null && isLive)
+ {
+ Vector3 targetScreenPosition = brain.OutputCamera.WorldToScreenPoint(Target.TrackedPoint);
+ if (targetScreenPosition.z > 0)
+ {
+ targetScreenPosition.y = Screen.height - targetScreenPosition.y;
+
+ GUI.color = CinemachineSettings.ComposerSettings.TargetColour;
+ Rect r = new Rect(targetScreenPosition, Vector2.zero);
+ float size = (CinemachineSettings.ComposerSettings.TargetSize
+ + CinemachineScreenComposerGuides.kGuideBarWidthPx) / 2;
+ GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
+ size -= CinemachineScreenComposerGuides.kGuideBarWidthPx;
+ if (size > 0)
+ {
+ Vector4 overlayOpacityScalar
+ = new Vector4(1f, 1f, 1f, CinemachineSettings.ComposerSettings.OverlayOpacity);
+ GUI.color = Color.black * overlayOpacityScalar;
+ GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
+ }
+ }
+ }
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineFramingTransposer))]
+ private static void DrawGroupComposerGizmos(CinemachineFramingTransposer target, GizmoType selectionType)
+ {
+ // Show the group bounding box, as viewed from the camera position
+ if (target.AbstractFollowTargetGroup != null
+ && target.m_GroupFramingMode != CinemachineFramingTransposer.FramingMode.None)
+ {
+ Matrix4x4 m = Gizmos.matrix;
+ Bounds b = target.LastBounds;
+ Gizmos.matrix = target.LastBoundsMatrix;
+ Gizmos.color = Color.yellow;
+ if (target.VcamState.Lens.Orthographic)
+ Gizmos.DrawWireCube(b.center, b.size);
+ else
+ {
+ float z = b.center.z;
+ Vector3 e = b.extents;
+ Gizmos.DrawFrustum(
+ Vector3.zero,
+ Mathf.Atan2(e.y, z) * Mathf.Rad2Deg * 2,
+ z + e.z, z - e.z, e.x / e.y);
+ }
+ Gizmos.matrix = m;
+ }
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void OnSceneGUI()
+ {
+ DrawSceneTools();
+ }
+
+ void DrawSceneTools()
+ {
+ var framingTransposer = Target;
+ if (framingTransposer == null || !framingTransposer.IsValid)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(TrackedObjectOffsetTool)))
+ {
+ CinemachineSceneToolHelpers.TrackedObjectOffsetTool(framingTransposer,
+ new SerializedObject(framingTransposer).FindProperty(() => framingTransposer.m_TrackedObjectOffset));
+ }
+ else if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ var originalColor = Handles.color;
+ var camPos = framingTransposer.VcamState.RawPosition;
+ var targetForward = framingTransposer.VirtualCamera.State.FinalOrientation * Vector3.forward;
+ EditorGUI.BeginChangeCheck();
+ Handles.color = CinemachineSceneToolHelpers.HelperLineDefaultColor;
+ var cdHandleId = GUIUtility.GetControlID(FocusType.Passive);
+ var newHandlePosition = Handles.Slider(cdHandleId, camPos, targetForward,
+ CinemachineSceneToolHelpers.CubeHandleCapSize(camPos), Handles.CubeHandleCap, 0.5f);
+ if (EditorGUI.EndChangeCheck())
+ {
+ // Modify via SerializedProperty for OnValidate to get called automatically, and scene repainting too
+ var so = new SerializedObject(framingTransposer);
+ var prop = so.FindProperty(() => framingTransposer.m_CameraDistance);
+ prop.floatValue -= CinemachineSceneToolHelpers.SliderHandleDelta(newHandlePosition, camPos, targetForward);
+ so.ApplyModifiedProperties();
+ }
+
+ var cameraDistanceHandleIsDragged = GUIUtility.hotControl == cdHandleId;
+ var cameraDistanceHandleIsUsedOrHovered = cameraDistanceHandleIsDragged ||
+ HandleUtility.nearestControl == cdHandleId;
+ if (cameraDistanceHandleIsUsedOrHovered)
+ {
+ CinemachineSceneToolHelpers.DrawLabel(camPos,
+ "Camera Distance (" + framingTransposer.m_CameraDistance.ToString("F1") + ")");
+ }
+
+ Handles.color = cameraDistanceHandleIsUsedOrHovered ?
+ Handles.selectedColor : CinemachineSceneToolHelpers.HelperLineDefaultColor;
+ Handles.DrawLine(camPos,
+ framingTransposer.FollowTarget.position + framingTransposer.m_TrackedObjectOffset);
+
+ CinemachineSceneToolHelpers.SoloOnDrag(cameraDistanceHandleIsDragged, framingTransposer.VirtualCamera,
+ cdHandleId);
+
+ Handles.color = originalColor;
+ }
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs.meta
new file mode 100644
index 00000000..c55f83aa
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFramingTransposerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 620aee1bd928b2a4981896c6b4e1bf0d
+timeCreated: 1502046367
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs
new file mode 100644
index 00000000..20e0bafc
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs
@@ -0,0 +1,342 @@
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Editor;
+using System.Collections.Generic;
+using Cinemachine.Utility;
+using Matrix4x4 = UnityEngine.Matrix4x4;
+using Quaternion = UnityEngine.Quaternion;
+using Vector3 = UnityEngine.Vector3;
+
+namespace Cinemachine
+{
+ [CustomEditor(typeof(CinemachineFreeLook))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineFreeLookEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Orbits));
+ if (!Target.m_CommonLens)
+ excluded.Add(FieldPath(x => x.m_Lens));
+ if (Target.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp)
+ {
+ excluded.Add(FieldPath(x => x.m_Heading));
+ excluded.Add(FieldPath(x => x.m_RecenterToTargetHeading));
+ }
+ }
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ Target.UpdateInputAxisProvider();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FarNearClipTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FreelookRigSelection));
+#endif
+ }
+
+ protected override void OnDisable()
+ {
+ base.OnDisable();
+
+ // Must destroy child editors or we get exceptions
+ if (m_rigEditor != null)
+ UnityEngine.Object.DestroyImmediate(m_rigEditor);
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FarNearClipTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FreelookRigSelection));
+#endif
+ }
+
+ public override void OnInspectorGUI()
+ {
+ Target.GetRig(0); // force an update of the rig cache
+ if (!Target.RigsAreCreated)
+ {
+ EditorGUILayout.HelpBox(
+ "It's not possible to add this component to a prefab instance. "
+ + "Instead, you can open the Prefab in Prefab Mode or unpack "
+ + "the Prefab instance to remove the Prefab connection.",
+ MessageType.Error);
+ return;
+ }
+
+ Target.m_XAxis.ValueRangeLocked
+ = (Target.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp);
+
+ // Ordinary properties
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawPropertyInInspector(FindProperty(x => x.m_StandbyUpdate));
+ DrawPropertyInInspector(FindProperty(x => x.m_CommonLens));
+ DrawLensSettingsInInspector(FindProperty(x => x.m_Lens));
+ DrawRemainingPropertiesInInspector();
+
+ // Orbits
+ EditorGUI.BeginChangeCheck();
+ SerializedProperty orbits = FindProperty(x => x.m_Orbits);
+ for (int i = 0; i < CinemachineFreeLook.RigNames.Length; ++i)
+ {
+ Rect rect = EditorGUILayout.GetControlRect(true);
+ SerializedProperty orbit = orbits.GetArrayElementAtIndex(i);
+ InspectorUtility.MultiPropertyOnLine(rect,
+ new GUIContent(CinemachineFreeLook.RigNames[i]),
+ new [] { orbit.FindPropertyRelative(() => Target.m_Orbits[i].m_Height),
+ orbit.FindPropertyRelative(() => Target.m_Orbits[i].m_Radius) },
+ null);
+ }
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+
+ // Rigs
+ if (Selection.objects.Length == 1)
+ {
+ EditorGUILayout.Separator();
+ EditorGUILayout.Separator();
+ SetSelectedRig(Target, GUILayout.Toolbar(GetSelectedRig(Target), s_RigNames));
+ UpdateRigEditor();
+ if (m_rigEditor != null)
+ {
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ ++EditorGUI.indentLevel;
+ m_rigEditor.OnInspectorGUI();
+ --EditorGUI.indentLevel;
+ EditorGUILayout.EndVertical();
+ }
+ }
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ void OnSceneGUI()
+ {
+ // Forward to embedded rig editor
+ if (m_rigEditor != null && m_RigEditorOnSceneGUI != null)
+ m_RigEditorOnSceneGUI.Invoke(m_rigEditor, null);
+
+#if UNITY_2021_2_OR_NEWER
+ DrawSceneTools();
+#endif
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void DrawSceneTools()
+ {
+ var freelook = Target;
+ if (freelook == null || !freelook.IsValid)
+ {
+ return;
+ }
+
+ var originalColor = Handles.color;
+ Handles.color = Handles.preselectionColor;
+ if (freelook.m_CommonLens && CinemachineSceneToolUtility.IsToolActive(typeof(FoVTool)))
+ {
+ CinemachineSceneToolHelpers.FovToolHandle(freelook,
+ new SerializedObject(freelook).FindProperty(() => freelook.m_Lens),
+ freelook.m_Lens, IsHorizontalFOVUsed());
+ }
+ else if (freelook.m_CommonLens && CinemachineSceneToolUtility.IsToolActive(typeof(FarNearClipTool)))
+ {
+ CinemachineSceneToolHelpers.NearFarClipHandle(freelook,
+ new SerializedObject(freelook).FindProperty(() => freelook.m_Lens));
+ }
+ else if (freelook.Follow != null && CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ var draggedRig = CinemachineSceneToolHelpers.OrbitControlHandle(freelook,
+ new SerializedObject(freelook).FindProperty(() => freelook.m_Orbits));
+ if (draggedRig >= 0)
+ SetSelectedRig(Target, draggedRig);
+ }
+ Handles.color = originalColor;
+ }
+#endif
+
+ static GUIContent[] s_RigNames =
+ {
+ new GUIContent("Top Rig"),
+ new GUIContent("Middle Rig"),
+ new GUIContent("Bottom Rig")
+ };
+ internal static GUIContent[] RigNames => s_RigNames;
+
+ static int GetSelectedRig(CinemachineFreeLook freelook)
+ {
+ return freelook.m_YAxis.Value < 0.33f ? 2 : (freelook.m_YAxis.Value > 0.66f ? 0 : 1);
+ }
+
+ internal static void SetSelectedRig(CinemachineFreeLook freelook, int rigIndex)
+ {
+ Debug.Assert(rigIndex >= 0 && rigIndex < 3);
+ if (GetSelectedRig(freelook) != rigIndex)
+ {
+ var prop = new SerializedObject(freelook).FindProperty(
+ () => freelook.m_YAxis).FindPropertyRelative(() => freelook.m_YAxis.Value);
+ prop.floatValue = rigIndex == 0 ? 1 : (rigIndex == 1 ? 0.5f : 0);
+ prop.serializedObject.ApplyModifiedProperties();
+ freelook.InternalUpdateCameraState(Vector3.up, -1);
+ }
+#if UNITY_2021_2_OR_NEWER
+ // Push current selection to the rig selection tool
+ FreelookRigSelection.SelectedRig = rigIndex;
+#endif
+ }
+
+ UnityEditor.Editor m_rigEditor;
+ System.Reflection.MethodInfo m_RigEditorOnSceneGUI;
+ CinemachineVirtualCameraBase m_EditedRig = null;
+
+ void UpdateRigEditor()
+ {
+ var selectedRig = GetSelectedRig(Target);
+ CinemachineVirtualCamera rig = Target.GetRig(selectedRig);
+ if (m_EditedRig != rig || m_rigEditor == null)
+ {
+ m_EditedRig = rig;
+ m_RigEditorOnSceneGUI = null;
+ if (m_rigEditor != null)
+ {
+ UnityEngine.Object.DestroyImmediate(m_rigEditor);
+ m_rigEditor = null;
+ }
+ if (rig != null)
+ {
+ CreateCachedEditor(rig, null, ref m_rigEditor);
+ if (m_rigEditor != null)
+ m_RigEditorOnSceneGUI = m_rigEditor.GetType().GetMethod("OnSceneGUI",
+ System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ }
+ }
+ }
+
+ ///
+ /// Register with CinemachineFreeLook to create the pipeline in an undo-friendly manner
+ ///
+ [InitializeOnLoad]
+ class CreateRigWithUndo
+ {
+ static CreateRigWithUndo()
+ {
+ CinemachineFreeLook.CreateRigOverride
+ = (CinemachineFreeLook vcam, string name, CinemachineVirtualCamera copyFrom) =>
+ {
+ // Recycle the game object if it exists
+ GameObject go = null;
+ foreach (Transform child in vcam.transform)
+ {
+ if (child.gameObject.name == name)
+ {
+ go = child.gameObject;
+ break;
+ }
+ }
+
+ CinemachineVirtualCamera rig = null;
+ if (go == null)
+ {
+ // Create a new rig - can't do it if prefab instance
+ if (PrefabUtility.IsPartOfAnyPrefab(vcam.gameObject))
+ return null;
+ go = ObjectFactory.CreateGameObject(name);
+ Undo.RegisterCreatedObjectUndo(go, "created rig");
+ Undo.SetTransformParent(go.transform, vcam.transform, "parenting pipeline");
+ }
+
+ // Create a new rig with default components
+ rig = Undo.AddComponent(go);
+ rig.CreatePipeline(copyFrom);
+ if (copyFrom != null)
+ ReflectionHelpers.CopyFields(copyFrom, rig);
+ else
+ {
+ // Defaults
+ go = rig.GetComponentOwner().gameObject;
+ Undo.AddComponent(go);
+ Undo.AddComponent(go);
+ rig.InvalidateComponentPipeline();
+ }
+ return rig;
+ };
+
+ CinemachineFreeLook.DestroyRigOverride = (GameObject rig) =>
+ {
+ var vcam = rig.GetComponent();
+ if (vcam != null)
+ {
+ vcam.DestroyPipeline();
+ Undo.DestroyObjectImmediate(vcam);
+ }
+ };
+ }
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineFreeLook))]
+ private static void DrawFreeLookGizmos(CinemachineFreeLook vcam, GizmoType selectionType)
+ {
+ // Standard frustum and logo
+ CinemachineBrainEditor.DrawVirtualCameraBaseGizmos(vcam, selectionType);
+
+ Color originalGizmoColour = Gizmos.color;
+ bool isActiveVirtualCam = CinemachineCore.Instance.IsLive(vcam);
+ Gizmos.color = isActiveVirtualCam
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+
+ if (vcam.Follow != null)
+ {
+ Vector3 pos = vcam.Follow.position;
+ Vector3 up = vcam.State.ReferenceUp;
+
+ var MiddleRig = vcam.GetRig(1).GetCinemachineComponent();
+ if (MiddleRig != null)
+ {
+ Quaternion orient = MiddleRig.GetReferenceOrientation(up);
+ up = orient * Vector3.up;
+ float rotation = vcam.m_XAxis.Value + vcam.m_Heading.m_Bias;
+ orient = Quaternion.AngleAxis(rotation, up) * orient;
+
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[0].m_Height, orient, vcam.m_Orbits[0].m_Radius);
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[1].m_Height, orient, vcam.m_Orbits[1].m_Radius);
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[2].m_Height, orient, vcam.m_Orbits[2].m_Radius);
+
+ DrawCameraPath(pos, orient, vcam);
+ }
+ }
+
+ Gizmos.color = originalGizmoColour;
+ }
+
+ private static void DrawCameraPath(Vector3 atPos, Quaternion orient, CinemachineFreeLook vcam)
+ {
+ Matrix4x4 prevMatrix = Gizmos.matrix;
+ Gizmos.matrix = Matrix4x4.TRS(atPos, orient, Vector3.one);
+
+ const int kNumSteps = 20;
+ Vector3 currPos = vcam.GetLocalPositionForCameraFromInput(0f);
+ for (int i = 1; i < kNumSteps + 1; ++i)
+ {
+ float t = (float)i / (float)kNumSteps;
+ Vector3 nextPos = vcam.GetLocalPositionForCameraFromInput(t);
+ Gizmos.DrawLine(currPos, nextPos);
+ currPos = nextPos;
+ }
+ Gizmos.matrix = prevMatrix;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs.meta
new file mode 100644
index 00000000..3f7e1755
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineFreeLookEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 04e6f1d86089cda409e925cd975436d9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs
new file mode 100644
index 00000000..f32a9091
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using UnityEditor;
+using UnityEngine;
+using Cinemachine.Utility;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineGroupComposer))]
+ internal class CinemachineGroupComposerEditor : CinemachineComposerEditor
+ {
+ // Specialization
+ private CinemachineGroupComposer MyTarget { get { return target as CinemachineGroupComposer; } }
+ protected string FieldPath(Expression> expr)
+ {
+ return ReflectionHelpers.GetFieldPath(expr);
+ }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(MyTarget.VirtualCamera);
+ bool ortho = brain != null ? brain.OutputCamera.orthographic : false;
+ if (ortho)
+ {
+ excluded.Add(FieldPath(x => x.m_AdjustmentMode));
+ excluded.Add(FieldPath(x => x.m_MinimumFOV));
+ excluded.Add(FieldPath(x => x.m_MaximumFOV));
+ excluded.Add(FieldPath(x => x.m_MaxDollyIn));
+ excluded.Add(FieldPath(x => x.m_MaxDollyOut));
+ excluded.Add(FieldPath(x => x.m_MinimumDistance));
+ excluded.Add(FieldPath(x => x.m_MaximumDistance));
+ }
+ else
+ {
+ excluded.Add(FieldPath(x => x.m_MinimumOrthoSize));
+ excluded.Add(FieldPath(x => x.m_MaximumOrthoSize));
+ switch (MyTarget.m_AdjustmentMode)
+ {
+ case CinemachineGroupComposer.AdjustmentMode.DollyOnly:
+ excluded.Add(FieldPath(x => x.m_MinimumFOV));
+ excluded.Add(FieldPath(x => x.m_MaximumFOV));
+ break;
+ case CinemachineGroupComposer.AdjustmentMode.ZoomOnly:
+ excluded.Add(FieldPath(x => x.m_MaxDollyIn));
+ excluded.Add(FieldPath(x => x.m_MaxDollyOut));
+ excluded.Add(FieldPath(x => x.m_MinimumDistance));
+ excluded.Add(FieldPath(x => x.m_MaximumDistance));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (MyTarget.IsValid && MyTarget.AbstractLookAtTargetGroup == null)
+ EditorGUILayout.HelpBox(
+ "The Framing settings will be ignored because the LookAt target is not a kind of ICinemachineTargetGroup",
+ MessageType.Info);
+
+ base.OnInspectorGUI();
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineGroupComposer))]
+ private static void DrawGroupComposerGizmos(CinemachineGroupComposer target, GizmoType selectionType)
+ {
+ // Show the group bounding box, as viewed from the camera position
+ if (target.AbstractLookAtTargetGroup != null)
+ {
+ Matrix4x4 m = Gizmos.matrix;
+ Bounds b = target.LastBounds;
+ Gizmos.matrix = target.LastBoundsMatrix;
+ Gizmos.color = Color.yellow;
+
+ if (target.VcamState.Lens.Orthographic)
+ Gizmos.DrawWireCube(b.center, b.size);
+ else
+ {
+ float z = b.center.z;
+ Vector3 e = b.extents;
+ Gizmos.DrawFrustum(
+ Vector3.zero,
+ Mathf.Atan2(e.y, z) * Mathf.Rad2Deg * 2,
+ z + e.z, z - e.z, e.x / e.y);
+ }
+ Gizmos.matrix = m;
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs.meta
new file mode 100644
index 00000000..70c09f98
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineGroupComposerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c5da6ce9225f948438f7d6a072499ecd
+timeCreated: 1496702989
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs
new file mode 100644
index 00000000..88d0445b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs
@@ -0,0 +1,23 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineHardLockToTarget))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineHardLockToTargetEditor : BaseEditor
+ {
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineHardLockToTarget).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Hard Lock requires a Follow Target. Change Body to Do Nothing if you don't want a Follow target.",
+ MessageType.Warning);
+ DrawRemainingPropertiesInInspector();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs.meta
new file mode 100644
index 00000000..1959379f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLockToTargetEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e44b92e217bfdf24d99acb4344918eeb
+timeCreated: 1506541599
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs
new file mode 100644
index 00000000..c7bff9c5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs
@@ -0,0 +1,27 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineHardLookAt))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineHardLookAtEditor : BaseEditor
+ {
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineHardLookAt).LookAtTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Hard Look At requires a LookAt target. Change Aim to Do Nothing if you don't want a LookAt target.",
+ MessageType.Warning);
+ EditorGUI.BeginChangeCheck();
+ GUI.enabled = false;
+ EditorGUILayout.LabelField(" ", "No additional settings", EditorStyles.miniLabel);
+ GUI.enabled = true;
+ DrawRemainingPropertiesInInspector();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs.meta
new file mode 100644
index 00000000..6f8815d7
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineHardLookAtEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9ce16cd7e31794b48b2843381cd87d31
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs
new file mode 100644
index 00000000..e86b578e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs
@@ -0,0 +1,105 @@
+using UnityEditor;
+using UnityEngine;
+using Cinemachine.Utility;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineMixingCamera))]
+ internal sealed class CinemachineMixingCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ for (int i = 0; i < CinemachineMixingCamera.MaxCameras; ++i)
+ excluded.Add(WeightPropertyName(i));
+ }
+
+ static string WeightPropertyName(int i) { return "m_Weight" + i; }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawRemainingPropertiesInInspector();
+
+ float totalWeight = 0;
+ CinemachineVirtualCameraBase[] children = Target.ChildCameras;
+ int numCameras = Mathf.Min(CinemachineMixingCamera.MaxCameras, children.Length);
+ for (int i = 0; i < numCameras; ++i)
+ if (children[i].isActiveAndEnabled)
+ totalWeight += Target.GetWeight(i);
+
+ if (numCameras == 0)
+ EditorGUILayout.HelpBox("There are no Virtual Camera children", MessageType.Warning);
+ else
+ {
+ EditorGUILayout.Separator();
+ EditorGUILayout.LabelField("Child Camera Weights", EditorStyles.boldLabel);
+ for (int i = 0; i < numCameras; ++i)
+ {
+ SerializedProperty prop = serializedObject.FindProperty(WeightPropertyName(i));
+ if (prop != null)
+ EditorGUILayout.PropertyField(prop, new GUIContent(children[i].Name));
+ }
+ serializedObject.ApplyModifiedProperties();
+
+ if (totalWeight <= UnityVectorExtensions.Epsilon)
+ EditorGUILayout.HelpBox("No input channels are active", MessageType.Warning);
+
+ if (children.Length > numCameras)
+ EditorGUILayout.HelpBox(
+ "There are " + children.Length
+ + " child cameras. A maximum of " + numCameras + " is supported.",
+ MessageType.Warning);
+
+ // Camera proportion indicator
+ EditorGUILayout.Separator();
+ EditorGUILayout.LabelField("Mix Result", EditorStyles.boldLabel);
+ DrawProportionIndicator(children, numCameras, totalWeight);
+ }
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ void DrawProportionIndicator(
+ CinemachineVirtualCameraBase[] children, int numCameras, float totalWeight)
+ {
+ GUIStyle style = EditorStyles.centeredGreyMiniLabel;
+ Color bkg = new Color(0.27f, 0.27f, 0.27f); // ack! no better way than this?
+ Color fg = Color.Lerp(CinemachineBrain.GetSoloGUIColor(), bkg, 0.8f);
+ float totalHeight = (style.lineHeight + style.margin.vertical) * numCameras;
+ Rect r = EditorGUILayout.GetControlRect(true, totalHeight);
+ r.height /= numCameras; r.height -= 1;
+ float fullWidth = r.width;
+ for (int i = 0; i < numCameras; ++i)
+ {
+ float p = 0;
+ string label = children[i].Name;
+ if (totalWeight > UnityVectorExtensions.Epsilon)
+ {
+ if (children[i].isActiveAndEnabled)
+ p = Target.GetWeight(i) / totalWeight;
+ else
+ label += " (disabled)";
+ }
+ r.width = fullWidth * p;
+ EditorGUI.DrawRect(r, fg);
+
+ Rect r2 = r;
+ r2.x += r.width;
+ r2.width = fullWidth - r.width;
+ EditorGUI.DrawRect(r2, bkg);
+
+ r.width = fullWidth;
+ EditorGUI.LabelField(r, label, style);
+
+ r.y += r.height + 1;
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs.meta
new file mode 100644
index 00000000..9088df25
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineMixingCameraEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8ad60cb17f7694c43a8190c617281753
+timeCreated: 1502201539
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs
new file mode 100644
index 00000000..1ec046a6
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs
@@ -0,0 +1,362 @@
+using UnityEditor;
+using UnityEngine;
+using UnityEditorInternal;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(NoiseSettings))]
+ internal sealed class NoiseSettingsEditor : BaseEditor
+ {
+ private const float vSpace = 2;
+ private const float hSpace = 3;
+
+ // Needed for accessing string names of fields
+ #pragma warning disable 0649 // assigned but never used
+ private NoiseSettings.TransformNoiseParams tpDef;
+ private NoiseSettings.NoiseParams npDef;
+
+ private static float mPreviewTime = 2;
+ private static float mPreviewHeight = 5;
+ private float mNoiseOffsetBase = 0;
+ private float mNoiseOffset = 0;
+ private bool mAnimatedPreview = false;
+ GUIContent mAnimatedLabel = new GUIContent("Animated", "Animate the noise signal preview");
+
+
+ private ReorderableList[] mPosChannels;
+ private ReorderableList[] mRotChannels;
+ private static GUIContent[] mPoslabels = new GUIContent[]
+ {
+ new GUIContent("Position X"),
+ new GUIContent("Position Y"),
+ new GUIContent("Position Z")
+ };
+ private static GUIContent[] mRotlabels = new GUIContent[]
+ {
+ new GUIContent("Rotation X"),
+ new GUIContent("Rotation Y"),
+ new GUIContent("Rotation Z")
+ };
+ private static bool[] mPosExpanded = new bool[3];
+ private static bool[] mRotExpanded = new bool[3];
+
+ private void OnEnable()
+ {
+ mNoiseOffsetBase = Time.realtimeSinceStartup;
+ mNoiseOffset = 0;
+ }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => Target.PositionNoise));
+ excluded.Add(FieldPath(x => Target.OrientationNoise));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (mPosChannels == null)
+ mPosChannels = SetupReorderableLists(
+ serializedObject.FindProperty(() => Target.PositionNoise), mPoslabels);
+ if (mRotChannels == null)
+ mRotChannels = SetupReorderableLists(
+ serializedObject.FindProperty(() => Target.OrientationNoise), mRotlabels);
+
+ BeginInspector();
+
+ Rect r = EditorGUILayout.GetControlRect();
+ mPreviewTime = EditorGUI.Slider(r, "Preview Time", mPreviewTime, 0.01f, 10f);
+ r = EditorGUILayout.GetControlRect();
+ float labelWidth = GUI.skin.label.CalcSize(mAnimatedLabel).x + EditorGUIUtility.singleLineHeight;
+ r.width -= labelWidth + hSpace;
+ mPreviewHeight = EditorGUI.Slider(r, "Preview Height", mPreviewHeight, 1f, 10f);
+ r.x += r.width + hSpace; r.width = labelWidth;
+ mAnimatedPreview = EditorGUI.ToggleLeft(r, mAnimatedLabel, mAnimatedPreview);
+ EditorGUILayout.Separator();
+
+ r = EditorGUILayout.GetControlRect();
+ EditorGUI.LabelField(r, "Position Noise - amplitudes are in Distance units", EditorStyles.boldLabel);
+ r = EditorGUILayout.GetControlRect(true, mPreviewHeight * EditorGUIUtility.singleLineHeight);
+ if (Event.current.type == EventType.Repaint)
+ {
+ mSampleCachePos.SnapshotSample(r.size, Target.PositionNoise, mNoiseOffset, mAnimatedPreview);
+ mSampleCachePos.DrawSamplePreview(r, 7);
+ }
+ for (int i = 0; i < mPosChannels.Length; ++i)
+ {
+ r = EditorGUILayout.GetControlRect();
+ mPosExpanded[i] = EditorGUI.Foldout(r, mPosExpanded[i], mPoslabels[i], true);
+ if (mPosExpanded[i])
+ {
+ r = EditorGUILayout.GetControlRect(true, mPreviewHeight * EditorGUIUtility.singleLineHeight);
+ if (Event.current.type == EventType.Repaint)
+ mSampleCachePos.DrawSamplePreview(r, 1 << i);
+ mPosChannels[i].DoLayoutList();
+ }
+ }
+ EditorGUILayout.Separator();
+
+ r = EditorGUILayout.GetControlRect();
+ EditorGUI.LabelField(r, "Rotation Noise - amplitude units are degrees", EditorStyles.boldLabel);
+ r = EditorGUILayout.GetControlRect(true, mPreviewHeight * EditorGUIUtility.singleLineHeight);
+ if (Event.current.type == EventType.Repaint)
+ {
+ mSampleCacheRot.SnapshotSample(r.size, Target.OrientationNoise, mNoiseOffset, mAnimatedPreview);
+ mSampleCacheRot.DrawSamplePreview(r, 7);
+ }
+ for (int i = 0; i < mPosChannels.Length; ++i)
+ {
+ r = EditorGUILayout.GetControlRect();
+ mRotExpanded[i] = EditorGUI.Foldout(r, mRotExpanded[i], mRotlabels[i], true);
+ if (mRotExpanded[i])
+ {
+ r = EditorGUILayout.GetControlRect(true, mPreviewHeight * EditorGUIUtility.singleLineHeight);
+ if (Event.current.type == EventType.Repaint)
+ mSampleCacheRot.DrawSamplePreview(r, 1 << i);
+ mRotChannels[i].DoLayoutList();
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+
+ // Make it live!
+ if (mAnimatedPreview && Event.current.type == EventType.Repaint)
+ {
+ mNoiseOffset += Time.realtimeSinceStartup - mNoiseOffsetBase;
+ Repaint();
+ }
+ mNoiseOffsetBase = Time.realtimeSinceStartup;
+ }
+
+ class SampleCache
+ {
+ private List mSampleCurveX = new List();
+ private List mSampleCurveY = new List();
+ private List mSampleCurveZ = new List();
+ private List mSampleNoise = new List();
+
+ public void SnapshotSample(
+ Vector2 areaSize, NoiseSettings.TransformNoiseParams[] signal, float noiseOffset, bool animated)
+ {
+ // These values give a smoother curve, more-or-less fitting in the window
+ int numSamples = Mathf.RoundToInt(areaSize.x);
+ if (animated)
+ numSamples *= 2;
+ const float signalScale = 0.75f;
+
+ float maxVal = 0;
+ for (int i = 0; i < signal.Length; ++i)
+ {
+ maxVal = Mathf.Max(maxVal, Mathf.Abs(signal[i].X.Amplitude * signalScale));
+ maxVal = Mathf.Max(maxVal, Mathf.Abs(signal[i].Y.Amplitude * signalScale));
+ maxVal = Mathf.Max(maxVal, Mathf.Abs(signal[i].Z.Amplitude * signalScale));
+ }
+ mSampleNoise.Clear();
+ for (int i = 0; i < numSamples; ++i)
+ {
+ float t = (float)i / (numSamples - 1) * mPreviewTime + noiseOffset;
+ Vector3 p = NoiseSettings.GetCombinedFilterResults(signal, t, Vector3.zero);
+ mSampleNoise.Add(p);
+ }
+ mSampleCurveX.Clear();
+ mSampleCurveY.Clear();
+ mSampleCurveZ.Clear();
+ float halfHeight = areaSize.y / 2;
+ float yOffset = halfHeight;
+ for (int i = 0; i < numSamples; ++i)
+ {
+ float t = (float)i / (numSamples - 1);
+ Vector3 p = mSampleNoise[i];
+ mSampleCurveX.Add(new Vector3(areaSize.x * t, halfHeight * Mathf.Clamp(-p.x / maxVal, -1, 1) + yOffset, 0));
+ mSampleCurveY.Add(new Vector3(areaSize.x * t, halfHeight * Mathf.Clamp(-p.y / maxVal, -1, 1) + yOffset, 0));
+ mSampleCurveZ.Add(new Vector3(areaSize.x * t, halfHeight * Mathf.Clamp(-p.z / maxVal, -1, 1) + yOffset, 0));
+ }
+ }
+
+ public void DrawSamplePreview(Rect r, int channelMask)
+ {
+ EditorGUI.DrawRect(r, Color.black);
+ var oldMatrix = Handles.matrix;
+ Handles.matrix = Handles.matrix * Matrix4x4.Translate(r.position);
+ if ((channelMask & 1) != 0)
+ {
+ Handles.color = new Color(1, 0.5f, 0, 0.8f);
+ Handles.DrawPolyLine(mSampleCurveX.ToArray());
+ }
+ if ((channelMask & 2) != 0)
+ {
+ Handles.color = new Color(0, 1, 0, 0.8f);
+ Handles.DrawPolyLine(mSampleCurveY.ToArray());
+ }
+ if ((channelMask & 4) != 0)
+ {
+ Handles.color = new Color(0, 0.5f, 1, 0.8f);
+ Handles.DrawPolyLine(mSampleCurveZ.ToArray());
+ }
+ Handles.color = Color.black;
+ Handles.DrawLine(new Vector3(1, 0, 0), new Vector3(r.width, 0, 0));
+ Handles.DrawLine(new Vector3(0, r.height, 0), new Vector3(r.width, r.height, 0));
+ Handles.matrix = oldMatrix;
+ }
+ }
+ SampleCache mSampleCachePos = new SampleCache();
+ SampleCache mSampleCacheRot = new SampleCache();
+
+ private ReorderableList[] SetupReorderableLists(
+ SerializedProperty property, GUIContent[] titles)
+ {
+ ReorderableList[] lists = new ReorderableList[3];
+ for (int i = 0; i < 3; ++i)
+ lists[i] = SetupReorderableList(property, i, new GUIContent("Components"));
+ return lists;
+ }
+
+ private ReorderableList SetupReorderableList(
+ SerializedProperty property, int channel, GUIContent title)
+ {
+ ChannelList list = new ChannelList(
+ property.serializedObject, property, channel, title);
+
+ list.drawHeaderCallback = (Rect rect) =>
+ {
+ GUIContent steadyLabel = new GUIContent("(non-random wave if checked)");
+ float steadyLabelWidth = GUI.skin.label.CalcSize(steadyLabel).x;
+
+ Rect r = rect;
+ EditorGUI.LabelField(r, list.mTitle);
+ r.x = rect.x + rect.width - steadyLabelWidth; r.width = steadyLabelWidth;
+ EditorGUI.LabelField(r, steadyLabel);
+ };
+
+ list.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ SerializedProperty element = list.serializedProperty.GetArrayElementAtIndex(index);
+ switch (list.mChannel)
+ {
+ case 0: DrawNoiseChannel(rect, element.FindPropertyRelative(() => tpDef.X)); break;
+ case 1: DrawNoiseChannel(rect, element.FindPropertyRelative(() => tpDef.Y)); break;
+ case 2: DrawNoiseChannel(rect, element.FindPropertyRelative(() => tpDef.Z)); break;
+ default: break;
+ }
+ };
+
+ list.onAddCallback = (ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ ++l.serializedProperty.arraySize;
+ SerializedProperty p = l.serializedProperty.GetArrayElementAtIndex(index);
+ ClearComponent(p.FindPropertyRelative(() => tpDef.X));
+ ClearComponent(p.FindPropertyRelative(() => tpDef.Y));
+ ClearComponent(p.FindPropertyRelative(() => tpDef.Z));
+ };
+
+ list.onRemoveCallback = (ReorderableList l) =>
+ {
+ // Can't just delete because the component arrays are connected
+ SerializedProperty p = l.serializedProperty.GetArrayElementAtIndex(l.index);
+ bool IsClear
+ = (list.mChannel == 0 || IsClearComponent(p.FindPropertyRelative(() => tpDef.X)))
+ && (list.mChannel == 1 || IsClearComponent(p.FindPropertyRelative(() => tpDef.Y)))
+ && (list.mChannel == 2 || IsClearComponent(p.FindPropertyRelative(() => tpDef.Z)));
+ if (IsClear)
+ l.serializedProperty.DeleteArrayElementAtIndex(l.index);
+ else switch (list.mChannel)
+ {
+ case 0: ClearComponent(p.FindPropertyRelative(() => tpDef.X)); break;
+ case 1: ClearComponent(p.FindPropertyRelative(() => tpDef.Y)); break;
+ case 2: ClearComponent(p.FindPropertyRelative(() => tpDef.Z)); break;
+ default: break;
+ }
+ };
+
+ return list;
+ }
+
+ class ChannelList : ReorderableList
+ {
+ public int mChannel;
+ public GUIContent mTitle;
+
+ public ChannelList(
+ SerializedObject serializedObject,
+ SerializedProperty elements,
+ int channel, GUIContent title)
+ : base(serializedObject, elements, true, true, true, true)
+ {
+ mChannel = channel;
+ mTitle = title;
+ }
+ };
+
+ private GUIContent steadyLabel;
+ private GUIContent freqLabel;
+ private float freqLabelWidth;
+ private GUIContent ampLabel;
+ private float ampLabelWidth;
+
+ private void InitializeLabels(SerializedProperty property)
+ {
+ if (steadyLabel == null)
+ {
+ SerializedProperty p = property.FindPropertyRelative(() => npDef.Constant);
+ steadyLabel = new GUIContent(p.displayName, p.tooltip) { text = " " };
+ }
+ if (freqLabel == null)
+ {
+ SerializedProperty p = property.FindPropertyRelative(() => npDef.Frequency);
+ freqLabel = new GUIContent(p.displayName, p.tooltip);
+ freqLabelWidth = GUI.skin.label.CalcSize(freqLabel).x;
+ }
+ if (ampLabel == null)
+ {
+ SerializedProperty p = property.FindPropertyRelative(() => npDef.Amplitude);
+ ampLabel = new GUIContent(p.displayName, p.tooltip);
+ ampLabelWidth = GUI.skin.label.CalcSize(ampLabel).x;
+ }
+ }
+
+ private void DrawNoiseChannel(Rect rect, SerializedProperty property)
+ {
+ InitializeLabels(property);
+
+ Rect r = rect;
+ r.height -= vSpace;
+ r.width -= EditorGUIUtility.singleLineHeight + hSpace;
+ r.width /= 2;
+
+ float oldLabelWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = freqLabelWidth;
+ EditorGUI.PropertyField(r, property.FindPropertyRelative(() => npDef.Frequency), freqLabel);
+
+ r.x += r.width + hSpace;
+ EditorGUIUtility.labelWidth = ampLabelWidth;
+ EditorGUI.PropertyField(r, property.FindPropertyRelative(() => npDef.Amplitude), ampLabel);
+
+ r.y -= 1;
+ r.x += r.width + hSpace; r.width = EditorGUIUtility.singleLineHeight + hSpace;
+ EditorGUIUtility.labelWidth = hSpace;
+ EditorGUI.PropertyField(r, property.FindPropertyRelative(() => npDef.Constant), steadyLabel);
+
+ EditorGUIUtility.labelWidth = oldLabelWidth;
+ }
+
+ // SerializedProperty is a NoiseSettings.NoiseParam
+ void ClearComponent(SerializedProperty p)
+ {
+ p.FindPropertyRelative(() => npDef.Amplitude).floatValue = 0;
+ p.FindPropertyRelative(() => npDef.Frequency).floatValue = 0;
+ p.FindPropertyRelative(() => npDef.Constant).boolValue = false;
+ }
+
+ // SerializedProperty is a NoiseSettings.NoiseParam
+ bool IsClearComponent(SerializedProperty p)
+ {
+ return p.FindPropertyRelative(() => npDef.Amplitude).floatValue == 0
+ && p.FindPropertyRelative(() => npDef.Frequency).floatValue == 0;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs.meta
new file mode 100644
index 00000000..e517ee1d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineNoiseSettingsEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8000e8170b5e1374c9503b5255ccc7e8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs
new file mode 100644
index 00000000..e50800ce
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs
@@ -0,0 +1,169 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineOrbitalTransposer))]
+ [CanEditMultipleObjects]
+ internal class CinemachineOrbitalTransposerEditor : BaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ if (Target.m_HeadingIsSlave)
+ {
+ excluded.Add(FieldPath(x => x.m_BindingMode));
+ excluded.Add(FieldPath(x => x.m_Heading));
+ excluded.Add(FieldPath(x => x.m_XAxis));
+ excluded.Add(FieldPath(x => x.m_RecenterToTargetHeading));
+ }
+ if (Target.HideOffsetInInspector)
+ excluded.Add(FieldPath(x => x.m_FollowOffset));
+
+ switch (Target.m_BindingMode)
+ {
+ default:
+ case CinemachineTransposer.BindingMode.LockToTarget:
+ if (Target.m_AngularDampingMode == CinemachineTransposer.AngularDampingMode.Euler)
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ else
+ {
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ }
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetNoRoll:
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetWithWorldUp:
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetOnAssign:
+ case CinemachineTransposer.BindingMode.WorldSpace:
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp:
+ excluded.Add(FieldPath(x => x.m_XDamping));
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ excluded.Add(FieldPath(x => x.m_Heading));
+ excluded.Add(FieldPath(x => x.m_RecenterToTargetHeading));
+ break;
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineOrbitalTransposer).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Orbital Transposer requires a Follow target.",
+ MessageType.Warning);
+ Target.m_XAxis.ValueRangeLocked
+ = (Target.m_BindingMode == CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp);
+ DrawRemainingPropertiesInInspector();
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineOrbitalTransposer))]
+ static void DrawTransposerGizmos(CinemachineOrbitalTransposer target, GizmoType selectionType)
+ {
+ if (target.IsValid && !target.HideOffsetInInspector)
+ {
+ Color originalGizmoColour = Gizmos.color;
+ Gizmos.color = CinemachineCore.Instance.IsLive(target.VirtualCamera)
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+
+ Vector3 up = target.VirtualCamera.State.ReferenceUp;
+ Vector3 pos = target.FollowTargetPosition;
+
+ Quaternion orient = target.GetReferenceOrientation(up);
+ up = orient * Vector3.up;
+ DrawCircleAtPointWithRadius
+ (pos + up * target.m_FollowOffset.y, orient, target.m_FollowOffset.z);
+
+ Gizmos.color = originalGizmoColour;
+ }
+ }
+
+ public static void DrawCircleAtPointWithRadius(Vector3 point, Quaternion orient, float radius)
+ {
+ Matrix4x4 prevMatrix = Gizmos.matrix;
+ Gizmos.matrix = Matrix4x4.TRS(point, orient, radius * Vector3.one);
+
+ const int kNumPoints = 25;
+ Vector3 currPoint = Vector3.forward;
+ Quaternion rot = Quaternion.AngleAxis(360f / (float)kNumPoints, Vector3.up);
+ for (int i = 0; i < kNumPoints + 1; ++i)
+ {
+ Vector3 nextPoint = rot * currPoint;
+ Gizmos.DrawLine(currPoint, nextPoint);
+ currPoint = nextPoint;
+ }
+ Gizmos.matrix = prevMatrix;
+ }
+
+ protected virtual void OnEnable()
+ {
+ for (int i = 0; i < targets.Length; ++i)
+ (targets[i] as CinemachineOrbitalTransposer).UpdateInputAxisProvider();
+
+#if UNITY_2021_2_OR_NEWER
+ if (!Target.HideOffsetInInspector)
+ {
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+ }
+#endif
+ }
+
+ protected virtual void OnDisable()
+ {
+#if UNITY_2021_2_OR_NEWER
+ if (!Target.HideOffsetInInspector)
+ {
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+ }
+#endif
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void OnSceneGUI()
+ {
+ DrawSceneTools();
+ }
+
+ void DrawSceneTools()
+ {
+ var orbitalTransposer = Target;
+ if (orbitalTransposer == null || !orbitalTransposer.IsValid || orbitalTransposer.HideOffsetInInspector)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ CinemachineSceneToolHelpers.TransposerFollowOffsetTool(orbitalTransposer);
+ }
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs.meta
new file mode 100644
index 00000000..6a290db6
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineOrbitalTransposerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 247be52eadac5044e9f8b7b4d8d0ada9
+timeCreated: 1485443456
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs
new file mode 100644
index 00000000..b74177dc
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs
@@ -0,0 +1,15 @@
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachinePOV))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachinePOVEditor : BaseEditor
+ {
+ private void OnEnable()
+ {
+ for (int i = 0; i < targets.Length; ++i)
+ (targets[i] as CinemachinePOV).UpdateInputAxisProvider();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs.meta
new file mode 100644
index 00000000..f41dbc8b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePOVEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1186b8795dc3fc84e8ec53bd314d8e91
+timeCreated: 1504801965
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs
new file mode 100644
index 00000000..82969f82
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs
@@ -0,0 +1,588 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEditorInternal;
+using Cinemachine.Utility;
+using System.Linq;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachinePath))]
+ sealed class CinemachinePathEditor : BaseEditor
+ {
+ public static string kPreferTangentSelectionKey = "CinemachinePathEditor.PreferTangentSelection";
+ public static bool PreferTangentSelection
+ {
+ get { return EditorPrefs.GetBool(kPreferTangentSelectionKey, false); }
+ set
+ {
+ if (value != PreferTangentSelection)
+ EditorPrefs.SetBool(kPreferTangentSelectionKey, value);
+ }
+ }
+ private ReorderableList mWaypointList;
+ static bool mWaypointsExpanded;
+ bool mPreferTangentSelection;
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Waypoints));
+ }
+
+ void OnEnable()
+ {
+ mWaypointList = null;
+ mPreferTangentSelection = PreferTangentSelection;
+ }
+
+ // ReSharper disable once UnusedMember.Global - magic method called when doing Frame Selected
+ public bool HasFrameBounds()
+ {
+ return Target.m_Waypoints != null && Target.m_Waypoints.Length > 0;
+ }
+
+ // ReSharper disable once UnusedMember.Global - magic method called when doing Frame Selected
+ public Bounds OnGetFrameBounds()
+ {
+ Vector3[] wp;
+ int selected = mWaypointList == null ? -1 : mWaypointList.index;
+ if (selected >= 0 && selected < Target.m_Waypoints.Length)
+ wp = new Vector3[1] { Target.m_Waypoints[selected].position };
+ else
+ wp = Target.m_Waypoints.Select(p => p.position).ToArray();
+ return GeometryUtility.CalculateBounds(wp, Target.transform.localToWorldMatrix);
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mWaypointList == null)
+ SetupWaypointList();
+ if (mWaypointList.index >= mWaypointList.count)
+ mWaypointList.index = mWaypointList.count - 1;
+
+ // Ordinary properties
+ DrawRemainingPropertiesInInspector();
+
+ // Path length
+ EditorGUILayout.LabelField("Path Length", Target.PathLength.ToString());
+
+ GUILayout.Label(new GUIContent("Selected Waypoint:"));
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 3 + 10);
+ if (mWaypointList.index >= 0)
+ {
+ DrawWaypointEditor(rect, mWaypointList.index);
+ serializedObject.ApplyModifiedProperties();
+ }
+ else
+ {
+ if (Target.m_Waypoints.Length > 0)
+ {
+ EditorGUI.HelpBox(rect,
+ "Click on a waypoint in the scene view\nor in the Path Details list",
+ MessageType.Info);
+ }
+ else if (GUI.Button(rect, new GUIContent("Add a waypoint to the path")))
+ {
+ InsertWaypointAtIndex(mWaypointList.index);
+ mWaypointList.index = 0;
+ }
+ }
+ EditorGUILayout.EndVertical();
+
+ if (mPreferTangentSelection != EditorGUILayout.Toggle(
+ new GUIContent("Prefer Tangent Drag",
+ "When editing the path, if waypoint position and tangent coincide, dragging will apply preferentially to the tangent"),
+ mPreferTangentSelection))
+ {
+ PreferTangentSelection = mPreferTangentSelection = !mPreferTangentSelection;
+ }
+
+ mWaypointsExpanded = EditorGUILayout.Foldout(mWaypointsExpanded, "Path Details", true);
+ if (mWaypointsExpanded)
+ {
+ EditorGUI.BeginChangeCheck();
+ mWaypointList.DoLayoutList();
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ void SetupWaypointList()
+ {
+ mWaypointList = new ReorderableList(
+ serializedObject, FindProperty(x => x.m_Waypoints),
+ true, true, true, true);
+ mWaypointList.elementHeight *= 3;
+
+ mWaypointList.drawHeaderCallback = (Rect rect) =>
+ {
+ EditorGUI.LabelField(rect, "Waypoints");
+ };
+
+ mWaypointList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ DrawWaypointEditor(rect, index);
+ };
+
+ mWaypointList.onAddCallback = (ReorderableList l) =>
+ {
+ InsertWaypointAtIndex(l.index);
+ };
+ }
+
+ void DrawWaypointEditor(Rect rect, int index)
+ {
+ // Needed for accessing string names of fields
+ CinemachinePath.Waypoint def = new CinemachinePath.Waypoint();
+
+ Vector2 numberDimension = GUI.skin.button.CalcSize(new GUIContent("999"));
+ Vector2 labelDimension = GUI.skin.label.CalcSize(new GUIContent("Position"));
+ Vector2 addButtonDimension = new Vector2(labelDimension.y + 5, labelDimension.y + 1);
+ float vSpace = 2;
+ float hSpace = 3;
+
+ SerializedProperty element = mWaypointList.serializedProperty.GetArrayElementAtIndex(index);
+ rect.y += vSpace / 2;
+
+ Rect r = new Rect(rect.position, numberDimension);
+ Color color = GUI.color;
+ // GUI.color = Target.m_Appearance.pathColor;
+ if (GUI.Button(r, new GUIContent(index.ToString(), "Go to the waypoint in the scene view")))
+ {
+ if (SceneView.lastActiveSceneView != null)
+ {
+ mWaypointList.index = index;
+ SceneView.lastActiveSceneView.pivot = Target.EvaluatePosition(index);
+ SceneView.lastActiveSceneView.size = 3;
+ SceneView.lastActiveSceneView.Repaint();
+ }
+ }
+ GUI.color = color;
+
+ r = new Rect(rect.position, labelDimension);
+ r.x += hSpace + numberDimension.x;
+ EditorGUI.LabelField(r, "Position");
+ r.x += hSpace + r.width;
+ r.width = rect.width - (numberDimension.x + hSpace + r.width + hSpace + addButtonDimension.x + hSpace);
+ EditorGUI.PropertyField(r, element.FindPropertyRelative(() => def.position), GUIContent.none);
+ r.x += r.width + hSpace;
+ r.size = addButtonDimension;
+ GUIContent buttonContent = EditorGUIUtility.IconContent("d_RectTransform Icon");
+ buttonContent.tooltip = "Set to scene-view camera position";
+ GUIStyle style = new GUIStyle(GUI.skin.label);
+ style.alignment = TextAnchor.MiddleCenter;
+ if (GUI.Button(r, buttonContent, style) && SceneView.lastActiveSceneView != null)
+ {
+ Undo.RecordObject(Target, "Set waypoint");
+ CinemachinePath.Waypoint wp = Target.m_Waypoints[index];
+ Vector3 pos = SceneView.lastActiveSceneView.camera.transform.position;
+ wp.position = Target.transform.InverseTransformPoint(pos);
+ Target.m_Waypoints[index] = wp;
+ }
+
+ r = new Rect(rect.position, labelDimension);
+ r.y += numberDimension.y + vSpace;
+ r.x += hSpace + numberDimension.x; r.width = labelDimension.x;
+ EditorGUI.LabelField(r, "Tangent");
+ r.x += hSpace + r.width;
+ r.width = rect.width - (numberDimension.x + hSpace + r.width + hSpace + addButtonDimension.x + hSpace);
+ EditorGUI.PropertyField(r, element.FindPropertyRelative(() => def.tangent), GUIContent.none);
+ r.x += r.width + hSpace;
+ r.size = addButtonDimension;
+ buttonContent = EditorGUIUtility.IconContent("ol minus@2x");
+ buttonContent.tooltip = "Remove this waypoint";
+ if (GUI.Button(r, buttonContent, style))
+ {
+ Undo.RecordObject(Target, "Delete waypoint");
+ var list = new List(Target.m_Waypoints);
+ list.RemoveAt(index);
+ Target.m_Waypoints = list.ToArray();
+ if (index == Target.m_Waypoints.Length)
+ mWaypointList.index = index - 1;
+ }
+
+ r = new Rect(rect.position, labelDimension);
+ r.y += 2 * (numberDimension.y + vSpace);
+ r.x += hSpace + numberDimension.x; r.width = labelDimension.x;
+ EditorGUI.LabelField(r, "Roll");
+ r.x += hSpace + labelDimension.x;
+ r.width = rect.width
+ - (numberDimension.x + hSpace)
+ - (labelDimension.x + hSpace)
+ - (addButtonDimension.x + hSpace);
+ r.width /= 3;
+ EditorGUI.MultiPropertyField(r, new GUIContent[] { new GUIContent(" ") },
+ element.FindPropertyRelative(() => def.roll));
+
+ r.x = rect.x + rect.width - addButtonDimension.x;
+ r.size = addButtonDimension;
+ buttonContent = EditorGUIUtility.IconContent("ol plus@2x");
+ buttonContent.tooltip = "Add a new waypoint after this one";
+ if (GUI.Button(r, buttonContent, style))
+ {
+ mWaypointList.index = index;
+ InsertWaypointAtIndex(index);
+ }
+ }
+
+ void InsertWaypointAtIndex(int indexA)
+ {
+ Vector3 pos = Vector3.forward;
+ Vector3 tangent = Vector3.right;
+ float roll = 0;
+
+ // Get new values from the current indexA (if any)
+ int numWaypoints = Target.m_Waypoints.Length;
+ if (indexA < 0)
+ indexA = numWaypoints - 1;
+ if (indexA >= 0)
+ {
+ int indexB = indexA + 1;
+ if (Target.m_Looped && indexB >= numWaypoints)
+ indexB = 0;
+ if (indexB >= numWaypoints)
+ {
+ // Extrapolate the end
+ if (!Target.m_Waypoints[indexA].tangent.AlmostZero())
+ tangent = Target.m_Waypoints[indexA].tangent;
+ pos = Target.m_Waypoints[indexA].position + tangent;
+ roll = Target.m_Waypoints[indexA].roll;
+ }
+ else
+ {
+ // Interpolate
+ pos = Target.transform.InverseTransformPoint(
+ Target.EvaluatePosition(0.5f + indexA));
+ tangent = Target.transform.InverseTransformDirection(
+ Target.EvaluateTangent(0.5f + indexA).normalized);
+ roll = Mathf.Lerp(
+ Target.m_Waypoints[indexA].roll, Target.m_Waypoints[indexB].roll, 0.5f);
+ }
+ }
+ Undo.RecordObject(Target, "Add waypoint");
+ var wp = new CinemachinePath.Waypoint();
+ wp.position = pos;
+ wp.tangent = tangent;
+ wp.roll = roll;
+ var list = new List(Target.m_Waypoints);
+ list.Insert(indexA + 1, wp);
+ Target.m_Waypoints = list.ToArray();
+ Target.InvalidateDistanceCache();
+ mWaypointList.index = indexA + 1; // select it
+ }
+
+ void OnSceneGUI()
+ {
+ if (mWaypointList == null)
+ SetupWaypointList();
+
+ if (Tools.current == Tool.Move)
+ {
+ Color colorOld = Handles.color;
+ var localToWorld = Target.transform.localToWorldMatrix;
+ var localRotation = Target.transform.rotation;
+ for (int i = 0; i < Target.m_Waypoints.Length; ++i)
+ {
+ DrawSelectionHandle(i, localToWorld);
+ if (mWaypointList.index == i)
+ {
+ // Waypoint is selected
+ if (PreferTangentSelection)
+ {
+ DrawPositionControl(i, localToWorld, localRotation);
+ DrawTangentControl(i, localToWorld, localRotation);
+ }
+ else
+ {
+ DrawTangentControl(i, localToWorld, localRotation);
+ DrawPositionControl(i, localToWorld, localRotation);
+ }
+ }
+ }
+ Handles.color = colorOld;
+ }
+ }
+
+ void DrawSelectionHandle(int i, Matrix4x4 localToWorld)
+ {
+ if (Event.current.button != 1)
+ {
+ Vector3 pos = localToWorld.MultiplyPoint(Target.m_Waypoints[i].position);
+ float size = HandleUtility.GetHandleSize(pos) * 0.2f;
+ Handles.color = Color.white;
+ if (Handles.Button(pos, Quaternion.identity, size, size, Handles.SphereHandleCap)
+ && mWaypointList.index != i)
+ {
+ mWaypointList.index = i;
+ InspectorUtility.RepaintGameView();
+ }
+ // Label it
+ Handles.BeginGUI();
+ Vector2 labelSize = new Vector2(
+ EditorGUIUtility.singleLineHeight * 2, EditorGUIUtility.singleLineHeight);
+ Vector2 labelPos = HandleUtility.WorldToGUIPoint(pos);
+ labelPos.y -= labelSize.y / 2;
+ labelPos.x -= labelSize.x / 2;
+ GUILayout.BeginArea(new Rect(labelPos, labelSize));
+ GUIStyle style = new GUIStyle();
+ style.normal.textColor = Color.black;
+ style.alignment = TextAnchor.MiddleCenter;
+ GUILayout.Label(new GUIContent(i.ToString(), "Waypoint " + i), style);
+ GUILayout.EndArea();
+ Handles.EndGUI();
+ }
+ }
+
+ void DrawTangentControl(int i, Matrix4x4 localToWorld, Quaternion localRotation)
+ {
+ CinemachinePath.Waypoint wp = Target.m_Waypoints[i];
+ Vector3 hPos = localToWorld.MultiplyPoint(wp.position + wp.tangent);
+
+ Handles.color = Color.yellow;
+ Handles.DrawLine(localToWorld.MultiplyPoint(wp.position), hPos);
+
+ EditorGUI.BeginChangeCheck();
+ Quaternion rotation = (Tools.pivotRotation == PivotRotation.Local)
+ ? localRotation : Quaternion.identity;
+ float size = HandleUtility.GetHandleSize(hPos) * 0.1f;
+ Handles.SphereHandleCap(0, hPos, rotation, size, EventType.Repaint);
+ Vector3 newPos = Handles.PositionHandle(hPos, rotation);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "Change Waypoint Tangent");
+ newPos = Matrix4x4.Inverse(localToWorld).MultiplyPoint(newPos);
+ wp.tangent = newPos - wp.position;
+ Target.m_Waypoints[i] = wp;
+ Target.InvalidateDistanceCache();
+ InspectorUtility.RepaintGameView();
+ }
+ }
+
+ void DrawPositionControl(int i, Matrix4x4 localToWorld, Quaternion localRotation)
+ {
+ CinemachinePath.Waypoint wp = Target.m_Waypoints[i];
+ Vector3 pos = localToWorld.MultiplyPoint(wp.position);
+ EditorGUI.BeginChangeCheck();
+ Handles.color = Target.m_Appearance.pathColor;
+ Quaternion rotation = (Tools.pivotRotation == PivotRotation.Local)
+ ? localRotation : Quaternion.identity;
+ float size = HandleUtility.GetHandleSize(pos) * 0.1f;
+ Handles.SphereHandleCap(0, pos, rotation, size, EventType.Repaint);
+ pos = Handles.PositionHandle(pos, rotation);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "Move Waypoint");
+ wp.position = Matrix4x4.Inverse(localToWorld).MultiplyPoint(pos);;
+ Target.m_Waypoints[i] = wp;
+ Target.InvalidateDistanceCache();
+ InspectorUtility.RepaintGameView();
+ }
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.NotInSelectionHierarchy
+ | GizmoType.InSelectionHierarchy | GizmoType.Pickable, typeof(CinemachinePath))]
+ static void DrawGizmos(CinemachinePath path, GizmoType selectionType)
+ {
+ var isActive = Selection.activeGameObject == path.gameObject;
+ DrawPathGizmo(
+ path, isActive ? path.m_Appearance.pathColor : path.m_Appearance.inactivePathColor,
+ isActive, LocalSpaceSamplePath);
+ }
+
+ // same as Quaternion.AngleAxis(roll, Vector3.forward), just simplified
+ static Quaternion RollAroundForward(float angle)
+ {
+ var halfAngle = angle * 0.5F * Mathf.Deg2Rad;
+ return new Quaternion(0, 0, Mathf.Sin(halfAngle), Mathf.Cos(halfAngle));
+ }
+
+ static Vector4[] s_BezierWeightsCache;
+
+ // Optimizer for gizmo drawing
+ static int LocalSpaceSamplePath(CinemachinePathBase pathBase, int samplesPerSegment, Vector3[] positions, Quaternion[] rotations)
+ {
+ var path = pathBase as CinemachinePath;
+
+ int numSegments = path.m_Waypoints.Length - (path.Looped ? 0 : 1);
+ if (numSegments == 0)
+ return 0;
+
+ // Compute the bezier weights only once - this is shared by all segments
+ if (s_BezierWeightsCache == null || s_BezierWeightsCache.Length < samplesPerSegment)
+ s_BezierWeightsCache = new Vector4[samplesPerSegment];
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ float t = ((float)i) / samplesPerSegment;
+ float d = 1.0f - t;
+ s_BezierWeightsCache[i] = new Vector4(d * d * d, 3f * d * d * t, 3f * d * t * t, t * t * t);
+ }
+
+ // Process the positions
+ int numSamples = 0;
+ for (int wp = 0; wp < numSegments && numSamples < positions.Length; ++wp)
+ {
+ int nextWp = (wp + 1) % path.m_Waypoints.Length;
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ if (numSamples >= positions.Length)
+ break;
+ positions[numSamples++]
+ = (s_BezierWeightsCache[i].x * path.m_Waypoints[wp].position)
+ + (s_BezierWeightsCache[i].y * (path.m_Waypoints[wp].position + path.m_Waypoints[wp].tangent))
+ + (s_BezierWeightsCache[i].z * (path.m_Waypoints[nextWp].position - path.m_Waypoints[nextWp].tangent))
+ + (s_BezierWeightsCache[i].w * path.m_Waypoints[nextWp].position);
+ }
+ }
+ if (numSamples < positions.Length)
+ positions[numSamples++] = path.Looped ? positions[0] : path.m_Waypoints[path.m_Waypoints.Length - 1].position;
+
+ // Process rotations
+ if (rotations != null && rotations.Length >= numSamples)
+ {
+ int numRotSamples = 0;
+ for (int wp = 0; wp < numSegments && numRotSamples < numSamples; ++wp)
+ {
+ int nextWp = (wp + 1) % path.m_Waypoints.Length;
+ SplineHelpers.BezierTangentWeights3(
+ path.m_Waypoints[wp].position, path.m_Waypoints[wp].position + path.m_Waypoints[wp].tangent,
+ path.m_Waypoints[nextWp].position - path.m_Waypoints[nextWp].tangent, path.m_Waypoints[nextWp].position,
+ out var w0, out var w1, out var w2);
+
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ if (numRotSamples >= numSamples)
+ break;
+ float t = ((float)i) / samplesPerSegment;
+ var fwd = (w0 * (t * t)) + (w1 * t) + w2; // from SplineHelpers.BezierTangent3()
+ if (fwd.sqrMagnitude < 0.001f)
+ fwd = Vector3.forward;
+ rotations[numRotSamples++] = Quaternion.LookRotation(fwd) * RollAroundForward(path.GetRoll(wp, nextWp, t + wp));
+ }
+ }
+ if (numRotSamples < numSamples)
+ rotations[numRotSamples++] = path.Looped ? rotations[0] : path.EvaluateLocalOrientation(path.MaxPos);
+ }
+
+ return numSamples;
+ }
+
+
+ //===========================================
+ // Generic service for drawing path gizmo
+
+ static Vector3[] s_PositionsCache;
+ static Quaternion[] s_RotationsCache;
+#if UNITY_2023_1_OR_NEWER
+ static Vector3[] s_RightRailCache;
+ static Vector3[] s_SleepersCache;
+#endif
+
+ static ElementType[] EnsureArraySize(ElementType[] array, int requiredSize)
+ {
+ return ((array == null) || (array.Length < requiredSize)) ? new ElementType[requiredSize] : array;
+ }
+
+ ///
+ /// Sample a path with a fixed number of samples per segment, in path-local space.
+ /// Used for efficient gizmo drawing.
+ ///
+ /// How many samples to take in each segment
+ /// Output buffer for position samples
+ /// Output buffer for rotation samples. May be null if rotations are not needed.
+ /// Number of samples actually taken
+ public delegate int BatchSamplerDelegate(CinemachinePathBase path, int samplesPerSegment, Vector3[] positions, Quaternion[] rotations);
+
+ public static void DrawPathGizmo(CinemachinePathBase path, Color pathColor, bool isActive, BatchSamplerDelegate batchSampler = null)
+ {
+ var oldColor = Gizmos.color;
+ Gizmos.color = pathColor;
+ var oldMatrix = Gizmos.matrix;
+ Gizmos.matrix = path.transform.localToWorldMatrix;
+
+ if (batchSampler == null)
+ batchSampler = DefaultBatchSampler;
+ int numSegments = Mathf.CeilToInt(path.MaxPos - path.MinPos) + 1;
+ int numSamples = numSegments * path.m_Resolution + 1;
+ s_PositionsCache = EnsureArraySize(s_PositionsCache, numSamples);
+ if (!isActive || path.m_Appearance.width < 0.01f)
+ {
+ numSamples = batchSampler(path, path.m_Resolution, s_PositionsCache, null);
+#if UNITY_2023_1_OR_NEWER
+ Gizmos.DrawLineStrip(new Span(s_PositionsCache, 0, numSamples), false);
+#else
+ for (int i = 1; i < numSamples; ++i)
+ Gizmos.DrawLine(s_PositionsCache[i], s_PositionsCache[i-1]);
+#endif
+ }
+ else
+ {
+ s_RotationsCache = EnsureArraySize(s_RotationsCache, numSamples);
+ numSamples = batchSampler(path, path.m_Resolution, s_PositionsCache, s_RotationsCache);
+
+ // Draw the path
+ var halfWidth = path.m_Appearance.width * 0.5f;
+#if UNITY_2023_1_OR_NEWER
+ s_RightRailCache = EnsureArraySize(s_RightRailCache, numSamples);
+ s_SleepersCache = EnsureArraySize(s_SleepersCache, numSamples * 2);
+ for (int i = 0; i < numSamples; ++i)
+ {
+ var p = s_PositionsCache[i];
+ var q = s_RotationsCache[i];
+ var s = q * Vector3.right * halfWidth;
+ s_RightRailCache[i] = p + s;
+ s_PositionsCache[i] = p - s;
+ s *= 1.2f;
+ s_SleepersCache[i << 1] = p + s;
+ s_SleepersCache[(i << 1) + 1] = p - s;
+ }
+ Gizmos.DrawLineStrip(new Span(s_PositionsCache, 0, numSamples), false);
+ Gizmos.DrawLineStrip(new Span(s_RightRailCache, 0, numSamples), false);
+ Gizmos.DrawLineList(new Span(s_SleepersCache, 0, numSamples * 2));
+#else
+ var lastW = (s_RotationsCache[0] * Vector3.right) * halfWidth;
+ for (int i = 1; i < numSamples; ++i)
+ {
+ var lastPos = s_PositionsCache[i-1];
+ var p = s_PositionsCache[i];
+ var q = s_RotationsCache[i];
+ var w = (q * Vector3.right) * halfWidth;
+ var w2 = w * 1.2f;
+ var p0 = p - w2;
+ var p1 = p + w2;
+ Gizmos.DrawLine(p0, p1);
+ Gizmos.DrawLine(lastPos - lastW, p - w);
+ Gizmos.DrawLine(lastPos + lastW, p + w);
+ lastW = w;
+ }
+#endif
+ }
+ Gizmos.matrix = oldMatrix;
+ Gizmos.color = oldColor;
+ }
+
+ // Fallback, used if a custom batch sampler is not provided to DrawPathGizmo()
+ static int DefaultBatchSampler(CinemachinePathBase path, int samplesPerSegment, Vector3[] positions, Quaternion[] rotations)
+ {
+ int numSamples = 0;
+ float step = 1f / samplesPerSegment;
+ float tEnd = path.MaxPos + step / 2;
+ for (float t = path.MinPos + step; t <= tEnd; t += step)
+ {
+ if (numSamples >= positions.Length || (rotations != null && numSamples >= rotations.Length))
+ break;
+ positions[numSamples] = path.EvaluateLocalPosition(t);
+ if (rotations != null)
+ rotations[numSamples] = path.EvaluateLocalOrientation(t);
+ ++numSamples;
+ }
+ return numSamples;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs.meta
new file mode 100644
index 00000000..2de29b1a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachinePathEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c88d2a04cc828c044b0fcc133fd481e6
+timeCreated: 1493316676
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs
new file mode 100644
index 00000000..f75104b6
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs
@@ -0,0 +1,24 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineSameAsFollowTarget))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineSameAsFollowTargetEditor : BaseEditor
+ {
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineSameAsFollowTarget).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Same As Follow Target requires a Follow target. It will set the virtual camera's "
+ + "rotation to be the same as that of the Follow Target.",
+ MessageType.Warning);
+ DrawRemainingPropertiesInInspector();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs.meta
new file mode 100644
index 00000000..5def8f47
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSameAsFollowTargetEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fc54afb14b6b01a4dabc4c8831cb7bf7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs
new file mode 100644
index 00000000..e0a83fc9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs
@@ -0,0 +1,388 @@
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Utility;
+
+#if UNITY_2019_2_OR_NEWER
+using UnityEngine.UIElements;
+#endif
+
+namespace Cinemachine.Editor
+{
+ [InitializeOnLoad]
+ static class CinemachineScreenComposerGuidesGlobalDraggable
+ {
+ static CinemachineScreenComposerGuidesGlobalDraggable()
+ {
+ CinemachineScreenComposerGuides.sDraggableGameWindowGuides = Enabled;
+ }
+
+ public static string kEnabledKey = "DraggableScreenComposerGuides_Enabled";
+ public static bool Enabled
+ {
+ get => EditorPrefs.GetBool(kEnabledKey, true);
+ set
+ {
+ if (value != CinemachineScreenComposerGuides.sDraggableGameWindowGuides)
+ {
+ EditorPrefs.SetBool(kEnabledKey, value);
+ CinemachineScreenComposerGuides.sDraggableGameWindowGuides = value;
+ }
+ }
+ }
+ }
+
+#if !UNITY_2019_2_OR_NEWER
+ internal class GameViewEventCatcher
+ {
+ public void OnEnable() {}
+ public void OnDisable() {}
+ }
+#else
+ // This is necessary because in 2019.3 we don't get mouse events in the game view in Edit mode
+ internal class GameViewEventCatcher
+ {
+ class Dragger
+ {
+ bool mActive;
+ VisualElement mRoot;
+
+ void OnMouseDown(MouseDownEvent e) { if (mRoot.panel != null) mActive = true; }
+ void OnMouseUp(MouseUpEvent e) { mActive = false; }
+ void OnMouseMove(MouseMoveEvent e)
+ {
+ if (mActive && mRoot.panel != null)
+ {
+ if (!Application.isPlaying
+ && CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides
+ && CinemachineBrain.SoloCamera == null)
+ {
+ InspectorUtility.RepaintGameView();
+ }
+ }
+ }
+
+ public Dragger(VisualElement root)
+ {
+ mRoot = root;
+ if (mRoot == null || mRoot.panel == null || mRoot.panel.visualTree == null)
+ return;
+ mRoot.panel.visualTree.RegisterCallback(OnMouseDown, TrickleDown.TrickleDown);
+ mRoot.panel.visualTree.RegisterCallback(OnMouseUp, TrickleDown.TrickleDown);
+ mRoot.panel.visualTree.RegisterCallback(OnMouseMove, TrickleDown.TrickleDown);
+ }
+
+ public void Unregister()
+ {
+ if (mRoot == null || mRoot.panel == null || mRoot.panel.visualTree == null)
+ return;
+ mRoot.panel.visualTree.UnregisterCallback(OnMouseDown, TrickleDown.TrickleDown);
+ mRoot.panel.visualTree.UnregisterCallback(OnMouseUp, TrickleDown.TrickleDown);
+ mRoot.panel.visualTree.UnregisterCallback(OnMouseMove, TrickleDown.TrickleDown);
+ }
+ }
+
+ Dragger[] mDraggers;
+
+ // Create manipulator in each game view
+ public void OnEnable()
+ {
+ System.Reflection.Assembly assembly = typeof(UnityEditor.EditorWindow).Assembly;
+ System.Type type = assembly.GetType( "UnityEditor.GameView" );
+ var gameViews = UnityEngine.Resources.FindObjectsOfTypeAll(type);
+ mDraggers = new Dragger[gameViews.Length];
+
+ for (int i = 0; i < gameViews.Length; ++i)
+ {
+ var gameViewRoot = (gameViews[i] as UnityEditor.EditorWindow).rootVisualElement;
+ mDraggers[i] = new Dragger(gameViewRoot);
+ }
+ }
+
+ public void OnDisable()
+ {
+ for (int i = 0; mDraggers != null && i < mDraggers.Length; ++i)
+ {
+ var dragger = mDraggers[i];
+ if (dragger != null)
+ dragger.Unregister();
+ }
+ mDraggers = null;
+ }
+ }
+#endif
+
+ ///
+ /// Use an instance of this class to draw screen composer guides in the game view.
+ /// This is an internal class, and is not meant to be called outside of Cinemachine.
+ ///
+ public class CinemachineScreenComposerGuides
+ {
+ /// Delegate for getting the hard/soft guide rects
+ /// The Hard/Soft guide rect
+ public delegate Rect RectGetter();
+
+ /// Delegate for setting the hard/soft guide rects
+ /// The value to set
+ public delegate void RectSetter(Rect r);
+
+ /// Delegate to get the current object whose guides are being drawn
+ /// The target object whose guides are being drawn
+ public delegate SerializedObject ObjectGetter();
+
+ /// Get the Hard Guide. Client must implement this
+ public RectGetter GetHardGuide;
+ /// Get the Soft Guide. Client must implement this
+ public RectGetter GetSoftGuide;
+ /// Set the Hard Guide. Client must implement this
+ public RectSetter SetHardGuide;
+ /// Get the Soft Guide. Client must implement this
+ public RectSetter SetSoftGuide;
+ /// Get the target object whose guides are being drawn. Client must implement this
+ public ObjectGetter Target;
+
+ /// Width of the draggable guide bar in the game view
+ public const float kGuideBarWidthPx = 3f;
+
+ /// If true, then allows game window guides to be edited in play mode.
+ public static bool sDraggableGameWindowGuides = true;
+
+ ///
+ /// Helper to set the appropriate new rects in the target object, is something changed.
+ ///
+ /// Current hard guide
+ /// Current soft guide
+ /// New hard guide
+ /// New soft guide
+ public void SetNewBounds(Rect oldHard, Rect oldSoft, Rect newHard, Rect newSoft)
+ {
+ if ((oldSoft != newSoft) || (oldHard != newHard))
+ {
+ Undo.RecordObject(Target().targetObject, "Composer Bounds");
+ if (oldSoft != newSoft)
+ SetSoftGuide(newSoft);
+ if (oldHard != newHard)
+ SetHardGuide(newHard);
+ Target().ApplyModifiedProperties();
+ }
+ }
+
+ Rect GetCameraRect(Camera outputCamera, LensSettings lens)
+ {
+ Rect cameraRect = outputCamera.pixelRect;
+ float screenHeight = cameraRect.height;
+ float screenWidth = cameraRect.width;
+
+ float screenAspect = screenWidth / screenHeight;
+ switch (outputCamera.gateFit)
+ {
+ case Camera.GateFitMode.Vertical:
+ screenWidth = screenHeight * lens.Aspect;
+ cameraRect.position += new Vector2((cameraRect.width - screenWidth) * 0.5f, 0);
+ break;
+ case Camera.GateFitMode.Horizontal:
+ screenHeight = screenWidth / lens.Aspect;
+ cameraRect.position += new Vector2(0, (cameraRect.height - screenHeight) * 0.5f);
+ break;
+ case Camera.GateFitMode.Overscan:
+ if (screenAspect < lens.Aspect)
+ {
+ screenHeight = screenWidth / lens.Aspect;
+ cameraRect.position += new Vector2(0, (cameraRect.height - screenHeight) * 0.5f);
+ }
+ else
+ {
+ screenWidth = screenHeight * lens.Aspect;
+ cameraRect.position += new Vector2((cameraRect.width - screenWidth) * 0.5f, 0);
+ }
+ break;
+ case Camera.GateFitMode.Fill:
+ if (screenAspect > lens.Aspect)
+ {
+ screenHeight = screenWidth / lens.Aspect;
+ cameraRect.position += new Vector2(0, (cameraRect.height - screenHeight) * 0.5f);
+ }
+ else
+ {
+ screenWidth = screenHeight * lens.Aspect;
+ cameraRect.position += new Vector2((cameraRect.width - screenWidth) * 0.5f, 0);
+ }
+ break;
+ case Camera.GateFitMode.None:
+ break;
+ }
+
+ cameraRect = new Rect(cameraRect.position, new Vector2(screenWidth, screenHeight));
+
+ // Invert Y
+ float h = cameraRect.height;
+ cameraRect.yMax = Screen.height - cameraRect.yMin;
+ cameraRect.yMin = cameraRect.yMax - h;
+
+ // Shift the guides along with the lens
+ cameraRect.position += new Vector2(
+ -screenWidth * lens.LensShift.x, screenHeight * lens.LensShift.y);
+
+ return cameraRect;
+ }
+
+ ///
+ /// Call this from the inspector's OnGUI. Draws the guides and manages dragging.
+ ///
+ /// Is the target live
+ /// Destination camera
+ /// Current lens settings
+ /// True if hard guides should be shown
+ public void OnGUI_DrawGuides(bool isLive, Camera outputCamera, LensSettings lens, bool showHardGuides)
+ {
+ Rect cameraRect = GetCameraRect(outputCamera, lens);
+ float screenWidth = cameraRect.width;
+ float screenHeight = cameraRect.height;
+
+ // Rotate the guides along with the dutch
+ Matrix4x4 oldMatrix = GUI.matrix;
+ GUI.matrix = Matrix4x4.Translate(cameraRect.min);
+ GUIUtility.RotateAroundPivot(lens.Dutch, cameraRect.center);
+ Color hardBarsColour = CinemachineSettings.ComposerSettings.HardBoundsOverlayColour;
+ Color softBarsColour = CinemachineSettings.ComposerSettings.SoftBoundsOverlayColour;
+ float overlayOpacity = CinemachineSettings.ComposerSettings.OverlayOpacity;
+ if (!isLive)
+ {
+ softBarsColour = CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+ hardBarsColour = Color.Lerp(softBarsColour, Color.black, 0.5f);
+ overlayOpacity /= 2;
+ }
+ hardBarsColour.a *= overlayOpacity;
+ softBarsColour.a *= overlayOpacity;
+
+ Rect r = showHardGuides ? GetHardGuide() : new Rect(-2, -2, 4, 4);
+ float hardEdgeLeft = r.xMin * screenWidth;
+ float hardEdgeTop = r.yMin * screenHeight;
+ float hardEdgeRight = r.xMax * screenWidth;
+ float hardEdgeBottom = r.yMax * screenHeight;
+
+ mDragBars[(int)DragBar.HardBarLineLeft] = new Rect(hardEdgeLeft - kGuideBarWidthPx / 2f, 0f, kGuideBarWidthPx, screenHeight);
+ mDragBars[(int)DragBar.HardBarLineTop] = new Rect(0f, hardEdgeTop - kGuideBarWidthPx / 2f, screenWidth, kGuideBarWidthPx);
+ mDragBars[(int)DragBar.HardBarLineRight] = new Rect(hardEdgeRight - kGuideBarWidthPx / 2f, 0f, kGuideBarWidthPx, screenHeight);
+ mDragBars[(int)DragBar.HardBarLineBottom] = new Rect(0f, hardEdgeBottom - kGuideBarWidthPx / 2f, screenWidth, kGuideBarWidthPx);
+
+ r = GetSoftGuide();
+ float softEdgeLeft = r.xMin * screenWidth;
+ float softEdgeTop = r.yMin * screenHeight;
+ float softEdgeRight = r.xMax * screenWidth;
+ float softEdgeBottom = r.yMax * screenHeight;
+
+ mDragBars[(int)DragBar.SoftBarLineLeft] = new Rect(softEdgeLeft - kGuideBarWidthPx / 2f, 0f, kGuideBarWidthPx, screenHeight);
+ mDragBars[(int)DragBar.SoftBarLineTop] = new Rect(0f, softEdgeTop - kGuideBarWidthPx / 2f, screenWidth, kGuideBarWidthPx);
+ mDragBars[(int)DragBar.SoftBarLineRight] = new Rect(softEdgeRight - kGuideBarWidthPx / 2f, 0f, kGuideBarWidthPx, screenHeight);
+ mDragBars[(int)DragBar.SoftBarLineBottom] = new Rect(0f, softEdgeBottom - kGuideBarWidthPx / 2f, screenWidth, kGuideBarWidthPx);
+
+ mDragBars[(int)DragBar.Center] = new Rect(softEdgeLeft, softEdgeTop, softEdgeRight - softEdgeLeft, softEdgeBottom - softEdgeTop);
+
+ // Handle dragging bars
+ if (sDraggableGameWindowGuides && isLive)
+ OnGuiHandleBarDragging(screenWidth, screenHeight);
+
+ // Draw the masks
+ GUI.color = hardBarsColour;
+ Rect hardBarLeft = new Rect(0, hardEdgeTop, Mathf.Max(0, hardEdgeLeft), hardEdgeBottom - hardEdgeTop);
+ Rect hardBarRight = new Rect(hardEdgeRight, hardEdgeTop,
+ Mathf.Max(0, screenWidth - hardEdgeRight), hardEdgeBottom - hardEdgeTop);
+ Rect hardBarTop = new Rect(Mathf.Min(0, hardEdgeLeft), 0,
+ Mathf.Max(screenWidth, hardEdgeRight) - Mathf.Min(0, hardEdgeLeft), Mathf.Max(0, hardEdgeTop));
+ Rect hardBarBottom = new Rect(Mathf.Min(0, hardEdgeLeft), hardEdgeBottom,
+ Mathf.Max(screenWidth, hardEdgeRight) - Mathf.Min(0, hardEdgeLeft),
+ Mathf.Max(0, screenHeight - hardEdgeBottom));
+ GUI.DrawTexture(hardBarLeft, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(hardBarTop, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(hardBarRight, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(hardBarBottom, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+
+ GUI.color = softBarsColour;
+ Rect softBarLeft = new Rect(hardEdgeLeft, softEdgeTop, softEdgeLeft - hardEdgeLeft, softEdgeBottom - softEdgeTop);
+ Rect softBarTop = new Rect(hardEdgeLeft, hardEdgeTop, hardEdgeRight - hardEdgeLeft, softEdgeTop - hardEdgeTop);
+ Rect softBarRight = new Rect(softEdgeRight, softEdgeTop, hardEdgeRight - softEdgeRight, softEdgeBottom - softEdgeTop);
+ Rect softBarBottom = new Rect(hardEdgeLeft, softEdgeBottom, hardEdgeRight - hardEdgeLeft, hardEdgeBottom - softEdgeBottom);
+ GUI.DrawTexture(softBarLeft, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(softBarTop, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(softBarRight, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(softBarBottom, Texture2D.whiteTexture, ScaleMode.StretchToFill);
+
+ // Draw the drag bars
+ GUI.DrawTexture(mDragBars[(int)DragBar.SoftBarLineLeft], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.SoftBarLineTop], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.SoftBarLineRight], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.SoftBarLineBottom], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+
+ GUI.color = hardBarsColour;
+ GUI.DrawTexture(mDragBars[(int)DragBar.HardBarLineLeft], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.HardBarLineTop], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.HardBarLineRight], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+ GUI.DrawTexture(mDragBars[(int)DragBar.HardBarLineBottom], Texture2D.whiteTexture, ScaleMode.StretchToFill);
+
+ GUI.matrix = oldMatrix;
+ }
+
+ // For dragging the bars - order defines precedence
+ private enum DragBar
+ {
+ Center,
+ SoftBarLineLeft, SoftBarLineTop, SoftBarLineRight, SoftBarLineBottom,
+ HardBarLineLeft, HardBarLineTop, HardBarLineRight, HardBarLineBottom,
+ NONE
+ };
+ private DragBar mDragging = DragBar.NONE;
+ private Rect[] mDragBars = new Rect[9];
+
+ private void OnGuiHandleBarDragging(float screenWidth, float screenHeight)
+ {
+ if (Event.current.type == EventType.MouseUp)
+ mDragging = DragBar.NONE;
+ if (Event.current.type == EventType.MouseDown)
+ {
+ mDragging = DragBar.NONE;
+ for (DragBar i = DragBar.Center; i < DragBar.NONE && mDragging == DragBar.NONE; ++i)
+ {
+ Vector2 slop = new Vector2(5f, 5f);
+ if (i == DragBar.Center)
+ {
+ if (mDragBars[(int)i].width > 3f * slop.x)
+ slop.x = -slop.x;
+ if (mDragBars[(int)i].height > 3f * slop.y)
+ slop.y = -slop.y;
+ }
+ Rect r = mDragBars[(int)i].Inflated(slop);
+ if (r.Contains(Event.current.mousePosition))
+ mDragging = i;
+ }
+ }
+
+ if (mDragging != DragBar.NONE && Event.current.type == EventType.MouseDrag)
+ {
+ Vector2 d = new Vector2(
+ Event.current.delta.x / screenWidth,
+ Event.current.delta.y / screenHeight);
+
+ // First snapshot some settings
+ Rect newHard = GetHardGuide();
+ Rect newSoft = GetSoftGuide();
+ Vector2 changed = Vector2.zero;
+ switch (mDragging)
+ {
+ case DragBar.Center: newSoft.position += d; break;
+ case DragBar.SoftBarLineLeft: newSoft = newSoft.Inflated(new Vector2(-d.x, 0)); break;
+ case DragBar.SoftBarLineRight: newSoft = newSoft.Inflated(new Vector2(d.x, 0)); break;
+ case DragBar.SoftBarLineTop: newSoft = newSoft.Inflated(new Vector2(0, -d.y)); break;
+ case DragBar.SoftBarLineBottom: newSoft = newSoft.Inflated(new Vector2(0, d.y)); break;
+ case DragBar.HardBarLineLeft: newHard = newHard.Inflated(new Vector2(-d.x, 0)); break;
+ case DragBar.HardBarLineRight: newHard = newHard.Inflated(new Vector2(d.x, 0)); break;
+ case DragBar.HardBarLineBottom: newHard = newHard.Inflated(new Vector2(0, d.y)); break;
+ case DragBar.HardBarLineTop: newHard = newHard.Inflated(new Vector2(0, -d.y)); break;
+ }
+
+ // Apply the changes, enforcing the bounds
+ SetNewBounds(GetHardGuide(), GetSoftGuide(), newHard, newSoft);
+ Event.current.Use();
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs.meta
new file mode 100644
index 00000000..dedaa030
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineScreenComposerGuides.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2a15a1e455bcc7543872f50762449739
+timeCreated: 1502028239
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs
new file mode 100644
index 00000000..84cffa72
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs
@@ -0,0 +1,343 @@
+using UnityEditor;
+using UnityEngine;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEditorInternal;
+using Cinemachine.Utility;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineSmoothPath))]
+ sealed class CinemachineSmoothPathEditor : BaseEditor
+ {
+ private ReorderableList mWaypointList;
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Waypoints));
+ }
+
+ void OnEnable()
+ {
+ mWaypointList = null;
+ }
+
+
+ // ReSharper disable once UnusedMember.Global - magic method called when doing Frame Selected
+ public bool HasFrameBounds()
+ {
+ return Target.m_Waypoints != null && Target.m_Waypoints.Length > 0;
+ }
+
+ // ReSharper disable once UnusedMember.Global - magic method called when doing Frame Selected
+ public Bounds OnGetFrameBounds()
+ {
+ Vector3[] wp;
+ int selected = mWaypointList == null ? -1 : mWaypointList.index;
+ if (selected >= 0 && selected < Target.m_Waypoints.Length)
+ wp = new Vector3[1] { Target.m_Waypoints[selected].position };
+ else
+ wp = Target.m_Waypoints.Select(p => p.position).ToArray();
+ return GeometryUtility.CalculateBounds(wp, Target.transform.localToWorldMatrix);
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mWaypointList == null)
+ SetupWaypointList();
+
+ if (mWaypointList.index >= mWaypointList.count)
+ mWaypointList.index = mWaypointList.count - 1;
+
+ // Ordinary properties
+ DrawRemainingPropertiesInInspector();
+
+ // Path length
+ EditorGUILayout.LabelField("Path Length", Target.PathLength.ToString());
+
+ // Waypoints
+ EditorGUI.BeginChangeCheck();
+ mWaypointList.DoLayoutList();
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ void SetupWaypointList()
+ {
+ mWaypointList = new ReorderableList(
+ serializedObject, FindProperty(x => x.m_Waypoints),
+ true, true, true, true);
+
+ mWaypointList.drawHeaderCallback = (Rect rect) =>
+ { EditorGUI.LabelField(rect, "Waypoints"); };
+
+ mWaypointList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ { DrawWaypointEditor(rect, index); };
+
+ mWaypointList.onAddCallback = (ReorderableList l) =>
+ { InsertWaypointAtIndex(l.index); };
+ }
+
+ void DrawWaypointEditor(Rect rect, int index)
+ {
+ // Needed for accessing string names of fields
+ CinemachineSmoothPath.Waypoint def = new CinemachineSmoothPath.Waypoint();
+ SerializedProperty element = mWaypointList.serializedProperty.GetArrayElementAtIndex(index);
+
+ float hSpace = 3;
+ rect.width -= hSpace; rect.y += 1;
+ Vector2 numberDimension = GUI.skin.label.CalcSize(new GUIContent("999"));
+ Rect r = new Rect(rect.position, numberDimension);
+ if (GUI.Button(r, new GUIContent(index.ToString(), "Go to the waypoint in the scene view")))
+ {
+ if (SceneView.lastActiveSceneView != null)
+ {
+ mWaypointList.index = index;
+ SceneView.lastActiveSceneView.pivot = Target.EvaluatePosition(index);
+ SceneView.lastActiveSceneView.size = 4;
+ SceneView.lastActiveSceneView.Repaint();
+ }
+ }
+
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2f;
+ GUIContent rollLabel = new GUIContent("Roll");
+ Vector2 labelDimension = GUI.skin.label.CalcSize(rollLabel);
+ float rollWidth = labelDimension.x + floatFieldWidth;
+ r.x += r.width + hSpace; r.width = rect.width - (r.width + hSpace + rollWidth) - (r.height + hSpace);
+ EditorGUI.PropertyField(r, element.FindPropertyRelative(() => def.position), GUIContent.none);
+
+ r.x += r.width + hSpace; r.width = rollWidth;
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = labelDimension.x;
+
+ var indent = EditorGUI.indentLevel;
+ EditorGUI.indentLevel = 0;
+ EditorGUI.PropertyField(r, element.FindPropertyRelative(() => def.roll), rollLabel);
+ EditorGUIUtility.labelWidth = oldWidth;
+ EditorGUI.indentLevel = indent;
+
+ r.x += r.width + hSpace; r.height += 1; r.width = r.height;
+ GUIContent setButtonContent = EditorGUIUtility.IconContent("d_RectTransform Icon");
+ setButtonContent.tooltip = "Set to scene-view camera position";
+ if (GUI.Button(r, setButtonContent, GUI.skin.label) && SceneView.lastActiveSceneView != null)
+ {
+ Undo.RecordObject(Target, "Set waypoint");
+ CinemachineSmoothPath.Waypoint wp = Target.m_Waypoints[index];
+ Vector3 pos = SceneView.lastActiveSceneView.camera.transform.position;
+ wp.position = Target.transform.InverseTransformPoint(pos);
+ Target.m_Waypoints[index] = wp;
+ }
+ }
+
+ void InsertWaypointAtIndex(int indexA)
+ {
+ Vector3 pos = Vector3.right;
+ float roll = 0;
+
+ // Get new values from the current indexA (if any)
+ int numWaypoints = Target.m_Waypoints.Length;
+ if (indexA < 0)
+ indexA = numWaypoints - 1;
+ if (indexA >= 0)
+ {
+ int indexB = indexA + 1;
+ if (Target.m_Looped && indexB >= numWaypoints)
+ indexB = 0;
+ if (indexB >= numWaypoints)
+ {
+ Vector3 delta = Vector3.right;
+ if (indexA > 0)
+ delta = Target.m_Waypoints[indexA].position - Target.m_Waypoints[indexA-1].position;
+ pos = Target.m_Waypoints[indexA].position + delta;
+ roll = Target.m_Waypoints[indexA].roll;
+ }
+ else
+ {
+ // Interpolate
+ pos = Target.transform.InverseTransformPoint(Target.EvaluatePosition(0.5f + indexA));
+ roll = Mathf.Lerp(Target.m_Waypoints[indexA].roll, Target.m_Waypoints[indexB].roll, 0.5f);
+ }
+ }
+ Undo.RecordObject(Target, "Add waypoint");
+ var wp = new CinemachineSmoothPath.Waypoint();
+ wp.position = pos;
+ wp.roll = roll;
+ var list = new List(Target.m_Waypoints);
+ list.Insert(indexA + 1, wp);
+ Target.m_Waypoints = list.ToArray();
+ Target.InvalidateDistanceCache();
+ InspectorUtility.RepaintGameView();
+ mWaypointList.index = indexA + 1; // select it
+ }
+
+ void OnSceneGUI()
+ {
+ if (mWaypointList == null)
+ SetupWaypointList();
+
+ if (Tools.current == Tool.Move)
+ {
+ Color colorOld = Handles.color;
+ var localToWorld = Target.transform.localToWorldMatrix;
+ for (int i = 0; i < Target.m_Waypoints.Length; ++i)
+ {
+ DrawSelectionHandle(i, localToWorld);
+ if (mWaypointList.index == i)
+ DrawPositionControl(i, localToWorld, Target.transform.rotation); // Waypoint is selected
+ }
+ Handles.color = colorOld;
+ }
+ }
+
+ void DrawSelectionHandle(int i, Matrix4x4 localToWorld)
+ {
+ if (Event.current.button != 1)
+ {
+ Vector3 pos = localToWorld.MultiplyPoint(Target.m_Waypoints[i].position);
+ float size = HandleUtility.GetHandleSize(pos) * 0.2f;
+ Handles.color = Color.white;
+ if (Handles.Button(pos, Quaternion.identity, size, size, Handles.SphereHandleCap)
+ && mWaypointList.index != i)
+ {
+ mWaypointList.index = i;
+ InspectorUtility.RepaintGameView();
+ }
+ // Label it
+ Handles.BeginGUI();
+ Vector2 labelSize = new Vector2(
+ EditorGUIUtility.singleLineHeight * 2, EditorGUIUtility.singleLineHeight);
+ Vector2 labelPos = HandleUtility.WorldToGUIPoint(pos);
+ labelPos.y -= labelSize.y / 2;
+ labelPos.x -= labelSize.x / 2;
+ GUILayout.BeginArea(new Rect(labelPos, labelSize));
+ GUIStyle style = new GUIStyle();
+ style.normal.textColor = Color.black;
+ style.alignment = TextAnchor.MiddleCenter;
+ GUILayout.Label(new GUIContent(i.ToString(), "Waypoint " + i), style);
+ GUILayout.EndArea();
+ Handles.EndGUI();
+ }
+ }
+
+ void DrawPositionControl(int i, Matrix4x4 localToWorld, Quaternion localRotation)
+ {
+ CinemachineSmoothPath.Waypoint wp = Target.m_Waypoints[i];
+ Vector3 pos = localToWorld.MultiplyPoint(wp.position);
+ EditorGUI.BeginChangeCheck();
+ Handles.color = Target.m_Appearance.pathColor;
+ Quaternion rotation = (Tools.pivotRotation == PivotRotation.Local)
+ ? localRotation : Quaternion.identity;
+ float size = HandleUtility.GetHandleSize(pos) * 0.1f;
+ Handles.SphereHandleCap(0, pos, rotation, size, EventType.Repaint);
+ pos = Handles.PositionHandle(pos, rotation);
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(target, "Move Waypoint");
+ wp.position = Matrix4x4.Inverse(localToWorld).MultiplyPoint(pos);
+ Target.m_Waypoints[i] = wp;
+ Target.InvalidateDistanceCache();
+ InspectorUtility.RepaintGameView();
+ }
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.NotInSelectionHierarchy
+ | GizmoType.InSelectionHierarchy | GizmoType.Pickable, typeof(CinemachineSmoothPath))]
+ static void DrawGizmos(CinemachineSmoothPath path, GizmoType selectionType)
+ {
+ var isActive = Selection.activeGameObject == path.gameObject;
+ CinemachinePathEditor.DrawPathGizmo(
+ path, isActive ? path.m_Appearance.pathColor : path.m_Appearance.inactivePathColor,
+ isActive, LocalSpaceSamplePath);
+ }
+
+ static Vector4[] s_BezierWeightsCache;
+
+ // Optimizer for gizmo drawing
+ static int LocalSpaceSamplePath(CinemachinePathBase pathBase, int samplesPerSegment, Vector3[] positions, Quaternion[] rotations)
+ {
+ CinemachineSmoothPath path = pathBase as CinemachineSmoothPath;
+
+ path.UpdateControlPoints();
+
+ int numSegments = path.m_Waypoints.Length - (path.Looped ? 0 : 1);
+ if (numSegments == 0)
+ return 0;
+
+ // Compute the bezier weights only once - this is shared by all segments
+ if (s_BezierWeightsCache == null || s_BezierWeightsCache.Length < samplesPerSegment)
+ s_BezierWeightsCache = new Vector4[samplesPerSegment];
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ float t = ((float)i) / samplesPerSegment;
+ float d = 1.0f - t;
+ s_BezierWeightsCache[i] = new Vector4(d * d * d, 3f * d * d * t, 3f * d * t * t, t * t * t);
+ }
+
+ // Process the positions
+ int numSamples = 0;
+ for (int wp = 0; wp < numSegments && numSamples < positions.Length; ++wp)
+ {
+ int nextWp = (wp + 1) % path.m_Waypoints.Length;
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ if (numSamples >= positions.Length)
+ break;
+ positions[numSamples++]
+ = (s_BezierWeightsCache[i].x * path.m_Waypoints[wp].position)
+ + (s_BezierWeightsCache[i].y * path.m_ControlPoints1[wp].position)
+ + (s_BezierWeightsCache[i].z * path.m_ControlPoints2[wp].position)
+ + (s_BezierWeightsCache[i].w * path.m_Waypoints[nextWp].position);
+ }
+ }
+ if (numSamples < positions.Length)
+ positions[numSamples++] = path.Looped ? positions[0] : path.m_Waypoints[path.m_Waypoints.Length - 1].position;
+
+ // Process rotations
+ if (rotations != null && rotations.Length >= numSamples)
+ {
+ int numRotSamples = 0;
+ for (int wp = 0; wp < numSegments && numRotSamples < numSamples; ++wp)
+ {
+ int nextWp = (wp + 1) % path.m_Waypoints.Length;
+ SplineHelpers.BezierTangentWeights3(
+ path.m_Waypoints[wp].position, path.m_ControlPoints1[wp].position,
+ path.m_ControlPoints2[wp].position, path.m_Waypoints[nextWp].position,
+ out var w0, out var w1, out var w2);
+
+ for (int i = 0; i < samplesPerSegment; ++i)
+ {
+ if (numRotSamples >= numSamples)
+ break;
+ float roll
+ = (s_BezierWeightsCache[i].x * path.m_Waypoints[wp].roll)
+ + (s_BezierWeightsCache[i].y * path.m_ControlPoints1[wp].roll)
+ + (s_BezierWeightsCache[i].z * path.m_ControlPoints2[wp].roll)
+ + (s_BezierWeightsCache[i].w * path.m_Waypoints[nextWp].roll);
+
+ float t = ((float)i) / samplesPerSegment;
+
+ // From SplineHelpers.BezierTangent3()
+ var fwd = (w0 * (t * t)) + (w1 * t) + w2;
+ rotations[numRotSamples++] = Quaternion.LookRotation(fwd) * RollAroundForward(roll);
+ }
+ }
+ if (numRotSamples < numSamples)
+ rotations[numRotSamples++] = path.Looped ? rotations[0] : path.EvaluateLocalOrientation(path.MaxPos);
+ }
+
+ return numSamples;
+ }
+
+ // same as Quaternion.AngleAxis(roll, Vector3.forward), just simplified
+ static Quaternion RollAroundForward(float angle)
+ {
+ var halfAngle = angle * 0.5F * Mathf.Deg2Rad;
+ return new Quaternion(0, 0, Mathf.Sin(halfAngle), Mathf.Cos(halfAngle));
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs.meta
new file mode 100644
index 00000000..c35d6630
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineSmoothPathEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1123a444101eb774ba7490990b50736a
+timeCreated: 1505831686
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs
new file mode 100644
index 00000000..f269fb2f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs
@@ -0,0 +1,460 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_UNITY_ANIMATION
+#endif
+
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+using UnityEditor.Animations;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_UNITY_ANIMATION
+ [CustomEditor(typeof(CinemachineStateDrivenCamera))]
+ internal sealed class CinemachineStateDrivenCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ EmbeddeAssetEditor m_BlendsEditor;
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_CustomBlends));
+ excluded.Add(FieldPath(x => x.m_Instructions));
+ }
+
+ private UnityEditorInternal.ReorderableList mChildList;
+ private UnityEditorInternal.ReorderableList mInstructionList;
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ m_BlendsEditor = new EmbeddeAssetEditor(
+ FieldPath(x => x.m_CustomBlends), this);
+ m_BlendsEditor.OnChanged = (CinemachineBlenderSettings b) =>
+ {
+ InspectorUtility.RepaintGameView();
+ };
+ m_BlendsEditor.OnCreateEditor = (UnityEditor.Editor ed) =>
+ {
+ CinemachineBlenderSettingsEditor editor = ed as CinemachineBlenderSettingsEditor;
+ if (editor != null)
+ editor.GetAllVirtualCameras = () => { return Target.ChildCameras; };
+ };
+ mChildList = null;
+ mInstructionList = null;
+ }
+
+ protected override void OnDisable()
+ {
+ base.OnDisable();
+ if (m_BlendsEditor != null)
+ m_BlendsEditor.OnDisable();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ if (mInstructionList == null)
+ SetupInstructionList();
+ if (mChildList == null)
+ SetupChildList();
+
+ if (Target.m_AnimatedTarget == null)
+ EditorGUILayout.HelpBox("An Animated Target is required", MessageType.Warning);
+
+ // Ordinary properties
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawPropertyInInspector(FindProperty(x => x.m_AnimatedTarget));
+
+ // Layer index
+ EditorGUI.BeginChangeCheck();
+ UpdateTargetStates();
+ UpdateCameraCandidates();
+ SerializedProperty layerProp = FindAndExcludeProperty(x => x.m_LayerIndex);
+ int currentLayer = layerProp.intValue;
+ int layerSelection = EditorGUILayout.Popup("Layer", currentLayer, mLayerNames);
+ if (currentLayer != layerSelection)
+ layerProp.intValue = layerSelection;
+ if (EditorGUI.EndChangeCheck())
+ {
+ serializedObject.ApplyModifiedProperties();
+ Target.ValidateInstructions();
+ }
+
+ DrawRemainingPropertiesInInspector();
+
+ // Blends
+ m_BlendsEditor.DrawEditorCombo(
+ "Create New Blender Asset",
+ Target.gameObject.name + " Blends", "asset", string.Empty,
+ "Custom Blends", false);
+
+ // Instructions
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.Separator();
+ mInstructionList.DoLayoutList();
+
+ // vcam children
+ EditorGUILayout.Separator();
+ mChildList.DoLayoutList();
+ if (EditorGUI.EndChangeCheck())
+ {
+ serializedObject.ApplyModifiedProperties();
+ Target.ValidateInstructions();
+ }
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ static AnimatorController GetControllerFromAnimator(Animator animator)
+ {
+ if (animator == null)
+ return null;
+ var ovr = animator.runtimeAnimatorController as AnimatorOverrideController;
+ if (ovr)
+ return ovr.runtimeAnimatorController as AnimatorController;
+ return animator.runtimeAnimatorController as AnimatorController;
+ }
+
+ private string[] mLayerNames;
+ private int[] mTargetStates;
+ private string[] mTargetStateNames;
+ private Dictionary mStateIndexLookup;
+ private void UpdateTargetStates()
+ {
+ // Scrape the Animator Controller for states
+ AnimatorController ac = GetControllerFromAnimator(Target.m_AnimatedTarget);
+ StateCollector collector = new StateCollector();
+ collector.CollectStates(ac, Target.m_LayerIndex);
+ mTargetStates = collector.mStates.ToArray();
+ mTargetStateNames = collector.mStateNames.ToArray();
+ mStateIndexLookup = collector.mStateIndexLookup;
+
+ if (ac == null)
+ mLayerNames = new string[0];
+ else
+ {
+ mLayerNames = new string[ac.layers.Length];
+ for (int i = 0; i < ac.layers.Length; ++i)
+ mLayerNames[i] = ac.layers[i].name;
+ }
+
+ // Create the parent map in the target
+ List parents
+ = new List();
+ foreach (var i in collector.mStateParentLookup)
+ parents.Add(new CinemachineStateDrivenCamera.ParentHash(i.Key, i.Value));
+ Target.m_ParentHash = parents.ToArray();
+ }
+
+ class StateCollector
+ {
+ public List mStates;
+ public List mStateNames;
+ public Dictionary mStateIndexLookup;
+ public Dictionary mStateParentLookup;
+
+ public void CollectStates(AnimatorController ac, int layerIndex)
+ {
+ mStates = new List();
+ mStateNames = new List();
+ mStateIndexLookup = new Dictionary();
+ mStateParentLookup = new Dictionary();
+
+ mStateIndexLookup[0] = mStates.Count;
+ mStateNames.Add("(default)");
+ mStates.Add(0);
+
+ if (ac != null && layerIndex >= 0 && layerIndex < ac.layers.Length)
+ {
+ AnimatorStateMachine fsm = ac.layers[layerIndex].stateMachine;
+ string name = fsm.name;
+ int hash = Animator.StringToHash(name);
+ CollectStatesFromFSM(fsm, name + ".", hash, string.Empty);
+ }
+ }
+
+ void CollectStatesFromFSM(
+ AnimatorStateMachine fsm, string hashPrefix, int parentHash, string displayPrefix)
+ {
+ ChildAnimatorState[] states = fsm.states;
+ for (int i = 0; i < states.Length; i++)
+ {
+ AnimatorState state = states[i].state;
+ int hash = AddState(Animator.StringToHash(hashPrefix + state.name),
+ parentHash, displayPrefix + state.name);
+
+ // Also process clips as pseudo-states, if more than 1 is present.
+ // Since they don't have hashes, we can manufacture some.
+ var clips = CollectClips(state.motion);
+ if (clips.Count > 1)
+ {
+ string substatePrefix = displayPrefix + state.name + ".";
+ foreach (AnimationClip c in clips)
+ AddState(
+ CinemachineStateDrivenCamera.CreateFakeHash(hash, c),
+ hash, substatePrefix + c.name);
+ }
+ }
+
+ ChildAnimatorStateMachine[] fsmChildren = fsm.stateMachines;
+ foreach (var child in fsmChildren)
+ {
+ string name = hashPrefix + child.stateMachine.name;
+ string displayName = displayPrefix + child.stateMachine.name;
+ int hash = AddState(Animator.StringToHash(name), parentHash, displayName);
+ CollectStatesFromFSM(child.stateMachine, name + ".", hash, displayName + ".");
+ }
+ }
+
+ List CollectClips(Motion motion)
+ {
+ var clips = new List();
+ AnimationClip clip = motion as AnimationClip;
+ if (clip != null)
+ clips.Add(clip);
+ BlendTree tree = motion as BlendTree;
+ if (tree != null)
+ {
+ ChildMotion[] children = tree.children;
+ foreach (var child in children)
+ clips.AddRange(CollectClips(child.motion));
+ }
+ return clips;
+ }
+
+ int AddState(int hash, int parentHash, string displayName)
+ {
+ if (parentHash != 0)
+ mStateParentLookup[hash] = parentHash;
+ mStateIndexLookup[hash] = mStates.Count;
+ mStateNames.Add(displayName);
+ mStates.Add(hash);
+ return hash;
+ }
+ }
+
+ private int GetStateHashIndex(int stateHash)
+ {
+ if (stateHash == 0)
+ return 0;
+ if (!mStateIndexLookup.ContainsKey(stateHash))
+ return 0;
+ return mStateIndexLookup[stateHash];
+ }
+
+ private string[] mCameraCandidates;
+ private Dictionary mCameraIndexLookup;
+ private void UpdateCameraCandidates()
+ {
+ List vcams = new List();
+ mCameraIndexLookup = new Dictionary();
+ vcams.Add("(none)");
+ CinemachineVirtualCameraBase[] children = Target.ChildCameras;
+ foreach (var c in children)
+ {
+ mCameraIndexLookup[c] = vcams.Count;
+ vcams.Add(c.Name);
+ }
+ mCameraCandidates = vcams.ToArray();
+ }
+
+ private int GetCameraIndex(Object obj)
+ {
+ if (obj == null || mCameraIndexLookup == null)
+ return 0;
+ CinemachineVirtualCameraBase vcam = obj as CinemachineVirtualCameraBase;
+ if (vcam == null)
+ return 0;
+ if (!mCameraIndexLookup.ContainsKey(vcam))
+ return 0;
+ return mCameraIndexLookup[vcam];
+ }
+
+ void SetupInstructionList()
+ {
+ mInstructionList = new UnityEditorInternal.ReorderableList(serializedObject,
+ serializedObject.FindProperty(() => Target.m_Instructions),
+ true, true, true, true);
+
+ // Needed for accessing field names as strings
+ CinemachineStateDrivenCamera.Instruction def = new CinemachineStateDrivenCamera.Instruction();
+
+ float vSpace = 2;
+ float hSpace = 3;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+ float hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3;
+ mInstructionList.drawHeaderCallback = (Rect rect) =>
+ {
+ float sharedWidth = rect.width - EditorGUIUtility.singleLineHeight
+ - 2 * (hBigSpace + floatFieldWidth) - hSpace;
+ rect.x += EditorGUIUtility.singleLineHeight; rect.width = sharedWidth / 2;
+ EditorGUI.LabelField(rect, "State");
+
+ rect.x += rect.width + hSpace;
+ EditorGUI.LabelField(rect, "Camera");
+
+ rect.x += rect.width + hBigSpace; rect.width = floatFieldWidth;
+ EditorGUI.LabelField(rect, "Wait");
+
+ rect.x += rect.width + hBigSpace;
+ EditorGUI.LabelField(rect, "Min");
+ };
+
+ mInstructionList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ SerializedProperty instProp
+ = mInstructionList.serializedProperty.GetArrayElementAtIndex(index);
+ float sharedWidth = rect.width - 2 * (hBigSpace + floatFieldWidth) - hSpace;
+ rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+
+ rect.width = sharedWidth / 2;
+ SerializedProperty stateSelProp = instProp.FindPropertyRelative(() => def.m_FullHash);
+ int currentState = GetStateHashIndex(stateSelProp.intValue);
+ int stateSelection = EditorGUI.Popup(rect, currentState, mTargetStateNames);
+ if (currentState != stateSelection)
+ stateSelProp.intValue = mTargetStates[stateSelection];
+
+ rect.x += rect.width + hSpace;
+ SerializedProperty vcamSelProp = instProp.FindPropertyRelative(() => def.m_VirtualCamera);
+ int currentVcam = GetCameraIndex(vcamSelProp.objectReferenceValue);
+ int vcamSelection = EditorGUI.Popup(rect, currentVcam, mCameraCandidates);
+ if (currentVcam != vcamSelection)
+ vcamSelProp.objectReferenceValue = (vcamSelection == 0)
+ ? null : Target.ChildCameras[vcamSelection - 1];
+
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = hBigSpace;
+
+ rect.x += rect.width; rect.width = floatFieldWidth + hBigSpace;
+ SerializedProperty activeAfterProp = instProp.FindPropertyRelative(() => def.m_ActivateAfter);
+ EditorGUI.PropertyField(rect, activeAfterProp, new GUIContent(" ", activeAfterProp.tooltip));
+
+ rect.x += rect.width;
+ SerializedProperty minDurationProp = instProp.FindPropertyRelative(() => def.m_MinDuration);
+ EditorGUI.PropertyField(rect, minDurationProp, new GUIContent(" ", minDurationProp.tooltip));
+
+ EditorGUIUtility.labelWidth = oldWidth;
+ };
+
+ mInstructionList.onAddDropdownCallback = (Rect buttonRect, UnityEditorInternal.ReorderableList l) =>
+ {
+ var menu = new GenericMenu();
+ menu.AddItem(new GUIContent("New State"),
+ false, (object data) =>
+ {
+ ++mInstructionList.serializedProperty.arraySize;
+ serializedObject.ApplyModifiedProperties();
+ Target.ValidateInstructions();
+ },
+ null);
+ menu.AddItem(new GUIContent("All Unhandled States"),
+ false, (object data) =>
+ {
+ CinemachineStateDrivenCamera target = Target;
+ int len = mInstructionList.serializedProperty.arraySize;
+ for (int i = 0; i < mTargetStates.Length; ++i)
+ {
+ int hash = mTargetStates[i];
+ if (hash == 0)
+ continue;
+ bool alreadyThere = false;
+ for (int j = 0; j < len; ++j)
+ {
+ if (target.m_Instructions[j].m_FullHash == hash)
+ {
+ alreadyThere = true;
+ break;
+ }
+ }
+ if (!alreadyThere)
+ {
+ int index = mInstructionList.serializedProperty.arraySize;
+ ++mInstructionList.serializedProperty.arraySize;
+ SerializedProperty p = mInstructionList.serializedProperty.GetArrayElementAtIndex(index);
+ p.FindPropertyRelative(() => def.m_FullHash).intValue = hash;
+ }
+ }
+ serializedObject.ApplyModifiedProperties();
+ Target.ValidateInstructions();
+ },
+ null);
+ menu.ShowAsContext();
+ };
+ }
+
+ void SetupChildList()
+ {
+ float vSpace = 2;
+ float hSpace = 3;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+ float hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3;
+
+ mChildList = new UnityEditorInternal.ReorderableList(serializedObject,
+ serializedObject.FindProperty(() => Target.m_ChildCameras),
+ true, true, true, true);
+
+ mChildList.drawHeaderCallback = (Rect rect) =>
+ {
+ EditorGUI.LabelField(rect, "Virtual Camera Children");
+ GUIContent priorityText = new GUIContent("Priority");
+ var textDimensions = GUI.skin.label.CalcSize(priorityText);
+ rect.x += rect.width - textDimensions.x;
+ rect.width = textDimensions.x;
+ EditorGUI.LabelField(rect, priorityText);
+ };
+ mChildList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+ rect.width -= floatFieldWidth + hBigSpace;
+ SerializedProperty element = mChildList.serializedProperty.GetArrayElementAtIndex(index);
+ EditorGUI.PropertyField(rect, element, GUIContent.none);
+
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = hBigSpace;
+ SerializedObject obj = new SerializedObject(element.objectReferenceValue);
+ rect.x += rect.width + hSpace; rect.width = floatFieldWidth + hBigSpace;
+ SerializedProperty priorityProp = obj.FindProperty(() => Target.m_Priority);
+ EditorGUI.PropertyField(rect, priorityProp, new GUIContent(" ", priorityProp.tooltip));
+ EditorGUIUtility.labelWidth = oldWidth;
+ obj.ApplyModifiedProperties();
+ };
+ mChildList.onChangedCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ if (l.index < 0 || l.index >= l.serializedProperty.arraySize)
+ return;
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ vcam.transform.SetSiblingIndex(l.index);
+ };
+ mChildList.onAddCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ var vcam = CinemachineMenu.CreateDefaultVirtualCamera();
+ Undo.SetTransformParent(vcam.transform, Target.transform, "");
+ vcam.transform.SetSiblingIndex(index);
+ };
+ mChildList.onRemoveCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ Object o = l.serializedProperty.GetArrayElementAtIndex(
+ l.index).objectReferenceValue;
+ CinemachineVirtualCameraBase vcam = (o != null)
+ ? (o as CinemachineVirtualCameraBase) : null;
+ if (vcam != null)
+ Undo.DestroyObjectImmediate(vcam.gameObject);
+ };
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs.meta
new file mode 100644
index 00000000..94dc06e4
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStateDrivenCameraEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0eb9f23cde3a1734da334cfa0831dd25
+timeCreated: 1486062933
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs
new file mode 100644
index 00000000..81bef37c
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs
@@ -0,0 +1,152 @@
+#if !UNITY_2019_1_OR_NEWER
+#define CINEMACHINE_UGUI
+#endif
+
+#if CINEMACHINE_UGUI
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [InitializeOnLoad]
+ static class CinemachineStoryboardMute
+ {
+ static CinemachineStoryboardMute()
+ {
+ CinemachineStoryboard.s_StoryboardGlobalMute = Enabled;
+ }
+
+ public static string kEnabledKey = "StoryboardMute_Enabled";
+ public static bool Enabled
+ {
+ get { return EditorPrefs.GetBool(kEnabledKey, false); }
+ set
+ {
+ if (value != Enabled)
+ {
+ EditorPrefs.SetBool(kEnabledKey, value);
+ CinemachineStoryboard.s_StoryboardGlobalMute = value;
+ InspectorUtility.RepaintGameView();
+ }
+ }
+ }
+ }
+
+ [CustomEditor(typeof(CinemachineStoryboard))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineStoryboardEditor : BaseEditor
+ {
+ public void OnDisable()
+ {
+ WaveformWindow.SetDefaultUpdateInterval();
+ }
+
+ const float FastWaveformUpdateInterval = 0.1f;
+ float mLastSplitScreenEventTime = 0;
+ static bool sAdvancedFoldout;
+
+ public override void OnInspectorGUI()
+ {
+ float now = Time.realtimeSinceStartup;
+ if (now - mLastSplitScreenEventTime > FastWaveformUpdateInterval * 5)
+ WaveformWindow.SetDefaultUpdateInterval();
+
+ BeginInspector();
+ CinemachineStoryboardMute.Enabled
+ = EditorGUILayout.Toggle(
+ new GUIContent(
+ "Storyboard Global Mute",
+ "If checked, all storyboards are globally muted."),
+ CinemachineStoryboardMute.Enabled);
+
+ Rect rect = EditorGUILayout.GetControlRect(true);
+ EditorGUI.BeginChangeCheck();
+ {
+ float width = rect.width;
+ rect.width = EditorGUIUtility.labelWidth + rect.height;
+ EditorGUI.PropertyField(rect, FindProperty(x => x.m_ShowImage));
+
+ rect.x += rect.width; rect.width = width - rect.width;
+ EditorGUI.PropertyField(rect, FindProperty(x => x.m_Image), GUIContent.none);
+
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_Aspect));
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_Alpha));
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_Center));
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_Rotation));
+
+ rect = EditorGUILayout.GetControlRect(true);
+ EditorGUI.LabelField(rect, "Scale");
+ rect.x += EditorGUIUtility.labelWidth; rect.width -= EditorGUIUtility.labelWidth;
+ rect.width /= 3;
+ serializedObject.SetIsDifferentCacheDirty(); // prop.hasMultipleDifferentValues always results in false if the SO isn't refreshed here
+ var prop = FindProperty(x => x.m_SyncScale);
+ var syncHasDifferentValues = prop.hasMultipleDifferentValues;
+ GUIContent syncLabel = new GUIContent("Sync", prop.tooltip);
+ EditorGUI.showMixedValue = syncHasDifferentValues;
+ prop.boolValue = EditorGUI.ToggleLeft(rect, syncLabel, prop.boolValue);
+ EditorGUI.showMixedValue = false;
+ rect.x += rect.width;
+ if (prop.boolValue || targets.Length > 1 && syncHasDifferentValues)
+ {
+ prop = FindProperty(x => x.m_Scale);
+ float[] values = new float[1] { prop.vector2Value.x };
+ EditorGUI.showMixedValue = prop.hasMultipleDifferentValues;
+ EditorGUI.MultiFloatField(rect, new GUIContent[1] { new GUIContent("X") }, values);
+ EditorGUI.showMixedValue = false;
+ prop.vector2Value = new Vector2(values[0], values[0]);
+ }
+ else
+ {
+ rect.width *= 2;
+ prop = FindProperty(x => x.m_Scale);
+ EditorGUI.showMixedValue = prop.hasMultipleDifferentValues;
+ EditorGUI.PropertyField(rect, prop, GUIContent.none);
+ EditorGUI.showMixedValue = false;
+ }
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_MuteCamera));
+ }
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+
+ EditorGUILayout.Space();
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_SplitView));
+ if (EditorGUI.EndChangeCheck())
+ {
+ mLastSplitScreenEventTime = now;
+ WaveformWindow.UpdateInterval = FastWaveformUpdateInterval;
+ serializedObject.ApplyModifiedProperties();
+ }
+ rect = EditorGUILayout.GetControlRect(true);
+ GUI.Label(new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth, rect.height),
+ "Waveform Monitor");
+ rect.width -= EditorGUIUtility.labelWidth; rect.width /= 2;
+ rect.x += EditorGUIUtility.labelWidth;
+ if (GUI.Button(rect, "Open"))
+ WaveformWindow.OpenWindow();
+
+ EditorGUILayout.Space();
+ sAdvancedFoldout = EditorGUILayout.Foldout(sAdvancedFoldout, "Advanced");
+ if (sAdvancedFoldout)
+ {
+ ++EditorGUI.indentLevel;
+
+ EditorGUI.BeginChangeCheck();
+ var renderModeProperty = FindProperty(x => x.m_RenderMode);
+ EditorGUILayout.PropertyField(renderModeProperty);
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_SortingOrder));
+ if (renderModeProperty.enumValueIndex == (int) RenderMode.ScreenSpaceCamera)
+ {
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_PlaneDistance));
+ }
+ if (EditorGUI.EndChangeCheck())
+ {
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ --EditorGUI.indentLevel;
+ }
+ }
+ }
+}
+#endif
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs.meta
new file mode 100644
index 00000000..16b1e06e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineStoryboardEditor.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: a9e63e62da42ce141b35602019323584
+timeCreated: 1516812054
+licenseType: Pro
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs
new file mode 100644
index 00000000..65e02b33
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs
@@ -0,0 +1,128 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineTargetGroup))]
+ internal sealed class CinemachineTargetGroupEditor : BaseEditor
+ {
+ private UnityEditorInternal.ReorderableList mTargetList;
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Targets));
+ }
+
+ void OnEnable()
+ {
+ mTargetList = null;
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawRemainingPropertiesInInspector();
+
+ if (mTargetList == null)
+ SetupTargetList();
+ EditorGUI.BeginChangeCheck();
+ mTargetList.DoLayoutList();
+ DisplayErrorMessageForDescendants();
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ void DisplayErrorMessageForDescendants()
+ {
+ String indices = "";
+ for (int i = 0; i < Target.m_Targets.Length; ++i)
+ {
+ if (Target.m_Targets[i].target != null && Target.m_Targets[i].target.IsChildOf(Target.Transform))
+ {
+ indices += i + ", ";
+ }
+ }
+
+ if (indices.Length > 0)
+ {
+ indices = indices.Substring(0, indices.Length - 2);
+ EditorGUILayout.HelpBox(
+ "Group members at index {" + indices + "} are child gameobjects of the group. " +
+ "This is not supported and may cause undefined behaviour. Unparent them from the group.",
+ MessageType.Error);
+ }
+ }
+
+ void SetupTargetList()
+ {
+ float vSpace = 2;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 3.5f;
+ float hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3;
+
+ mTargetList = new UnityEditorInternal.ReorderableList(
+ serializedObject, FindProperty(x => x.m_Targets),
+ true, true, true, true);
+
+ // Needed for accessing field names as strings
+ CinemachineTargetGroup.Target def = new CinemachineTargetGroup.Target();
+
+ mTargetList.drawHeaderCallback = (Rect rect) =>
+ {
+ rect.width -= EditorGUIUtility.singleLineHeight + 2 * (floatFieldWidth + hBigSpace);
+ Vector2 pos = rect.position; pos.x += EditorGUIUtility.singleLineHeight;
+ rect.position = pos;
+ EditorGUI.LabelField(rect, "Target");
+
+ pos.x += rect.width + hBigSpace; rect.width = floatFieldWidth + hBigSpace; rect.position = pos;
+ EditorGUI.LabelField(rect, "Weight");
+
+ pos.x += rect.width; rect.position = pos;
+ EditorGUI.LabelField(rect, "Radius");
+ };
+
+ mTargetList.drawElementCallback
+ = (Rect rect, int index, bool isActive, bool isFocused) =>
+ {
+ SerializedProperty elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index);
+
+ rect.y += vSpace;
+ rect.height = EditorGUIUtility.singleLineHeight;
+ Vector2 pos = rect.position;
+ //rect.width -= hSpace + 2 * EditorGUIUtility.singleLineHeight;
+ rect.width -= 2 * (floatFieldWidth + hBigSpace);
+ EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.target), GUIContent.none);
+
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = EditorGUIUtility.singleLineHeight;
+ pos.x += rect.width; rect.width = floatFieldWidth + hBigSpace; rect.position = pos;
+ EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.weight), new GUIContent(" "));
+ pos.x += rect.width; rect.position = pos;
+ EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.radius), new GUIContent(" "));
+ EditorGUIUtility.labelWidth = oldWidth;
+ };
+
+ mTargetList.onAddCallback = (UnityEditorInternal.ReorderableList l) =>
+ {
+ var index = l.serializedProperty.arraySize;
+ ++l.serializedProperty.arraySize;
+ SerializedProperty elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index);
+ elemProp.FindPropertyRelative(() => def.weight).floatValue = 1;
+ };
+ }
+
+#if false // enable for debugging
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineTargetGroup))]
+ private static void DrawGroupComposerGizmos(CinemachineTargetGroup target, GizmoType selectionType)
+ {
+ Gizmos.color = Color.yellow;
+ var sphere = target.Sphere;
+ Gizmos.DrawWireSphere(sphere.position, sphere.radius);
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs.meta
new file mode 100644
index 00000000..16c5db60
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTargetGroupEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: eb8e037cb3f873743a725427c8c22342
+timeCreated: 1496424406
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs
new file mode 100644
index 00000000..da1eff06
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineTrackedDolly))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineTrackedDollyEditor : BaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ switch (Target.m_CameraUp)
+ {
+ default:
+ break;
+ case CinemachineTrackedDolly.CameraUpMode.PathNoRoll:
+ case CinemachineTrackedDolly.CameraUpMode.FollowTargetNoRoll:
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ break;
+ case CinemachineTrackedDolly.CameraUpMode.Default:
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ break;
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineTrackedDolly).m_Path == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox("A Path is required", MessageType.Warning);
+
+ needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineTrackedDolly).m_AutoDolly.m_Enabled
+ && (targets[i] as CinemachineTrackedDolly).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox("AutoDolly requires a Follow Target", MessageType.Warning);
+
+ DrawRemainingPropertiesInInspector();
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineTrackedDolly))]
+ private static void DrawTrackeDollyGizmos(CinemachineTrackedDolly target, GizmoType selectionType)
+ {
+ if (target.IsValid)
+ {
+ CinemachinePathBase path = target.m_Path;
+ if (path != null)
+ {
+ var isActive = CinemachineCore.Instance.IsLive(target.VirtualCamera);
+ CinemachinePathEditor.DrawPathGizmo(path, path.m_Appearance.pathColor, isActive);
+ Vector3 pos = path.EvaluatePositionAtUnit(target.m_PathPosition, target.m_PositionUnits);
+ Color oldColor = Gizmos.color;
+ Gizmos.color = isActive
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+ Gizmos.DrawLine(pos, target.VirtualCamera.State.RawPosition);
+ Gizmos.color = oldColor;
+ }
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs.meta
new file mode 100644
index 00000000..84f8029e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTrackedDollyEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d4a408a1b506d0046875061c677944d8
+timeCreated: 1493318518
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs
new file mode 100644
index 00000000..84d49a6f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs
@@ -0,0 +1,105 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineTransposer))]
+ [CanEditMultipleObjects]
+ internal class CinemachineTransposerEditor : BaseEditor
+ {
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+
+ switch (Target.m_BindingMode)
+ {
+ default:
+ case CinemachineTransposer.BindingMode.LockToTarget:
+ if (Target.m_AngularDampingMode == CinemachineTransposer.AngularDampingMode.Euler)
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ else
+ {
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ }
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetNoRoll:
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetWithWorldUp:
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.LockToTargetOnAssign:
+ case CinemachineTransposer.BindingMode.WorldSpace:
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ case CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp:
+ excluded.Add(FieldPath(x => x.m_XDamping));
+ excluded.Add(FieldPath(x => x.m_PitchDamping));
+ excluded.Add(FieldPath(x => x.m_YawDamping));
+ excluded.Add(FieldPath(x => x.m_RollDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDamping));
+ excluded.Add(FieldPath(x => x.m_AngularDampingMode));
+ break;
+ }
+ if (Target.HideOffsetInInspector)
+ excluded.Add(FieldPath(x => x.m_FollowOffset));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ bool needWarning = false;
+ for (int i = 0; !needWarning && i < targets.Length; ++i)
+ needWarning = (targets[i] as CinemachineTransposer).FollowTarget == null;
+ if (needWarning)
+ EditorGUILayout.HelpBox(
+ "Transposer requires a Follow Target. Change Body to Do Nothing if you don't want a Follow target.",
+ MessageType.Warning);
+ DrawRemainingPropertiesInInspector();
+ }
+#if UNITY_2021_2_OR_NEWER
+ void OnSceneGUI()
+ {
+ DrawSceneTools();
+ }
+
+ protected virtual void OnEnable()
+ {
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+ }
+
+ protected virtual void OnDisable()
+ {
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+ }
+
+ void DrawSceneTools()
+ {
+ var transposer = Target;
+ if (transposer == null || !transposer.IsValid)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ CinemachineSceneToolHelpers.TransposerFollowOffsetTool(transposer);
+ }
+ }
+#endif
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs.meta
new file mode 100644
index 00000000..c0de9c17
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineTransposerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f34e35dc1dc67c54c841b728548d69cc
+timeCreated: 1484088330
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs
new file mode 100644
index 00000000..6e77740a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs
@@ -0,0 +1,749 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Cinemachine.Utility;
+
+#if CINEMACHINE_UNITY_INPUTSYSTEM
+using UnityEngine.InputSystem;
+#endif
+
+#if CINEMACHINE_HDRP || CINEMACHINE_LWRP_7_3_1
+ #if CINEMACHINE_HDRP_7_3_1
+ using UnityEngine.Rendering.HighDefinition;
+ #else
+ #if CINEMACHINE_LWRP_7_3_1
+ using UnityEngine.Rendering.Universal;
+ #else
+ using UnityEngine.Experimental.Rendering.HDPipeline;
+ #endif
+ #endif
+#endif
+
+#if UNITY_2019_1_OR_NEWER
+ using CameraExtensions = UnityEngine.Camera;
+#else
+ // Needed only for Unity pre-2019.1 because Camera doesn't have these methods
+ static class CameraExtensions
+ {
+ public static float HorizontalToVerticalFieldOfView(float f, float aspect)
+ {
+ return Mathf.Rad2Deg * 2 * Mathf.Atan(Mathf.Tan(f * Mathf.Deg2Rad * 0.5f) / aspect);
+ }
+
+ public static float VerticalToHorizontalFieldOfView(float f, float aspect)
+ {
+ return Mathf.Rad2Deg * 2 * Mathf.Atan(Mathf.Tan(f * Mathf.Deg2Rad * 0.5f) * aspect);
+ }
+
+ public static float FieldOfViewToFocalLength(float fov, float sensorHeight)
+ {
+ return sensorHeight * 0.5f / Mathf.Tan(Mathf.Deg2Rad * fov * 0.5f);
+ }
+
+ public static float FocalLengthToFieldOfView(float focalLength, float sensorHeight)
+ {
+ if (focalLength < UnityVectorExtensions.Epsilon)
+ return 180f;
+ return Mathf.Rad2Deg * 2.0f * Mathf.Atan(sensorHeight * 0.5f / focalLength);
+ }
+ }
+#endif
+
+
+namespace Cinemachine.Editor
+{
+ ///
+ /// Base class for virtual camera editors.
+ /// Handles drawing the header and the basic properties.
+ ///
+ /// The type of CinemachineVirtualCameraBase being edited
+ public class CinemachineVirtualCameraBaseEditor : BaseEditor where T : CinemachineVirtualCameraBase
+ {
+ /// A collection of GUIContent for use in the inspector
+ public static class Styles
+ {
+ /// GUIContent for Add Extension
+ public static GUIContent addExtensionLabel = new GUIContent("Add Extension");
+ /// GUIContent for no-multi-select message
+ public static GUIContent virtualCameraChildrenInfoMsg
+ = new GUIContent("The Virtual Camera Children field is not available when multiple objects are selected.");
+ }
+
+ static Type[] sExtensionTypes; // First entry is null
+ static string[] sExtensionNames;
+ bool IsPrefabBase { get; set; }
+
+ /// Obsolete, do not use. Use the overload, which is more performant
+ /// List of property names to exclude
+ protected override List GetExcludedPropertiesInInspector()
+ { return base.GetExcludedPropertiesInInspector(); }
+
+ /// Get the property names to exclude in the inspector.
+ /// Implementation should call the base class implementation
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ if (Target.m_ExcludedPropertiesInInspector != null)
+ excluded.AddRange(Target.m_ExcludedPropertiesInInspector);
+ }
+
+ /// Update state information on undo/redo
+ void UpdateCameraState()
+ {
+ if (Target != null)
+ Target.InternalUpdateCameraState(Vector3.up, -1);
+ }
+
+ /// Inspector panel is being enabled.
+ /// Implementation should call the base class implementation
+ protected virtual void OnEnable()
+ {
+ Undo.undoRedoPerformed += UpdateCameraState;
+
+ IsPrefabBase = Target.gameObject.scene.name == null; // causes a small GC alloc
+ if (sExtensionTypes == null)
+ {
+ // Populate the extension list
+ List exts = new List();
+ List names = new List();
+ exts.Add(null);
+ names.Add("(select)");
+ var allExtensions
+ = ReflectionHelpers.GetTypesInAllDependentAssemblies(
+ (Type t) => typeof(CinemachineExtension).IsAssignableFrom(t) && !t.IsAbstract);
+ foreach (Type t in allExtensions)
+ {
+ exts.Add(t);
+ names.Add(t.Name);
+ }
+ sExtensionTypes = exts.ToArray();
+ sExtensionNames = names.ToArray();
+ }
+ }
+
+ /// Inspector panel is being disabled.
+ /// Implementation should call the base class implementation
+ protected virtual void OnDisable()
+ {
+ Undo.undoRedoPerformed -= UpdateCameraState;
+
+ if (CinemachineBrain.SoloCamera == (ICinemachineCamera)Target)
+ {
+ CinemachineBrain.SoloCamera = null;
+ InspectorUtility.RepaintGameView();
+ }
+ }
+
+ /// Create the contents of the inspector panel.
+ /// This implementation draws header and Extensions widget, and uses default algorithms
+ /// to draw the properties in the inspector
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawRemainingPropertiesInInspector();
+ DrawExtensionsWidgetInInspector();
+ }
+
+ ///
+ /// Draw the virtual camera header in the inspector.
+ /// This includes Solo button, Live status, and global settings
+ ///
+ protected void DrawHeaderInInspector()
+ {
+ if (!IsPropertyExcluded("Header"))
+ {
+ DrawCameraStatusInInspector();
+ DrawGlobalControlsInInspector();
+#if CINEMACHINE_UNITY_INPUTSYSTEM
+ DrawInputProviderButtonInInspector();
+#endif
+ ExcludeProperty("Header");
+ }
+ }
+
+#if CINEMACHINE_UNITY_INPUTSYSTEM
+ static GUIContent s_InputProviderAddLabel = new GUIContent("Add Input Provider",
+ "Adds CinemachineInputProvider component to this vcam, "
+ + "if it does not have one, enabling the vcam to read input from Input Actions. "
+ + "By default, a simple mouse XY input action is added.");
+
+ static InputActionReference s_InputActionReference = null;
+
+ void DrawInputProviderButtonInInspector()
+ {
+ bool needsButton = false;
+ for (int i = 0; !needsButton && i < targets.Length; ++i)
+ {
+ var vcam = targets[i] as CinemachineVirtualCameraBase;
+ if (vcam.RequiresUserInput() && vcam.GetComponent() == null)
+ needsButton = true;
+ }
+ if (!needsButton)
+ return;
+
+ EditorGUILayout.Space();
+ EditorGUILayout.HelpBox(
+ "The InputSystem package is installed, but it is not used to control this vcam.",
+ MessageType.Info);
+ var rect = EditorGUILayout.GetControlRect(true);
+ rect.x += EditorGUIUtility.labelWidth;
+ rect.width -= EditorGUIUtility.labelWidth;
+ if (GUI.Button(rect, s_InputProviderAddLabel))
+ {
+ if (s_InputActionReference == null)
+ {
+ s_InputActionReference = (InputActionReference)AssetDatabase.LoadAllAssetsAtPath(
+ "Packages/com.unity.inputsystem/InputSystem/Plugins/PlayerInput/DefaultInputActions.inputactions").
+ FirstOrDefault(x => x.name == "Player/Look");
+ }
+ Undo.SetCurrentGroupName("Add CinemachineInputProvider");
+ for (int i = 0; i < targets.Length; ++i)
+ {
+ var vcam = targets[i] as CinemachineVirtualCameraBase;
+ if (vcam.GetComponent() != null)
+ continue;
+ var inputProvider = Undo.AddComponent(vcam.gameObject);
+ inputProvider.XYAxis = s_InputActionReference;
+ }
+ }
+ EditorGUILayout.Space();
+ }
+#endif
+
+ ///
+ /// Draw the LookAt and Follow targets in the inspector
+ ///
+ /// Follow target SerializedProperty
+ /// LookAt target SerializedProperty
+ protected void DrawTargetsInInspector(
+ SerializedProperty followTarget, SerializedProperty lookAtTarget)
+ {
+ EditorGUI.BeginChangeCheck();
+ if (!IsPropertyExcluded(followTarget.name))
+ {
+ if (Target.ParentCamera == null || Target.ParentCamera.Follow == null)
+ EditorGUILayout.PropertyField(followTarget);
+ else
+ EditorGUILayout.PropertyField(followTarget,
+ new GUIContent(followTarget.displayName + " Override"));
+ ExcludeProperty(followTarget.name);
+ }
+ if (!IsPropertyExcluded(lookAtTarget.name))
+ {
+ if (Target.ParentCamera == null || Target.ParentCamera.LookAt == null)
+ EditorGUILayout.PropertyField(lookAtTarget);
+ else
+ EditorGUILayout.PropertyField(lookAtTarget,
+ new GUIContent(lookAtTarget.displayName + " Override"));
+ ExcludeProperty(lookAtTarget.name);
+ }
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ ///
+ /// Draw the Extensions dropdown in the inspector
+ ///
+ protected void DrawExtensionsWidgetInInspector()
+ {
+ if (!IsPropertyExcluded("Extensions"))
+ {
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("Extensions", EditorStyles.boldLabel);
+ Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
+ rect = EditorGUI.PrefixLabel(rect, Styles.addExtensionLabel);
+
+ int selection = EditorGUI.Popup(rect, 0, sExtensionNames);
+ if (selection > 0)
+ {
+ Type extType = sExtensionTypes[selection];
+ for (int i = 0; i < targets.Length; i++)
+ {
+ var targetGO = (targets[i] as CinemachineVirtualCameraBase).gameObject;
+ if (targetGO != null && targetGO.GetComponent(extType) == null)
+ Undo.AddComponent(targetGO, extType);
+ }
+ }
+ ExcludeProperty("Extensions");
+ }
+ }
+
+ ///
+ /// Draw the Live status in the inspector, and the Solo button
+ ///
+ protected void DrawCameraStatusInInspector()
+ {
+ if (Selection.objects.Length > 1)
+ return;
+
+ // Is the camera navel-gazing?
+ CameraState state = Target.State;
+ if (state.HasLookAt && (state.ReferenceLookAt - state.CorrectedPosition).AlmostZero())
+ EditorGUILayout.HelpBox(
+ "The camera is positioned on the same point at which it is trying to look.",
+ MessageType.Warning);
+
+ // No status and Solo for prefabs
+ if (IsPrefabBase)
+ return;
+
+ // Active status and Solo button
+ Rect rect = EditorGUILayout.GetControlRect(true);
+ Rect rectLabel = new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth, rect.height);
+ rect.width -= rectLabel.width;
+ rect.x += rectLabel.width;
+
+ Color color = GUI.color;
+ bool isSolo = (CinemachineBrain.SoloCamera == (ICinemachineCamera)Target);
+ if (isSolo)
+ GUI.color = CinemachineBrain.GetSoloGUIColor();
+
+ bool isLive = CinemachineCore.Instance.IsLive(Target);
+ GUI.enabled = isLive;
+ GUI.Label(rectLabel, isLive ? "Status: Live"
+ : (Target.isActiveAndEnabled ? "Status: Standby" : "Status: Disabled"));
+ GUI.enabled = true;
+
+ float labelWidth = 0;
+ GUIContent updateText = GUIContent.none;
+ UpdateTracker.UpdateClock updateMode = CinemachineCore.Instance.GetVcamUpdateStatus(Target);
+ if (Application.isPlaying)
+ {
+ updateText = new GUIContent(
+ updateMode == UpdateTracker.UpdateClock.Fixed ? " Fixed Update" : " Late Update");
+ var textDimensions = GUI.skin.label.CalcSize(updateText);
+ labelWidth = textDimensions.x;
+ }
+ rect.width -= labelWidth;
+ if (GUI.Button(rect, "Solo", "Button"))
+ {
+ isSolo = !isSolo;
+ CinemachineBrain.SoloCamera = isSolo ? Target : null;
+ InspectorUtility.RepaintGameView();
+ }
+ GUI.color = color;
+ if (isSolo && !Application.isPlaying)
+ InspectorUtility.RepaintGameView();
+
+ if (labelWidth > 0)
+ {
+ GUI.enabled = false;
+ rect.x += rect.width; rect.width = labelWidth;
+ GUI.Label(rect, updateText);
+ GUI.enabled = true;
+ }
+ }
+
+ static GUIContent ShowInGameGuidesLabel = new GUIContent(
+ "Game Window Guides",
+ "Enable the display of overlays in the Game window. "
+ + "You can adjust colours and opacity in Cinemachine Preferences.");
+
+ static GUIContent SaveDuringPlayLabel = new GUIContent(
+ "Save During Play",
+ "If checked, Virtual Camera settings changes made during Play Mode "
+ + "will be propagated back to the scene when Play Mode is exited.");
+
+ ///
+ /// Draw the global settings controls in the inspector
+ ///
+ protected void DrawGlobalControlsInInspector()
+ {
+ CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides
+ = EditorGUILayout.Toggle(ShowInGameGuidesLabel,
+ CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides);
+
+ SaveDuringPlay.SaveDuringPlay.Enabled
+ = EditorGUILayout.Toggle(SaveDuringPlayLabel, SaveDuringPlay.SaveDuringPlay.Enabled);
+
+ if (Application.isPlaying && SaveDuringPlay.SaveDuringPlay.Enabled)
+ EditorGUILayout.HelpBox(
+ " Virtual Camera settings changes made during Play Mode will be "
+ + "propagated back to the scene when Play Mode is exited.",
+ MessageType.Info);
+ }
+
+ LensSettingsInspectorHelper m_LensSettingsInspectorHelper;
+ internal bool IsHorizontalFOVUsed() =>
+ m_LensSettingsInspectorHelper != null && m_LensSettingsInspectorHelper.UseHorizontalFOV;
+
+ ///
+ /// Draw the Lens Settings controls in the inspector
+ ///
+ /// The SerializedProperty for the field of type LensSettings field
+ protected void DrawLensSettingsInInspector(SerializedProperty property)
+ {
+ if (IsPropertyExcluded(property.name))
+ return;
+ if (m_LensSettingsInspectorHelper == null)
+ m_LensSettingsInspectorHelper = new LensSettingsInspectorHelper();
+
+ // This should be a global UX setting, but the best we can do now is to query
+ // the associated camera (if any) for the lens FOV display mode
+ Camera camera = null;
+ var brain = CinemachineCore.Instance.FindPotentialTargetBrain(Target);
+ if (brain != null)
+ camera = brain.OutputCamera;
+
+ m_LensSettingsInspectorHelper.SnapshotCameraShadowValues(property, camera);
+
+ m_LensSettingsInspectorHelper.DrawLensSettingsInInspector(property);
+ ExcludeProperty(property.name);
+ }
+ }
+
+ // Helper for drawing lensSettings in inspector
+ class LensSettingsInspectorHelper
+ {
+ GUIContent[] m_PresetOptions;
+ GUIContent[] m_PhysicalPresetOptions;
+ LensSettings m_LensSettingsDef = new LensSettings(); // to access name strings
+
+ static readonly GUIContent EditPresetsLabel = new GUIContent("Edit Presets...");
+ static readonly GUIContent LensLabel = new GUIContent("Lens", "Lens settings to apply to the camera");
+ static readonly GUIContent HFOVLabel = new GUIContent("Horizontal FOV", "Horizontal Field of View");
+ static readonly GUIContent VFOVLabel = new GUIContent("Vertical FOV", "Vertical Field of View");
+ static readonly GUIContent FocalLengthLabel = new GUIContent("Focal Length", "The length of the lens (in mm)");
+ static readonly GUIContent OrthoSizeLabel = new GUIContent("Ortho Size", "When using an orthographic camera, "
+ + "this defines the half-height, in world coordinates, of the camera view.");
+ static readonly GUIContent SensorSizeLabel = new GUIContent("Sensor Size",
+ "Actual size of the image sensor (in mm), used to "
+ + "convert between focal length and field of vue.");
+ static readonly GUIContent AdvancedLabel = new GUIContent("Advanced");
+
+ bool IsOrtho;
+ bool IsPhysical;
+ Vector2 SensorSize;
+ internal bool UseHorizontalFOV;
+ static bool s_AdvancedExpanded;
+ SerializedProperty ModeOverrideProperty;
+
+ #if CINEMACHINE_HDRP
+ GUIContent PhysicalPropertiesLabel;
+ static bool mPhysicalExapnded;
+ #endif
+
+ public LensSettingsInspectorHelper()
+ {
+ #if CINEMACHINE_HDRP
+ PhysicalPropertiesLabel = new GUIContent("Physical Properties", "Physical properties of the lens");
+ #endif
+
+ var options = new List();
+ CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists;
+ for (int i = 0; presets != null && i < presets.m_Presets.Length; ++i)
+ options.Add(new GUIContent(presets.m_Presets[i].m_Name));
+ options.Add(EditPresetsLabel);
+ m_PresetOptions = options.ToArray();
+
+ options.Clear();
+ for (int i = 0; presets != null && i < presets.m_PhysicalPresets.Length; ++i)
+ options.Add(new GUIContent(presets.m_PhysicalPresets[i].m_Name));
+ options.Add(EditPresetsLabel);
+ m_PhysicalPresetOptions = options.ToArray();
+ }
+
+ public void SnapshotCameraShadowValues(SerializedProperty property, Camera camera)
+ {
+ ModeOverrideProperty = property.FindPropertyRelative(() => m_LensSettingsDef.ModeOverride);
+
+ // Assume lens is up-to-date
+ UseHorizontalFOV = false;
+ var lensObject = SerializedPropertyHelper.GetPropertyValue(property);
+ IsOrtho = AccessProperty(typeof(LensSettings), lensObject, "Orthographic");
+ IsPhysical = AccessProperty(typeof(LensSettings), lensObject, "IsPhysicalCamera");
+ SensorSize = AccessProperty(typeof(LensSettings), lensObject, "SensorSize");
+
+ // Then pull from actual camera if appropriate
+ if (camera != null)
+ {
+#if UNITY_2019_1_OR_NEWER
+ // This should really be a global setting, but for now there is no better way than this!
+ var p = new SerializedObject(camera).FindProperty("m_FOVAxisMode");
+ if (p != null && p.intValue == (int)Camera.FieldOfViewAxis.Horizontal)
+ UseHorizontalFOV = true;
+#endif
+ // It's possible that the lens isn't synched with its camera - fix that here
+ if (ModeOverrideProperty.intValue == (int)LensSettings.OverrideModes.None)
+ {
+ IsOrtho = camera.orthographic;
+ IsPhysical = camera.usePhysicalProperties;
+ SensorSize = IsPhysical ? camera.sensorSize : new Vector2(camera.aspect, 1f);
+ }
+ }
+
+ var nearClipPlaneProperty = property.FindPropertyRelative("NearClipPlane");
+ if (!IsOrtho)
+ {
+ nearClipPlaneProperty.floatValue = Mathf.Max(nearClipPlaneProperty.floatValue, 0.01f);
+ property.serializedObject.ApplyModifiedPropertiesWithoutUndo();
+ }
+ }
+
+ static T AccessProperty(Type type, object obj, string memberName)
+ {
+ if (string.IsNullOrEmpty(memberName) || (type == null))
+ return default(T);
+
+ System.Reflection.BindingFlags bindingFlags = System.Reflection.BindingFlags.Public;
+ if (obj != null)
+ bindingFlags |= System.Reflection.BindingFlags.Instance;
+ else
+ bindingFlags |= System.Reflection.BindingFlags.Static;
+
+ System.Reflection.PropertyInfo pi = type.GetProperty(memberName, bindingFlags);
+ if ((pi != null) && (pi.PropertyType == typeof(T)))
+ return (T)pi.GetValue(obj, null);
+ else
+ return default(T);
+ }
+
+ public void DrawLensSettingsInInspector(SerializedProperty property)
+ {
+ Rect rect = EditorGUILayout.GetControlRect(true);
+
+ var lensLabelWidth = GUI.skin.label.CalcSize(LensLabel).x;
+ var foldoutLabelWidth = lensLabelWidth;
+
+ property.isExpanded = EditorGUI.Foldout(
+ new Rect(rect.x, rect.y, foldoutLabelWidth, rect.height),
+ property.isExpanded, LensLabel, true);
+
+ if (!property.isExpanded)
+ {
+ // Put the FOV on the same line
+ var oldLabelWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth -= foldoutLabelWidth;
+ rect.x += foldoutLabelWidth; rect.width -= foldoutLabelWidth;
+ DrawLensFocusInInspector(rect, property);
+ EditorGUIUtility.labelWidth = oldLabelWidth;
+ }
+ else
+ {
+ ++EditorGUI.indentLevel;
+
+ rect = EditorGUILayout.GetControlRect(true);
+ DrawLensFocusInInspector(rect, property);
+
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.NearClipPlane));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.FarClipPlane));
+
+ if (IsPhysical)
+ {
+#if CINEMACHINE_HDRP
+ mPhysicalExapnded = EditorGUILayout.Foldout(mPhysicalExapnded, PhysicalPropertiesLabel, true);
+ if (mPhysicalExapnded)
+ {
+ ++EditorGUI.indentLevel;
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.Aperture));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.Iso));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.ShutterSpeed));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.BladeCount));
+
+ rect = EditorGUILayout.GetControlRect(true);
+ var curvature = property.FindPropertyRelative(() => m_LensSettingsDef.Curvature);
+ using (var propertyScope = new EditorGUI.PropertyScope(rect, new GUIContent("Curvature"), curvature))
+ {
+ var v = curvature.vector2Value;
+
+ // The layout system breaks alignment when mixing inspector fields with custom layout'd
+ // fields as soon as a scrollbar is needed in the inspector, so we'll do the layout
+ // manually instead
+ const int kFloatFieldWidth = 50;
+ const int kSeparatorWidth = 5;
+ float indentOffset = EditorGUI.indentLevel * 15f;
+ var labelRect = new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth - indentOffset, rect.height);
+ var floatFieldLeft = new Rect(labelRect.xMax, rect.y, kFloatFieldWidth + indentOffset, rect.height);
+ var sliderRect = new Rect(floatFieldLeft.xMax + kSeparatorWidth - indentOffset, rect.y, rect.width - labelRect.width - kFloatFieldWidth * 2 - kSeparatorWidth * 2, rect.height);
+ var floatFieldRight = new Rect(sliderRect.xMax + kSeparatorWidth - indentOffset, rect.y, kFloatFieldWidth + indentOffset, rect.height);
+
+ EditorGUI.PrefixLabel(labelRect, propertyScope.content);
+ v.x = EditorGUI.FloatField(floatFieldLeft, v.x);
+ EditorGUI.MinMaxSlider(sliderRect, ref v.x, ref v.y, HDPhysicalCamera.kMinAperture, HDPhysicalCamera.kMaxAperture);
+ v.y = EditorGUI.FloatField(floatFieldRight, v.y);
+
+ curvature.vector2Value = v;
+ }
+
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.BarrelClipping));
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.Anamorphism));
+
+ DrawSensorSizeInInspector(property);
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.LensShift));
+ if (ModeOverrideProperty.intValue != (int)LensSettings.OverrideModes.None)
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.GateFit));
+#if UNITY_2022_2_OR_NEWER
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.FocusDistance));
+#endif
+
+ --EditorGUI.indentLevel;
+ }
+#else
+ DrawSensorSizeInInspector(property);
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.LensShift));
+ if (ModeOverrideProperty.intValue != (int)LensSettings.OverrideModes.None)
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.GateFit));
+#if UNITY_2022_2_OR_NEWER
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.FocusDistance));
+#endif
+#endif
+ }
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => m_LensSettingsDef.Dutch));
+ s_AdvancedExpanded = EditorGUILayout.Foldout(s_AdvancedExpanded, AdvancedLabel);
+ if (s_AdvancedExpanded)
+ {
+ ++EditorGUI.indentLevel;
+ EditorGUILayout.HelpBox("Setting a mode override here implies changes to the Camera component when "
+ + "Cinemachine activates this Virtual Camera, and the changes will remain after the Virtual "
+ + "Camera deactivation. If you set a mode override in any Virtual Camera, you should set "
+ + "one in all Virtual Cameras.", MessageType.Info);
+ EditorGUILayout.PropertyField(ModeOverrideProperty);
+ --EditorGUI.indentLevel;
+ }
+ --EditorGUI.indentLevel;
+ }
+ property.serializedObject.ApplyModifiedProperties();
+ }
+
+ static float ExtraSpaceHackWTF() { return EditorGUI.indentLevel * (EditorGUIUtility.singleLineHeight - 3); }
+
+ void DrawSensorSizeInInspector(SerializedProperty property)
+ {
+ if (ModeOverrideProperty.intValue != (int)LensSettings.OverrideModes.None)
+ {
+ property = property.FindPropertyRelative("m_SensorSize");
+ var rect = EditorGUILayout.GetControlRect(true);
+ EditorGUI.BeginProperty(rect, SensorSizeLabel, property);
+ var v = EditorGUI.Vector2Field(rect, SensorSizeLabel, property.vector2Value);
+ v.x = Mathf.Max(v.x, 0.1f);
+ v.y = Mathf.Max(v.y, 0.1f);
+ property.vector2Value = v;
+ EditorGUI.EndProperty();
+ }
+ }
+
+ void DrawLensFocusInInspector(Rect rect, SerializedProperty property)
+ {
+ if (IsOrtho)
+ EditorGUI.PropertyField(
+ rect, property.FindPropertyRelative(() => m_LensSettingsDef.OrthographicSize), OrthoSizeLabel);
+ else if (IsPhysical)
+ DrawFocalLengthControl(rect, property, FocalLengthLabel);
+ else
+ DrawFOVControl(rect, property);
+ }
+
+ void DrawFOVControl(Rect rect, SerializedProperty property)
+ {
+ const float hSpace = 2;
+ var label = UseHorizontalFOV ? HFOVLabel : VFOVLabel;
+
+ var FOVProperty = property.FindPropertyRelative(() => m_LensSettingsDef.FieldOfView);
+ float aspect = SensorSize.x / SensorSize.y;
+
+ float dropdownWidth = (rect.width - EditorGUIUtility.labelWidth) / 4;
+ rect.width -= dropdownWidth + hSpace;
+
+ float f = FOVProperty.floatValue;
+ if (UseHorizontalFOV)
+ f = CameraExtensions.VerticalToHorizontalFieldOfView(f, aspect);
+ EditorGUI.BeginProperty(rect, label, FOVProperty);
+ f = EditorGUI.FloatField(rect, label, f);
+ if (UseHorizontalFOV)
+ f = CameraExtensions.HorizontalToVerticalFieldOfView(Mathf.Clamp(f, 1, 179), aspect);
+ if (!Mathf.Approximately(FOVProperty.floatValue, f))
+ FOVProperty.floatValue = Mathf.Clamp(f, 1, 179);
+ EditorGUI.EndProperty();
+ rect.x += rect.width + hSpace; rect.width = dropdownWidth;
+
+ CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists;
+ int preset = (presets == null) ? -1 : presets.GetMatchingPreset(FOVProperty.floatValue);
+ rect.x -= ExtraSpaceHackWTF(); rect.width += ExtraSpaceHackWTF();
+ int selection = EditorGUI.Popup(rect, GUIContent.none, preset, m_PresetOptions);
+ if (selection == m_PresetOptions.Length-1 && CinemachineLensPresets.Instance != null)
+ Selection.activeObject = presets = CinemachineLensPresets.Instance;
+ else if (selection >= 0 && selection < m_PresetOptions.Length-1)
+ {
+ var vfov = presets.m_Presets[selection].m_FieldOfView;
+ FOVProperty.floatValue = vfov;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ void DrawFocalLengthControl(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ const float hSpace = 2;
+ var FOVProperty = property.FindPropertyRelative(() => m_LensSettingsDef.FieldOfView);
+ float dropdownWidth = (rect.width - EditorGUIUtility.labelWidth) / 4;
+ rect.width -= dropdownWidth + hSpace;
+
+ float f = CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y);
+ EditorGUI.BeginProperty(rect, label, FOVProperty);
+ f = EditorGUI.FloatField(rect, label, f);
+ f = CameraExtensions.FocalLengthToFieldOfView(Mathf.Max(f, 0.0001f), SensorSize.y);
+ if (!Mathf.Approximately(FOVProperty.floatValue, f))
+ FOVProperty.floatValue = Mathf.Clamp(f, 1, 179);
+ EditorGUI.EndProperty();
+
+ rect.x += rect.width + hSpace; rect.width = dropdownWidth;
+
+#if CINEMACHINE_HDRP
+ CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists;
+ int preset = -1;
+ if (presets != null)
+ {
+ var focalLength = CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y);
+ var aperture = property.FindPropertyRelative(() => m_LensSettingsDef.Aperture).floatValue;
+ var iso = property.FindPropertyRelative(() => m_LensSettingsDef.Iso).intValue;
+ var shutterSpeed = property.FindPropertyRelative(() => m_LensSettingsDef.ShutterSpeed).floatValue;
+ var bladeCount = property.FindPropertyRelative(() => m_LensSettingsDef.BladeCount).intValue;
+ var curvature = property.FindPropertyRelative(() => m_LensSettingsDef.Curvature).vector2Value;
+ var barrelClipping = property.FindPropertyRelative(() => m_LensSettingsDef.BarrelClipping).floatValue;
+ var anamprphism = property.FindPropertyRelative(() => m_LensSettingsDef.Anamorphism).floatValue;
+ var lensShift = property.FindPropertyRelative(() => m_LensSettingsDef.LensShift).vector2Value;
+
+ preset = presets.GetMatchingPhysicalPreset(
+ focalLength, iso, shutterSpeed, aperture, bladeCount,
+ curvature, barrelClipping, anamprphism, lensShift);
+ }
+ rect.x -= ExtraSpaceHackWTF(); rect.width += ExtraSpaceHackWTF();
+ int selection = EditorGUI.Popup(rect, GUIContent.none, preset, m_PhysicalPresetOptions);
+ if (selection == m_PhysicalPresetOptions.Length-1 && CinemachineLensPresets.Instance != null)
+ Selection.activeObject = presets = CinemachineLensPresets.Instance;
+ else if (selection >= 0 && selection < m_PhysicalPresetOptions.Length-1)
+ {
+ var v = presets.m_PhysicalPresets[selection];
+ FOVProperty.floatValue = CameraExtensions.FocalLengthToFieldOfView(v.m_FocalLength, SensorSize.y);
+ property.FindPropertyRelative(() => m_LensSettingsDef.Aperture).floatValue = v.Aperture;
+ property.FindPropertyRelative(() => m_LensSettingsDef.Iso).intValue = v.Iso;
+ property.FindPropertyRelative(() => m_LensSettingsDef.ShutterSpeed).floatValue = v.ShutterSpeed;
+ property.FindPropertyRelative(() => m_LensSettingsDef.BladeCount).intValue = v.BladeCount;
+ property.FindPropertyRelative(() => m_LensSettingsDef.Curvature).vector2Value = v.Curvature;
+ property.FindPropertyRelative(() => m_LensSettingsDef.BarrelClipping).floatValue = v.BarrelClipping;
+ property.FindPropertyRelative(() => m_LensSettingsDef.Anamorphism).floatValue = v.Anamorphism;
+ property.FindPropertyRelative(() => m_LensSettingsDef.LensShift).vector2Value = v.LensShift;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+#else
+ CinemachineLensPresets presets = CinemachineLensPresets.InstanceIfExists;
+ int preset = (presets == null) ? -1 : presets.GetMatchingPhysicalPreset(
+ CameraExtensions.FieldOfViewToFocalLength(FOVProperty.floatValue, SensorSize.y));
+ rect.x -= ExtraSpaceHackWTF(); rect.width += ExtraSpaceHackWTF();
+ int selection = EditorGUI.Popup(rect, GUIContent.none, preset, m_PhysicalPresetOptions);
+ if (selection == m_PhysicalPresetOptions.Length-1 && CinemachineLensPresets.Instance != null)
+ Selection.activeObject = presets = CinemachineLensPresets.Instance;
+ else if (selection >= 0 && selection < m_PhysicalPresetOptions.Length-1)
+ {
+ FOVProperty.floatValue = CameraExtensions.FocalLengthToFieldOfView(
+ presets.m_PhysicalPresets[selection].m_FocalLength, SensorSize.y);
+ property.serializedObject.ApplyModifiedProperties();
+ }
+#endif
+ }
+ }
+}
+
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs.meta
new file mode 100644
index 00000000..c1b8e9bb
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraBaseEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 211d719bb25901043833928f50e9d0ea
+timeCreated: 1506603196
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs
new file mode 100644
index 00000000..73fcede9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs
@@ -0,0 +1,310 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Collections.Generic;
+using Cinemachine.Utility;
+using System.Reflection;
+using System.Linq;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineVirtualCamera))]
+ [CanEditMultipleObjects]
+ internal class CinemachineVirtualCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ VcamStageEditorPipeline m_PipelineSet = new VcamStageEditorPipeline();
+
+ [MenuItem("CONTEXT/CinemachineVirtualCamera/Adopt Game View Camera Settings")]
+ static void AdoptGameViewCameraSettings(MenuCommand command)
+ {
+ var vcam = command.context as CinemachineVirtualCamera;
+ var brain = CinemachineCore.Instance.FindPotentialTargetBrain(vcam);
+ if (brain != null)
+ {
+ vcam.m_Lens = brain.CurrentCameraState.Lens;
+ vcam.transform.position = brain.transform.position;
+ vcam.transform.rotation = brain.transform.rotation;
+ }
+ }
+
+ [MenuItem("CONTEXT/CinemachineVirtualCamera/Adopt Scene View Camera Settings")]
+ static void AdoptSceneViewCameraSettings(MenuCommand command)
+ {
+ var vcam = command.context as CinemachineVirtualCamera;
+ vcam.m_Lens = CinemachineMenu.MatchSceneViewCamera(vcam.transform);
+ }
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ Undo.undoRedoPerformed += ResetTargetOnUndo;
+ m_PipelineSet.Initialize(
+ // GetComponent
+ (stage, result) =>
+ {
+ int numNullComponents = 0;
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineVirtualCamera;
+ if (vcam != null)
+ {
+ var c = vcam.GetCinemachineComponent(stage);
+ if (c != null)
+ result.Add(c);
+ else
+ ++numNullComponents;
+ }
+ }
+ return numNullComponents;
+ },
+ // SetComponent
+ (stage, type) =>
+ {
+ Undo.SetCurrentGroupName("Cinemachine pipeline change");
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineVirtualCamera;
+ Transform owner = vcam == null ? null : vcam.GetComponentOwner();
+ if (owner == null)
+ continue; // maybe it's a prefab
+ var c = vcam.GetCinemachineComponent(stage);
+ if (c != null && c.GetType() == type)
+ continue;
+ if (c != null)
+ {
+ Undo.DestroyObjectImmediate(c);
+ vcam.InvalidateComponentPipeline();
+ }
+ if (type != null)
+ {
+ Undo.AddComponent(owner.gameObject, type);
+ vcam.InvalidateComponentPipeline();
+ }
+ }
+ });
+
+ // We only look at the first target here, on purpose
+ if (Target != null && Target.m_LockStageInInspector != null)
+ foreach (var s in Target.m_LockStageInInspector)
+ m_PipelineSet.SetStageIsLocked(s);
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FarNearClipTool));
+#endif
+ }
+
+ protected override void OnDisable()
+ {
+ Undo.undoRedoPerformed -= ResetTargetOnUndo;
+ m_PipelineSet.Shutdown();
+ base.OnDisable();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FarNearClipTool));
+#endif
+ }
+
+ void OnSceneGUI()
+ {
+ m_PipelineSet.OnSceneGUI(); // call hidden editors' OnSceneGUI
+
+#if UNITY_2021_2_OR_NEWER
+ DrawSceneTools();
+#endif
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void DrawSceneTools()
+ {
+ var vcam = Target;
+ if (vcam == null || !vcam.IsValid || vcam.m_ExcludedPropertiesInInspector.Contains("m_Lens"))
+ {
+ return;
+ }
+
+ var originalColor = Handles.color;
+ Handles.color = Handles.preselectionColor;
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FoVTool)))
+ {
+ CinemachineSceneToolHelpers.FovToolHandle(vcam,
+ new SerializedObject(vcam).FindProperty(() => vcam.m_Lens),
+ vcam.m_Lens, IsHorizontalFOVUsed());
+ }
+ else if (CinemachineSceneToolUtility.IsToolActive(typeof(FarNearClipTool)))
+ {
+ CinemachineSceneToolHelpers.NearFarClipHandle(vcam,
+ new SerializedObject(vcam).FindProperty(() => vcam.m_Lens));
+ }
+ Handles.color = originalColor;
+ }
+#endif
+
+ public override void OnInspectorGUI()
+ {
+ if (Target.GetComponentOwner() == null)
+ {
+ EditorGUILayout.HelpBox(
+ "It's not possible to add this component to a prefab instance. "
+ + "Instead, you can open the Prefab in Prefab Mode or unpack "
+ + "the Prefab instance to remove the Prefab connection.",
+ MessageType.Error);
+ return;
+ }
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawPropertyInInspector(FindProperty(x => x.m_StandbyUpdate));
+ DrawLensSettingsInInspector(FindProperty(x => x.m_Lens));
+ DrawRemainingPropertiesInInspector();
+ m_PipelineSet.OnInspectorGUI(!IsPropertyExcluded("Header"));
+ DrawExtensionsWidgetInInspector();
+ }
+
+ void ResetTargetOnUndo()
+ {
+ ResetTarget();
+ for (int i = 0; i < targets.Length; ++i)
+ (targets[i] as CinemachineVirtualCamera).InvalidateComponentPipeline();
+ }
+
+ ///
+ /// Register with CinemachineVirtualCamera to create the pipeline in an undo-friendly manner
+ ///
+ [InitializeOnLoad]
+ class CreatePipelineWithUndo
+ {
+ static CreatePipelineWithUndo()
+ {
+ CinemachineVirtualCamera.CreatePipelineOverride =
+ (CinemachineVirtualCamera vcam, string name, CinemachineComponentBase[] copyFrom) =>
+ {
+ // Recycle existing pipeline child (if any)
+ GameObject go = null;
+ foreach (Transform child in vcam.transform)
+ {
+ if (child.GetComponent() != null)
+ {
+ go = child.gameObject;
+ break;
+ }
+ }
+ if (go == null)
+ {
+ // Create a new pipeline - can't do it if prefab instance
+ if (PrefabUtility.IsPartOfAnyPrefab(vcam.gameObject))
+ return null;
+ go = ObjectFactory.CreateGameObject(name);
+ Undo.RegisterCreatedObjectUndo(go, "created pipeline");
+ Undo.SetTransformParent(go.transform, vcam.transform, "parenting pipeline");
+ Undo.AddComponent(go);
+ }
+
+ var oldStuff = go.GetComponents();
+ foreach (var c in oldStuff)
+ Undo.DestroyObjectImmediate(c);
+
+ // If copying, transfer the components
+ if (copyFrom != null)
+ {
+ foreach (Component c in copyFrom)
+ {
+ Component copy = Undo.AddComponent(go, c.GetType());
+ Undo.RecordObject(copy, "copying pipeline");
+ ReflectionHelpers.CopyFields(c, copy);
+ }
+ }
+ return go.transform;
+ };
+
+ CinemachineVirtualCamera.DestroyPipelineOverride = (GameObject pipeline) =>
+ {
+ var oldStuff = pipeline.GetComponents();
+ foreach (var c in oldStuff)
+ Undo.DestroyObjectImmediate(c);
+ // Cannot create or destroy child objects if prefab.
+ // Just leave it there in that case, it will get discovered and recycled.
+ if (!PrefabUtility.IsPartOfAnyPrefab(pipeline))
+ Undo.DestroyObjectImmediate(pipeline);
+ };
+ }
+ }
+
+ // Because the cinemachine components are attached to hidden objects, their
+ // gizmos don't get drawn by default. We have to do it explicitly.
+ [InitializeOnLoad]
+ static class CollectGizmoDrawers
+ {
+ static CollectGizmoDrawers()
+ {
+ m_GizmoDrawers = new Dictionary();
+ string definedIn = typeof(CinemachineComponentBase).Assembly.GetName().Name;
+ Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+ foreach (Assembly assembly in assemblies)
+ {
+ // Note that we have to call GetName().Name. Just GetName() will not work.
+ if ((!assembly.GlobalAssemblyCache)
+ && ((assembly.GetName().Name == definedIn)
+ || assembly.GetReferencedAssemblies().Any(a => a.Name == definedIn)))
+ {
+ try
+ {
+ foreach (var type in assembly.GetTypes())
+ {
+ try
+ {
+ bool added = false;
+ foreach (var method in type.GetMethods(
+ BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
+ {
+ if (added)
+ break;
+ if (!method.IsStatic)
+ continue;
+ var attributes = method.GetCustomAttributes(typeof(DrawGizmo), true) as DrawGizmo[];
+ foreach (var a in attributes)
+ {
+ if (typeof(CinemachineComponentBase).IsAssignableFrom(a.drawnType) && !a.drawnType.IsAbstract)
+ {
+ m_GizmoDrawers.Add(a.drawnType, method);
+ added = true;
+ break;
+ }
+ }
+ }
+ }
+ catch (Exception) {} // Just skip uncooperative types
+ }
+ }
+ catch (Exception) {} // Just skip uncooperative assemblies
+ }
+ }
+ }
+ public static Dictionary m_GizmoDrawers;
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineVirtualCamera))]
+ internal static void DrawVirtualCameraGizmos(CinemachineVirtualCamera vcam, GizmoType selectionType)
+ {
+ var pipeline = vcam.GetComponentPipeline();
+ if (pipeline != null)
+ {
+ foreach (var c in pipeline)
+ {
+ if (c == null)
+ continue;
+
+ MethodInfo method;
+ if (CollectGizmoDrawers.m_GizmoDrawers.TryGetValue(c.GetType(), out method))
+ {
+ if (method != null)
+ method.Invoke(null, new object[] {c, selectionType});
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs.meta
new file mode 100644
index 00000000..14d6e190
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Editors/CinemachineVirtualCameraEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a63f9f2267c36684e855add13ad5499f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental.meta
new file mode 100644
index 00000000..543ba0fb
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 351cec6faf82a1848a52b8fd995c6c25
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs
new file mode 100644
index 00000000..ca3028ae
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs
@@ -0,0 +1,374 @@
+#if CINEMACHINE_EXPERIMENTAL_VCAM
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Editor;
+using System.Collections.Generic;
+
+namespace Cinemachine
+{
+ [CustomEditor(typeof(CinemachineNewFreeLook))]
+ sealed class CinemachineNewFreeLookEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ GUIContent[] m_OrbitNames = new GUIContent[]
+ { new GUIContent("Top Rig"), new GUIContent("Main Rig"), new GUIContent("Bottom Rig") };
+
+ GUIContent m_CustomizeLabel = new GUIContent(
+ "Customize", "Custom settings for this rig. If unchecked, main rig settins will be used");
+
+ VcamStageEditorPipeline m_PipelineSet = new VcamStageEditorPipeline();
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_Rigs)); // can't use HideInInspector for this
+ excluded.Add(FieldPath(x => x.m_Orbits));
+ excluded.Add(FieldPath(x => x.m_SplineCurvature));
+ }
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ Undo.undoRedoPerformed += ResetTargetOnUndo;
+ m_PipelineSet.Initialize(
+ // GetComponent
+ (stage, result) =>
+ {
+ int numNullComponents = 0;
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineNewVirtualCamera;
+ if (vcam != null)
+ {
+ var c = vcam.GetCinemachineComponent(stage);
+ if (c != null)
+ result.Add(c);
+ else
+ ++numNullComponents;
+ }
+ }
+ return numNullComponents;
+ },
+ // SetComponent
+ (stage, type) =>
+ {
+ Undo.SetCurrentGroupName("Cinemachine pipeline change");
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineNewVirtualCamera;
+ if (vcam != null)
+ {
+ Component c = vcam.GetCinemachineComponent(stage);
+ if (c != null && c.GetType() == type)
+ continue;
+ if (c != null)
+ {
+ Undo.DestroyObjectImmediate(c);
+ vcam.InvalidateComponentCache();
+ }
+ if (type != null)
+ {
+ Undo.AddComponent(vcam.gameObject, type);
+ vcam.InvalidateComponentCache();
+ }
+ }
+ }
+ });
+
+ m_PipelineSet.SetStageIsLocked(CinemachineCore.Stage.Body);
+
+ for (int i = 0; i < targets.Length; ++i)
+ (targets[i] as CinemachineNewFreeLook).UpdateInputAxisProvider();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FarNearClipTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
+#endif
+ }
+
+ protected override void OnDisable()
+ {
+ m_PipelineSet.Shutdown();
+ base.OnDisable();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FarNearClipTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
+#endif
+ }
+
+ void ResetTargetOnUndo()
+ {
+ ResetTarget();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ // Ordinary properties
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawPropertyInInspector(FindProperty(x => x.m_StandbyUpdate));
+ DrawLensSettingsInInspector(FindProperty(x => x.m_Lens));
+ DrawRemainingPropertiesInInspector();
+
+ // Orbits
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("Orbits", EditorStyles.boldLabel);
+ SerializedProperty orbits = FindProperty(x => x.m_Orbits);
+ EditorGUI.BeginChangeCheck();
+ for (int i = 0; i < 3; ++i)
+ {
+ var o = orbits.GetArrayElementAtIndex(i);
+ Rect rect = EditorGUILayout.GetControlRect(true);
+ InspectorUtility.MultiPropertyOnLine(
+ rect, m_OrbitNames[i],
+ new [] { o.FindPropertyRelative(() => Target.m_Orbits[i].m_Height),
+ o.FindPropertyRelative(() => Target.m_Orbits[i].m_Radius) },
+ null);
+ }
+ EditorGUILayout.PropertyField(FindProperty(x => x.m_SplineCurvature));
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+
+ // Pipeline Stages
+ EditorGUILayout.Space();
+ var selectedRig = Selection.objects.Length == 1
+ ? GUILayout.Toolbar(GetSelectedRig(Target), s_RigNames) : 0;
+ SetSelectedRig(Target, selectedRig);
+ EditorGUILayout.BeginVertical(GUI.skin.box);
+ if (selectedRig == 1)
+ m_PipelineSet.OnInspectorGUI(false);
+ else
+ DrawRigEditor(selectedRig == 0 ? 0 : 1);
+ EditorGUILayout.EndVertical();
+
+ // Extensions
+ DrawExtensionsWidgetInInspector();
+ }
+
+ static GUIContent[] s_RigNames =
+ {
+ new GUIContent("Top Rig"),
+ new GUIContent("Main Rig"),
+ new GUIContent("Bottom Rig")
+ };
+
+ static int GetSelectedRig(CinemachineNewFreeLook freelook)
+ {
+ return freelook.m_VerticalAxis.Value < 0.33f ? 2 : (freelook.m_VerticalAxis.Value > 0.66f ? 0 : 1);
+ }
+
+ static void SetSelectedRig(CinemachineNewFreeLook freelook, int rigIndex)
+ {
+ Debug.Assert(rigIndex >= 0 && rigIndex < 3);
+ if (GetSelectedRig(freelook) != rigIndex)
+ {
+ var prop = new SerializedObject(freelook).FindProperty(
+ () => freelook.m_VerticalAxis).FindPropertyRelative(() => freelook.m_VerticalAxis.Value);
+ prop.floatValue = rigIndex == 0 ? 1 : (rigIndex == 1 ? 0.5f : 0);
+ prop.serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ void OnSceneGUI()
+ {
+ m_PipelineSet.OnSceneGUI();
+
+#if UNITY_2021_2_OR_NEWER
+ DrawSceneTools();
+#endif
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void DrawSceneTools()
+ {
+ var newFreelook = Target;
+ if (newFreelook == null || !newFreelook.IsValid)
+ {
+ return;
+ }
+
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FoVTool)))
+ {
+ CinemachineSceneToolHelpers.FovToolHandle(newFreelook,
+ new SerializedObject(newFreelook).FindProperty(() => newFreelook.m_Lens),
+ newFreelook.m_Lens, IsHorizontalFOVUsed());
+ }
+ else if (CinemachineSceneToolUtility.IsToolActive(typeof(FarNearClipTool)))
+ {
+ CinemachineSceneToolHelpers.NearFarClipHandle(newFreelook,
+ new SerializedObject(newFreelook).FindProperty(() => newFreelook.m_Lens));
+ }
+ else if (newFreelook.Follow != null && CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
+ {
+ CinemachineSceneToolHelpers.OrbitControlHandle(newFreelook,
+ new SerializedObject(newFreelook).FindProperty(() => newFreelook.m_Orbits));
+ }
+ }
+#endif
+
+ void DrawRigEditor(int rigIndex)
+ {
+ const float kBoxMargin = 3;
+
+ SerializedProperty rig = FindProperty(x => x.m_Rigs).GetArrayElementAtIndex(rigIndex);
+
+ CinemachineNewFreeLook.Rig def = new CinemachineNewFreeLook.Rig(); // for properties
+ EditorGUIUtility.labelWidth -= kBoxMargin;
+
+ ++EditorGUI.indentLevel;
+ var components = Target.ComponentCache;
+ if (DrawFoldoutPropertyWithEnabledCheckbox(
+ rig.FindPropertyRelative(() => def.m_CustomLens),
+ rig.FindPropertyRelative(() => def.m_Lens)))
+ {
+ Target.m_Rigs[rigIndex].m_Lens = Target.m_Lens;
+ }
+
+ int index = (int)CinemachineCore.Stage.Body;
+ if (components[index] is CinemachineTransposer)
+ {
+ if (DrawFoldoutPropertyWithEnabledCheckbox(
+ rig.FindPropertyRelative(() => def.m_CustomBody),
+ rig.FindPropertyRelative(() => def.m_Body)))
+ {
+ Target.m_Rigs[rigIndex].m_Body.PullFrom(
+ components[index] as CinemachineTransposer);
+ }
+ }
+
+ index = (int)CinemachineCore.Stage.Aim;
+ if (components[index] is CinemachineComposer)
+ {
+ if (DrawFoldoutPropertyWithEnabledCheckbox(
+ rig.FindPropertyRelative(() => def.m_CustomAim),
+ rig.FindPropertyRelative(() => def.m_Aim)))
+ {
+ Target.m_Rigs[rigIndex].m_Aim.PullFrom(
+ components[index] as CinemachineComposer);
+ }
+ }
+
+ index = (int)CinemachineCore.Stage.Noise;
+ if (components[index] is CinemachineBasicMultiChannelPerlin)
+ {
+ if (DrawFoldoutPropertyWithEnabledCheckbox(
+ rig.FindPropertyRelative(() => def.m_CustomNoise),
+ rig.FindPropertyRelative(() => def.m_Noise)))
+ {
+ Target.m_Rigs[rigIndex].m_Noise.PullFrom(
+ components[index] as CinemachineBasicMultiChannelPerlin);
+ }
+ }
+ --EditorGUI.indentLevel;
+ EditorGUIUtility.labelWidth += kBoxMargin;
+ }
+
+ // Returns true if default value should be applied
+ bool DrawFoldoutPropertyWithEnabledCheckbox(
+ SerializedProperty enabledProperty, SerializedProperty property)
+ {
+ GUIContent label = new GUIContent(property.displayName, property.tooltip);
+ Rect rect = EditorGUILayout.GetControlRect(true,
+ (enabledProperty.boolValue && property.isExpanded)
+ ? EditorGUI.GetPropertyHeight(property)
+ : EditorGUIUtility.singleLineHeight);
+ Rect r = rect; r.height = EditorGUIUtility.singleLineHeight;
+ if (!enabledProperty.boolValue)
+ EditorGUI.LabelField(r, label);
+
+ float labelWidth = EditorGUIUtility.labelWidth;
+ bool newValue = EditorGUI.ToggleLeft(
+ new Rect(labelWidth, r.y, r.width - labelWidth, r.height),
+ m_CustomizeLabel, enabledProperty.boolValue);
+ if (newValue != enabledProperty.boolValue)
+ {
+ enabledProperty.boolValue = newValue;
+ enabledProperty.serializedObject.ApplyModifiedProperties();
+ property.isExpanded = newValue;
+ return true;
+ }
+ if (newValue == true)
+ {
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(rect, property, property.isExpanded);
+ if (EditorGUI.EndChangeCheck())
+ enabledProperty.serializedObject.ApplyModifiedProperties();
+ }
+ return false;
+ }
+
+ [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineNewFreeLook))]
+ private static void DrawFreeLookGizmos(CinemachineNewFreeLook vcam, GizmoType selectionType)
+ {
+ // Standard frustum and logo
+ CinemachineBrainEditor.DrawVirtualCameraBaseGizmos(vcam, selectionType);
+
+ Color originalGizmoColour = Gizmos.color;
+ bool isActiveVirtualCam = CinemachineCore.Instance.IsLive(vcam);
+ Gizmos.color = isActiveVirtualCam
+ ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
+ : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
+
+ if (vcam.Follow != null)
+ {
+ Vector3 pos = vcam.Follow.position;
+ Vector3 up = Vector3.up;
+ CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(vcam);
+ if (brain != null)
+ up = brain.DefaultWorldUp;
+
+ var middleRig = vcam.GetComponent();
+ if (middleRig != null)
+ {
+ float scale = vcam.m_RadialAxis.Value;
+ Quaternion orient = middleRig.GetReferenceOrientation(up);
+ up = orient * Vector3.up;
+ var orbital = middleRig as CinemachineOrbitalTransposer;
+ if (orbital != null)
+ {
+ float rotation = orbital.m_XAxis.Value + orbital.m_Heading.m_Bias;
+ orient = Quaternion.AngleAxis(rotation, up) * orient;
+ }
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[0].m_Height * scale,
+ orient, vcam.m_Orbits[0].m_Radius * scale);
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[1].m_Height * scale,
+ orient, vcam.m_Orbits[1].m_Radius * scale);
+ CinemachineOrbitalTransposerEditor.DrawCircleAtPointWithRadius(
+ pos + up * vcam.m_Orbits[2].m_Height * scale,
+ orient, vcam.m_Orbits[2].m_Radius * scale);
+
+ DrawCameraPath(pos, orient, vcam);
+ }
+ }
+ Gizmos.color = originalGizmoColour;
+ }
+
+ private static void DrawCameraPath(
+ Vector3 atPos, Quaternion orient, CinemachineNewFreeLook vcam)
+ {
+ Matrix4x4 prevMatrix = Gizmos.matrix;
+ Gizmos.matrix = Matrix4x4.TRS(atPos, orient, Vector3.one);
+
+ const int kNumSteps = 20;
+ Vector3 currPos = vcam.GetLocalPositionForCameraFromInput(0f);
+ for (int i = 1; i < kNumSteps + 1; ++i)
+ {
+ float t = (float)i / (float)kNumSteps;
+ Vector3 nextPos = vcam.GetLocalPositionForCameraFromInput(t);
+ Gizmos.DrawLine(currPos, nextPos);
+ currPos = nextPos;
+ }
+ Gizmos.matrix = prevMatrix;
+ }
+ }
+}
+#endif
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs.meta
new file mode 100644
index 00000000..9551fe7d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewFreeLookEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 933e2b6843fbbbc4c8cabeead6fc1fae
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs
new file mode 100644
index 00000000..bab3961f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs
@@ -0,0 +1,137 @@
+#if CINEMACHINE_EXPERIMENTAL_VCAM
+using UnityEngine;
+using UnityEditor;
+using Cinemachine.Editor;
+using System.Linq;
+
+namespace Cinemachine
+{
+ [CustomEditor(typeof(CinemachineNewVirtualCamera))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineNewVirtualCameraEditor
+ : CinemachineVirtualCameraBaseEditor
+ {
+ VcamStageEditorPipeline m_PipelineSet = new VcamStageEditorPipeline();
+
+ protected override void OnEnable()
+ {
+ base.OnEnable();
+ Undo.undoRedoPerformed += ResetTargetOnUndo;
+ m_PipelineSet.Initialize(
+ // GetComponent
+ (stage, result) =>
+ {
+ int numNullComponents = 0;
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineNewVirtualCamera;
+ if (vcam != null)
+ {
+ var c = vcam.GetCinemachineComponent(stage);
+ if (c != null)
+ result.Add(c);
+ else
+ ++numNullComponents;
+ }
+ }
+ return numNullComponents;
+ },
+ // SetComponent
+ (stage, type) =>
+ {
+ Undo.SetCurrentGroupName("Cinemachine pipeline change");
+ foreach (var obj in targets)
+ {
+ var vcam = obj as CinemachineNewVirtualCamera;
+ if (vcam != null)
+ {
+ Component c = vcam.GetCinemachineComponent(stage);
+ if (c != null && c.GetType() == type)
+ continue;
+ if (c != null)
+ {
+ Undo.DestroyObjectImmediate(c);
+ vcam.InvalidateComponentCache();
+ }
+ if (type != null)
+ {
+ Undo.AddComponent(vcam.gameObject, type);
+ vcam.InvalidateComponentCache();
+ }
+ }
+ }
+ });
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.RegisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.RegisterTool(typeof(FarNearClipTool));
+#endif
+ }
+
+ protected override void OnDisable()
+ {
+ Undo.undoRedoPerformed -= ResetTargetOnUndo;
+ m_PipelineSet.Shutdown();
+ base.OnDisable();
+
+#if UNITY_2021_2_OR_NEWER
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FoVTool));
+ CinemachineSceneToolUtility.UnregisterTool(typeof(FarNearClipTool));
+#endif
+ }
+
+ void ResetTargetOnUndo()
+ {
+ ResetTarget();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawHeaderInInspector();
+ DrawPropertyInInspector(FindProperty(x => x.m_Priority));
+ DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
+ DrawPropertyInInspector(FindProperty(x => x.m_StandbyUpdate));
+ DrawLensSettingsInInspector(FindProperty(x => x.m_Lens));
+ DrawRemainingPropertiesInInspector();
+ m_PipelineSet.OnInspectorGUI(true);
+ DrawExtensionsWidgetInInspector();
+ }
+
+ void OnSceneGUI()
+ {
+ m_PipelineSet.OnSceneGUI(); // call hidden editors
+
+#if UNITY_2021_2_OR_NEWER
+ DrawSceneTools();
+#endif
+ }
+
+#if UNITY_2021_2_OR_NEWER
+ void DrawSceneTools()
+ {
+ var vcam = Target;
+ if (vcam == null || !vcam.IsValid || vcam.m_ExcludedPropertiesInInspector.Contains("m_Lens"))
+ {
+ return;
+ }
+
+ var originalColor = Handles.color;
+ Handles.color = Handles.preselectionColor;
+ if (CinemachineSceneToolUtility.IsToolActive(typeof(FoVTool)))
+ {
+ CinemachineSceneToolHelpers.FovToolHandle(vcam,
+ new SerializedObject(vcam).FindProperty(() => vcam.m_Lens),
+ vcam.m_Lens, IsHorizontalFOVUsed());
+ }
+ else if (CinemachineSceneToolUtility.IsToolActive(typeof(FarNearClipTool)))
+ {
+ CinemachineSceneToolHelpers.NearFarClipHandle(vcam,
+ new SerializedObject(vcam).FindProperty(() => vcam.m_Lens));
+ }
+ Handles.color = originalColor;
+ }
+#endif
+ }
+}
+#endif
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs.meta
new file mode 100644
index 00000000..3849ef48
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Experimental/CinemachineNewVirtualCameraEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4692eb7a7fa5c53458eb32a04df6c6a0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers.meta
new file mode 100644
index 00000000..124c1a93
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3ee56510c2623c54daa99a3748f6f438
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs
new file mode 100644
index 00000000..5cb18303
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs
@@ -0,0 +1,162 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+using UnityEngine.Playables;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS || CINEMACHINE_PHYSICS_2D
+ [CustomEditor(typeof(CinemachineTriggerAction))]
+ internal class CinemachineTriggerActionEditor : BaseEditor
+ {
+ const int vSpace = 2;
+ CinemachineTriggerAction.ActionSettings def
+ = new CinemachineTriggerAction.ActionSettings(); // to access name strings
+
+ static bool mEnterExpanded;
+ static bool mExitExpanded;
+
+ SerializedProperty[] mRepeatProperties = new SerializedProperty[2];
+ GUIContent mRepeatLabel;
+ GUIContent[] mRepeatSubLabels = new GUIContent[2];
+
+ GUIStyle mFoldoutStyle;
+
+ private void OnEnable()
+ {
+ mRepeatProperties[0] = FindProperty(x => x.m_SkipFirst);
+ mRepeatProperties[1] = FindProperty(x => x.m_Repeating);
+ mRepeatLabel = new GUIContent(
+ mRepeatProperties[0].displayName, mRepeatProperties[0].tooltip);
+ mRepeatSubLabels[0] = GUIContent.none;
+ mRepeatSubLabels[1] = new GUIContent(
+ mRepeatProperties[1].displayName, mRepeatProperties[1].tooltip);
+ }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.m_SkipFirst));
+ excluded.Add(FieldPath(x => x.m_Repeating));
+ excluded.Add(FieldPath(x => x.m_OnObjectEnter));
+ excluded.Add(FieldPath(x => x.m_OnObjectExit));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawRemainingPropertiesInInspector();
+ InspectorUtility.MultiPropertyOnLine(
+ EditorGUILayout.GetControlRect(), mRepeatLabel,
+ mRepeatProperties, mRepeatSubLabels);
+ EditorGUILayout.Space();
+ mEnterExpanded = DrawActionSettings(FindProperty(x => x.m_OnObjectEnter), mEnterExpanded);
+ mExitExpanded = DrawActionSettings(FindProperty(x => x.m_OnObjectExit), mExitExpanded);
+ }
+
+ bool DrawActionSettings(SerializedProperty property, bool expanded)
+ {
+ if (mFoldoutStyle == null)
+ mFoldoutStyle = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold };
+
+ Rect r = EditorGUILayout.GetControlRect();
+ expanded = EditorGUI.Foldout(r, expanded, property.displayName, true, mFoldoutStyle);
+ if (expanded)
+ {
+ SerializedProperty actionProp = property.FindPropertyRelative(() => def.m_Action);
+ EditorGUILayout.PropertyField(actionProp);
+
+ SerializedProperty targetProp = property.FindPropertyRelative(() => def.m_Target);
+ bool isCustom = (actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Custom);
+ if (!isCustom)
+ EditorGUILayout.PropertyField(targetProp);
+
+ bool isBoost = actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.PriorityBoost;
+ if (isBoost)
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => def.m_BoostAmount));
+
+#if CINEMACHINE_TIMELINE
+ bool isPlay = actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Play;
+ if (isPlay)
+ {
+ SerializedProperty[] props = new SerializedProperty[2]
+ {
+ property.FindPropertyRelative(() => def.m_StartTime),
+ property.FindPropertyRelative(() => def.m_Mode)
+ };
+ GUIContent[] sublabels = new GUIContent[2]
+ {
+ GUIContent.none, new GUIContent("s", props[1].tooltip)
+ };
+ InspectorUtility.MultiPropertyOnLine(
+ EditorGUILayout.GetControlRect(), null, props, sublabels);
+ }
+#endif
+ if (actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Custom)
+ {
+ EditorGUILayout.HelpBox("Use the Event() list below to call custom methods", MessageType.Info);
+ }
+
+ if (isBoost)
+ {
+ if (GetTargetComponent(targetProp.objectReferenceValue) == null)
+ EditorGUILayout.HelpBox("Target must be a CinemachineVirtualCameraBase in order to boost priority", MessageType.Warning);
+ }
+
+ bool isEnableDisable = (actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Enable
+ || actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Disable);
+ if (isEnableDisable)
+ {
+ var value = targetProp.objectReferenceValue;
+ if (value != null && (value as Behaviour) == null)
+ EditorGUILayout.HelpBox("Target must be a Behaviour in order to Enable/Disable", MessageType.Warning);
+ }
+#if CINEMACHINE_TIMELINE
+ bool isPlayStop = isPlay
+ || actionProp.intValue == (int)CinemachineTriggerAction.ActionSettings.Mode.Stop;
+ if (isPlayStop)
+ {
+ if (GetTargetComponent(targetProp.objectReferenceValue) == null
+ && GetTargetComponent(targetProp.objectReferenceValue) == null)
+ {
+ EditorGUILayout.HelpBox("Target must have a PlayableDirector or Animator in order to Play/Stop", MessageType.Warning);
+ }
+ }
+#endif
+ if (!isCustom && targetProp.objectReferenceValue == null)
+ EditorGUILayout.HelpBox("No action will be taken because target is not valid", MessageType.Info);
+
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("This event will be invoked. Add calls to custom methods here:");
+ EditorGUILayout.PropertyField(property.FindPropertyRelative(() => def.m_Event));
+ }
+ property.serializedObject.ApplyModifiedProperties();
+ return expanded;
+ }
+
+ T GetTargetComponent(UnityEngine.Object obj) where T : Behaviour
+ {
+ UnityEngine.Object currentTarget = obj;
+ if (currentTarget != null)
+ {
+ GameObject targetGameObject = currentTarget as GameObject;
+ Behaviour targetBehaviour = currentTarget as Behaviour;
+ if (targetBehaviour != null)
+ targetGameObject = targetBehaviour.gameObject;
+ if (targetBehaviour is T)
+ return targetBehaviour as T;
+ if (targetGameObject != null)
+ return targetGameObject.GetComponent();
+ }
+ return null;
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs.meta
new file mode 100644
index 00000000..6d14b778
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Helpers/CinemachineTriggerActionEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c5d95ccadebafc84b8226853d987217d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse.meta
new file mode 100644
index 00000000..339d897e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ac4cc060534a50747a448a00776ed888
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs
new file mode 100644
index 00000000..0912ee41
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs
@@ -0,0 +1,55 @@
+#if !UNITY_2019_3_OR_NEWER
+#define CINEMACHINE_PHYSICS
+#define CINEMACHINE_PHYSICS_2D
+#endif
+
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+#if CINEMACHINE_PHYSICS || CINEMACHINE_PHYSICS_2D
+ [CustomEditor(typeof(CinemachineCollisionImpulseSource))]
+ internal sealed class CinemachineCollisionImpulseSourceEditor
+ : BaseEditor
+ {
+ float m_TestForce = 1;
+ GUIContent m_TestButton = new GUIContent(
+ "Invoke", "Play-mode only: Generate an impulse with the default velocity scaled by this amount");
+ GUIContent m_TestLabel = new GUIContent(
+ "Test with Force", "Generate an impulse with the default velocity scaled by an amount");
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+
+ EditorGUILayout.Separator();
+ var collider = Target.GetComponent();
+ var collider2D = Target.GetComponent();
+ if ((collider == null || !collider.enabled) && (collider2D == null || !collider2D.enabled))
+ EditorGUILayout.HelpBox(
+ "An active Collider or Collider2D component is required in order to detect "
+ + "collisions and generate Impulse events",
+ MessageType.Warning);
+
+ DrawRemainingPropertiesInInspector();
+
+ EditorGUILayout.Space();
+ GUI.enabled = EditorApplication.isPlaying;
+ {
+ var r1 = EditorGUILayout.GetControlRect();
+ r1 = EditorGUI.PrefixLabel(r1, m_TestLabel);
+ var testButtonWidth = GUI.skin.button.CalcSize(m_TestButton).x;
+ var r2 = r1;
+ r1.width = testButtonWidth;
+ r2.x += testButtonWidth + 3; r2.width -= testButtonWidth + 3;
+
+ m_TestForce = EditorGUI.Slider(r2, m_TestForce, 0.1f, 20f);
+ if (GUI.Button(r1, m_TestButton))
+ Target.GenerateImpulseWithForce(m_TestForce);
+ }
+ GUI.enabled = true;
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs.meta
new file mode 100644
index 00000000..01884864
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineCollisionImpulseSourceEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9cd1a769fbb1d1c47b4c22a04a64fa5f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs
new file mode 100644
index 00000000..b2638b76
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(CinemachineImpulseChannelPropertyAttribute))]
+ internal sealed class CinemachineImpulseChannelPropertyDrawer : PropertyDrawer
+ {
+ const float hSpace = 2;
+ GUIContent mAddLabel = new GUIContent("Edit...", "Add, remove, or rename channels");
+ string[] mLayerList = null;
+
+ void UpdateLayerList()
+ {
+ CinemachineImpulseChannels settings = CinemachineImpulseChannels.InstanceIfExists;
+ int numLayers = 0;
+ if (settings != null && settings.ImpulseChannels != null)
+ numLayers = settings.ImpulseChannels.Length;
+ numLayers = Mathf.Clamp(numLayers, 1, 31);
+ if (mLayerList == null || mLayerList.Length != numLayers)
+ mLayerList = new string[numLayers];
+ for (int i = 0; i < numLayers; ++i)
+ {
+ mLayerList[i] = string.Format(
+ "{0}: {1}", i,
+ (settings == null || settings.ImpulseChannels.Length <= i)
+ ? "default" : settings.ImpulseChannels[i]);
+ }
+ }
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ UpdateLayerList();
+ float addWidth = GUI.skin.button.CalcSize(mAddLabel).x;
+ rect.width -= addWidth + hSpace;
+
+ EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
+ EditorGUI.BeginChangeCheck();
+ int value = EditorGUI.MaskField(rect, label, property.intValue, mLayerList);
+ if (EditorGUI.EndChangeCheck())
+ {
+ property.intValue = value;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+ EditorGUI.showMixedValue = false;
+
+ rect.x += rect.width + hSpace; rect.width = addWidth; rect.height -= 1;
+ if (GUI.Button(rect, mAddLabel))
+ if (CinemachineImpulseChannels.Instance != null)
+ Selection.activeObject = CinemachineImpulseChannels.Instance;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs.meta
new file mode 100644
index 00000000..05da5f3b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannelPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0803634542916d8498caef53ed5604db
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs
new file mode 100644
index 00000000..e9fdd973
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs
@@ -0,0 +1,74 @@
+using UnityEngine;
+using System;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ ///
+ /// This class contains setting for the Impulse system. Specifically, it holds
+ /// the Impulse Channel definitions. These work like Unity Layers, you can
+ /// define and name them, and create masks to filter only the layers you want.
+ ///
+ [Serializable]
+ public class CinemachineImpulseChannels : ScriptableObject
+ {
+ static CinemachineImpulseChannels sInstance = null;
+ private static bool alreadySearched = false;
+
+ /// Get the singleton instance of this object, or null if it doesn't exist
+ public static CinemachineImpulseChannels InstanceIfExists
+ {
+ get
+ {
+ if (!alreadySearched)
+ {
+ alreadySearched = true;
+ var guids = AssetDatabase.FindAssets("t:CinemachineImpulseChannels");
+ for (int i = 0; i < guids.Length && sInstance == null; ++i)
+ sInstance = AssetDatabase.LoadAssetAtPath(
+ AssetDatabase.GUIDToAssetPath(guids[i]));
+ }
+ if (sInstance != null)
+ sInstance.EnsureDefaultLayer();
+ return sInstance;
+ }
+ }
+
+ /// Get the singleton instance of this object. Creates asset if nonexistant
+ public static CinemachineImpulseChannels Instance
+ {
+ get
+ {
+ if (InstanceIfExists == null)
+ {
+ string newAssetPath = EditorUtility.SaveFilePanelInProject(
+ "Create Impulse Channel Definition asset", "CinemachineImpulseChannels", "asset",
+ "This editor-only file will contain the Impulse channels for this project");
+ if (!string.IsNullOrEmpty(newAssetPath))
+ {
+ sInstance = CreateInstance();
+ AssetDatabase.CreateAsset(sInstance, newAssetPath);
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ }
+ }
+
+ if (sInstance != null)
+ {
+ sInstance.EnsureDefaultLayer();
+ }
+ return sInstance;
+ }
+ }
+
+ // Make sure it has at least one layer in it
+ void EnsureDefaultLayer()
+ {
+ if (ImpulseChannels == null || ImpulseChannels.Length == 0)
+ ImpulseChannels = new string[] { "default" };
+ }
+
+ /// The currently-defined Impulse channel names
+ public string[] ImpulseChannels;
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs.meta
new file mode 100644
index 00000000..6eac4956
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseChannels.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a1728508674789b4e8539a2ad08ebc3f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs
new file mode 100644
index 00000000..92ff2506
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs
@@ -0,0 +1,347 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(CinemachineImpulseDefinition))]
+ internal sealed class CinemachineImpulseDefinitionPropertyDrawer : PropertyDrawer
+ {
+ const int vSpace = 2;
+ const int kGraphHeight = 8; // lines
+
+ #pragma warning disable 649 // variable never used
+ CinemachineImpulseDefinition m_MyClass;
+ #pragma warning restore 649
+
+ GUIContent m_TimeText = null;
+ float m_TimeTextWidth;
+
+ SerializedProperty m_ShapeProperty;
+ float m_ShapePropertyHeight;
+
+ SerializedProperty m_ImpulseTypeProperty;
+
+ SerializedProperty m_DissipationRateProperty;
+ float m_SpreadPropertyHeight;
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ m_ImpulseTypeProperty = property.FindPropertyRelative(() => m_MyClass.m_ImpulseType);
+ var mode = (CinemachineImpulseDefinition.ImpulseTypes)m_ImpulseTypeProperty.intValue;
+ if (mode == CinemachineImpulseDefinition.ImpulseTypes.Legacy)
+ return LegacyModeGetPropertyHeight(property, label);
+
+ int lines = 3;
+
+ m_ShapePropertyHeight = EditorGUIUtility.singleLineHeight + vSpace;
+ m_ShapeProperty = property.FindPropertyRelative(() => m_MyClass.m_ImpulseShape);
+ if (m_ShapeProperty.isExpanded)
+ {
+ lines += kGraphHeight;
+ m_ShapePropertyHeight *= 1 + kGraphHeight;
+ }
+ m_ShapePropertyHeight -= vSpace;
+
+ m_DissipationRateProperty = property.FindPropertyRelative(() => m_MyClass.m_DissipationRate);
+ if (mode != CinemachineImpulseDefinition.ImpulseTypes.Uniform)
+ {
+ m_SpreadPropertyHeight = EditorGUIUtility.singleLineHeight + vSpace;
+ if (m_DissipationRateProperty.isExpanded)
+ {
+ lines += kGraphHeight;
+ m_SpreadPropertyHeight *= 1 + kGraphHeight;
+ }
+ m_SpreadPropertyHeight -= vSpace;
+ lines += 2;
+ if (mode == CinemachineImpulseDefinition.ImpulseTypes.Propagating)
+ ++lines;
+ }
+ return lines * (EditorGUIUtility.singleLineHeight + vSpace);
+ }
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ // Using BeginProperty / EndProperty on the parent property means that
+ // prefab override logic works on the entire property.
+ EditorGUI.BeginProperty(rect, label, property);
+
+ var mode = (CinemachineImpulseDefinition.ImpulseTypes)m_ImpulseTypeProperty.intValue;
+ if (mode == CinemachineImpulseDefinition.ImpulseTypes.Legacy)
+ {
+ LegacyModeOnGUI(rect, property, label);
+ return;
+ }
+
+ rect.height = EditorGUIUtility.singleLineHeight;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => m_MyClass.m_ImpulseChannel));
+ rect.y += rect.height + vSpace;
+
+ // Impulse type
+ EditorGUI.PropertyField(rect, m_ImpulseTypeProperty);
+ rect.y += rect.height + vSpace;
+ if (mode != CinemachineImpulseDefinition.ImpulseTypes.Uniform)
+ {
+ // Propaation speed
+ if (mode == CinemachineImpulseDefinition.ImpulseTypes.Propagating)
+ {
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => m_MyClass.m_PropagationSpeed));
+ rect.y += rect.height + vSpace;
+ }
+
+ // Dissipation
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => m_MyClass.m_DissipationDistance));
+ rect.y += rect.height + vSpace;
+
+ // Spread combo
+ rect.height = m_SpreadPropertyHeight;
+ DrawSpreadCombo(rect, property);
+ rect.y += rect.height + vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+ }
+ // Impulse Shape combo
+ rect.height = m_ShapePropertyHeight;
+ DrawImpulseShapeCombo(rect, property);
+ rect.y += rect.height + vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+
+ EditorGUI.EndProperty();
+ }
+
+ void DrawImpulseShapeCombo(Rect fullRect, SerializedProperty property)
+ {
+ float floatFieldWidth = EditorGUIUtility.fieldWidth + 2;
+
+ SerializedProperty timeProp = property.FindPropertyRelative(() => m_MyClass.m_ImpulseDuration);
+ if (m_TimeText == null)
+ {
+ m_TimeText = new GUIContent(" s", timeProp.tooltip);
+ m_TimeTextWidth = GUI.skin.label.CalcSize(m_TimeText).x;
+ }
+
+ var graphRect = fullRect;
+ graphRect.y += EditorGUIUtility.singleLineHeight + vSpace;
+ graphRect.height -= EditorGUIUtility.singleLineHeight + vSpace;
+
+ var indentLevel = EditorGUI.indentLevel;
+
+ Rect r = fullRect; r.height = EditorGUIUtility.singleLineHeight;
+ r = EditorGUI.PrefixLabel(r, EditorGUI.BeginProperty(
+ r, new GUIContent(m_ShapeProperty.displayName, m_ShapeProperty.tooltip), property));
+ m_ShapeProperty.isExpanded = EditorGUI.Foldout(r, m_ShapeProperty.isExpanded, GUIContent.none);
+
+ bool isCustom = m_ShapeProperty.intValue == (int)CinemachineImpulseDefinition.ImpulseShapes.Custom;
+ r.width -= floatFieldWidth + m_TimeTextWidth;
+ if (isCustom)
+ r.width -= 2 * r.height;
+ EditorGUI.BeginChangeCheck();
+ {
+ EditorGUI.PropertyField(r, m_ShapeProperty, GUIContent.none);
+ if (EditorGUI.EndChangeCheck())
+ InvalidateImpulseGraphSample();
+ if (!isCustom && Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded)
+ DrawImpulseGraph(graphRect, CinemachineImpulseDefinition.GetStandardCurve(
+ (CinemachineImpulseDefinition.ImpulseShapes)m_ShapeProperty.intValue));
+ }
+ if (isCustom)
+ {
+ SerializedProperty curveProp = property.FindPropertyRelative(() => m_MyClass.m_CustomImpulseShape);
+ r.x += r.width;
+ r.width = 2 * r.height;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(r, curveProp, GUIContent.none);
+ if (EditorGUI.EndChangeCheck())
+ {
+ curveProp.animationCurveValue = RuntimeUtility.NormalizeCurve(curveProp.animationCurveValue, true, false);
+ curveProp.serializedObject.ApplyModifiedProperties();
+ InvalidateImpulseGraphSample();
+ }
+ if (Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded)
+ DrawImpulseGraph(graphRect, curveProp.animationCurveValue);
+ }
+
+ // Time
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = m_TimeTextWidth;
+ r.x += r.width; r.width = floatFieldWidth + EditorGUIUtility.labelWidth;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(r, timeProp, m_TimeText);
+ if (EditorGUI.EndChangeCheck())
+ timeProp.floatValue = Mathf.Max(timeProp.floatValue, 0);
+ EditorGUIUtility.labelWidth = oldWidth;
+
+ EditorGUI.indentLevel = indentLevel;
+ }
+
+ const int kNumSamples = 100;
+ Vector3[] m_ImpulseGraphSnapshot = new Vector3[kNumSamples+1];
+ float m_ImpulseGraphZero;
+ Vector2 m_ImpulseGraphSize;
+ void InvalidateImpulseGraphSample() { m_ImpulseGraphSize = Vector2.zero; }
+
+ void DrawImpulseGraph(Rect rect, AnimationCurve curve)
+ {
+ // Resample if necessary
+ if (m_ImpulseGraphSize != rect.size)
+ {
+ m_ImpulseGraphSize = rect.size;
+ float minY = 0;
+ float maxY = 0.1f;
+ for (int i = 0; i <= kNumSamples; ++i)
+ {
+ var x = (float)i / kNumSamples;
+ var y = curve.Evaluate(x);
+ minY = Mathf.Min(y, minY);
+ maxY = Mathf.Max(y, maxY);
+ m_ImpulseGraphSnapshot[i] = new Vector2(x * rect.width, y);
+ }
+ var range = maxY - minY;
+ m_ImpulseGraphZero = -minY / range;
+ m_ImpulseGraphZero = rect.height * (1f - m_ImpulseGraphZero);
+
+ // Apply scale
+ for (int i = 0; i <= kNumSamples; ++i)
+ m_ImpulseGraphSnapshot[i].y = rect.height * (1f - (m_ImpulseGraphSnapshot[i].y - minY) / range);
+ }
+ EditorGUI.DrawRect(rect, new Color(0.2f, 0.2f, 0.2f, 1));
+ var oldMatrix = Handles.matrix;
+ Handles.matrix = Handles.matrix * Matrix4x4.Translate(rect.position);
+ Handles.color = new Color(0, 0, 0, 1);
+ Handles.DrawLine(new Vector3(0, m_ImpulseGraphZero, 0), new Vector3(rect.width, m_ImpulseGraphZero, 0));
+ Handles.color = new Color(1, 0.8f, 0, 1);
+ Handles.DrawPolyLine(m_ImpulseGraphSnapshot);
+ Handles.matrix = oldMatrix;
+ }
+
+ void DrawSpreadCombo(Rect fullRect, SerializedProperty property)
+ {
+ var graphRect = fullRect;
+ graphRect.y += EditorGUIUtility.singleLineHeight + vSpace;
+ graphRect.height -= EditorGUIUtility.singleLineHeight + vSpace;
+
+ var indentLevel = EditorGUI.indentLevel;
+
+ Rect r = fullRect; r.height = EditorGUIUtility.singleLineHeight;
+ r = EditorGUI.PrefixLabel(r, EditorGUI.BeginProperty(
+ r, new GUIContent(m_DissipationRateProperty.displayName, m_DissipationRateProperty.tooltip), property));
+ m_DissipationRateProperty.isExpanded = EditorGUI.Foldout(r, m_DissipationRateProperty.isExpanded, GUIContent.none);
+
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.Slider(r, m_DissipationRateProperty, 0, 1, GUIContent.none);
+ if (EditorGUI.EndChangeCheck())
+ InvalidateSpreadGraphSample();
+ if (Event.current.type == EventType.Repaint && m_DissipationRateProperty.isExpanded)
+ DrawSpreadGraph(graphRect, m_DissipationRateProperty.floatValue);
+ EditorGUI.indentLevel = indentLevel;
+ }
+
+ Vector3[] m_SpreadGraphSnapshot = new Vector3[kNumSamples+1];
+ Vector2 m_SpreadGraphSize;
+ void InvalidateSpreadGraphSample() { m_SpreadGraphSize = Vector2.zero; }
+
+ void DrawSpreadGraph(Rect rect, float spread)
+ {
+ // Resample if necessary
+ if (m_SpreadGraphSize != rect.size)
+ {
+ m_SpreadGraphSize = rect.size;
+ for (int i = 0; i <= kNumSamples >> 1; ++i)
+ {
+ var x = (float)i / kNumSamples;
+ var y = CinemachineImpulseManager.EvaluateDissipationScale(spread, Mathf.Abs(1 - x * 2));
+ m_SpreadGraphSnapshot[i] = new Vector2(x * rect.width, rect.height * (1 - y));
+ m_SpreadGraphSnapshot[kNumSamples - i] = new Vector2((1 - x) * rect.width, rect.height * (1 - y));
+ }
+ }
+ EditorGUI.DrawRect(rect, new Color(0.2f, 0.2f, 0.2f, 1));
+ var oldMatrix = Handles.matrix;
+ Handles.matrix = Handles.matrix * Matrix4x4.Translate(rect.position);
+ Handles.color = new Color(0, 0, 0, 1);
+ Handles.DrawLine(new Vector3(rect.width * 0.5f, 0, 0), new Vector3(rect.width * 0.5f, rect.height, 0));
+ Handles.color = new Color(0, 0.6f, 1, 1);
+ Handles.DrawPolyLine(m_SpreadGraphSnapshot);
+ Handles.matrix = oldMatrix;
+ }
+
+ // Legacy mode
+ float HeaderHeight { get { return EditorGUIUtility.singleLineHeight * 1.5f; } }
+ float DrawHeader(Rect rect, string text)
+ {
+ float delta = HeaderHeight - EditorGUIUtility.singleLineHeight;
+ rect.y += delta; rect.height -= delta;
+ EditorGUI.LabelField(rect, new GUIContent(text), EditorStyles.boldLabel);
+ return HeaderHeight;
+ }
+
+ string HeaderText(SerializedProperty property)
+ {
+ var attrs = property.serializedObject.targetObject.GetType()
+ .GetCustomAttributes(typeof(HeaderAttribute), false);
+ if (attrs != null && attrs.Length > 0)
+ return ((HeaderAttribute)attrs[0]).header;
+ return null;
+ }
+
+ List mHideProperties = new List();
+
+ float LegacyModeGetPropertyHeight(SerializedProperty prop, GUIContent label)
+ {
+ SignalSourceAsset asset = null;
+ float height = 0;
+ mHideProperties.Clear();
+ string prefix = prop.name;
+ prop.NextVisible(true); // Skip outer foldout
+ do
+ {
+ if (!prop.propertyPath.Contains(prefix)) // if it is part of an array, then it won't StartWith prefix
+ break;
+ string header = HeaderText(prop);
+ if (header != null)
+ height += HeaderHeight + vSpace;
+
+ // Do we hide this property?
+ bool hide = false;
+ if (prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_RawSignal))
+ asset = prop.objectReferenceValue as SignalSourceAsset;
+ if (prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_RepeatMode))
+ hide = asset == null || asset.SignalDuration <= 0;
+ else if (prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_Randomize))
+ hide = asset == null || asset.SignalDuration > 0;
+ else
+ {
+ hide = prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_ImpulseShape)
+ || prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_CustomImpulseShape)
+ || prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_ImpulseDuration)
+ || prop.name == SerializedPropertyHelper.PropertyName(() => m_MyClass.m_DissipationRate);
+ }
+
+ if (hide)
+ mHideProperties.Add(prop.name);
+ else
+ height += EditorGUI.GetPropertyHeight(prop, false) + vSpace;
+ } while (prop.NextVisible(prop.isExpanded));
+ return height;
+ }
+
+ void LegacyModeOnGUI(Rect rect, SerializedProperty prop, GUIContent label)
+ {
+ string prefix = prop.name;
+ prop.NextVisible(true); // Skip outer foldout
+ do
+ {
+ if (!prop.propertyPath.Contains(prefix)) // if it is part of an array, then it won't StartWith prefix
+ break;
+ string header = HeaderText(prop);
+ if (header != null)
+ {
+ rect.height = HeaderHeight;
+ DrawHeader(rect, header);
+ rect.y += HeaderHeight + vSpace;
+ }
+ if (mHideProperties.Contains(prop.name))
+ continue;
+ rect.height = EditorGUI.GetPropertyHeight(prop, false);
+ EditorGUI.PropertyField(rect, prop);
+ rect.y += rect.height + vSpace;
+ } while (prop.NextVisible(prop.isExpanded));
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs.meta
new file mode 100644
index 00000000..49a8fd22
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseDefinitionPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1a97a2b5515f5d49977e7e8add5b7a9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs
new file mode 100644
index 00000000..cb3dd3e6
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs
@@ -0,0 +1,99 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(CinemachineImpulseManager.EnvelopeDefinition))]
+ internal sealed class CinemachineImpulseEnvelopePropertyDrawer : PropertyDrawer
+ {
+ const int vSpace = 2;
+ static bool mExpanded = true;
+
+ CinemachineImpulseManager.EnvelopeDefinition myClass
+ = new CinemachineImpulseManager.EnvelopeDefinition(); // to access name strings
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight;
+ rect.height = height;
+ mExpanded = EditorGUI.Foldout(rect, mExpanded, label, true);
+ if (mExpanded)
+ {
+ const float indentAmount = 15;
+ rect.width -= indentAmount; rect.x += indentAmount;
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth -= indentAmount;
+
+ rect.y += EditorGUIUtility.singleLineHeight + vSpace;
+ DrawCurveTimeProperty(
+ rect, new GUIContent("Attack", "The custom shape of the attack curve. Leave it blank for a default shape"),
+ property.FindPropertyRelative(() => myClass.m_AttackShape),
+ property.FindPropertyRelative(() => myClass.m_AttackTime));
+
+ rect.y += EditorGUIUtility.singleLineHeight + vSpace;
+#if false // with "forever" button... dangerous because signal never goes away!
+ var holdProp = property.FindPropertyRelative(() => myClass.m_SustainTime);
+ InspectorUtility.MultiPropertyOnLine(
+ rect, new GUIContent(holdProp.displayName, holdProp.tooltip),
+ new SerializedProperty[] { holdProp, property.FindPropertyRelative(() => myClass.m_HoldForever) },
+ new GUIContent[] { GUIContent.none, new GUIContent("forever") });
+#else
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => myClass.m_SustainTime));
+#endif
+ rect.y += EditorGUIUtility.singleLineHeight + vSpace;
+ DrawCurveTimeProperty(
+ rect, new GUIContent("Decay", "The custom shape of the decay curve. Leave it blank for a default shape"),
+ property.FindPropertyRelative(() => myClass.m_DecayShape),
+ property.FindPropertyRelative(() => myClass.m_DecayTime));
+
+ rect.y += EditorGUIUtility.singleLineHeight + vSpace;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => myClass.m_ScaleWithImpact));
+
+ EditorGUIUtility.labelWidth = oldWidth;
+ }
+ }
+
+ void DrawCurveTimeProperty(
+ Rect rect, GUIContent label,
+ SerializedProperty curveProp, SerializedProperty timeProp)
+ {
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+
+ GUIContent timeText = new GUIContent(" s", timeProp.tooltip);
+ var textDimensions = GUI.skin.label.CalcSize(timeText);
+
+ rect = EditorGUI.PrefixLabel(rect, label);
+
+ rect.height = EditorGUIUtility.singleLineHeight;
+ rect.width -= floatFieldWidth + textDimensions.x;
+
+ Rect r = rect; r.height += 1; r.y -= 1;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(r, curveProp, GUIContent.none);
+ if (EditorGUI.EndChangeCheck())
+ {
+ curveProp.animationCurveValue = InspectorUtility.NormalizeCurve(curveProp.animationCurveValue);
+ if (curveProp.animationCurveValue.length < 1)
+ curveProp.animationCurveValue = new AnimationCurve();
+ curveProp.serializedObject.ApplyModifiedProperties();
+ }
+
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = textDimensions.x;
+ rect.x += rect.width; rect.width = floatFieldWidth + EditorGUIUtility.labelWidth;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(rect, timeProp, timeText);
+ if (EditorGUI.EndChangeCheck())
+ timeProp.floatValue = Mathf.Max(timeProp.floatValue, 0);
+ EditorGUIUtility.labelWidth = oldWidth;
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight + vSpace;
+ if (mExpanded)
+ height *= 5;
+ return height;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs.meta
new file mode 100644
index 00000000..4597cef9
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseEnvelopePropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fdb859783dabdca44be0ea05d1203b30
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs
new file mode 100644
index 00000000..8e707ac1
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs
@@ -0,0 +1,18 @@
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineImpulseListener))]
+ [CanEditMultipleObjects]
+ internal sealed class CinemachineImpulseListenerEditor : BaseEditor
+ {
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ EditorGUILayout.HelpBox(
+ "The Impulse Listener will respond to signals broadcast by any CinemachineImpulseSource.",
+ MessageType.Info);
+ DrawRemainingPropertiesInInspector();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs.meta
new file mode 100644
index 00000000..c51c0153
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseListenerEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c63cb4cb8e3e82c4f8bfa7516da4f2b5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs
new file mode 100644
index 00000000..445bc5a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs
@@ -0,0 +1,41 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomEditor(typeof(CinemachineImpulseSource))]
+ internal sealed class CinemachineImpulseSourceEditor : BaseEditor
+ {
+ float m_TestForce = 1;
+ GUIContent m_TestButton = new GUIContent(
+ "Invoke", "Play-mode only: Generate an impulse with the default velocity scaled by this amount");
+ GUIContent m_TestLabel = new GUIContent(
+ "Test with Force", "Generate an impulse with the default velocity scaled by an amount");
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ EditorGUILayout.Separator();
+ EditorGUILayout.HelpBox(
+ "Connect your impulse-generating event "
+ + "to one of the GenerateImpulse API methods defined in this script.",
+ MessageType.Info);
+ DrawRemainingPropertiesInInspector();
+
+ GUI.enabled = EditorApplication.isPlaying;
+ {
+ var r1 = EditorGUILayout.GetControlRect();
+ r1 = EditorGUI.PrefixLabel(r1, m_TestLabel);
+ var testButtonWidth = GUI.skin.button.CalcSize(m_TestButton).x;
+ var r2 = r1;
+ r1.width = testButtonWidth;
+ r2.x += testButtonWidth + 3; r2.width -= testButtonWidth + 3;
+
+ m_TestForce = EditorGUI.Slider(r2, m_TestForce, 0.1f, 20f);
+ if (GUI.Button(r1, m_TestButton))
+ Target.GenerateImpulseWithForce(m_TestForce);
+ }
+ GUI.enabled = true;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs.meta
new file mode 100644
index 00000000..16ebebef
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Impulse/CinemachineImpulseSourceEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b56f2475416eeea4c916add2d7268ad1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus.meta
new file mode 100644
index 00000000..4c15ff3f
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d093acf2bada69e4bbbcf0a8b4534919
+folderAsset: yes
+timeCreated: 1489096338
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs
new file mode 100644
index 00000000..ef4b3ca1
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs
@@ -0,0 +1,297 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ internal static class CinemachineMenu
+ {
+ const string m_CinemachineAssetsRootMenu = "Assets/Create/Cinemachine/";
+ const string m_CinemachineGameObjectRootMenu = "GameObject/Cinemachine/";
+ const int m_GameObjectMenuPriority = 11; // Right after Camera.
+
+ // Assets Menu
+
+ [MenuItem(m_CinemachineAssetsRootMenu + "BlenderSettings")]
+ static void CreateBlenderSettingAsset()
+ {
+ ScriptableObjectUtility.Create();
+ }
+
+ [MenuItem(m_CinemachineAssetsRootMenu + "NoiseSettings")]
+ static void CreateNoiseSettingAsset()
+ {
+ ScriptableObjectUtility.Create();
+ }
+
+ [MenuItem(m_CinemachineAssetsRootMenu + "Fixed Signal Definition")]
+ static void CreateFixedSignalDefinition()
+ {
+ ScriptableObjectUtility.Create();
+ }
+
+ // GameObject Menu
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Virtual Camera", false, m_GameObjectMenuPriority)]
+ static void CreateVirtualCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Virtual Camera");
+ CreateDefaultVirtualCamera(parentObject: command.context as GameObject, select: true);
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "FreeLook Camera", false, m_GameObjectMenuPriority)]
+ static void CreateFreeLookCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("FreeLook Camera");
+ CreateCinemachineObject("FreeLook Camera", command.context as GameObject, true);
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Blend List Camera", false, m_GameObjectMenuPriority)]
+ static void CreateBlendListCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Blend List Camera");
+ var blendListCamera = CreateCinemachineObject(
+ "Blend List Camera", command.context as GameObject, true);
+
+ // We give the camera a couple of children as an example of setup
+ var childVcam1 = CreateDefaultVirtualCamera(parentObject: blendListCamera.gameObject);
+ var childVcam2 = CreateDefaultVirtualCamera(parentObject: blendListCamera.gameObject);
+ childVcam2.m_Lens.FieldOfView = 10;
+
+ // Set up initial instruction set
+ blendListCamera.m_Instructions = new CinemachineBlendListCamera.Instruction[2];
+ blendListCamera.m_Instructions[0].m_VirtualCamera = childVcam1;
+ blendListCamera.m_Instructions[0].m_Hold = 1f;
+ blendListCamera.m_Instructions[1].m_VirtualCamera = childVcam2;
+ blendListCamera.m_Instructions[1].m_Blend.m_Style = CinemachineBlendDefinition.Style.EaseInOut;
+ blendListCamera.m_Instructions[1].m_Blend.m_Time = 2f;
+ }
+
+#if CINEMACHINE_UNITY_ANIMATION
+ [MenuItem(m_CinemachineGameObjectRootMenu + "State-Driven Camera", false, m_GameObjectMenuPriority)]
+ static void CreateStateDivenCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("State-Driven Camera");
+ var stateDrivenCamera = CreateCinemachineObject(
+ "State-Driven Camera", command.context as GameObject, true);
+
+ // We give the camera a child as an example setup
+ CreateDefaultVirtualCamera(parentObject: stateDrivenCamera.gameObject);
+ }
+#endif
+
+#if CINEMACHINE_PHYSICS
+ [MenuItem(m_CinemachineGameObjectRootMenu + "ClearShot Camera", false, m_GameObjectMenuPriority)]
+ static void CreateClearShotVirtualCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("ClearShot Camera");
+ var clearShotCamera = CreateCinemachineObject(
+ "ClearShot Camera", command.context as GameObject, true);
+
+ // We give the camera a child as an example setup
+ var childVcam = CreateDefaultVirtualCamera(parentObject: clearShotCamera.gameObject);
+ Undo.AddComponent(childVcam.gameObject).m_AvoidObstacles = false;
+ }
+#endif
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Dolly Camera with Track", false, m_GameObjectMenuPriority)]
+ static void CreateDollyCameraWithPath(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Dolly Camera with Track");
+ var path = CreateCinemachineObject(
+ "Dolly Track", command.context as GameObject, false);
+ var vcam = CreateCinemachineObject(
+ "Virtual Camera", command.context as GameObject, true);
+ vcam.m_Lens = MatchSceneViewCamera(vcam.transform);
+
+ AddCinemachineComponent(vcam);
+ AddCinemachineComponent(vcam).m_Path = path;
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Dolly Track with Cart", false, m_GameObjectMenuPriority)]
+ static void CreateDollyTrackWithCart(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Dolly Track with Cart");
+ var path = CreateCinemachineObject(
+ "Dolly Track", command.context as GameObject, false);
+ CreateCinemachineObject(
+ "Dolly Cart", command.context as GameObject, true).m_Path = path;
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Target Group Camera", false, m_GameObjectMenuPriority)]
+ static void CreateTargetGroupCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Target Group Camera");
+ var vcam = CreateCinemachineObject(
+ "Virtual Camera", command.context as GameObject, false);
+ vcam.m_Lens = MatchSceneViewCamera(vcam.transform);
+
+ AddCinemachineComponent(vcam);
+ AddCinemachineComponent(vcam);
+
+ var targetGroup = CreateCinemachineObject(
+ "Target Group", command.context as GameObject, true);
+ vcam.LookAt = targetGroup.transform;
+ vcam.Follow = targetGroup.transform;
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "Mixing Camera", false, m_GameObjectMenuPriority)]
+ static void CreateMixingCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("Mixing Camera");
+ var mixingCamera = CreateCinemachineObject(
+ "Mixing Camera", command.context as GameObject, true);
+
+ // We give the camera a couple of children as an example of setup
+ CreateDefaultVirtualCamera(parentObject: mixingCamera.gameObject);
+ CreateDefaultVirtualCamera(parentObject: mixingCamera.gameObject);
+ }
+
+ [MenuItem(m_CinemachineGameObjectRootMenu + "2D Camera", false, m_GameObjectMenuPriority)]
+ static void Create2DCamera(MenuCommand command)
+ {
+ CinemachineEditorAnalytics.SendCreateEvent("2D Camera");
+ var vcam = CreateCinemachineObject(
+ "Virtual Camera", command.context as GameObject, true);
+ vcam.m_Lens = MatchSceneViewCamera(vcam.transform);
+
+ AddCinemachineComponent(vcam);
+ }
+
+ ///
+ /// Sets the specified to match the position and
+ /// rotation of the camera, and returns the scene view
+ /// camera's lens settings.
+ ///
+ /// The to match with the
+ /// camera.
+ /// A representing the scene view camera's lens
+ public static LensSettings MatchSceneViewCamera(Transform sceneObject)
+ {
+ var lens = LensSettings.Default;
+
+ // Take initial settings from the GameView camera, because we don't want to override
+ // things like ortho vs perspective - we just want position and FOV
+ var brain = GetOrCreateBrain();
+ if (brain != null && brain.OutputCamera != null)
+ lens = LensSettings.FromCamera(brain.OutputCamera);
+
+ if (SceneView.lastActiveSceneView != null)
+ {
+ var src = SceneView.lastActiveSceneView.camera;
+ sceneObject.SetPositionAndRotation(src.transform.position, src.transform.rotation);
+ if (lens.Orthographic == src.orthographic)
+ {
+ if (src.orthographic)
+ lens.OrthographicSize = src.orthographicSize;
+ else
+ lens.FieldOfView = src.fieldOfView;
+ }
+ }
+ return lens;
+ }
+
+ ///
+ /// Creates a with standard procedural components.
+ ///
+ public static CinemachineVirtualCamera CreateDefaultVirtualCamera(
+ string name = "Virtual Camera", GameObject parentObject = null, bool select = false)
+ {
+ var vcam = CreateCinemachineObject(name, parentObject, select);
+ vcam.m_Lens = MatchSceneViewCamera(vcam.transform);
+
+ AddCinemachineComponent(vcam);
+ AddCinemachineComponent(vcam);
+
+ return vcam;
+ }
+
+ ///
+ /// Creates a with no procedural components.
+ ///
+ public static CinemachineVirtualCamera CreatePassiveVirtualCamera(
+ string name = "Virtual Camera", GameObject parentObject = null, bool select = false)
+ {
+ var vcam = CreateCinemachineObject(name, parentObject, select);
+ vcam.m_Lens = MatchSceneViewCamera(vcam.transform);
+ return vcam;
+ }
+
+ ///
+ /// Creates a Cinemachine in the scene with a specified component.
+ ///
+ /// The type of to add to the new .
+ /// The name of the new .
+ /// The to parent the new to.
+ /// Whether the new should be selected.
+ /// The instance of the component that is added to the new .
+ static T CreateCinemachineObject(string name, GameObject parentObject, bool select) where T : Component
+ {
+ // We always enforce the existence of the CM brain
+ GetOrCreateBrain();
+
+ // We use ObjectFactory to create a new GameObject as it automatically supports undo/redo
+ var go = ObjectFactory.CreateGameObject(name);
+ T component = go.AddComponent();
+
+ if (parentObject != null)
+ Undo.SetTransformParent(go.transform, parentObject.transform, "Set parent of " + name);
+
+ // We ensure that the new object has a unique name, for example "Camera (1)".
+ // This must be done after setting the parent in order to get an accurate unique name
+ GameObjectUtility.EnsureUniqueNameForSibling(go);
+
+ // We set the new object to be at the current pivot of the scene.
+ // GML TODO: Support the "Place Objects At World Origin" preference option in 2020.3+, see GOCreationCommands.cs
+ if (SceneView.lastActiveSceneView != null)
+ go.transform.position = SceneView.lastActiveSceneView.pivot;
+
+ if (select)
+ Selection.activeGameObject = go;
+
+ return component;
+ }
+
+ ///
+ /// Gets the first loaded . Creates one on
+ /// the if none were found.
+ ///
+ static CinemachineBrain GetOrCreateBrain()
+ {
+ if (CinemachineCore.Instance.BrainCount > 0)
+ return CinemachineCore.Instance.GetActiveBrain(0);
+
+ // Create a CinemachineBrain on the main camera
+ var cam = Camera.main;
+ if (cam == null)
+#if UNITY_2023_1_OR_NEWER
+ cam = Object.FindFirstObjectByType(FindObjectsInactive.Exclude);
+#else
+ cam = Object.FindObjectOfType();
+#endif
+ if (cam != null)
+ return Undo.AddComponent(cam.gameObject);
+
+ // No camera, just create a brain on an empty object
+ return ObjectFactory.CreateGameObject("CinemachineBrain").AddComponent();
+ }
+
+ ///
+ /// Adds an component to the specified 's hidden
+ /// component owner, that supports undo.
+ ///
+ /// The type of to add to the cinemachine pipeline.
+ /// The to add components to.
+ /// The instance of the componented that was added.
+ static T AddCinemachineComponent(CinemachineVirtualCamera vcam) where T : CinemachineComponentBase
+ {
+ // We can't use the CinemachineVirtualCamera.AddCinemachineComponent()
+ // because we want to support undo/redo
+ var componentOwner = vcam.GetComponentOwner().gameObject;
+ if (componentOwner == null)
+ return null; // maybe it's an invalid prefab instance
+ var component = Undo.AddComponent(componentOwner);
+ vcam.InvalidateComponentPipeline();
+ return component;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs.meta
new file mode 100644
index 00000000..f961a2e8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Menus/CinemachineMenu.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 54b24e51e2a9fa242b38d80ee11f3b2d
+timeCreated: 1481654955
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays.meta
new file mode 100644
index 00000000..89dc173b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 63479c7bfc24449f6b3404b4cd971413
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs
new file mode 100644
index 00000000..237bf46d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs
@@ -0,0 +1,422 @@
+#if UNITY_2021_2_OR_NEWER
+using System;
+using UnityEditor;
+using UnityEditor.EditorTools;
+using UnityEditor.Overlays;
+using UnityEditor.Toolbars;
+using UnityEngine;
+using UnityEngine.UIElements;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+#if UNITY_2022_1_OR_NEWER
+ ///
+ /// This is a generic Tool class for Cinemachine tools.
+ /// To create a new tool, inherit from CinemachineTool and implement GetIcon().
+ /// Your new tool will need to have the [EditorTool("tool-name", typeof(CinemachineVirtualCameraBase))] attribute.
+ ///
+ /// A tool will be drawn iff it has been registered using CinemachineSceneToolUtility.RegisterTool.
+ /// This is generally done in the OnEnable function of the editor script of the cinemachine component
+ /// (CinemachineVirtualCamera, CinemachineComponentBase), for which the tool was meant.
+ /// To unregister, call CinemachineSceneToolUtility.UnregisterTool in the same script's OnDisable function.
+ ///
+ /// To draw the handles related to the tool, you need to implement your drawing function and call it in the
+ /// editor script's OnSceneGUI function. An alternative for drawing handles is to override this function's
+ /// OnToolGUI or OnDrawHandles functions (see EditorTool or IDrawSelectedHandles docs for more information).
+ ///
+ /// To check, if a tool has been enabled/disabled in the editor script, use CinemachineSceneToolUtility.IsToolActive.
+ ///
+ public abstract class CinemachineTool : EditorTool, IDrawSelectedHandles
+ {
+ GUIContent m_IconContent;
+
+ /// Implement this to set your Tool's icon and tooltip.
+ /// A GUIContent with an icon set.
+ protected abstract GUIContent GetIcon();
+
+ /// This lets the editor find the icon of the tool.
+ public override GUIContent toolbarIcon
+ {
+ get
+ {
+ if (m_IconContent == null || m_State.refreshIcon)
+ {
+ m_IconContent = GetIcon();
+ m_State.refreshIcon = false;
+ }
+ return m_IconContent;
+ }
+ }
+
+ /// This is called when the Tool is selected in the editor.
+ public override void OnActivated()
+ {
+ base.OnActivated();
+ CinemachineSceneToolUtility.SetTool(true, GetType());
+ m_State.refreshIcon = true;
+ m_State.isSelected = true;
+ }
+
+ /// This is called when the Tool is deselected in the editor.
+ public override void OnWillBeDeactivated()
+ {
+ base.OnWillBeDeactivated();
+ CinemachineSceneToolUtility.SetTool(false, GetType());
+ m_State.refreshIcon = true;
+ m_State.isSelected = false;
+ }
+
+ /// This checks whether this tool should be displayed or not.
+ /// True, when this tool is to be drawn. False, otherwise.
+ public override bool IsAvailable() => CinemachineSceneToolUtility.IsToolRequired(GetType());
+
+ /// Implement IDrawSelectedHandles to draw gizmos for this tool even if it is not the active tool.
+ public void OnDrawHandles()
+ {
+ }
+
+ private protected string GetIconPath()
+ {
+ m_State.refreshIcon = m_State.isProSkin != EditorGUIUtility.isProSkin;
+ m_State.isProSkin = EditorGUIUtility.isProSkin;
+ return ScriptableObjectUtility.CinemachineRealativeInstallPath + "/Editor/EditorResources/Handles/" +
+ (m_State.isProSkin ?
+ (m_State.isSelected ? "Dark-Selected" : "Dark") :
+ (m_State.isSelected ? "Light-Selected" : "Light")) + "/";
+ }
+
+ struct ToolState
+ {
+ public bool isSelected;
+ public bool isProSkin;
+ public bool refreshIcon;
+ }
+ ToolState m_State = new ToolState { refreshIcon = true };
+ }
+
+ [EditorTool("Field of View Tool", typeof(CinemachineVirtualCameraBase))]
+ class FoVTool : CinemachineTool
+ {
+ protected override GUIContent GetIcon() =>
+ new GUIContent
+ {
+ image = AssetDatabase.LoadAssetAtPath(GetIconPath() + "FOV.png"),
+ tooltip = "Field of View Tool",
+ };
+ }
+
+ [EditorTool("Far-Near Clip Tool", typeof(CinemachineVirtualCameraBase))]
+ class FarNearClipTool : CinemachineTool
+ {
+ protected override GUIContent GetIcon() =>
+ new GUIContent
+ {
+ image = AssetDatabase.LoadAssetAtPath(GetIconPath() + "FarNearClip.png"),
+ tooltip = "Far/Near Clip Tool",
+ };
+ }
+
+ [EditorTool("Follow Offset Tool", typeof(CinemachineVirtualCameraBase))]
+ class FollowOffsetTool : CinemachineTool
+ {
+ protected override GUIContent GetIcon() =>
+ new GUIContent
+ {
+ image = AssetDatabase.LoadAssetAtPath(GetIconPath() + "FollowOffset.png"),
+ tooltip = "Follow Offset Tool",
+ };
+ }
+
+ [EditorTool("Tracked Object Offset Tool", typeof(CinemachineVirtualCameraBase))]
+ class TrackedObjectOffsetTool : CinemachineTool
+ {
+ protected override GUIContent GetIcon() =>
+ new GUIContent
+ {
+ image = AssetDatabase.LoadAssetAtPath(GetIconPath() + "TrackedObjectOffset.png"),
+ tooltip = "Tracked Object Offset Tool",
+ };
+ }
+
+ ///
+ /// To add your custom tools (EditorToolbarElement) to the Cinemachine Tool Settings toolbar,
+ /// set CinemachineToolSettingsOverlay.customToolbarItems with your custom tools' IDs.
+ ///
+ /// By default, CinemachineToolSettingsOverlay.customToolbarItems is null.
+ ///
+ [Overlay(typeof(SceneView), "Cinemachine Tool Settings")]
+ [Icon("Packages/com.unity.cinemachine/Gizmos/cm_logo.png")]
+ public class CinemachineToolSettingsOverlay : Overlay, ICreateToolbar
+ {
+ static readonly string[] k_CmToolbarItems = { FreelookRigSelection.id };
+
+ ///
+ /// Override this method to return your visual element content.
+ /// By default, this draws the same visual element as the HorizontalToolbar
+ ///
+ /// VisualElement for the Panel conent.
+ public override VisualElement CreatePanelContent() => CreateContent(Layout.HorizontalToolbar);
+
+ /// Set this with your custom tools' IDs.
+ public static string[] customToolbarItems = null;
+
+ /// The list of tools that this toolbar is going to contain.
+ public IEnumerable toolbarElements
+ {
+ get
+ {
+ if (customToolbarItems != null)
+ {
+ var toolbarItems = new List(k_CmToolbarItems);
+ toolbarItems.AddRange(customToolbarItems);
+ return toolbarItems;
+ }
+
+ return k_CmToolbarItems;
+ }
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class FreelookRigSelection : EditorToolbarDropdown
+ {
+ public const string id = "FreelookRigSelection/Dropdown";
+ public static int SelectedRig;
+ Texture2D[] m_Icons;
+
+ public FreelookRigSelection()
+ {
+ tooltip = "Freelook Rig Selection";
+ clicked += FreelookRigSelectionMenu;
+ EditorApplication.update += ShadowSelectedRigName;
+ EditorApplication.update += DisplayIfRequired;
+
+ m_Icons = new Texture2D[]
+ {
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigTop.png"),
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigMiddle.png"),
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigBottom.png"),
+ };
+ }
+
+ ~FreelookRigSelection()
+ {
+ clicked -= FreelookRigSelectionMenu;
+ EditorApplication.update -= ShadowSelectedRigName;
+ EditorApplication.update -= DisplayIfRequired;
+ }
+
+ Type m_FreelookRigSelectionType = typeof(FreelookRigSelection);
+ void DisplayIfRequired() => style.display =
+ CinemachineSceneToolUtility.IsToolRequired(m_FreelookRigSelectionType)
+ ? DisplayStyle.Flex : DisplayStyle.None;
+
+ // text is currently only visibly in Panel mode due to this bug: https://jira.unity3d.com/browse/STO-2278
+ void ShadowSelectedRigName()
+ {
+ var index = Mathf.Clamp(SelectedRig, 0, CinemachineFreeLookEditor.RigNames.Length - 1);
+ text = CinemachineFreeLookEditor.RigNames[index].text;
+ icon = m_Icons[index];
+ }
+
+ void FreelookRigSelectionMenu()
+ {
+ var menu = new GenericMenu();
+ for (var i = 0; i < CinemachineFreeLookEditor.RigNames.Length; ++i)
+ {
+ var rigIndex = i; // vital to capture the index here for the lambda below
+ menu.AddItem(CinemachineFreeLookEditor.RigNames[i], false, () =>
+ {
+ SelectedRig = rigIndex;
+ var active = Selection.activeObject as GameObject;
+ if (active != null)
+ {
+ var freelook = active.GetComponent();
+ if (freelook != null)
+ CinemachineFreeLookEditor.SetSelectedRig(freelook, rigIndex);
+ }
+ });
+ }
+ menu.DropDown(worldBound);
+ }
+ }
+#else
+ ///
+ /// To display a CinemachineExclusiveEditorToolbarToggle in the Cinemachine Toolbar.
+ ///
+ [Overlay(typeof(SceneView), "Cinemachine")]
+ [Icon("Packages/com.unity.cinemachine/Gizmos/cm_logo.png")]
+ class CinemachineToolbarOverlay : ToolbarOverlay
+ {
+ public CinemachineToolbarOverlay()
+ : base(
+ FreelookRigSelection.id,
+ FoVTool.id,
+ FarNearClipTool.id,
+ FollowOffsetTool.id,
+ TrackedObjectOffsetTool.id
+ )
+ {
+ CinemachineSceneToolUtility.RegisterToolbarIsDisplayedHandler(() => displayed);
+ CinemachineSceneToolUtility.RegisterToolbarDisplayHandler(v =>
+ {
+ if (displayed == v)
+ {
+ return false;
+ }
+ displayed = v;
+ return true;
+ });
+ }
+ }
+
+
+
+ ///
+ /// Creates a toggle tool on the Cinemachine toolbar that is exclusive with other
+ /// CinemachineExclusiveEditorToolbarToggles. Meaning, that maximum one
+ /// CinemachineExclusiveEditorToolbarToggle can be active at any time.
+ ///
+ abstract class CinemachineExclusiveEditorToolbarToggle : EditorToolbarToggle
+ {
+ protected CinemachineExclusiveEditorToolbarToggle()
+ {
+ var type = GetType();
+ this.RegisterValueChangedCallback(
+ v => CinemachineSceneToolUtility.SetTool(v.newValue, type));
+ CinemachineSceneToolUtility.RegisterExclusiveToolHandlers(type, isOn => value = isOn,
+ display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None);
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class FoVTool : CinemachineExclusiveEditorToolbarToggle
+ {
+ public const string id = "FoVTool/Toggle";
+
+ public FoVTool()
+ {
+ icon = AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/Dark/FOV.png");
+ tooltip = "Field of View Tool";
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class FarNearClipTool : CinemachineExclusiveEditorToolbarToggle
+ {
+ public const string id = "FarNearClipTool/Toggle";
+
+ public FarNearClipTool()
+ {
+ icon = AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/Dark/FarNearClip.png");
+ tooltip = "Far/Near Clip Tool";
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class FollowOffsetTool : CinemachineExclusiveEditorToolbarToggle
+ {
+ public const string id = "FollowOffsetTool/Toggle";
+
+ public FollowOffsetTool()
+ {
+ icon = AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/Dark/FollowOffset.png");
+ tooltip = "Follow Offset Tool";
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class TrackedObjectOffsetTool : CinemachineExclusiveEditorToolbarToggle
+ {
+ public const string id = "TrackedObjectOffsetTool/Toggle";
+
+ public TrackedObjectOffsetTool()
+ {
+ icon = AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/Dark/TrackedObjectOffset.png");
+ tooltip = "Tracked Object Offset Tool";
+ }
+ }
+
+ ///
+ /// Creates a toggle tool on the Cinemachine toolbar.
+ ///
+ abstract class CinemachineEditorToolbarToggle : EditorToolbarToggle
+ {
+ protected CinemachineEditorToolbarToggle()
+ {
+ CinemachineSceneToolUtility.RegisterToolHandlers(GetType(), isOn => value = isOn,
+ display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None);
+ }
+ }
+
+ [EditorToolbarElement(id, typeof(SceneView))]
+ class FreelookRigSelection : EditorToolbarDropdown
+ {
+ public const string id = "FreelookRigSelection/Dropdown";
+ public static int SelectedRig;
+ Texture2D[] m_Icons;
+
+ public FreelookRigSelection()
+ {
+ tooltip = "Freelook Rig Selection";
+ clicked += FreelookRigSelectionMenu;
+ CinemachineSceneToolUtility.RegisterToolHandlers(GetType(), isOn => {},
+ display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None);
+ EditorApplication.update += ShadowSelectedRigName;
+
+ m_Icons = new Texture2D[]
+ {
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigTop.png"),
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigMiddle.png"),
+ AssetDatabase.LoadAssetAtPath(ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/Handles/FreelookRigBottom.png"),
+ };
+ }
+
+ ~FreelookRigSelection()
+ {
+ clicked -= FreelookRigSelectionMenu;
+ EditorApplication.update -= ShadowSelectedRigName;
+ }
+
+ void ShadowSelectedRigName()
+ {
+ var index = Mathf.Clamp(SelectedRig, 0, CinemachineFreeLookEditor.RigNames.Length - 1);
+ icon = m_Icons[index];
+ text = CinemachineFreeLookEditor.RigNames[index].text;
+ }
+
+ void FreelookRigSelectionMenu()
+ {
+ var menu = new GenericMenu();
+ for (var i = 0; i < CinemachineFreeLookEditor.RigNames.Length; ++i)
+ {
+ var rigIndex = i; // vital to capture the index here for the lambda below
+ menu.AddItem(CinemachineFreeLookEditor.RigNames[i], false, () =>
+ {
+ SelectedRig = rigIndex;
+ var active = Selection.activeObject as GameObject;
+ if (active != null)
+ {
+ var freelook = active.GetComponent();
+ if (freelook != null)
+ CinemachineFreeLookEditor.SetSelectedRig(freelook, rigIndex);
+ }
+ });
+ }
+ menu.DropDown(worldBound);
+ }
+ }
+#endif
+}
+#endif
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs.meta
new file mode 100644
index 00000000..ef9e8cc5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Overlays/CinemachineToolbarOverlay.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fdfe64f027e0b40ffa59a87a23ac5eeb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing.meta
new file mode 100644
index 00000000..2d672d24
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0e25865eefe5b6f40a615add150c0042
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs
new file mode 100644
index 00000000..c5a39d51
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs
@@ -0,0 +1,214 @@
+#if CINEMACHINE_POST_PROCESSING_V2
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.Rendering.PostProcessing;
+using UnityEditor.Rendering.PostProcessing;
+using System.Collections.Generic;
+#endif
+
+namespace Cinemachine.PostFX.Editor
+{
+#if CINEMACHINE_POST_PROCESSING_V2
+ [CustomEditor(typeof(CinemachinePostProcessing))]
+ public sealed class CinemachinePostProcessingEditor : Cinemachine.Editor.BaseEditor
+ {
+ SerializedProperty m_Profile;
+ SerializedProperty m_FocusTracking;
+
+ EffectListEditor m_EffectList;
+ GUIContent m_ProfileLabel;
+
+ void OnEnable()
+ {
+ Texture texture = AssetDatabase.LoadAssetAtPath(
+ Cinemachine.Editor.ScriptableObjectUtility.CinemachineRealativeInstallPath
+ + "/Editor/EditorResources/PostProcessLayer.png");
+ m_ProfileLabel = new GUIContent("Profile", texture, "A reference to a profile asset");
+
+ m_FocusTracking = FindProperty(x => x.m_FocusTracking);
+ m_Profile = FindProperty(x => x.m_Profile);
+
+ m_EffectList = new EffectListEditor(this);
+ RefreshEffectListEditor(Target.m_Profile);
+ }
+
+ void OnDisable()
+ {
+ if (m_EffectList != null)
+ m_EffectList.Clear();
+ }
+
+ void RefreshEffectListEditor(PostProcessProfile asset)
+ {
+ if (m_EffectList == null)
+ m_EffectList = new EffectListEditor(this);
+ m_EffectList.Clear();
+ if (asset != null)
+ m_EffectList.Init(asset, new SerializedObject(asset));
+ }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ var mode = (CinemachinePostProcessing.FocusTrackingMode)m_FocusTracking.intValue;
+ if (mode != CinemachinePostProcessing.FocusTrackingMode.CustomTarget)
+ excluded.Add(FieldPath(x => x.m_FocusTarget));
+ if (mode == CinemachinePostProcessing.FocusTrackingMode.None)
+ excluded.Add(FieldPath(x => x.m_FocusOffset));
+ excluded.Add(FieldPath(x => x.m_Profile));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawRemainingPropertiesInInspector();
+
+ var focusMode = (CinemachinePostProcessing.FocusTrackingMode)m_FocusTracking.intValue;
+ if (focusMode != CinemachinePostProcessing.FocusTrackingMode.None)
+ {
+ bool valid = false;
+ DepthOfField dof;
+ if (Target.m_Profile != null && Target.m_Profile.TryGetSettings(out dof))
+ valid = dof.enabled && dof.active && dof.focusDistance.overrideState;
+ if (!valid)
+ EditorGUILayout.HelpBox(
+ "Focus Tracking requires an active DepthOfField/FocusDistance effect in the profile",
+ MessageType.Warning);
+ }
+
+ EditorGUI.BeginChangeCheck();
+ DrawProfileInspectorGUI();
+ if (EditorGUI.EndChangeCheck())
+ {
+ Target.InvalidateCachedProfile();
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ void DrawProfileInspectorGUI()
+ {
+ EditorGUILayout.Space();
+
+ bool assetHasChanged = false;
+ bool showCopy = m_Profile.objectReferenceValue != null;
+
+ // The layout system sort of break alignement when mixing inspector fields with custom
+ // layouted fields, do the layout manually instead
+ int buttonWidth = showCopy ? 45 : 60;
+ float indentOffset = EditorGUI.indentLevel * 15f;
+ var lineRect = GUILayoutUtility.GetRect(1, EditorGUIUtility.singleLineHeight);
+ var labelRect = new Rect(lineRect.x, lineRect.y, EditorGUIUtility.labelWidth - indentOffset, lineRect.height);
+ var fieldRect = new Rect(labelRect.xMax, lineRect.y, lineRect.width - labelRect.width - buttonWidth * (showCopy ? 2 : 1), lineRect.height);
+ var buttonNewRect = new Rect(fieldRect.xMax, lineRect.y, buttonWidth, lineRect.height);
+ var buttonCopyRect = new Rect(buttonNewRect.xMax, lineRect.y, buttonWidth, lineRect.height);
+
+ EditorGUI.PrefixLabel(labelRect, m_ProfileLabel);
+
+ using (var scope = new EditorGUI.ChangeCheckScope())
+ {
+ m_Profile.objectReferenceValue
+ = (PostProcessProfile)EditorGUI.ObjectField(
+ fieldRect, m_Profile.objectReferenceValue, typeof(PostProcessProfile), false);
+ assetHasChanged = scope.changed;
+ }
+
+ if (GUI.Button(
+ buttonNewRect,
+ EditorUtilities.GetContent("New|Create a new profile."),
+ showCopy ? EditorStyles.miniButtonLeft : EditorStyles.miniButton))
+ {
+ // By default, try to put assets in a folder next to the currently active
+ // scene file. If the user isn't a scene, put them in root instead.
+ var targetName = Target.name;
+ var scene = Target.gameObject.scene;
+ var asset = CreatePostProcessProfile(scene, targetName);
+ m_Profile.objectReferenceValue = asset;
+ assetHasChanged = true;
+ }
+
+ if (showCopy && GUI.Button(
+ buttonCopyRect,
+ EditorUtilities.GetContent("Clone|Create a new profile and copy the content of the currently assigned profile."),
+ EditorStyles.miniButtonRight))
+ {
+ // Duplicate the currently assigned profile and save it as a new profile
+ var origin = (PostProcessProfile)m_Profile.objectReferenceValue;
+ var path = AssetDatabase.GetAssetPath(origin);
+ path = AssetDatabase.GenerateUniqueAssetPath(path);
+
+ var asset = Instantiate(origin);
+ asset.settings.Clear();
+ AssetDatabase.CreateAsset(asset, path);
+
+ foreach (var item in origin.settings)
+ {
+ var itemCopy = Instantiate(item);
+ itemCopy.hideFlags = HideFlags.HideInInspector | HideFlags.HideInHierarchy;
+ itemCopy.name = item.name;
+ asset.settings.Add(itemCopy);
+ AssetDatabase.AddObjectToAsset(itemCopy, asset);
+ }
+
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+
+ m_Profile.objectReferenceValue = asset;
+ assetHasChanged = true;
+ }
+
+ if (m_Profile.objectReferenceValue == null)
+ {
+ if (assetHasChanged && m_EffectList != null)
+ m_EffectList.Clear(); // Asset wasn't null before, do some cleanup
+
+ EditorGUILayout.HelpBox(
+ "Assign an existing Post-process Profile by choosing an asset, or create a new one by "
+ + "clicking the \"New\" button.\nNew assets are automatically put in a folder next "
+ + "to your scene file. If your scene hasn't been saved yet they will be created "
+ + "at the root of the Assets folder.",
+ MessageType.Info);
+ }
+ else
+ {
+ if (assetHasChanged)
+ RefreshEffectListEditor((PostProcessProfile)m_Profile.objectReferenceValue);
+ if (m_EffectList != null)
+ m_EffectList.OnGUI();
+ }
+ }
+
+ // Copied from UnityEditor.Rendering.PostProcessing.ProfileFactory.CreatePostProcessProfile() because it's internal
+ static PostProcessProfile CreatePostProcessProfile(UnityEngine.SceneManagement.Scene scene, string targetName)
+ {
+ var path = string.Empty;
+
+ if (string.IsNullOrEmpty(scene.path))
+ {
+ path = "Assets/";
+ }
+ else
+ {
+ var scenePath = System.IO.Path.GetDirectoryName(scene.path);
+ var extPath = scene.name + "_Profiles";
+ var profilePath = scenePath + "/" + extPath;
+
+ if (!AssetDatabase.IsValidFolder(profilePath))
+ AssetDatabase.CreateFolder(scenePath, extPath);
+
+ path = profilePath + "/";
+ }
+
+ path += targetName + " Profile.asset";
+ path = AssetDatabase.GenerateUniqueAssetPath(path);
+
+ var profile = ScriptableObject.CreateInstance();
+ AssetDatabase.CreateAsset(profile, path);
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ return profile;
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs.meta
new file mode 100644
index 00000000..2aa22f8d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachinePostProcessingEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dec69862942cc9744ade63216979cafd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs
new file mode 100644
index 00000000..efcdea83
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs
@@ -0,0 +1,239 @@
+#if CINEMACHINE_HDRP
+ using UnityEngine;
+ using UnityEditor;
+ using UnityEngine.Rendering;
+ using UnityEditor.Rendering;
+ using System.Collections.Generic;
+ #if CINEMACHINE_HDRP_7_3_1
+ using UnityEngine.Rendering.HighDefinition;
+ #else
+ using UnityEngine.Experimental.Rendering.HDPipeline;
+ #endif
+#elif CINEMACHINE_LWRP_7_3_1
+ using UnityEngine;
+ using UnityEditor;
+ using UnityEngine.Rendering;
+ using UnityEditor.Rendering;
+ using System.Collections.Generic;
+ using UnityEngine.Rendering.Universal;
+#endif
+
+namespace Cinemachine.PostFX.Editor
+{
+#if CINEMACHINE_HDRP || CINEMACHINE_LWRP_7_3_1
+ [CustomEditor(typeof(CinemachineVolumeSettings))]
+ public sealed class CinemachineVolumeSettingsEditor : Cinemachine.Editor.BaseEditor
+ {
+ SerializedProperty m_Profile;
+ SerializedProperty m_FocusTracking;
+
+ VolumeComponentListEditor m_ComponentList;
+
+ GUIContent m_ProfileLabel;
+ GUIContent m_NewLabel;
+ GUIContent m_CloneLabel;
+
+ void OnEnable()
+ {
+ m_ProfileLabel = new GUIContent("Profile", "A reference to a profile asset");
+ m_NewLabel = new GUIContent("New", "Create a new profile.");
+ m_CloneLabel = new GUIContent("Clone", "Create a new profile and copy the content of the currently assigned profile.");
+
+ m_FocusTracking = FindProperty(x => x.m_FocusTracking);
+ m_Profile = FindProperty(x => x.m_Profile);
+
+ RefreshVolumeComponentEditor(Target.m_Profile);
+ }
+
+ void OnDisable()
+ {
+ if (m_ComponentList != null)
+ m_ComponentList.Clear();
+ }
+
+ void RefreshVolumeComponentEditor(VolumeProfile asset)
+ {
+ if (m_ComponentList == null)
+ m_ComponentList = new VolumeComponentListEditor(this);
+ m_ComponentList.Clear();
+ if (asset != null)
+ m_ComponentList.Init(asset, new SerializedObject(asset));
+ }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ var mode = (CinemachineVolumeSettings.FocusTrackingMode)m_FocusTracking.intValue;
+ if (mode != CinemachineVolumeSettings.FocusTrackingMode.CustomTarget)
+ excluded.Add(FieldPath(x => x.m_FocusTarget));
+ if (mode == CinemachineVolumeSettings.FocusTrackingMode.None)
+ excluded.Add(FieldPath(x => x.m_FocusOffset));
+ excluded.Add(FieldPath(x => x.m_Profile));
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+
+ var focusMode = (CinemachineVolumeSettings.FocusTrackingMode)m_FocusTracking.intValue;
+ if (focusMode != CinemachineVolumeSettings.FocusTrackingMode.None)
+ {
+ bool valid = false;
+ DepthOfField dof;
+ if (Target.m_Profile != null && Target.m_Profile.TryGet(out dof))
+#if CINEMACHINE_LWRP_7_3_1 && !CINEMACHINE_HDRP
+ {
+ valid = dof.active && dof.focusDistance.overrideState
+ && dof.mode.overrideState && dof.mode == DepthOfFieldMode.Bokeh;
+ }
+ if (!valid)
+ EditorGUILayout.HelpBox(
+ "Focus Tracking requires an active Depth Of Field override in the profile "
+ + "with Focus Distance activated and Mode activated and set to Bokeh",
+ MessageType.Warning);
+#else
+ {
+ valid = dof.active && dof.focusDistance.overrideState
+ && dof.focusMode.overrideState && dof.focusMode == DepthOfFieldMode.UsePhysicalCamera;
+ }
+ if (!valid)
+ EditorGUILayout.HelpBox(
+ "Focus Tracking requires an active Depth Of Field override in the profile "
+ + "with Focus Distance activated and Focus Mode activated and set to Use Physical Camera",
+ MessageType.Warning);
+#endif
+ }
+
+ DrawRemainingPropertiesInInspector();
+
+ EditorGUI.BeginChangeCheck();
+ DrawProfileInspectorGUI();
+ if (EditorGUI.EndChangeCheck())
+ {
+ Target.InvalidateCachedProfile();
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ void DrawProfileInspectorGUI()
+ {
+ EditorGUILayout.Space();
+
+ bool assetHasChanged = false;
+ bool showCopy = m_Profile.objectReferenceValue != null;
+
+ // The layout system sort of break alignement when mixing inspector fields with custom
+ // layouted fields, do the layout manually instead
+ int buttonWidth = showCopy ? 45 : 60;
+ float indentOffset = EditorGUI.indentLevel * 15f;
+ var lineRect = GUILayoutUtility.GetRect(1, EditorGUIUtility.singleLineHeight);
+ var labelRect = new Rect(lineRect.x, lineRect.y, EditorGUIUtility.labelWidth - indentOffset, lineRect.height);
+ var fieldRect = new Rect(labelRect.xMax, lineRect.y, lineRect.width - labelRect.width - buttonWidth * (showCopy ? 2 : 1), lineRect.height);
+ var buttonNewRect = new Rect(fieldRect.xMax, lineRect.y, buttonWidth, lineRect.height);
+ var buttonCopyRect = new Rect(buttonNewRect.xMax, lineRect.y, buttonWidth, lineRect.height);
+
+ EditorGUI.PrefixLabel(labelRect, m_ProfileLabel);
+
+ using (var scope = new EditorGUI.ChangeCheckScope())
+ {
+ m_Profile.objectReferenceValue
+ = (VolumeProfile)EditorGUI.ObjectField(
+ fieldRect, m_Profile.objectReferenceValue, typeof(VolumeProfile), false);
+ assetHasChanged = scope.changed;
+ }
+
+ if (GUI.Button(buttonNewRect, m_NewLabel,
+ showCopy ? EditorStyles.miniButtonLeft : EditorStyles.miniButton))
+ {
+ // By default, try to put assets in a folder next to the currently active
+ // scene file. If the user isn't a scene, put them in root instead.
+ var targetName = Target.name;
+ var scene = Target.gameObject.scene;
+ var asset = CreateVolumeProfile(scene, targetName);
+ m_Profile.objectReferenceValue = asset;
+ assetHasChanged = true;
+ }
+
+ if (showCopy && GUI.Button(buttonCopyRect, m_CloneLabel, EditorStyles.miniButtonRight))
+ {
+ // Duplicate the currently assigned profile and save it as a new profile
+ var origin = (VolumeProfile)m_Profile.objectReferenceValue;
+ var path = AssetDatabase.GetAssetPath(origin);
+ path = AssetDatabase.GenerateUniqueAssetPath(path);
+
+ var asset = Instantiate(origin);
+ asset.components.Clear();
+ AssetDatabase.CreateAsset(asset, path);
+
+ foreach (var item in origin.components)
+ {
+ var itemCopy = Instantiate(item);
+ itemCopy.hideFlags = HideFlags.HideInInspector | HideFlags.HideInHierarchy;
+ itemCopy.name = item.name;
+ asset.components.Add(itemCopy);
+ AssetDatabase.AddObjectToAsset(itemCopy, asset);
+ }
+
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+
+ m_Profile.objectReferenceValue = asset;
+ assetHasChanged = true;
+ }
+
+ if (m_Profile.objectReferenceValue == null)
+ {
+ if (assetHasChanged && m_ComponentList != null)
+ m_ComponentList.Clear(); // Asset wasn't null before, do some cleanup
+
+ EditorGUILayout.HelpBox(
+ "Assign an existing Volume Profile by choosing an asset, or create a new one by clicking the \"New\" button.\n"
+ + "New assets are automatically put in a folder next to your scene file. If your scene hasn't "
+ + "been saved yet they will be created at the root of the Assets folder.",
+ MessageType.Info);
+ }
+ else
+ {
+ EditorGUILayout.Space();
+ if (assetHasChanged)
+ RefreshVolumeComponentEditor((VolumeProfile)m_Profile.objectReferenceValue);
+ if (m_ComponentList != null)
+ m_ComponentList.OnGUI();
+ }
+ }
+
+ // Copied from UnityEditor.Rendering.PostProcessing.ProfileFactory.CreateVolumeProfile() because it's internal
+ static VolumeProfile CreateVolumeProfile(UnityEngine.SceneManagement.Scene scene, string targetName)
+ {
+ var path = string.Empty;
+
+ if (string.IsNullOrEmpty(scene.path))
+ {
+ path = "Assets/";
+ }
+ else
+ {
+ var scenePath = System.IO.Path.GetDirectoryName(scene.path);
+ var extPath = scene.name + "_Profiles";
+ var profilePath = scenePath + "/" + extPath;
+
+ if (!AssetDatabase.IsValidFolder(profilePath))
+ AssetDatabase.CreateFolder(scenePath, extPath);
+
+ path = profilePath + "/";
+ }
+
+ path += targetName + " Profile.asset";
+ path = AssetDatabase.GenerateUniqueAssetPath(path);
+
+ var profile = ScriptableObject.CreateInstance();
+ AssetDatabase.CreateAsset(profile, path);
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ return profile;
+ }
+ }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs.meta
new file mode 100644
index 00000000..35648fa0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PostProcessing/CinemachineVolumeSettingsEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 12a60b3365a7d424cbc3f935bd1ed799
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers.meta
new file mode 100644
index 00000000..9fc4f1f0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 31c3ab7d86d07034eb528155d40c016b
+folderAsset: yes
+timeCreated: 1489096338
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs
new file mode 100644
index 00000000..e0c66fd8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs
@@ -0,0 +1,129 @@
+using UnityEngine;
+using UnityEditor;
+using System.Reflection;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(AxisStatePropertyAttribute))]
+ internal sealed class AxisStatePropertyDrawer : PropertyDrawer
+ {
+ const int vSpace = 2;
+ bool mExpanded = true;
+ AxisState def = new AxisState(); // to access name strings
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight;
+ rect.height = height;
+ mExpanded = EditorGUI.Foldout(rect, mExpanded, EditorGUI.BeginProperty(rect, label, property), true);
+ if (mExpanded)
+ {
+ ++EditorGUI.indentLevel;
+
+ rect.y += height + vSpace;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.Value));
+
+ if (!ValueRangeIsLocked(property))
+ {
+ rect.y += height + vSpace;
+ InspectorUtility.MultiPropertyOnLine(rect, new GUIContent("Value Range"),
+ new [] { property.FindPropertyRelative(() => def.m_MinValue),
+ property.FindPropertyRelative(() => def.m_MaxValue),
+ property.FindPropertyRelative(() => def.m_Wrap) },
+ new [] { GUIContent.none, new GUIContent("to "), null });
+ }
+
+ rect.y += height + vSpace;
+ InspectorUtility.MultiPropertyOnLine(rect, new GUIContent("Speed"),
+ new [] { property.FindPropertyRelative(() => def.m_MaxSpeed),
+ property.FindPropertyRelative(() => def.m_SpeedMode) },
+ new [] { GUIContent.none, new GUIContent("as") });
+
+ rect.y += height + vSpace;
+ InspectorUtility.MultiPropertyOnLine(
+ rect, null,
+ new [] { property.FindPropertyRelative(() => def.m_AccelTime),
+ property.FindPropertyRelative(() => def.m_DecelTime)},
+ new [] { GUIContent.none, null });
+
+ if (HasRecentering(property))
+ {
+ var rDef = new AxisState.Recentering();
+ var recentering = property.FindPropertyRelative(() => def.m_Recentering);
+ rect.y += height + vSpace;
+ InspectorUtility.MultiPropertyOnLine(
+ rect, new GUIContent(recentering.displayName, recentering.tooltip),
+ new [] {
+ recentering.FindPropertyRelative(() => rDef.m_enabled),
+ recentering.FindPropertyRelative(() => rDef.m_WaitTime),
+ recentering.FindPropertyRelative(() => rDef.m_RecenteringTime)},
+ new [] { new GUIContent(""),
+ new GUIContent("Wait"),
+ new GUIContent("Time")} );
+ }
+
+ if (!HasInputProvider(property))
+ {
+ rect.y += height + vSpace;
+ EditorGUI.PropertyField(
+ rect, property.FindPropertyRelative(() => def.m_InputAxisName));
+ }
+
+ rect.y += height + vSpace;
+ InspectorUtility.MultiPropertyOnLine(rect, null,
+ new [] { property.FindPropertyRelative(() => def.m_InputAxisValue),
+ property.FindPropertyRelative(() => def.m_InvertInput) },
+ new [] { GUIContent.none, new GUIContent("Invert") });
+
+ --EditorGUI.indentLevel;
+ }
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight + vSpace;
+ if (mExpanded)
+ {
+ int lines = 5;
+ if (!ValueRangeIsLocked(property))
+ ++lines;
+ if (!HasInputProvider(property))
+ ++lines;
+ if (HasRecentering(property))
+ ++lines;
+ height *= lines;
+ }
+ return height - vSpace;
+ }
+
+ bool ValueRangeIsLocked(SerializedProperty property)
+ {
+ bool value = false;
+ PropertyInfo pi = typeof(AxisState).GetProperty(
+ "ValueRangeLocked", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+ if (pi != null)
+ value = bool.Equals(true, pi.GetValue(SerializedPropertyHelper.GetPropertyValue(property), null));
+ return value;
+ }
+
+ bool HasRecentering(SerializedProperty property)
+ {
+ bool value = false;
+ PropertyInfo pi = typeof(AxisState).GetProperty(
+ "HasRecentering", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+ if (pi != null)
+ value = bool.Equals(true, pi.GetValue(SerializedPropertyHelper.GetPropertyValue(property), null));
+ return value;
+ }
+
+ bool HasInputProvider(SerializedProperty property)
+ {
+ bool value = false;
+ PropertyInfo pi = typeof(AxisState).GetProperty(
+ "HasInputProvider", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+ if (pi != null)
+ value = bool.Equals(true, pi.GetValue(SerializedPropertyHelper.GetPropertyValue(property), null));
+ return value;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs.meta
new file mode 100644
index 00000000..61211e0d
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/AxisStatePropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 70f1be76e10cd9f44ad1a86b9e05745e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs
new file mode 100644
index 00000000..e3fc557c
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs
@@ -0,0 +1,56 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(CinemachineBlendDefinitionPropertyAttribute))]
+ internal sealed class CinemachineBlendDefinitionPropertyDrawer : PropertyDrawer
+ {
+ CinemachineBlendDefinition myClass = new CinemachineBlendDefinition(); // to access name strings
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ float vSpace = 0;
+ float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;
+
+ SerializedProperty timeProp = property.FindPropertyRelative(() => myClass.m_Time);
+ GUIContent timeText = new GUIContent(" s", timeProp.tooltip);
+ var textDimensions = GUI.skin.label.CalcSize(timeText);
+
+ rect = EditorGUI.PrefixLabel(rect, EditorGUI.BeginProperty(rect, label, property));
+
+ rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight;
+ rect.width -= floatFieldWidth + textDimensions.x;
+
+ SerializedProperty styleProp = property.FindPropertyRelative(() => myClass.m_Style);
+ bool isCustom = styleProp.enumValueIndex == (int)CinemachineBlendDefinition.Style.Custom;
+ var r = rect;
+ if (isCustom)
+ r.width -= 2 * r.height;
+ EditorGUI.PropertyField(r, styleProp, GUIContent.none);
+ if (isCustom)
+ {
+ SerializedProperty curveProp = property.FindPropertyRelative(() => myClass.m_CustomCurve);
+ r.x += r.width;
+ r.width = 2 * rect.height;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(r, curveProp, GUIContent.none);
+ if (EditorGUI.EndChangeCheck())
+ {
+ curveProp.animationCurveValue = InspectorUtility.NormalizeCurve(curveProp.animationCurveValue);
+ curveProp.serializedObject.ApplyModifiedProperties();
+ }
+ }
+ if (styleProp.intValue != (int)CinemachineBlendDefinition.Style.Cut)
+ {
+ float oldWidth = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = textDimensions.x;
+ rect.x += rect.width; rect.width = floatFieldWidth + EditorGUIUtility.labelWidth;
+ EditorGUI.BeginChangeCheck();
+ EditorGUI.PropertyField(rect, timeProp, timeText);
+ if (EditorGUI.EndChangeCheck())
+ timeProp.floatValue = Mathf.Max(timeProp.floatValue, 0);
+ EditorGUIUtility.labelWidth = oldWidth;
+ }
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs.meta
new file mode 100644
index 00000000..8fd01b69
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineBlendDefinitionPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4a9c464b0191f7d4da1d129d97d8240b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs
new file mode 100644
index 00000000..9617e47b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs
@@ -0,0 +1,34 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(TagFieldAttribute))]
+ internal sealed class CinemachineTagFieldPropertyDrawer : PropertyDrawer
+ {
+ const float hSpace = 2;
+ private string tagValue = "";
+ GUIContent clearText = new GUIContent("Clear", "Set the tag to empty");
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ var textDimensions = GUI.skin.button.CalcSize(clearText);
+
+ rect.width -= textDimensions.x + hSpace;
+
+ tagValue = property.stringValue;
+ EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
+ EditorGUI.BeginChangeCheck();
+ tagValue = EditorGUI.TagField(rect, EditorGUI.BeginProperty(rect, label, property), tagValue);
+ if (EditorGUI.EndChangeCheck())
+ property.stringValue = tagValue;
+ EditorGUI.showMixedValue = false;
+
+ rect.x += rect.width + hSpace; rect.width = textDimensions.x; rect.height -=1;
+ GUI.enabled = tagValue.Length > 0;
+ if (GUI.Button(rect, clearText))
+ property.stringValue = string.Empty;
+ GUI.enabled = true;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs.meta
new file mode 100644
index 00000000..07c81b25
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/CinemachineTagFieldPropertyDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ed3efd28525441947b55ec9b5d68ba31
+timeCreated: 1510677929
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs
new file mode 100644
index 00000000..2a78b74e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs
@@ -0,0 +1,280 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using Cinemachine.Utility;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(CinemachineEmbeddedAssetPropertyAttribute))]
+ internal sealed class EmbeddedAssetPropertyDrawer : PropertyDrawer
+ {
+ const float vSpace = 2;
+ const float kIndentAmount = 15;
+ const float kBoxMargin = 3;
+ float HelpBoxHeight { get { return EditorGUIUtility.singleLineHeight * 2.5f; } }
+ bool mExpanded = false;
+
+ bool WarnIfNull
+ {
+ get
+ {
+ var attr = attribute as CinemachineEmbeddedAssetPropertyAttribute;
+ return attr == null ? false : attr.WarnIfNull;
+ }
+ }
+
+ float HeaderHeight { get { return EditorGUIUtility.singleLineHeight * 1.5f; } }
+ float DrawHeader(Rect rect, string text)
+ {
+ float delta = HeaderHeight - EditorGUIUtility.singleLineHeight;
+ rect.y += delta; rect.height -= delta;
+ EditorGUI.LabelField(rect, new GUIContent(text), EditorStyles.boldLabel);
+ return HeaderHeight;
+ }
+
+ string HeaderText(SerializedProperty property)
+ {
+ var attrs = property.serializedObject.targetObject.GetType()
+ .GetCustomAttributes(typeof(HeaderAttribute), false);
+ if (attrs != null && attrs.Length > 0)
+ return ((HeaderAttribute)attrs[0]).header;
+ return null;
+ }
+
+ bool AssetHasCustomEditor(SerializedProperty property)
+ {
+ ScriptableObject asset = property.objectReferenceValue as ScriptableObject;
+ if (asset != null)
+ return ActiveEditorTracker.HasCustomEditor(asset);
+ return false;
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ bool hasCustomEditor = AssetHasCustomEditor(property);
+ float height = base.GetPropertyHeight(property, label);
+ height += + 2 * (kBoxMargin + vSpace);
+ if (mExpanded && !hasCustomEditor)
+ {
+ height += HelpBoxHeight + kBoxMargin;
+ ScriptableObject asset = property.objectReferenceValue as ScriptableObject;
+ if (asset != null)
+ {
+ SerializedObject so = new SerializedObject(asset);
+ var prop = so.GetIterator();
+ prop.NextVisible(true);
+ do
+ {
+ if (prop.name == "m_Script")
+ continue;
+ string header = HeaderText(prop);
+ if (header != null)
+ height += HeaderHeight + vSpace;
+ height += EditorGUI.GetPropertyHeight(prop, false) + vSpace;
+ }
+ while (prop.NextVisible(prop.isExpanded));
+ height += kBoxMargin;
+ }
+ }
+ return height;
+ }
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ bool hasCustomEditor = AssetHasCustomEditor(property);
+ rect.y += vSpace; rect.height -= 2 * vSpace;
+ GUI.Box(rect, GUIContent.none, GUI.skin.box);
+ rect.y += kBoxMargin;
+
+ rect.height = EditorGUIUtility.singleLineHeight;
+ EditorGUIUtility.labelWidth -= kBoxMargin;
+ AssetFieldWithCreateButton(
+ new Rect(rect.x + kBoxMargin, rect.y, rect.width - 2 * kBoxMargin, rect.height),
+ property, WarnIfNull,
+ property.serializedObject.targetObject.name + " " + label.text);
+
+ ScriptableObject asset = property.objectReferenceValue as ScriptableObject;
+ if (asset != null && !hasCustomEditor)
+ {
+ mExpanded = EditorGUI.Foldout(rect, mExpanded, GUIContent.none, true);
+ if (mExpanded)
+ {
+ rect.y += rect.height + kBoxMargin + vSpace;
+ rect.x += kIndentAmount + kBoxMargin;
+ rect.width -= kIndentAmount + 2 * kBoxMargin;
+ EditorGUIUtility.labelWidth -= kIndentAmount;
+
+ EditorGUI.HelpBox(
+ new Rect(rect.x, rect.y, rect.width, HelpBoxHeight),
+ "This is a shared asset.\n"
+ + "Changes made here will apply to all users of this asset",
+ MessageType.Info);
+
+ rect.y += HelpBoxHeight + kBoxMargin;
+ SerializedObject so = new SerializedObject(property.objectReferenceValue);
+ var prop = so.GetIterator();
+ prop.NextVisible(true);
+
+ var indent = EditorGUI.indentLevel;
+ do
+ {
+ if (prop.name == "m_Script")
+ continue;
+ string header = HeaderText(prop);
+ if (header != null)
+ {
+ DrawHeader(rect, header);
+ rect.y += HeaderHeight + vSpace;
+ rect.height -= HeaderHeight + vSpace;
+ }
+ rect.height = EditorGUI.GetPropertyHeight(prop, false);
+ EditorGUI.indentLevel = indent + prop.depth;
+ EditorGUI.PropertyField(rect, prop);
+ rect.y += rect.height + vSpace;
+ } while (prop.NextVisible(prop.isExpanded));
+
+ if (GUI.changed)
+ so.ApplyModifiedProperties();
+ }
+ EditorGUIUtility.labelWidth += kIndentAmount;
+ }
+ EditorGUIUtility.labelWidth += kBoxMargin;
+ }
+
+ Type EmbeddedAssetType(SerializedProperty property)
+ {
+ Type type = property.serializedObject.targetObject.GetType();
+ var a = property.propertyPath.Split('.');
+ for (int i = 0; i < a.Length; ++i)
+ {
+ var field = type.GetField(a[i],
+ System.Reflection.BindingFlags.Public
+ | System.Reflection.BindingFlags.NonPublic
+ | System.Reflection.BindingFlags.Instance);
+ if (field == null) continue;
+ type = field.FieldType;
+ }
+ return type;
+ }
+
+ Type[] mAssetTypes = null;
+ List mAssetPresets;
+ GUIContent[] mAssetPresetNames;
+
+ void RebuildPresetList()
+ {
+ if (mAssetPresets != null && mAssetPresetNames != null)
+ return;
+
+ mAssetPresets = new List();
+ if (mAssetTypes != null)
+ {
+ for (int i = 0; i < mAssetTypes.Length; ++i)
+ InspectorUtility.AddAssetsFromPackageSubDirectory(
+ mAssetTypes[i], mAssetPresets, "Presets/Noise");
+ }
+ List presetNameList = new List();
+ foreach (var n in mAssetPresets)
+ presetNameList.Add(new GUIContent("Presets/" + n.name));
+ mAssetPresetNames = presetNameList.ToArray();
+ }
+
+ void AssetFieldWithCreateButton(
+ Rect r, SerializedProperty property, bool warnIfNull, string defaultName)
+ {
+ // Collect all the eligible asset types
+ Type type = EmbeddedAssetType(property);
+ if (mAssetTypes == null)
+ mAssetTypes = ReflectionHelpers.GetTypesInAllDependentAssemblies(
+ (Type t) => type.IsAssignableFrom(t) && !t.IsAbstract).ToArray();
+
+ float iconSize = r.height + 4;
+ r.width -= iconSize;
+
+ GUIContent label = new GUIContent(property.displayName, property.tooltip);
+ if (warnIfNull && property.objectReferenceValue == null)
+ label.image = EditorGUIUtility.IconContent("console.warnicon.sml").image;
+ EditorGUI.PropertyField(r, property, label);
+
+ r.x += r.width; r.width = iconSize; r.height = iconSize;
+ if (GUI.Button(r, EditorGUIUtility.IconContent("_Popup"), GUI.skin.label))
+ {
+ GenericMenu menu = new GenericMenu();
+ if (property.objectReferenceValue != null)
+ {
+ menu.AddItem(new GUIContent("Edit"), false, ()
+ => Selection.activeObject = property.objectReferenceValue);
+ menu.AddItem(new GUIContent("Clone"), false, () =>
+ {
+ ScriptableObject copyFrom = property.objectReferenceValue as ScriptableObject;
+ if (copyFrom != null)
+ {
+ string title = "Create New " + copyFrom.GetType().Name + " asset";
+ ScriptableObject asset = CreateAsset(
+ copyFrom.GetType(), copyFrom, defaultName, title);
+ if (asset != null)
+ {
+ property.objectReferenceValue = asset;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+ }
+ });
+ menu.AddItem(new GUIContent("Locate"), false, ()
+ => EditorGUIUtility.PingObject(property.objectReferenceValue));
+ }
+
+ RebuildPresetList();
+ int i = 0;
+ foreach (var a in mAssetPresets)
+ {
+ menu.AddItem(mAssetPresetNames[i++], false, () =>
+ {
+ property.objectReferenceValue = a;
+ property.serializedObject.ApplyModifiedProperties();
+ });
+ }
+
+ foreach (var t in mAssetTypes)
+ {
+ menu.AddItem(new GUIContent("New " + InspectorUtility.NicifyClassName(t.Name)), false, () =>
+ {
+ string title = "Create New " + t.Name + " asset";
+ ScriptableObject asset = CreateAsset(t, null, defaultName, title);
+ if (asset != null)
+ {
+ property.objectReferenceValue = asset;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+ });
+ }
+ menu.ShowAsContext();
+ }
+ }
+
+ ScriptableObject CreateAsset(
+ Type assetType, ScriptableObject copyFrom, string defaultName, string dialogTitle)
+ {
+ ScriptableObject asset = null;
+ string path = EditorUtility.SaveFilePanelInProject(
+ dialogTitle, defaultName, "asset", string.Empty);
+ if (!string.IsNullOrEmpty(path))
+ {
+ if (copyFrom != null)
+ {
+ string fromPath = AssetDatabase.GetAssetPath(copyFrom);
+ if (AssetDatabase.CopyAsset(fromPath, path))
+ asset = AssetDatabase.LoadAssetAtPath(path, assetType) as ScriptableObject;
+ }
+ else
+ {
+ asset = ScriptableObjectUtility.CreateAt(assetType, path);
+ }
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ }
+ return asset;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs.meta
new file mode 100644
index 00000000..d436a2c2
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/EmbeddedAssetPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 57baee20e53f7b54782519af44a9468f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs
new file mode 100644
index 00000000..3d0442e5
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs
@@ -0,0 +1,137 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(NoiseSettingsPropertyAttribute))]
+ internal sealed class NoiseSettingsPropertyDrawer : PropertyDrawer
+ {
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ RebuildProfileList();
+
+ float iconSize = rect.height + 4;
+ rect.width -= iconSize;
+ int preset = sNoisePresets.IndexOf((NoiseSettings)property.objectReferenceValue);
+ EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
+ preset = EditorGUI.Popup(rect, EditorGUI.BeginProperty(rect, label, property), preset, sNoisePresetNames);
+ EditorGUI.showMixedValue = false;
+ string labelText = label.text;
+ NoiseSettings newProfile = preset < 0 ? null : sNoisePresets[preset] as NoiseSettings;
+ if ((NoiseSettings)property.objectReferenceValue != newProfile)
+ {
+ property.objectReferenceValue = newProfile;
+ property.serializedObject.ApplyModifiedProperties();
+ }
+ rect.x += rect.width; rect.width = iconSize; rect.height = iconSize; rect.y -= 2;
+ if (GUI.Button(rect, EditorGUIUtility.IconContent("_Popup"), GUI.skin.label))
+ {
+ GenericMenu menu = new GenericMenu();
+ if (property.objectReferenceValue != null)
+ {
+ menu.AddItem(new GUIContent("Edit"), false, ()
+ => Selection.activeObject = property.objectReferenceValue);
+ menu.AddItem(new GUIContent("Clone"), false, () =>
+ {
+ NoiseSettings pp = CreateProfile(
+ property, labelText,
+ (NoiseSettings)property.objectReferenceValue);
+ if (pp != null)
+ {
+ property.objectReferenceValue = pp;
+ property.serializedObject.ApplyModifiedProperties();
+ InvalidateProfileList();
+ }
+ });
+ menu.AddItem(new GUIContent("Locate"), false, ()
+ => EditorGUIUtility.PingObject(property.objectReferenceValue));
+ }
+ menu.AddItem(new GUIContent("New"), false, () =>
+ {
+ //Undo.RecordObject(Target, "Change Noise Profile");
+ NoiseSettings pp = CreateProfile(property, labelText, null);
+ if (pp != null)
+ {
+ property.objectReferenceValue = pp;
+ property.serializedObject.ApplyModifiedProperties();
+ InvalidateProfileList();
+ }
+ });
+ menu.ShowAsContext();
+ }
+ }
+
+ static List sNoisePresets;
+ static GUIContent[] sNoisePresetNames;
+ static float sLastPresetRebuildTime = 0;
+
+ public static void InvalidateProfileList()
+ {
+ sNoisePresets = null;
+ sNoisePresetNames = null;
+ }
+
+ static void RebuildProfileList()
+ {
+ if (sLastPresetRebuildTime < Time.realtimeSinceStartup - 5)
+ InvalidateProfileList();
+ if (sNoisePresets != null && sNoisePresetNames != null)
+ return;
+
+ sNoisePresets = FindAssetsByType();
+ InspectorUtility.AddAssetsFromPackageSubDirectory(
+ typeof(NoiseSettings), sNoisePresets, "Presets/Noise");
+ sNoisePresets.Insert(0, null);
+ List presetNameList = new List();
+ foreach (var n in sNoisePresets)
+ presetNameList.Add(new GUIContent((n == null) ? "(none)" : n.name));
+ sNoisePresetNames = presetNameList.ToArray();
+ sLastPresetRebuildTime = Time.realtimeSinceStartup;
+ }
+
+ static List FindAssetsByType() where T : UnityEngine.Object
+ {
+ List assets = new List();
+ string[] guids = AssetDatabase.FindAssets(string.Format("t:{0}", typeof(T)));
+ for (int i = 0; i < guids.Length; i++)
+ {
+ string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]);
+ ScriptableObject asset = AssetDatabase.LoadAssetAtPath(assetPath) as ScriptableObject;
+ if (asset != null)
+ assets.Add(asset);
+ }
+ return assets;
+ }
+
+ NoiseSettings CreateProfile(SerializedProperty property, string label, NoiseSettings copyFrom)
+ {
+ string path = InspectorUtility.GetVirtualCameraObjectName(property) + " " + label;
+ path = EditorUtility.SaveFilePanelInProject(
+ "Create Noise Profile asset", path, "asset",
+ "This asset will generate a procedural noise signal");
+ if (!string.IsNullOrEmpty(path))
+ {
+ NoiseSettings profile = null;
+ if (copyFrom != null)
+ {
+ string fromPath = AssetDatabase.GetAssetPath(copyFrom);
+ if (AssetDatabase.CopyAsset(fromPath, path))
+ {
+ profile = AssetDatabase.LoadAssetAtPath(
+ path, typeof(NoiseSettings)) as NoiseSettings;
+ }
+ }
+ else
+ {
+ profile = ScriptableObjectUtility.CreateAt(
+ typeof(NoiseSettings), path) as NoiseSettings;
+ }
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ return profile;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs.meta
new file mode 100644
index 00000000..d681282e
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/NoiseSettingsPropertyDrawer.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 7d0d800d47186f0468d962ccf338ab97
+timeCreated: 1518034045
+licenseType: Pro
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs
new file mode 100644
index 00000000..031263ed
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs
@@ -0,0 +1,55 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(OrbitalTransposerHeadingPropertyAttribute))]
+ internal sealed class OrbitalTransposerHeadingPropertyDrawer : PropertyDrawer
+ {
+ const int vSpace = 2;
+ bool mExpanded = true;
+ CinemachineOrbitalTransposer.Heading def = new CinemachineOrbitalTransposer.Heading(); // to access name strings
+
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight;
+ rect.height = height;
+ mExpanded = EditorGUI.Foldout(rect, mExpanded, EditorGUI.BeginProperty(rect, label, property), true);
+ if (mExpanded)
+ {
+ ++EditorGUI.indentLevel;
+
+ rect.y += height + vSpace;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_Definition));
+
+ if (IsVelocityMode(property))
+ {
+ rect.y += height + vSpace;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_VelocityFilterStrength));
+ }
+
+ rect.y += height + vSpace;
+ EditorGUI.PropertyField(rect, property.FindPropertyRelative(() => def.m_Bias));
+
+ --EditorGUI.indentLevel;
+ }
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ float height = EditorGUIUtility.singleLineHeight + vSpace;
+ if (mExpanded)
+ height *= IsVelocityMode(property) ? 4 : 3;
+ return height;
+ }
+
+ bool IsVelocityMode(SerializedProperty property)
+ {
+ var mode = property.FindPropertyRelative(() => def.m_Definition);
+ var value = (CinemachineOrbitalTransposer.Heading.HeadingDefinition)
+ (System.Enum.GetValues(typeof(CinemachineOrbitalTransposer.Heading.HeadingDefinition))).GetValue(mode.enumValueIndex);
+ return value == CinemachineOrbitalTransposer.Heading.HeadingDefinition.Velocity
+ || value == CinemachineOrbitalTransposer.Heading.HeadingDefinition.PositionDelta;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs.meta
new file mode 100644
index 00000000..1c78da79
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/OrbitalTransposerHeadingPropertyDrawer.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: cd1b3b6848c215f4cba3ace2c38f9bce
+timeCreated: 1514911474
+licenseType: Pro
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs
new file mode 100644
index 00000000..538b80ff
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs
@@ -0,0 +1,40 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace Cinemachine.Editor
+{
+ [CustomPropertyDrawer(typeof(VcamTargetPropertyAttribute))]
+ internal sealed class VcamTargetPropertyDrawer : PropertyDrawer
+ {
+ public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
+ {
+ const float hSpace = 2;
+ float iconSize = rect.height + 4;
+ rect.width -= iconSize + hSpace;
+ EditorGUI.PropertyField(rect, property, EditorGUI.BeginProperty(rect, label, property));
+ rect.x += rect.width + hSpace; rect.width = iconSize;
+
+ var oldEnabled = GUI.enabled;
+ var target = property.objectReferenceValue as Transform;
+ if (target == null || target.GetComponent() != null)
+ GUI.enabled = false;
+ if (GUI.Button(rect, EditorGUIUtility.IconContent("_Popup"), GUI.skin.label))
+ {
+ GenericMenu menu = new GenericMenu();
+ menu.AddItem(new GUIContent("Convert to TargetGroup"), false, () =>
+ {
+ GameObject go = ObjectFactory.CreateGameObject("Target Group", typeof(CinemachineTargetGroup));
+ var group = go.GetComponent();
+
+ group.m_RotationMode = CinemachineTargetGroup.RotationMode.GroupAverage;
+ group.AddMember(target, 1, 1);
+ property.objectReferenceValue = group.Transform;
+ property.serializedObject.ApplyModifiedProperties();
+ });
+ menu.ShowAsContext();
+ }
+ GUI.enabled = oldEnabled;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs.meta
new file mode 100644
index 00000000..736b3dc0
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/PropertyDrawers/VcamTargetPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4b0a256055e11cf4999a9ee9e8b0db2a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline.meta
new file mode 100644
index 00000000..2290b0ad
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 59bf6f737ca29494a8a074e4e7151fc3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs
new file mode 100644
index 00000000..0626db1a
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs
@@ -0,0 +1,139 @@
+#if !UNITY_2019_1_OR_NEWER
+#define CINEMACHINE_TIMELINE
+#endif
+
+#if CINEMACHINE_TIMELINE && UNITY_2019_2_OR_NEWER
+
+using UnityEngine.Timeline;
+using UnityEditor.Timeline;
+using Cinemachine;
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.Playables;
+
+[CustomTimelineEditor(typeof(CinemachineShot))]
+public class CinemachineShotClipEditor : ClipEditor
+{
+ [InitializeOnLoad]
+ class EditorInitialize
+ {
+ static EditorInitialize() { CinemachineMixer.GetMasterPlayableDirector = GetMasterDirector; }
+ static PlayableDirector GetMasterDirector() { return TimelineEditor.masterDirector; }
+ }
+ public delegate double TimelineGlobalToLocalTimeDelegate(double globalTime);
+ public static TimelineGlobalToLocalTimeDelegate TimelineGlobalToLocalTime = DefaultTimeConversion;
+#if CINEMACHINE_TIMELINE_1_5_0
+ static double DefaultTimeConversion(double time) { return TimelineEditor.GetInspectedTimeFromMasterTime(time); }
+#else
+ static double DefaultTimeConversion(double time) { return time; }
+#endif
+
+ public override ClipDrawOptions GetClipOptions(TimelineClip clip)
+ {
+ var shotClip = (CinemachineShot) clip.asset;
+ var clipOptions = base.GetClipOptions(clip);
+ if (shotClip != null)
+ {
+ var director = TimelineEditor.inspectedDirector;
+ if (director != null)
+ {
+ var vcam = shotClip.VirtualCamera.Resolve(director);
+ if (vcam == null)
+ clipOptions.errorText = "A virtual camera must be assigned";
+ else
+ clipOptions.tooltip = vcam.Name;
+
+ }
+ }
+ return clipOptions;
+ }
+
+ public override void OnClipChanged(TimelineClip clip)
+ {
+ var shotClip = (CinemachineShot)clip.asset;
+ if (shotClip == null)
+ return;
+ if (shotClip.DisplayName != null && shotClip.DisplayName.Length != 0)
+ clip.displayName = shotClip.DisplayName;
+ else
+ {
+ var director = TimelineEditor.inspectedDirector;
+ if (director != null)
+ {
+ var vcam = shotClip.VirtualCamera.Resolve(director);
+ if (vcam != null)
+ clip.displayName = vcam.Name;
+ }
+ }
+ }
+
+ public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom)
+ {
+ base.OnCreate(clip, track, clonedFrom);
+ if (CinemachineShotEditor.AutoCreateShotFromSceneView)
+ {
+ var asset = clip.asset as CinemachineShot;
+ var vcam = CinemachineShotEditor.CreatePassiveVcamFromSceneView();
+ var d = TimelineEditor.inspectedDirector;
+ if (d != null && d.GetReferenceValue(asset.VirtualCamera.exposedName, out bool idValid) == null)
+ {
+ asset.VirtualCamera.exposedName = System.Guid.NewGuid().ToString();
+ d.SetReferenceValue(asset.VirtualCamera.exposedName, vcam);
+ }
+ }
+ }
+
+ GUIContent kUndamped = new GUIContent("UNCACHED");
+
+ public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion region)
+ {
+ base.DrawBackground(clip, region);
+
+ if (Application.isPlaying || !TargetPositionCache.UseCache
+ || TargetPositionCache.CacheMode == TargetPositionCache.Mode.Disabled
+ || TimelineEditor.inspectedDirector == null)
+ {
+ return;
+ }
+
+ // Draw the cache indicator over the cached region
+ var cacheRange = TargetPositionCache.CacheTimeRange;
+ if (!cacheRange.IsEmpty)
+ {
+ cacheRange.Start = (float)TimelineGlobalToLocalTime(cacheRange.Start);
+ cacheRange.End = (float)TimelineGlobalToLocalTime(cacheRange.End);
+
+ // Clip cacheRange to rect
+ float start = (float)region.startTime;
+ float end = (float)region.endTime;
+ cacheRange.Start = Mathf.Max((float)clip.ToLocalTime(cacheRange.Start), start);
+ cacheRange.End = Mathf.Min((float)clip.ToLocalTime(cacheRange.End), end);
+
+ var r = region.position;
+ var a = r.x + r.width * (cacheRange.Start - start) / (end - start);
+ var b = r.x + r.width * (cacheRange.End - start) / (end - start);
+ r.x = a; r.width = b-a;
+ r.y += r.height; r.height *= 0.2f; r.y -= r.height;
+ EditorGUI.DrawRect(r, new Color(0.1f, 0.2f, 0.8f, 0.6f));
+ }
+
+ // Draw the "UNCACHED" indicator, if appropriate
+ if (!TargetPositionCache.IsRecording && !TargetPositionCache.CurrentPlaybackTimeValid)
+ {
+ var r = region.position;
+ var t = clip.ToLocalTime(TimelineGlobalToLocalTime(TimelineEditor.masterDirector.time));
+ var pos = r.x + r.width
+ * (float)((t - region.startTime) / (region.endTime - region.startTime));
+
+ var s = EditorStyles.miniLabel.CalcSize(kUndamped);
+ r.width = s.x; r.x = pos - r.width / 2;
+ var c = GUI.color;
+ GUI.color = Color.yellow;
+ EditorGUI.LabelField(r, kUndamped, EditorStyles.miniLabel);
+ GUI.color = c;
+ }
+ }
+}
+
+
+#endif
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs.meta
new file mode 100644
index 00000000..89d7af16
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotClipEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f23d52331ea559841a7b7c27ca58037c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs
new file mode 100644
index 00000000..8bfed8d8
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs
@@ -0,0 +1,241 @@
+#if !UNITY_2019_1_OR_NEWER
+#define CINEMACHINE_TIMELINE
+#endif
+#if CINEMACHINE_TIMELINE
+
+using UnityEditor;
+using UnityEngine;
+using Cinemachine.Editor;
+using System.Collections.Generic;
+using UnityEditor.Timeline;
+using Cinemachine;
+
+//namespace Cinemachine.Timeline
+//{
+ [CustomEditor(typeof(CinemachineShot))]
+ internal sealed class CinemachineShotEditor : BaseEditor
+ {
+ static string kAutoCreateKey = "CM_Timeline_AutoCreateShotFromSceneView";
+ public static bool AutoCreateShotFromSceneView
+ {
+ get { return EditorPrefs.GetBool(kAutoCreateKey, false); }
+ set
+ {
+ if (value != AutoCreateShotFromSceneView)
+ EditorPrefs.SetBool(kAutoCreateKey, value);
+ }
+ }
+
+#if UNITY_2019_2_OR_NEWER
+ static string kUseScrubbingCache = "CNMCN_Timeline_CachedScrubbing";
+ public static bool UseScrubbingCache
+ {
+ get { return EditorPrefs.GetBool(kUseScrubbingCache, false); }
+ set
+ {
+ if (UseScrubbingCache != value)
+ {
+ EditorPrefs.SetBool(kUseScrubbingCache, value);
+ TargetPositionCache.UseCache = value;
+ }
+ }
+ }
+
+ [InitializeOnLoad]
+ public class SyncCacheEnabledSetting
+ {
+ static SyncCacheEnabledSetting()
+ {
+ TargetPositionCache.UseCache = UseScrubbingCache;
+ }
+ }
+#endif
+
+ static public CinemachineVirtualCameraBase CreatePassiveVcamFromSceneView()
+ {
+ var vcam = CinemachineMenu.CreatePassiveVirtualCamera("Virtual Camera", null, false);
+ vcam.m_StandbyUpdate = CinemachineVirtualCameraBase.StandbyUpdateMode.Never;
+
+#if false
+ // GML this is too bold. What if timeline is a child of something moving?
+ // also, SetActive(false) prevents the animator from being able to animate the object
+ vcam.gameObject.SetActive(false);
+ var d = TimelineEditor.inspectedDirector;
+ if (d != null)
+ Undo.SetTransformParent(vcam.transform, d.transform, "");
+#endif
+ return vcam;
+ }
+
+ private static readonly GUIContent kVirtualCameraLabel
+ = new GUIContent("Virtual Camera", "The virtual camera to use for this shot");
+ private static readonly GUIContent kAutoCreateLabel = new GUIContent(
+ "Auto-create new shots", "When enabled, new clips will be "
+ + "automatically populated to match the scene view camera. "
+ + "This is a global setting");
+#if UNITY_2019_2_OR_NEWER
+ private static readonly GUIContent kScrubbingCacheLabel = new GUIContent(
+ "Cached Scrubbing",
+ "For preview scrubbing, caches target positions and pre-simulates each frame to "
+ + "approximate damping and noise playback. Target position cache is built when timeline is "
+ + "played forward, and used when timeline is scrubbed within the indicated zone. "
+ + "This is a global setting,.");
+ GUIContent m_ClearText = new GUIContent("Clear", "Clear the target position scrubbing cache");
+#endif
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected override void GetExcludedPropertiesInInspector(List excluded)
+ {
+ base.GetExcludedPropertiesInInspector(excluded);
+ excluded.Add(FieldPath(x => x.VirtualCamera));
+ }
+
+ private void OnDisable()
+ {
+ DestroyComponentEditors();
+ }
+
+ private void OnDestroy()
+ {
+ DestroyComponentEditors();
+ }
+
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ SerializedProperty vcamProperty = FindProperty(x => x.VirtualCamera);
+ EditorGUI.indentLevel = 0; // otherwise subeditor layouts get screwed up
+
+ AutoCreateShotFromSceneView
+ = EditorGUILayout.Toggle(kAutoCreateLabel, AutoCreateShotFromSceneView);
+
+ Rect rect;
+#if UNITY_2019_2_OR_NEWER
+ GUI.enabled = !Application.isPlaying;
+ rect = EditorGUILayout.GetControlRect();
+ var r = rect;
+ r.width = EditorGUIUtility.labelWidth + EditorGUIUtility.singleLineHeight;
+ if (Application.isPlaying)
+ EditorGUI.Toggle(r, kScrubbingCacheLabel, false);
+ else
+ UseScrubbingCache = EditorGUI.Toggle(r, kScrubbingCacheLabel, UseScrubbingCache);
+ r.x += r.width; r.width = rect.width - r.width;
+ var buttonWidth = GUI.skin.button.CalcSize(m_ClearText).x;
+ r.width -= buttonWidth;
+ EditorGUI.LabelField(r, "(experimental)");
+ r.x += r.width; r.width =buttonWidth;
+ GUI.enabled &= !TargetPositionCache.IsEmpty;
+ if (GUI.Button(r, m_ClearText))
+ TargetPositionCache.ClearCache();
+ GUI.enabled = true;
+#endif
+
+ EditorGUILayout.Space();
+ CinemachineVirtualCameraBase vcam
+ = vcamProperty.exposedReferenceValue as CinemachineVirtualCameraBase;
+ if (vcam != null)
+ EditorGUILayout.PropertyField(vcamProperty, kVirtualCameraLabel);
+ else
+ {
+ GUIContent createLabel = new GUIContent("Create");
+ Vector2 createSize = GUI.skin.button.CalcSize(createLabel);
+
+ rect = EditorGUILayout.GetControlRect(true);
+ rect.width -= createSize.x;
+
+ EditorGUI.PropertyField(rect, vcamProperty, kVirtualCameraLabel);
+ rect.x += rect.width; rect.width = createSize.x;
+ if (GUI.Button(rect, createLabel))
+ {
+ vcam = CreatePassiveVcamFromSceneView();
+ vcamProperty.exposedReferenceValue = vcam;
+ }
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ EditorGUI.BeginChangeCheck();
+ DrawRemainingPropertiesInInspector();
+
+ if (vcam != null)
+ DrawSubeditors(vcam);
+
+ // by default timeline rebuilds the entire graph when something changes,
+ // but if a property of the virtual camera changes, we only need to re-evaluate the timeline.
+ // this prevents flicker on post processing updates
+ if (EditorGUI.EndChangeCheck())
+ {
+ TimelineEditor.Refresh(RefreshReason.SceneNeedsUpdate);
+ GUI.changed = false;
+ }
+ }
+
+ void DrawSubeditors(CinemachineVirtualCameraBase vcam)
+ {
+ // Create an editor for each of the cinemachine virtual cam and its components
+ GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold };
+ UpdateComponentEditors(vcam);
+ if (m_editors != null)
+ {
+ foreach (UnityEditor.Editor e in m_editors)
+ {
+ if (e == null || e.target == null || (e.target.hideFlags & HideFlags.HideInInspector) != 0)
+ continue;
+
+ // Separator line - how do you make a thinner one?
+ GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) } );
+
+ bool expanded = true;
+ if (!s_EditorExpanded.TryGetValue(e.target.GetType(), out expanded))
+ expanded = true;
+ expanded = EditorGUILayout.Foldout(
+ expanded, e.target.GetType().Name, true, foldoutStyle);
+ if (expanded)
+ e.OnInspectorGUI();
+ s_EditorExpanded[e.target.GetType()] = expanded;
+ }
+ }
+ }
+
+ CinemachineVirtualCameraBase m_cachedReferenceObject;
+ UnityEditor.Editor[] m_editors = null;
+ static Dictionary s_EditorExpanded = new Dictionary();
+
+ void UpdateComponentEditors(CinemachineVirtualCameraBase obj)
+ {
+ MonoBehaviour[] components = null;
+ if (obj != null)
+ components = obj.gameObject.GetComponents();
+ int numComponents = (components == null) ? 0 : components.Length;
+ int numEditors = (m_editors == null) ? 0 : m_editors.Length;
+ if (m_cachedReferenceObject != obj || (numComponents + 1) != numEditors)
+ {
+ DestroyComponentEditors();
+ m_cachedReferenceObject = obj;
+ if (obj != null)
+ {
+ m_editors = new UnityEditor.Editor[components.Length + 1];
+ CreateCachedEditor(obj.gameObject.GetComponent(), null, ref m_editors[0]);
+ for (int i = 0; i < components.Length; ++i)
+ CreateCachedEditor(components[i], null, ref m_editors[i + 1]);
+ }
+ }
+ }
+
+ void DestroyComponentEditors()
+ {
+ m_cachedReferenceObject = null;
+ if (m_editors != null)
+ {
+ for (int i = 0; i < m_editors.Length; ++i)
+ {
+ if (m_editors[i] != null)
+ UnityEngine.Object.DestroyImmediate(m_editors[i]);
+ m_editors[i] = null;
+ }
+ m_editors = null;
+ }
+ }
+ }
+//}
+#endif
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs.meta
new file mode 100644
index 00000000..9b938dfd
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Timeline/CinemachineShotEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f24a4388d07ef494e8516cb859803e09
+timeCreated: 1484435492
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility.meta
new file mode 100644
index 00000000..5dc84001
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 29d58ccb958d24942bf23fafcec87c0b
+folderAsset: yes
+timeCreated: 1489096338
+licenseType: Pro
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs
new file mode 100644
index 00000000..5a00d48b
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs
@@ -0,0 +1,137 @@
+using UnityEditor;
+using System;
+using System.Collections.Generic;
+using Cinemachine.Utility;
+using System.Linq.Expressions;
+
+namespace Cinemachine.Editor
+{
+ ///
+ /// A convenience base class for making inspector editors.
+ ///
+ /// The class we're editing
+ public class BaseEditor : UnityEditor.Editor where T : class
+ {
+ ///
+ /// The target object, cast as the same class as the object being edited
+ ///
+ protected T Target { get { return target as T; } }
+
+ ///
+ /// Return the Serialized property for a field, and exclude it from being automatically
+ /// displayed in the inspector. Call this when you need to provide a custom UX for a field.
+ ///
+ /// Magic experssion code
+ /// Call format is FindAndExcludeProperty(x => x.myField)
+ /// The serialized property for the field
+ protected SerializedProperty FindAndExcludeProperty(Expression> expr)
+ {
+ SerializedProperty p = FindProperty(expr);
+ ExcludeProperty(p.name);
+ return p;
+ }
+
+ ///
+ /// Return the Serialized property for a field.
+ ///
+ /// Magic experssion code
+ /// Call format is FindProperty(x => x.myField)
+ /// The serialized property for the field
+ protected SerializedProperty FindProperty(Expression> expr)
+ {
+ return serializedObject.FindProperty(FieldPath(expr));
+ }
+
+ ///
+ /// Magic code to get the string name of a field. Will not build if the field name changes.
+ ///
+ /// Magic experssion code
+ /// Call format is FieldPath(x => x.myField)
+ /// The string name of the field
+ protected string FieldPath(Expression> expr)
+ {
+ return ReflectionHelpers.GetFieldPath(expr);
+ }
+
+ /// Obsolete, do not use. Use the overload, which is more performant
+ /// List of property names to exclude
+ protected virtual List GetExcludedPropertiesInInspector() { return mExcluded; }
+
+ /// Get the property names to exclude in the inspector.
+ /// Add the names to this list
+ protected virtual void GetExcludedPropertiesInInspector(List excluded)
+ {
+ excluded.Add("m_Script");
+ }
+
+ ///
+ /// Exclude a property from automatic inclusion in the inspector
+ /// when DrawRemainingPropertiesInInspector() is called
+ ///
+ /// The property to exclude
+ protected void ExcludeProperty(string propertyName)
+ {
+ mExcluded.Add(propertyName);
+ }
+
+ /// Check whenther a property is in the excluded list
+ /// The property to check
+ /// True if property is excluded from automatic inclusion in the inspector
+ /// when DrawRemainingPropertiesInInspector() is called
+ protected bool IsPropertyExcluded(string propertyName)
+ {
+ return mExcluded.Contains(propertyName);
+ }
+
+ ///
+ /// Draw the inspector
+ ///
+ public override void OnInspectorGUI()
+ {
+ BeginInspector();
+ DrawRemainingPropertiesInInspector();
+ }
+
+ List mExcluded = new List();
+
+ ///
+ /// Clients should call this at the start of OnInspectorGUI.
+ /// Updates the serialized object and Sets up for excluded properties.
+ ///
+ protected virtual void BeginInspector()
+ {
+ serializedObject.Update();
+ mExcluded.Clear();
+ GetExcludedPropertiesInInspector(mExcluded);
+ }
+
+ ///
+ /// Draw a property in the inspector, if it is not excluded.
+ /// Property is marked as drawn, so will not be drawn again
+ /// by DrawRemainingPropertiesInInspector()
+ ///
+ /// The property to draw
+ protected virtual void DrawPropertyInInspector(SerializedProperty p)
+ {
+ if (!IsPropertyExcluded(p.name))
+ {
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(p);
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ ExcludeProperty(p.name);
+ }
+ }
+
+ ///
+ /// Draw all remaining unexcluded undrawn properties in the inspector.
+ ///
+ protected void DrawRemainingPropertiesInInspector()
+ {
+ EditorGUI.BeginChangeCheck();
+ DrawPropertiesExcluding(serializedObject, mExcluded.ToArray());
+ if (EditorGUI.EndChangeCheck())
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs.meta b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs.meta
new file mode 100644
index 00000000..aa543296
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/BaseEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 15ef94834d9e4aa44ac8fe619843346b
+timeCreated: 1506620939
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineEditorAnalytics.cs b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineEditorAnalytics.cs
new file mode 100644
index 00000000..39a82674
--- /dev/null
+++ b/Library/PackageCache/com.unity.cinemachine@2.9.5/Editor/Utility/CinemachineEditorAnalytics.cs
@@ -0,0 +1,248 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+namespace Cinemachine.Editor
+{
+ [InitializeOnLoad]
+ static class CinemachineEditorAnalytics
+ {
+ const int k_MaxEventsPerHour = 360;
+ const int k_MaxNumberOfElements = 1000;
+ const string k_VendorKey = "unity.cinemachine";
+
+ // register an event handler when the class is initialized
+ static CinemachineEditorAnalytics()
+ {
+ EditorApplication.playModeStateChanged += SendAnalyticsOnPlayEnter;
+ }
+
+ ///
+ /// Send analytics event when using Create -> Cinemachine menu
+ ///
+ /// Name of the vcam created
+ public static void SendCreateEvent(string name)
+ {
+ if (!EditorAnalytics.enabled)
+ return;
+
+ var data = new CreateEventData
+ {
+ vcam_created = name,
+ };
+
+ // Register our event
+ EditorAnalytics.RegisterEventWithLimit("cm_create_vcam",
+ k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey);
+
+ // Send the data to the database
+ EditorAnalytics.SendEventWithLimit("cm_create_vcam", data);
+ }
+
+ struct CreateEventData
+ {
+ public string vcam_created; // vcam created from Create -> Cinemachine menu
+ }
+
+ ///
+ /// Send analytics event when using entering playmode
+ ///
+ /// State change to detect entering playmode
+ static void SendAnalyticsOnPlayEnter(PlayModeStateChange state)
+ {
+ // Only send analytics if it is enabled
+ if (!EditorAnalytics.enabled)
+ return;
+
+ // Only send data when entering playmode
+ if (state != PlayModeStateChange.EnteredPlayMode)
+ return;
+
+ var startTime = Time.realtimeSinceStartup;
+
+ var cinemachineCore = CinemachineCore.Instance;
+ var vcamCount = cinemachineCore.VirtualCameraCount;
+ var vcamDatas = new List();
+
+ // collect data from all vcams
+ for (int i = 0; i < vcamCount; ++i)
+ {
+ var vcamBase = cinemachineCore.GetVirtualCamera(i);
+ CollectData(vcamBase, i.ToString(), ref vcamDatas);
+ }
+
+ var projectData = new ProjectData
+ {
+ brain_count = cinemachineCore.BrainCount,
+ vcam_count = cinemachineCore.VirtualCameraCount,
+ cam_count = Camera.allCamerasCount,
+ vcams = vcamDatas,
+ time_elapsed = Time.realtimeSinceStartup - startTime,
+ };
+
+ // Register our event
+ EditorAnalytics.RegisterEventWithLimit("cm_vcams_on_play",
+ k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey);
+
+ // Send the data to the database
+ EditorAnalytics.SendEventWithLimit("cm_vcams_on_play", projectData);
+ }
+
+ static void CollectData(CinemachineVirtualCameraBase vcamBase, string id, ref List vcamDatas)
+ {
+ if (vcamBase == null) return;
+
+ var vcamData = new VcamData(id, vcamBase);
+
+ // VirtualCamera
+ var vcam = vcamBase as CinemachineVirtualCamera;
+ if (vcam != null)
+ {
+ vcamData.SetTransitionsAndLens(vcam.m_Transitions, vcam.m_Lens);
+ vcamData.SetComponents(vcam.GetComponentPipeline());
+
+ vcamDatas.Add(vcamData);
+ return;
+ }
+
+#if CINEMACHINE_EXPERIMENTAL_VCAM
+ // NewVirtualCamera or NewFreeLook
+ var vcamNew = vcamBase as CinemachineNewVirtualCamera;
+ if (vcamNew != null)
+ {
+ vcamData.SetTransitionsAndLens(vcamNew.m_Transitions, vcamNew.m_Lens);
+ vcamData.SetComponents(vcamNew.ComponentCache);
+
+ vcamDatas.Add(vcamData);
+ return;
+ }
+#endif
+
+ // Composite vcam (Freelook, Mixing, StateDriven, ClearShot...):
+ var freeLook = vcamBase as CinemachineFreeLook;
+ if (freeLook != null)
+ {
+ vcamData.SetTransitionsAndLens(freeLook.m_Transitions, freeLook.m_Lens);
+ }
+ vcamDatas.Add(vcamData);
+
+ var vcamChildren =
+ vcamBase.GetComponentsInChildren();
+ for (var c = 1; c < vcamChildren.Length; c++)
+ {
+ if ((CinemachineVirtualCameraBase)vcamChildren[c].ParentCamera == vcamBase)
+ CollectData(vcamChildren[c], id + "." + c, ref vcamDatas);
+ }
+ }
+
+ [Serializable]
+ struct ProjectData
+ {
+ public int brain_count;
+ public int vcam_count;
+ public int cam_count;
+ public List vcams;
+ public float time_elapsed;
+ }
+
+ [Serializable]
+ struct VcamData
+ {
+ public string id;
+ public string vcam_class;
+ public bool has_follow_target;
+ public bool has_lookat_target;
+ public string blend_hint;
+ public bool inherit_position;
+ public string standby_update;
+ public string mode_overwrite;
+ public string body_component;
+ public string aim_component;
+ public string noise_component;
+ public int custom_component_count;
+ public string[] extensions;
+ public int custom_extension_count;
+
+ public VcamData(string id, CinemachineVirtualCameraBase vcamBase) : this()
+ {
+ var _ = 0;
+
+ this.id = id;
+ vcam_class = GetTypeName(vcamBase.GetType(), ref _);
+ has_follow_target = vcamBase.Follow != null;
+ has_lookat_target = vcamBase.LookAt != null;
+ blend_hint = "";
+ inherit_position = false;
+ standby_update = vcamBase.m_StandbyUpdate.ToString();
+ mode_overwrite = "";
+ body_component = "";
+ aim_component = "";
+ noise_component = "";
+ custom_component_count = 0;
+ custom_extension_count = 0;
+ var vcamExtensions = vcamBase.mExtensions;
+ if (vcamExtensions != null)
+ {
+ extensions = new string[vcamExtensions.Count];
+ for (var i = 0; i < vcamExtensions.Count; i++)
+ {
+ extensions[i] = (GetTypeName(vcamExtensions[i].GetType(), ref custom_extension_count));
+ }
+ }
+ else
+ {
+ extensions = Array.Empty