diff --git a/JNFrame/Assembly-CSharp-firstpass.csproj b/JNFrame/Assembly-CSharp-firstpass.csproj
index 91f45a6c..0a347a9b 100644
--- a/JNFrame/Assembly-CSharp-firstpass.csproj
+++ b/JNFrame/Assembly-CSharp-firstpass.csproj
@@ -26,7 +26,7 @@
full
false
Temp\Bin\Debug\Assembly-CSharp-firstpass\
- UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER
+ UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER
prompt
4
0169,0649
@@ -41,1614 +41,1604 @@
false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1656,838 +1646,728 @@
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collections@2.1.4\Unity.Collections.LowLevel.ILSupport\Unity.Collections.LowLevel.ILSupport.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.nuget.mono-cecil@1.11.4\Mono.Cecil.dll
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Burst.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.ScriptableBuildPipeline.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Build.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.UI.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Hybrid.HybridComponents.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Collections.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Deformations.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Collections.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.ConversionSystem.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Profiling.Core.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Extensions.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Burst.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Transforms.Hybrid.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Serialization.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Transforms.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Serialization.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Scenes.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Updater.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.UI.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Editor.Properties.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Extensions.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Scenes.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.ScriptableBuildPipeline.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Editor.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll
-
- {6d8bd378-3e5b-6997-5e5e-288243f0f72b}
- UniTask.Addressables
-
-
- {39f5acb9-cdbb-9f48-497c-14159a0afd38}
- UniTask
-
{4b964c85-7c9d-2d07-a2e0-8595262e4e96}
UniTask.TextMeshPro
-
- {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}
- UniTask.Linq
-
-
- {6c77f70f-94c0-0341-8580-4ff86d3829d8}
- Unity.Physics.Custom.Editor
-
{99c4c7d2-ca96-1038-95e0-77e225df2b06}
UniTask.DOTween
-
- {6cba97c2-002e-3d01-6201-151703fd08f3}
- Unity.Physics.Custom
+
+ {39f5acb9-cdbb-9f48-497c-14159a0afd38}
+ UniTask
+
+
+ {6d8bd378-3e5b-6997-5e5e-288243f0f72b}
+ UniTask.Addressables
+
+
+ {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}
+ UniTask.Linq
diff --git a/JNFrame/Assembly-CSharp.csproj b/JNFrame/Assembly-CSharp.csproj
index 61ac3c95..4614022e 100644
--- a/JNFrame/Assembly-CSharp.csproj
+++ b/JNFrame/Assembly-CSharp.csproj
@@ -26,7 +26,7 @@
full
false
Temp\Bin\Debug\Assembly-CSharp\
- UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER
+ UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER
prompt
4
0169,0649
@@ -41,841 +41,725 @@
false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
-
-
+
+
-
+
+
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll
+
+
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collections@2.1.4\Unity.Collections.LowLevel.ILSupport\Unity.Collections.LowLevel.ILSupport.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.nuget.mono-cecil@1.11.4\Mono.Cecil.dll
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll
- D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll
-
-
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll
- C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Burst.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.ScriptableBuildPipeline.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Build.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.UI.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Hybrid.HybridComponents.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Collections.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Deformations.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Physics.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Collections.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.ConversionSystem.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Profiling.Core.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Extensions.Hybrid.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Burst.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll
+ D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Transforms.Hybrid.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Serialization.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Transforms.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Serialization.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Scenes.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Updater.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.UI.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Editor.Properties.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Mathematics.Extensions.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll
+
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Scenes.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.ScriptableBuildPipeline.Editor.dll
-
-
- D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Entities.Editor.dll
+
+ D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll
@@ -883,33 +767,25 @@
{e5544f0c-cd3e-f7be-dc52-046b131df43d}
Assembly-CSharp-firstpass
-
- {6d8bd378-3e5b-6997-5e5e-288243f0f72b}
- UniTask.Addressables
-
-
- {39f5acb9-cdbb-9f48-497c-14159a0afd38}
- UniTask
-
{4b964c85-7c9d-2d07-a2e0-8595262e4e96}
UniTask.TextMeshPro
-
- {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}
- UniTask.Linq
-
-
- {6c77f70f-94c0-0341-8580-4ff86d3829d8}
- Unity.Physics.Custom.Editor
-
{99c4c7d2-ca96-1038-95e0-77e225df2b06}
UniTask.DOTween
-
- {6cba97c2-002e-3d01-6201-151703fd08f3}
- Unity.Physics.Custom
+
+ {39f5acb9-cdbb-9f48-497c-14159a0afd38}
+ UniTask
+
+
+ {6d8bd378-3e5b-6997-5e5e-288243f0f72b}
+ UniTask.Addressables
+
+
+ {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}
+ UniTask.Linq
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4.meta
similarity index 77%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2.meta
rename to JNFrame/Assets/Packages/BepuPhysics.2.3.4.meta
index cfdb59e9..2545dc79 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2.meta
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 1435edfef9c5969418a51104922af85c
+guid: 31356a43a7579d34d9b102dbfe1b77e4
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/.signature.p7s b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/.signature.p7s
new file mode 100644
index 00000000..c2799fa8
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/.signature.p7s differ
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec
new file mode 100644
index 00000000..12630556
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec
@@ -0,0 +1,21 @@
+
+
+
+ BepuPhysics
+ 2.3.4
+ Ross Nordby
+ Apache-2.0
+ https://licenses.nuget.org/Apache-2.0
+ bepuphysicslogo256.png
+ https://github.com/bepu/bepuphysics2
+ Speedy real time physics simulation library.
+ © Bepu Entertainment LLC
+ physics 3d rigid body real time simulation
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JNFrame/Assets/Scenes/Mode/New Scene 1.unity.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta
similarity index 74%
rename from JNFrame/Assets/Scenes/Mode/New Scene 1.unity.meta
rename to JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta
index 0761113a..041213a1 100644
--- a/JNFrame/Assets/Scenes/Mode/New Scene 1.unity.meta
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 5a9ccc9dbf1a91947bdb5db9e8bb9610
+guid: 267f4a03f7790b745967bfbd68e0095d
DefaultImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png
new file mode 100644
index 00000000..5d395e1f
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png differ
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta
new file mode 100644
index 00000000..0986520a
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta
@@ -0,0 +1,127 @@
+fileFormatVersion: 2
+guid: eedc788daf73e8b46ad39b7553f7df0b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 12
+ 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
+ ignoreMipmapLimit: 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
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Server
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib.meta
similarity index 77%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib.meta
rename to JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib.meta
index 6cda140f..df201d68 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib.meta
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 736ce6b581f4a124b9ff225ee55ca2b8
+guid: f1d65185644671f4c9a60dbc6733303c
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0.meta
similarity index 77%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0.meta
rename to JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0.meta
index 2f6e5ce6..e60863f9 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0.meta
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 4238dd05a5a67de4ea235923baaa8b9a
+guid: 5ce6ef99def540a43a92f3be35cca4cd
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll
new file mode 100644
index 00000000..838097e4
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll differ
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta
new file mode 100644
index 00000000..d749cf27
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: b405948c0480ad843b6aa640c7ffd28a
+labels:
+- NuGetForUnity
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml
new file mode 100644
index 00000000..6c15177e
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml
@@ -0,0 +1,6303 @@
+
+
+
+ BepuPhysics
+
+
+
+
+ Handles the movement of constraints from higher indexed batches into lower indexed batches to avoid accumulating a bunch of unnecessary ConstraintBatches.
+
+
+
+
+ Gets or sets the desired number of candidates to analyze as a fraction of the total number of constraints.
+
+
+
+
+ Gets or sets the maximum number of constraint moves that can occur in a single execution of Compress as a fraction of the total number of constraints.
+
+
+
+
+ Index of the constraint batch to optimize.
+
+
+
+
+ Incrementally finds and applies a set of compressions to apply to the constraints in the solver's batches.
+ Constraints in higher index batches try to move to lower index batches whenever possible.
+
+
+
+
+ Index of the set owning the body reference. If the island index is 0, the body is active.
+
+
+
+
+ Index of the body within its owning set. If the body is active (and so the Island index is -1), this is an index into the Bodies data arrays.
+ If it is nonnegative, it is an index into the inactive island
+
+
+
+
+ Collection of all allocated bodies.
+
+
+
+
+ Remaps a body handle integer value to the actual array index of the body.
+ The backing array index may change in response to cache optimization.
+
+
+
+
+ The set of existing bodies. The slot at index 0 contains all active bodies. Later slots, if allocated, contain the bodies associated with inactive islands.
+ Note that this buffer does not necessarily contain contiguous elements. When a set is removed, a gap remains.
+
+
+
+
+ Gets a reference to the active set, stored in the index 0 of the Sets buffer.
+
+ Reference to the active body set.
+
+
+
+ The world transformed inertias of active bodies as of the last update. Note that this is not automatically updated for direct orientation changes or for body memory moves.
+ It is only updated once during the frame. It should be treated as ephemeral information.
+
+
+
+
+ Gets or sets the minimum constraint capacity for each body. Future resizes or allocations will obey this minimum, but changing this does not immediately resize existing lists.
+
+
+
+
+ Constructs a new bodies collection. Initialize must be called for the instance to be ready for use.
+
+ Pool for the collection to pull persistent allocations from.
+ Shapes referenced by the collection's bodies.
+ Broad phase containing the body collidables.
+ Initial number of bodies to allocate space for in the active set.
+ Initial number of islands to allocate space for in the Sets buffer.
+ Expected number of constraint references per body to allocate space for.
+
+
+
+ Initializes the bodies set. Used to complete bidirectional dependencies.
+
+ Solver responsible for the constraints connected to the collection's bodies.
+ Island awakener to use when bodies undergo transitions requiring that they exist in the active set.
+
+
+
+ Updates the bounds held within the broad phase for the body's current state. Does not expand the bounding box by velocity. If there is no shape associated with the body, this does nothing.
+
+
+
+
+ Adds a new active body to the simulation.
+
+ Description of the body to add.
+ Handle of the created body.
+
+
+
+ Removes an active body by its index. Any constraints connected to this body will be removed. Assumes that the input location is valid.
+
+ Index of the active body.
+
+
+
+ Removes a body from the set by its handle. If the body is inactive, all bodies in its island will be forced active.
+
+ Handle of the body to remove.
+
+
+
+ Adds a constraint to an active body's constraint list.
+
+ Index of the body to add the constraint to.
+ Handle of the constraint to add.
+ Index of the body in the constraint.
+
+
+
+ Removes a constraint from an active body's constraint list.
+
+ Index of the active body.
+ Handle of the constraint to remove.
+
+
+
+ Gets whether the inertia matches that of a kinematic body (that is, all inverse mass and inertia components are zero).
+
+ Body inertia to analyze.
+ True if all components of inverse mass and inertia are zero, false otherwise.
+
+
+
+ Gets whether the angular inertia matches that of a kinematic body (that is, all inverse inertia tensor components are zero).
+
+ Body inertia to analyze.
+ True if all components of inverse mass and inertia are zero, false otherwise.
+
+
+
+ Changes the local mass and inertia tensor associated with a body. Properly handles the transition between kinematic and dynamic.
+ If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed.
+ Wakes up the body.
+
+ Handle of the body whose inertia should change.
+ New local inertia for the body.
+
+ This function is only necessary when the inertia change could potentially result in a transition between dynamic and kinematic states.
+ If it is guaranteed to be dynamic before and after the change, the inertia can be directly modified without issue.
+
+
+
+
+ Changes the shape of a body. Properly handles the transition between shapeless and shapeful. If the body is inactive, it will be forced awake.
+ Updates the bounds of the body in the broad phase.
+
+ Handle of the body to change the shape of.
+ Index of the new shape to use for the body.
+
+
+
+ Applies a description to a body. Properly handles any transitions between dynamic and kinematic and between shapeless and shapeful.
+ If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed. Wakes up the body.
+ Updates the bounds of the body in the broad phase.
+
+ Handle of the body to receive the description.
+ Description to apply to the body.
+
+
+
+ Gets the description of a body by handle.
+
+ Handle of the body to look up.
+ Description of the body.
+
+
+
+ Gets a reference to a body by its handle.
+
+ Handle of the body to grab a reference of.
+ Reference to the desired body.
+
+
+
+ Checks whether a body handle is currently registered with the bodies set.
+
+ Handle to check for.
+ True if the handle exists in the collection, false otherwise.
+
+
+
+ Gathers inertia for one body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of bodies in the bundle.
+ Gathered inertia of body A.
+ Gathered inertia of body B.
+
+
+
+ Gathers inertia for two body bundles into AOSOA bundles.
+
+ Active body indices being gathered.
+ Number of bodies in the bundle.
+ Gathered inertia of body A.
+ Gathered inertia of body B.
+
+
+
+ Gathers inertia for three body bundles into AOSOA bundles.
+
+ Active body indices being gathered.
+ Number of bodies in the bundle.
+ Gathered inertia of body A.
+ Gathered inertia of body B.
+ Gathered inertia of body C.
+
+
+
+ Gathers inertia for four body bundles into AOSOA bundles.
+
+ Active body indices being gathered.
+ Number of bodies in the bundle.
+ Gathered inertia of body A.
+ Gathered inertia of body B.
+ Gathered inertia of body C.
+ Gathered inertia of body D.
+
+
+
+ Gathers orientations for two body bundles into AOSOA bundles.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered orientation of body A.
+ Gathered orientation of body B.
+
+
+
+ Gathers orientations for one body bundles into AOSOA bundles.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered orientation of bodies in the bundle.
+
+
+
+ Gathers pose information for a body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered absolute position of the body.
+ Gathered orientation of the body.
+
+
+
+ Gathers orientations and relative positions for a two body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered offsets from body A to body B.
+ Gathered orientation of body A.
+ Gathered orientation of body B.
+
+
+
+ Gathers relative positions for a two body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered offset from body A to of body B.
+
+
+
+ Gathers relative positions for a three body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered offset from body A to of body B.
+ Gathered offset from body A to of body C.
+
+
+
+ Gathers relative positions for a four body bundle into an AOSOA bundle.
+
+ Active body indices being gathered.
+ Number of body pairs in the bundle.
+ Gathered offset from body A to of body B.
+ Gathered offset from body A to of body C.
+ Gathered offset from body A to of body D.
+
+
+
+ Gathers velocities for one body bundle and stores it into a velocity bundle.
+
+ Active set indices of the bodies to gather velocity data for.
+ Number of bodies in the bundle.
+ Gathered velocities.
+
+
+
+ Gathers velocities for two body bundles and stores it into velocity bundles.
+
+ Active set indices of the bodies to gather velocity data for.
+ Number of body pairs in the bundle.
+ Gathered velocities of A bodies.
+ Gathered velocities of B bodies.
+
+
+
+ Gathers velocities for three body bundles and stores it into velocity bundles.
+
+ Active set indices of the bodies to gather velocity data for.
+ Number of body pairs in the bundle.
+ Gathered velocities of A bodies.
+ Gathered velocities of B bodies.
+ Gathered velocities of C bodies.
+
+
+
+ Gathers velocities for four body bundles and stores it into velocity bundles.
+
+ Active set indices of the bodies to gather velocity data for.
+ Number of body pairs in the bundle.
+ Gathered velocities of A bodies.
+ Gathered velocities of B bodies.
+ Gathered velocities of C bodies.
+ Gathered velocities of D bodies.
+
+
+
+ Scatters velocities for one body bundle into the active body set.
+
+ Velocities of body bundle A to scatter.
+ Active set indices of the bodies to scatter velocity data to.
+ Number of body pairs in the bundle.
+
+
+
+ Scatters velocities for two body bundles into the active body set.
+
+ Velocities of body bundle A to scatter.
+ Velocities of body bundle B to scatter.
+ Active set indices of the bodies to scatter velocity data to.
+ Number of body pairs in the bundle.
+
+
+
+ Scatters velocities for three body bundles into the active body set.
+
+ Velocities of body bundle A to scatter.
+ Velocities of body bundle B to scatter.
+ Velocities of body bundle A to scatter.
+ Active set indices of the bodies to scatter velocity data to.
+ Number of body pairs in the bundle.
+
+
+
+ Scatters velocities for four body bundles into the active body set.
+
+ Velocities of body bundle A to scatter.
+ Velocities of body bundle B to scatter.
+ Velocities of body bundle A to scatter.
+ Velocities of body bundle B to scatter.
+ Active set indices of the bodies to scatter velocity data to.
+ Number of body pairs in the bundle.
+
+
+
+ Enumerates all the bodies connected to a given active body.
+ Bodies which are connected by more than one constraint will be reported multiple times.
+
+ Type of the enumerator to execute on each connected body.
+ Index of the active body to enumerate the connections of. This body will not appear in the set of enumerated bodies, even if it is connected to itself somehow.
+ Enumerator instance to run on each connected body.
+ Solver from which to pull constraint body references.
+
+
+
+ Enumerates all the bodies connected to a given body.
+ Bodies which are connected by more than one constraint will be reported multiple times.
+
+ Type of the enumerator to execute on each connected body.
+ Handle of the body to enumerate the connections of. This body will not appear in the set of enumerated bodies, even if it is connected to itself somehow.
+ Enumerator instance to run on each connected body.
+ Solver from which to pull constraint body references.
+
+
+
+ Clears all bodies from all sets without releasing any memory that wouldn't be released by a sequence of regular removals.
+
+
+
+
+ Reallocates the inertias buffer for the target capacity. Will not shrink below the size of the current active set.
+
+
+
+
+ Guarantees that the inertias capacity is sufficient for the given capacity.
+
+
+
+
+ Resizes the allocated spans for active body data. Note that this is conservative; it will never orphan existing objects.
+
+ Target body data capacity.
+
+
+
+ Resizes all active body constraint lists to meet the MinimumConstraintCapacityPerBody. Inactive bodies are untouched.
+ Resizes are guaranteed to never shrink a list below the current count.
+
+
+
+
+ Increases the size of active body buffers if needed to hold the target capacity.
+
+ Target data capacity.
+
+
+
+ Ensures all active body constraint lists can hold at least MinimumConstraintCapacityPerBody constraints. Inactive bodies are untouched.
+
+
+
+
+ Returns all body resources to the pool used to create them.
+
+ The object can be reused if it is reinitialized by using EnsureCapacity or Resize.
+
+
+
+ Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity).
+
+
+
+
+ The number of time steps that the body must be under the sleep threshold before the body becomes a sleep candidate.
+ Note that the body is not guaranteed to go to sleep immediately after meeting this minimum.
+
+
+
+
+ Creates a body activity description.
+
+ Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity).
+ The number of time steps that the body must be under the sleep threshold before the body becomes a sleep candidate.
+ Note that the body is not guaranteed to go to sleep immediately after meeting this minimum.
+
+
+
+ Computes a decent default speculative margin for a shape based on its minimum and maximum radii.
+
+ Type of the shape to compute a speculative margin for.
+ Shape to compute a speculative margin for.
+ Speculative margin for the given shape.
+
+
+
+ Computes a decent default activity description for a shape.
+
+ Type of the shape to create an activity description for.
+ Shape to create an activity description for.
+ Default activity description for the given shape.
+
+
+
+ Creates a dynamic body description.
+
+ Pose of the body.
+ Initial velocity of the body.
+ Local inertia of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with zero initial velocity.
+
+ Pose of the body.
+ Local inertia of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with identity orientation.
+
+ Position of the body.
+ Initial velocity of the body.
+ Local inertia of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with zero initial velocity and identity orientation.
+
+ Position of the body.
+ Local inertia of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Pose of the body.
+ Initial velocity of the body.
+ Mass of the body. The inertia tensor will be calculated based on this mass and the shape.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with identity orientation and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Position of the body.
+ Initial velocity of the body.
+ Mass of the body. The inertia tensor will be calculated based on this mass and the shape.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with zero initial velocity and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Pose of the body.
+ Mass of the body. The inertia tensor will be calculated based on this mass and the shape.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a dynamic body description with zero initial velocity, identity orientation, and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Position of the body.
+ Mass of the body. The inertia tensor will be calculated based on this mass and the shape.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description.
+
+ Pose of the body.
+ Initial velocity of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with zero initial velocity.
+
+ Pose of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with identity orientation.
+
+ Position of the body.
+ Initial velocity of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with identity orientation and zero initial velocity.
+
+ Position of the body.
+ Collidable to associate with the body.
+ Activity settings for the body.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Pose of the body.
+ Initial velocity of the body.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with identity orientation and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Position of the body.
+ Initial velocity of the body.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with zero initial velocity and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Pose of the body.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Creates a kinematic body description with zero initial velocity, identity orientation, and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set.
+
+ Type of the shape to create a body for.
+ Position of the body.
+ Shape collection to add the shape to.
+ Shape to add to the shape set and to create the body from.
+ Constructed description for the body.
+
+
+
+ Incrementally changes the layout of a set of bodies to minimize the cache misses associated with the solver and other systems that rely on connection following.
+
+
+
+
+ Gets or sets the fraction of all bodies to update each frame.
+
+
+
+
+ Represents a rigid transformation.
+
+
+
+
+ Transforms a vector by the rigid pose: v * pose.Orientation + pose.Position.
+
+ Vector to transform.
+ Pose to transform the vector with.
+ Transformed vector.
+
+
+
+ Transforms a vector by the inverse of a rigid pose: (v - pose.Position) * pose.Orientation^-1.
+
+ Vector to transform.
+ Pose to invert and transform the vector with.
+ Transformed vector.
+
+
+
+ Inverts the rigid transformation of the pose.
+
+ Pose to invert.
+ Inverse of the pose.
+
+
+
+ Concatenates one rigid transform with another. The resulting transform is equivalent to performing transform a followed by transform b.
+
+ First transform to concatenate.
+ Second transform to concatenate.
+ Result of the concatenation.
+
+
+
+ Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity).
+ Setting this to a negative value guarantees the body cannot go to sleep without user action.
+
+
+
+
+ The number of time steps that the body must be under the sleep threshold before the body becomes a sleeping candidate.
+ Note that the body is not guaranteed to go to sleep immediately after meeting this minimum.
+
+
+
+
+ If the body is awake, this is the number of time steps that the body has had a velocity below the sleep threshold.
+
+
+
+
+ True if this body is a candidate for being slept. If all the bodies that it is connected to by constraints are also candidates, this body may go to sleep.
+
+
+
+
+ Convenience structure for directly referring to a body's properties.
+
+ Note that this type makes no attempt to protect against unsafe modification of body properties, nor does modifying its properties try to wake up bodies if they are asleep.
+
+
+
+ Handle of the body that this reference refers to.
+
+
+
+
+ The bodies collection containing the body.
+
+
+
+
+ Constructs a new body reference.
+
+ Handle of the body to refer to.
+ Collection containing the body.
+
+
+
+ Gets whether the body reference exists within the body set. True if the handle maps to a valid memory location that agrees that the handle points to it, false otherwise.
+
+
+
+
+ Gets a reference to the body's memory location stored in the handle to location mapping.
+
+
+
+
+ Gets or sets whether the body is in the active set. Setting this to true will attempt to wake the body; setting it to false will force the body and any constraint-connected bodies asleep.
+
+
+
+
+ Gets a reference to the body's velocity.
+
+
+
+
+ Gets a reference to the body's pose.
+
+
+
+
+ Gets a reference to the body's collidable.
+
+
+
+
+ Gets a reference to the body's local inertia.
+
+
+
+
+ Gets a reference to the body's activity state.
+
+
+
+
+ Gets a reference to the list of the body's connected constraints.
+
+
+
+
+ Gets whether the body is kinematic, meaning its inverse inertia and mass are all zero.
+
+
+
+
+ Gets whether the body has locked inertia, meaning its inverse inertia tensor is zero.
+
+
+
+
+ If the body is dynamic, turns the body kinematic by setting all inverse inertia and mass values to zero and activates it.
+ Any constraints connected to the body that now only contain kinematic references are removed.
+ If the body is kinematic, does nothing.
+
+
+
+
+ Sets the body's local inertia to the provided inertia. Wakes up the body and correctly handles any transition between dynamic and kinematic states.
+ If the body moves from dynamic to kinematic, any constraints connected to the body that now only contain kinematic references are removed.
+
+
+
+
+ Computes the world space inverse inertia tensor for the body based on the LocalInertia and Pose.
+
+
+
+
+ Gets a description of the body.
+
+ Description of the body.
+
+
+
+ Sets a body's properties according to a description. Properly handles any transitions between dynamic and kinematic and between shapeless and shapeful.
+ If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed. Wakes up the body and updates its bounds in the broad phase.
+
+ Description of the body.
+
+
+
+ Changes the shape of a body. Properly handles the transition between shapeless and shapeful. If the body is inactive, it will be forced awake. Updates the bounds of the body in the broad phase.
+
+ Index of the new shape to use for the body.
+
+
+
+ Gets a copy of the body's bounding box. If the body has no shape, the bounding box has a min at float.MaxValue and a max at float.MinValue.
+
+
+
+
+ Gets direct pointers to the body's bounding box minimum and maximum in the broad phase. Outputs null if the body has no shape.
+
+ Pointer to the bounding box minimum in the broad phase. Null if the body has no shape.
+ Pointer to the bounding box maximum in the broad phase. Null if the body has no shape.
+ True if the body has a shape and bounds, false otherwise.
+
+
+
+ Updates the body's bounds in the broad phase for its current state. Does not include velocity expansion. Does nothing if the body has no shape.
+
+ Can be useful if you made modifications to the body's state that you want reflected in the broad phase before the next timestep.
+ For example, if you want to perform ray casts against the broad phase after moving objects around directly, their bounds must be updated or else the broad phase bounds will be out of date and the ray will likely miss.
+
+
+
+ Applies an impulse to a body by index. Does not wake the body up.
+
+ Pose of the body to apply impulse to.
+ Velocity of the body to apply impulse to.
+ Local inertia of the body to apply impulse to.
+ Impulse to apply to the body.
+ World space offset from the center of the body to apply the impulse at.
+
+
+
+ Applies an impulse to a body by index. Does not wake the body up.
+
+ Body set containing the body to apply an impulse to.
+ Index of the body in the body set.
+ Impulse to apply to the body.
+ World space offset from the center of the body to apply the impulse at.
+
+
+
+ Applies an angular impulse to an angular velocity. Does not wake the body up.
+
+ Impulse to apply to the velocity.
+ Inverse inertia tensor to transform the impulse with.
+ Angular velocity to be modified.
+
+
+
+ Applies an impulse to a linear velocity. Does not wake the body up.
+
+ Impulse to apply to the velocity.
+ Inverse mass to transform the impulse with.
+ Linear velocity to be modified.
+
+
+
+ Applies an impulse to a body at the given world space position. Does not modify activity states.
+
+ Impulse to apply to the body.
+ World space offset to apply the impulse at.
+
+
+
+ Applies an impulse to a linear velocity. Does not wake the body up.
+
+ Impulse to apply to the velocity.
+
+
+
+ Computes the velocity of an offset point attached to the body.
+
+ Offset from the body's center to
+ Effective velocity of the point if it were attached to the body.
+
+
+
+ Applies an angular impulse to an angular velocity. Does not wake the body up.
+
+ Impulse to apply to the velocity.
+
+
+
+ Stores a group of bodies- either the set of active bodies, or the bodies involved in an inactive simulation island.
+
+
+
+
+ Remaps a body index to its handle.
+
+
+
+
+ The collidables owned by each body in the set. Speculative margins, continuity settings, and shape indices can be changed directly.
+ Shape indices cannot transition between pointing at a shape and pointing at nothing or vice versa without notifying the broad phase of the collidable addition or removal.
+
+
+
+
+ Activity states of bodies in the set.
+
+
+
+
+ List of constraints associated with each body in the set.
+
+
+
+
+ Gets whether this instance is backed by allocated memory.
+
+
+
+
+ Swaps the memory of two bodies. Indexed by memory slot, not by handle index.
+
+ Memory slot of the first body to swap.
+ Memory slot of the second body to swap.
+
+
+
+ Disposes the buffers, but nothing inside of the buffers. Per-body constraint lists stored in the set will not be returned.
+
+ Pool to return the set's top level buffers to.
+
+
+
+ Disposes the body set's buffers and any resources within them.
+
+ Pool to return resources to.
+
+
+
+ Expands the bounding box surrounding a shape A in the local space of some other collidable B.
+
+
+
+
+ Computes the bounding box of a child shape A in the local space of some other collidable B with a sweep direction representing the net linear motion.
+
+
+
+
+ Computes the bounding box of shape A in the local space of some other collidable B with a sweep direction representing the net linear motion.
+
+
+
+
+ Convenience collection that stores extra properties about bodies and statics, indexed by the body or static handle.
+
+ Type of the data to store.
+ This is built for use cases relying on random access like the narrow phase. For maximum performance with sequential access, an index-aligned structure would be better.
+
+
+
+ Constructs a new collection to store handle-aligned body properties. Assumes the Initialize function will be called later to provide the Bodies collection.
+
+ Pool from which to pull internal resources. If null, uses the later Initialize-provided Bodies pool.
+
+
+
+ Constructs a new collection to store handle-aligned body and static properties.
+
+ Simulation to track.
+ Pool from which to pull internal resources. If null, uses the Simulation pool.
+
+
+
+ Initializes the property collection if the Bodies/Statics-less constructor was used.
+
+ Bodies collection to track.
+ Statics collection to track.
+
+
+
+ Gets a reference to the properties associated with a body's handle.
+
+ Body handle to retrieve the properties for.
+ Reference to properties associated with a body handle.
+
+
+
+ Gets a reference to the properties associated with a static's handle.
+
+ Static handle to retrieve the properties for.
+ Reference to properties associated with a static handle.
+
+
+
+ Gets a reference to the properties associated with a collidable.
+
+ Collidable to retrieve the properties for.
+ Reference to properties associated with a collidable.
+
+
+
+ Ensures there is space for a given body handle and returns a reference to the used memory.
+
+ Body handle to allocate for.
+ Reference to the data for the given body.
+
+
+
+ Ensures there is space for a given static handle and returns a reference to the used memory.
+
+ Static handle to allocate for.
+ Reference to the data for the given static.
+
+
+
+ Ensures there is space for a given collidable reference and returns a reference to the used memory.
+
+ Collidable reference to allocate for.
+ Reference to the data for the given collidable.
+
+
+
+ Ensures that the internal structures have at least the given capacity for bodies.
+
+ Capacity to ensure.
+
+
+
+ Ensures that the internal structures have at least the given capacity for statics.
+
+ Capacity to ensure.
+
+
+
+ Compacts the memory used by the collection for bodies to a safe minimum based on the Bodies collection.
+
+
+
+
+ Compacts the memory used by the collection for statics to a safe minimum based on the Statics collection.
+
+
+
+
+ Returns all held resources.
+
+
+
+
+ Compound shape containing a bunch of shapes accessible through a tree acceleration structure. Useful for compounds with lots of children.
+
+
+
+
+ Acceleration structure for the compound children.
+
+
+
+
+ Buffer of children within this compound.
+
+
+
+
+ Creates a compound shape with an acceleration structure.
+
+ Set of children in the compound.
+ Shapes set in which child shapes are allocated.
+ Pool to use to allocate acceleration structures.
+
+
+
+ Type id of compound shapes.
+
+
+
+
+ Collision shape representing a solid cuboid.
+
+
+
+
+ Half of the box's width along its local X axis.
+
+
+
+
+ Half of the box's height along its local Y axis.
+
+
+
+
+ Half of the box's length along its local Z axis.
+
+
+
+
+ Gets or sets the width of the box along its local X axis.
+
+
+
+
+ Gets or sets the height of the box along its local Y axis.
+
+
+
+
+ Gets or sets the length of the box along its local Z axis.
+
+
+
+
+ Creates a Box shape.
+
+ Width of the box along the local X axis.
+ Height of the box along the local Y axis.
+ Length of the box along the local Z axis.
+
+
+
+ Type id of box shapes.
+
+
+
+
+ Collision shape representing a sphere-expanded line segment.
+
+
+
+
+ Spherical expansion applied to the internal line segment.
+
+
+
+
+ Half of the length of the internal line segment. Oriented along the local Y axis.
+
+
+
+
+ Gets or sets the length of the capsule's internal line segment along the local Y axis.
+
+
+
+
+ Creates a capsule shape.
+
+ Radius of the capsule.
+ Length of the capsule's internal line segment along the local Y axis.
+
+
+
+ Type id of capsule shapes.
+
+
+
+
+ No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin.
+ The collidable's bounding box will not be expanded by velocity beyond the speculative margin.
+ This is the cheapest mode, but it may miss collisions. Note that if a Discrete mode collidable is moving quickly, the fact that its bounding box is not expanded
+ may cause it to miss a collision even with a non-Discrete collidable.
+
+
+
+
+ No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin.
+ The collidable's bounding box will be expanded by velocity beyond the speculative margin if necessary.
+ This is useful when a collidable may move quickly and does not itself require continuous detection, but there exist other collidables with continuous modes
+ that should avoid missing collisions.
+
+
+
+
+ Collision detection will start with a sweep test to identify a likely time of impact. Speculative contacts will be generated for the predicted collision.
+ This mode can capture angular motion with very few ghost collisions. It can, however, miss secondary collisions that would have occurred due to the primary impact's velocity change.
+
+
+
+
+ The continuous collision detection mode.
+
+
+
+
+ If using ContinuousDetectionMode.Continuous, MinimumSweepTimestep is the minimum progress that the sweep test will make when searching for the first time of impact.
+ Collisions lasting less than MinimumProgress may be missed by the sweep test. Using larger values can significantly increase the performance of sweep tests.
+
+
+
+
+ If using ContinuousDetectionMode.Continuous, sweep tests will terminate if the time of impact region has been refined to be smaller than SweepConvergenceThreshold.
+ Values closer to zero will converge more closely to the true time of impact, but for speculative contact generation larger values usually work fine.
+ Larger values allow the sweep to terminate much earlier and can significantly improve sweep performance.
+
+
+
+
+ No dedicated continuous detection will be performed. Default speculative contact generation will occur within the speculative margin.
+ The collidable's bounding box will not be expanded by velocity beyond the speculative margin.
+ This is the cheapest mode, but it may miss collisions. Note that if a Discrete mode collidable is moving quickly, the fact that its bounding box is not expanded
+ may cause it to miss a collision even with a non-Discrete collidable.
+
+
+
+
+ No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin.
+ The collidable's bounding box will be expanded by velocity beyond the speculative margin if necessary.
+ This is useful when a collidable may move quickly and does not itself require continuous detection, but there exist other collidables with continuous modes
+ that should avoid missing collisions.
+
+
+
+
+ Collision detection will start with a sweep test to identify a likely time of impact. Speculative contacts will be generated for the predicted collision.
+ This mode can capture angular motion with very few ghost collisions. It can, however, miss secondary collisions that would have occurred due to the primary impact's velocity change.
+
+ Minimum progress that the sweep test will make when searching for the first time of impact.
+ Collisions lasting less than MinimumProgress may be missed by the sweep test. Using larger values can significantly increase the performance of sweep tests.
+ Threshold against which the time of impact region is compared for sweep termination.
+ If the region has been refined to be smaller than SweepConvergenceThreshold, the sweep will terminate.
+ Values closer to zero will converge more closely to the true time of impact, but for speculative contact generation larger values usually work fine.
+ Larger values allow the sweep to terminate much earlier and can significantly improve sweep performance.
+ Settings reflecting a continuous detection mode.
+
+
+
+ Description of a collidable instance living in the broad phase and able to generate collision pairs.
+ Collidables with a ShapeIndex that points to nothing (a default constructed TypedIndex) do not actually refer to any existing Collidable.
+ This can be used for a body which needs no collidable representation.
+
+
+
+
+ Continuous collision detection settings for this collidable. Includes the collision detection mode to use and tuning variables associated with those modes.
+
+
+
+
+ Index of the shape used by the body. While this can be changed, any transition from shapeless->shapeful or shapeful->shapeless must be reported to the broad phase.
+ If you need to perform such a transition, consider using Bodies.ChangeShape or Bodies.ApplyDescription; those functions update the relevant state.
+
+
+
+
+ Size of the margin around the surface of the shape in which contacts can be generated. These contacts will have negative depth and only contribute if the frame's velocities
+ would push the shapes of a pair into overlap. This should be positive to avoid jittering. It can also be used as a form of continuous collision detection, but excessively
+ high values combined with fast motion may result in visible 'ghost collision' artifacts.
+ For continuous collision detection with less chance of ghost collisions, use the dedicated continuous collision detection modes.
+
+
+
+
+ Index of the collidable in the broad phase. Used to look up the target location for bounding box scatters. Under normal circumstances, this should not be set externally.
+
+
+
+
+ Constructs a new collidable description.
+
+ Shape used by the collidable.
+ Radius of the margin in which to allow speculative contact generation.
+ Continuous collision detection settings for the collidable.
+
+
+
+ Constructs a new collidable description with default discrete continuity.
+
+ Shape used by the collidable.
+ Radius of the margin in which to allow speculative contact generation.
+
+
+
+ Marks a collidable as owned by a dynamic body.
+
+
+
+
+ Marks a collidable as owned by a kinematic body.
+
+
+
+
+ Marks the collidable as an independent immobile collidable.
+
+
+
+
+ Gets the mobility state of the owner of this collidable.
+
+
+
+
+ Gets the body handle of the owner of the collidable referred to by this instance.
+
+
+
+
+ Gets the static handle of the owner of the collidable referred to by this instance.
+
+
+
+
+ Gets the integer value of the handle of the owner of the collidable referred to by this instance.
+
+
+
+
+ Creates a collidable reference.
+
+ Mobility type of the owner of the collidable.
+ Handle of the owner of the collidable.
+
+
+
+ Creates a collidable reference for a body.
+
+ Mobility type of the owner of the collidable.
+ Handle of the owner of the collidable.
+
+
+
+ Creates a collidable reference for a static.
+
+ Mobility type of the owner of the collidable.
+ Handle of the owner of the collidable.
+
+
+
+ Minimalist compound shape containing a list of child shapes. Does not make use of any internal acceleration structure; should be used only with small groups of shapes.
+
+
+
+
+ Buffer of children within this compound.
+
+
+
+
+ Creates a compound shape with no acceleration structure.
+
+ Set of children in the compound.
+
+
+
+ Checks if a shape index.
+
+ Shape index to analyze.
+ Shape collection into which the index indexes.
+ True if the index is valid, false otherwise.
+
+
+
+ Checks if a set of children shape indices are all valid.
+
+ Children to examine.
+ Shape collection into which the children index.
+ True if all child indices are valid, false otherwise.
+
+
+
+ Type id of list based compound shapes.
+
+
+
+
+ Reusable convenience type for incrementally building compound shapes.
+
+
+
+
+ Weight associated with this child. Acts as the child's mass when interpreted as a dynamic compound.
+ When interpreted as kinematic with recentering, it is used as a local pose weight to compute the center of rotation.
+
+
+
+
+ Inertia tensor associated with the child. If inertia is all zeroes, it is interpreted as infinite.
+
+
+
+
+ Adds a new shape to the accumulator, creating a new shape in the shapes set. The mass used to compute the inertia tensor will be based on the given weight.
+
+ Type of the shape to add to the accumulator and the shapes set.
+ Shape to add.
+ Pose of the shape in the compound's local space.
+ Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass and scales the inertia tensor.
+ Otherwise, it is used for recentering.
+
+
+
+ Adds a new shape to the accumulator, creating a new shape in the shapes set. Inertia is assumed to be infinite.
+
+ Type of the shape to add to the accumulator and the shapes set.
+ Shape to add.
+ Pose of the shape in the compound's local space.
+ Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass. Otherwise, it is used for recentering.
+
+
+
+ Adds a new shape to the accumulator.
+
+ Index of the shape to add.
+ Pose of the shape in the compound's local space.
+ Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass. Otherwise, it is used for recentering.
+ Inverse inertia tensor of the shape being added. This is assumed to already be scaled as desired by the weight.
+
+
+
+ Adds a new shape to the accumulator, assuming it has infinite inertia.
+
+ Index of the shape to add.
+ Pose of the shape in the compound's local space.
+ Weight of the shape used for computing the center of rotation.
+
+
+
+ Builds a buffer of compound children from the accumulated set for a dynamic compound.
+ Computes a center of mass and recenters child shapes relative to it. Does not reset the accumulator.
+
+ List of children created from the accumulated set.
+ Combined inertia of the compound.
+ Computed center of rotation based on the poses and weights of accumulated children.
+
+
+
+ Builds a buffer of compound children from the accumulated set for a dynamic compound. Does not recenter the children. Does not reset the accumulator.
+
+ List of children created from the accumulated set.
+ Combined inertia of the compound.
+
+
+
+ Builds a buffer of compound children from the accumulated set for a kinematic compound.
+ Computes a center of mass and recenters child shapes relative to it. Does not reset the accumulator.
+
+ List of children created from the accumulated set.
+ Combined inertia of the compound.
+ Computed center of rotation based on the poses and weights of accumulated children.
+
+
+
+ Builds a buffer of compound children from the accumulated set for a kinematic compound. Does not recenter children. Does not reset the accumulator.
+
+ List of children created from the accumulated set.
+ Combined inertia of the compound.
+ Computed center of rotation based on the poses and weights of accumulated children.
+
+
+
+ Empties out the accumulated children.
+
+
+
+
+ Returns internal resources to the pool, rendering the builder unusable.
+
+
+
+
+ Normal of the bounding plane.
+
+
+
+
+ Offset from the origin to a point on the plane along the normal.
+
+
+
+
+ Bundled points of the convex hull.
+
+
+
+
+ Bundled bounding planes of the convex hull.
+
+
+
+
+ Combined set of vertices used by each face. Use FaceToVertexIndicesStart to index into this for a particular face. Indices stored in counterclockwise winding in right handed space, clockwise in left handed space.
+
+
+
+
+ Start indices of faces in the FaceVertexIndices.
+
+
+
+
+ Creates a convex hull from a point set.
+
+ Points to compute the convex hull of.
+ Pool in which to allocate the convex hull and any temporary resources needed to compute the hull.
+ Computed center of the convex hull before the hull was recentered.
+
+
+
+ Computes the inertia of the convex hull.
+
+ Mass to scale the inertia tensor with.
+ Inertia of the convex hull.
+
+
+
+ Type id of convex hull shapes.
+
+
+
+
+ Provides an estimate of the scale of a shape.
+
+ Mask of lanes which are inactive.
+ Approximate scale of the shape for use in epsilons.
+
+
+
+ Stores references to the points composing one of a convex hull's faces.
+
+
+
+
+ Gets the number of vertices in the face.
+
+
+
+
+ Gets the index of the vertex associated with the given face vertex index in the source point set.
+
+ Index into the face's vertex list.
+ Index of the vertex associated with the given face vertex index in the source point set.
+
+
+
+ Raw data representing a convex hull.
+
+ This is not yet transformed into a runtime format. It requires additional processing to be used in a ConvexHull shape; see ConvexHullHelper.ProcessHull.
+
+
+
+ Mapping of points on the convex hull back to the original point set.
+
+
+
+
+ List of indices composing the faces of the hull. Individual faces indexed by the FaceIndices.
+
+
+
+
+ Starting index in the FaceVertexIndices for each face.
+
+
+
+
+ Helper methods to create and process convex hulls from point clouds.
+
+
+
+
+ Computes the convex hull of a set of points.
+
+ Point set to compute the convex hull of.
+ Buffer pool to pull memory from when creating the hull.
+ Convex hull of the input point set.
+
+
+
+ Processes hull data into a runtime usable convex hull shape. Recenters the convex hull's points around its center of mass.
+
+ Point array into which the hull data indexes.
+ Raw input data to process.
+ Pool used to allocate resources for the hullShape.
+ Convex hull shape created from the input data.
+ Computed center of mass of the convex hull before its points were recentered onto the origin.
+
+
+
+ Creates a convex hull shape out of an input point set. Recenters the convex hull's points around its center of mass.
+
+ Points to use to create the hull.
+ Buffer pool used for temporary allocations and the output data structures.
+ Intermediate hull data that got processed into the convex hull.
+ Computed center of mass of the convex hull before its points were recentered onto the origin.
+ Convex hull shape of the input point set.
+
+
+
+ Creates a convex hull shape out of an input point set. Recenters the convex hull's points around its center of mass.
+
+ Points to use to create the hull.
+ Buffer pool used for temporary allocations and the output data structures.
+ Computed center of mass of the convex hull before its points were recentered onto the origin.
+ Convex hull shape of the input point set.
+
+
+
+ Collision shape representing a cylinder.
+
+
+
+
+ Radius of the cylinder.
+
+
+
+
+ Half length of the cylinder along its local Y axis.
+
+
+
+
+ Gets or sets the length of the cylinder along its local Y axis.
+
+
+
+
+ Creates a cylinder shape.
+
+ Radius of the cylinder.
+ Length of the cylinder along its local Y axis.
+
+
+
+ Type id of cylinder shapes.
+
+
+
+
+ Defines a type usable as a shape by collidables.
+
+
+
+
+ Defines a compound shape type that has children of potentially different types.
+
+
+
+
+ Defines a compound shape type that has children of only one type.
+
+ Type of the child shapes.
+ Type of the child shapes, formatted in AOSOA layout.
+
+
+
+ Gets whether this type supports accessing its memory by lane offsets. If false, WriteSlot must be used instead of WriteFirst.
+
+
+
+
+ Gets the number of bytes required for allocations within the wide shape.
+
+
+
+
+ For types with a nonzero internal allocation size, provides memory to the shape for internal allocations.
+ Memory should be assumed to be stack allocated.
+
+ Memory to use for internal allocations in the wide shape.
+
+
+
+ Places the specified AOS-formatted shape into the first lane of the wide 'this' reference.
+
+ Note that we are effectively using the TShapeWide as a stride.
+ The base address is offset by the user of this function, so the implementation only ever considers the first slot.
+ AOS-formatted shape to gather from.
+
+
+
+ Places the specified AOS-formatted shape into the selected slot of the wide 'this' reference.
+
+ Index of the slot to put the data into.
+ Source of the data to insert.
+
+
+
+ Gets the lower bound on the number of rays to execute in a wide fashion. Ray bundles with fewer rays will fall back to the single ray code path.
+
+
+
+
+ Shape designed to contain a whole bunch of triangles. Triangle collisions and ray tests are one-sided; only tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates will generate contacts.
+
+
+
+
+ Acceleration structure of the mesh.
+
+
+
+
+ Buffer of triangles composing the mesh. Triangles will only collide with tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates.
+
+
+
+
+ Gets or sets the scale of the mesh.
+
+
+
+
+ Creates a mesh shape.
+
+ Triangles to use in the mesh.
+ Scale to apply to all vertices at runtime.
+ Note that the scale is not baked into the triangles or acceleration structure; the same set of triangles and acceleration structure can be used across multiple Mesh instances with different scales.
+ Pool used to allocate acceleration structures.
+
+
+
+ Loads a mesh from data stored in a byte buffer previously stored by the Serialize function.
+
+ Data to load the mesh from.
+ Pool to create the mesh with.
+
+
+
+ Gets the number of bytes it would take to store the given mesh in a byte buffer.
+
+ Mesh to measure.
+ Number of bytes it would take to store the mesh.
+
+
+
+ Writes a mesh's data to a byte buffer.
+
+ Mesh to write into the byte buffer.
+ Byte buffer to store the mesh in.
+
+
+
+ Casts a ray against the mesh. Executes a callback for every test candidate and every hit.
+
+ Type of the callback to execute for every test candidate and hit.
+ Pose of the mesh during the ray test.
+ Ray to test against the mesh.
+ Maximum length of the ray in units of the ray direction length.
+ Callback to execute for every hit.
+
+
+
+ Casts a bunch of rays against the mesh at the same time, executing a callback for every test candidate and every hit.
+
+ Type of the callback to execute for every ray test candidate and every hit.
+ Pose of the mesh during the ray test.
+ Set of rays to cast against the mesh.
+ Callbacks to execute.
+
+
+
+ Subtracts the newCenter from all points in the mesh hull.
+
+ New center that all points will be made relative to.
+
+
+
+ Computes the inertia of the mesh around its volumetric center and recenters the points of the mesh around it.
+ Assumes the mesh is closed and should be treated as solid.
+
+ Mass to scale the inertia tensor with.
+ Inertia tensor of the closed mesh.
+ Center of the closed mesh.
+
+
+
+ Computes the inertia of the mesh.
+ Assumes the mesh is closed and should be treated as solid.
+
+ Mass to scale the inertia tensor with.
+ Inertia of the closed mesh.
+
+
+
+ Computes the volume and center of mass of the mesh. Assumes the mesh is closed and should be treated as solid.
+
+ Volume of the closed mesh.
+ Center of mass of the closed mesh.
+
+
+
+ Computes the center of mass of the mesh.
+ Assumes the mesh is closed and should be treated as solid.
+
+ Center of mass of the closed mesh.
+
+
+
+ Computes the inertia of the mesh around its volumetric center and recenters the points of the mesh around it.
+ Assumes the mesh is open and should be treated as a triangle soup.
+
+ Mass to scale the inertia tensor with.
+ Inertia tensor of the closed mesh.
+ Center of the open mesh.
+
+
+
+ Computes the inertia of the mesh.
+ Assumes the mesh is open and should be treated as a triangle soup.
+
+ Mass to scale the inertia tensor with.
+ Inertia of the open mesh.
+
+
+
+ Computes the center of mass of the mesh.
+ Assumes the mesh is open and should be treated as a triangle soup.
+
+ Center of mass of the open mesh.
+
+
+
+ Returns the mesh's resources to a buffer pool.
+
+ Pool to return the mesh's resources to.
+
+
+
+ Type id of mesh shapes.
+
+
+
+
+ Defines a type capable of providing a sequence of triangles.
+
+
+
+
+ Gets the next triangle in the sequence, if any.
+
+ First vertex in the triangle.
+ Second vertex in the triangle.
+ Third vertex in the triangle.
+ True if there was another triangle, false otherwise.
+
+
+
+ Provides helpers for computing the inertia of objects with triangular surfaces.
+
+
+
+
+ Computes the signed volume of a tetrahedron where the fourth vertex is at the origin.
+ Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates.
+
+ First vertex of the tetrahedron.
+ Second vertex of the tetrahedron.
+ Third vertex of the tetrahedron.
+ Volume of the tetrahedron.
+
+
+
+ Integrates the inertia contribution of a tetrahedron with vertices at a, b, c, and (0,0,0) assuming a density of 1.
+
+ First vertex of the tetrahedron.
+ Second vertex of the tetrahedron.
+ Third vertex of the tetrahedron.
+ Volume of the tetrahedron.
+ Inertia tensor of this tetrahedron assuming a density of 1.
+
+
+
+ Computes the inertia of a closed mesh.
+ Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Mass of the mesh to scale the inertia tensor with.
+ Volume of the mesh.
+ Inertia tensor of the mesh.
+
+
+
+ Computes the inertia of a closed mesh.
+ Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Mass of the mesh to scale the inertia tensor with.
+ Volume of the mesh.
+ Inertia tensor of the mesh.
+ Center of mass of the mesh.
+
+
+
+ Computes the center of mass of a closed mesh.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Volume of the mesh.
+ Center of mass of the mesh.
+
+
+
+ Integrates the inertia contribution from a single triangle.
+
+ First vertex in the triangle.
+ Second vertex in the triangle.
+ Third vertex in the triangle.
+ Mass of the triangle.
+ Inertia tensor of the triangle.
+
+
+
+ Computes the area of a triangle.
+
+ First vertex in the triangle.
+ Second vertex in the triangle.
+ Third vertex in the triangle.
+ Area of the triangle.
+
+
+
+ Integrates the inertia contribution from a single triangle assuming a density of 1.
+
+ First vertex in the triangle.
+ Second vertex in the triangle.
+ Third vertex in the triangle.
+ Area of the triangle.
+ Inertia tensor of the triangle assuming that the density is 1.
+
+
+
+ Computes the inertia of an open mesh, treating it as a triangle soup.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Mass of the mesh to scale the inertia tensor with.
+ Inertia tensor of the mesh.
+
+
+
+ Computes the inertia of an open mesh, treating it as a triangle soup.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Mass of the mesh to scale the inertia tensor with.
+ Inertia tensor of the mesh.
+ Center of mass of the mesh.
+
+
+
+ Computes the center of mass of an open mesh, treating it as a triangle soup.
+
+ Type of the triangle source.
+ Source from which to retrieve a sequence of triangles.
+ Center of mass of the mesh.
+
+
+
+ Computes an offset for an inertia tensor based on an offset frame of reference.
+
+ Mass associated with the inertia tensor being moved.
+ Offset from the current inertia frame of reference to the new frame of reference.
+ Modification to add to the inertia tensor to move it into the new reference frame.
+
+
+
+ Gets the number of shapes that the batch can currently hold without resizing.
+
+
+
+
+ Gets the type id of the shape type in this batch.
+
+
+
+
+ Gets whether this shape batch's contained type potentially contains children that require other shape batches.
+
+
+
+
+ Gets the size of the shape type stored in this batch in bytes.
+
+
+
+
+ Gets a raw untyped pointer to a shape's data.
+
+ Index of the shape to look up.
+ Pointer to the indexed shape data.
+ Size of the shape data in bytes.
+
+
+
+ Frees all shape slots without returning any resources to the pool.
+
+
+
+
+ Increases the size of the type batch if necessary to hold the target capacity.
+
+ Target capacity.
+
+
+
+ Changes the size of the type batch if the target capacity is different than the current capacity. Note that shrinking allocations is conservative; resizing will
+ never allow an existing shape to point to unallocated memory.
+
+ Target capacity.
+
+
+
+ Returns all backing resources to the pool, leaving the batch in an unusable state.
+
+
+
+
+ Shrinks or expands the allocation of the batch's id pool. Note that shrinking allocations is conservative; resizing will never allow any pending ids to be lost.
+
+ Number of slots to allocate space for in the id pool.
+
+
+
+ Gets a reference to the shape associated with an index.
+
+ Index of the shape reference to retrieve.
+ Reference to the shape at the given index.
+
+
+
+ Computes a bounding box for a single shape.
+
+ Pose to calculate the bounding box of.
+ Index of the shape.
+ Bounding box of the specified shape with the specified pose.
+
+
+
+ Removes a shape and any existing children from the shapes collection and returns their resources to the given pool.
+
+ Index of the shape to remove.
+ Pool to return all shape resources to.
+
+
+
+ Removes a shape from the shapes collection and returns its resources to the given pool. Does not remove or dispose any children.
+
+ Index of the shape to remove.
+ Pool to return all shape resources to.
+
+
+
+ Removes a shape without removing its children or disposing any resources.
+
+ Index of the shape to remove.
+
+
+
+ Clears all shapes from existing batches. Does not release any memory.
+
+
+
+
+ Ensures a minimum capacity for all existing shape batches.
+
+ Capacity to ensure for all existing shape batches.
+
+
+
+ Resizes all existing batches for a target capacity. Note that this is conservative; it will never orphan an existing shape.
+
+ Capacity to target for all existing shape batches.
+
+
+
+ Releases all memory from existing batches. Leaves shapes set in an unusable state.
+
+
+
+
+ Radius of the sphere.
+
+
+
+
+ Creates a sphere shape.
+
+ Radius of the sphere.
+
+
+
+ Type id of sphere shapes.
+
+
+
+
+ Collision shape representing an individual triangle. Triangle collisions and ray tests are one-sided; only tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates will generate contacts.
+
+
+
+
+ First vertex of the triangle in local space.
+
+
+
+
+ Second vertex of the triangle in local space.
+
+
+
+
+ Third vertex of the triangle in local space.
+
+
+
+
+ Creates a triangle shape.
+
+ First vertex of the triangle in local space.
+ Second vertex of the triangle in local space.
+ Third vertex of the triangle in local space.
+
+
+
+ Type id of triangle shapes.
+
+
+
+
+ Provides an estimate of the scale of a shape.
+
+ Approximate scale of the shape for use in epsilons.
+
+
+
+ Minimum dot product between the detected local normal and the face normal of a triangle necessary to create contacts.
+
+
+
+
+ Epsilon to apply to testing triangles for degeneracy (which will be scaled by a pair-determined epsilon scale). Degenerate triangles do not have well defined normals and should not contribute
+
+
+
+
+ Bit packed representation of the typed index.
+
+
+
+
+ Gets the type index of the object.
+
+
+
+
+ Gets the index of the object.
+
+
+
+
+ Gets whether this index actually refers to anything. The Type and Index should only be used if this is true.
+
+
+
+
+ Gets the index of the body associated with this continuation.
+
+
+
+
+ Gets whether this continuation is associated with a compound's child.
+
+
+
+
+ Creates a bounding box calculation continuation for a given noncompound body.
+
+ Index of the body to set the bounding box of.
+
+
+
+ Creates a bounding box calculation continuation for a given compound body.
+
+ Index of the compound body to set the bounding box of.
+
+
+
+ The number of bodies to accumulate per type before executing an AABB update. The more bodies per batch, the less virtual overhead and execution divergence.
+ However, this should be kept low enough such that the data that has to be gathered by the bounding box update is still usually in L1.
+
+
+
+
+ Manages scene acceleration structures for collision detection and queries.
+
+
+
+
+ Collidable references contained within the . Note that values at or beyond the .LeafCount are not defined.
+
+
+
+
+ Collidable references contained within the . Note that values at or beyond .LeafCount are not defined.
+
+
+
+
+ Pool used by the broad phase.
+
+
+
+
+ Tree containing wakeful bodies.
+
+
+
+
+ Tree containing sleeping bodies and statics.
+
+
+
+
+ Applies updated bounds to the given leaf index in the given tree, refitting the tree to match.
+
+ Index of the leaf in the tree to update.
+ Tree containing the leaf to update.
+ New minimum bounds for the leaf.
+ New maximum bounds for the leaf.
+
+
+
+ Applies updated bounds to the given active leaf index, refitting the tree to match.
+
+ Index of the leaf to update.
+ New minimum bounds for the leaf.
+ New maximum bounds for the leaf.
+
+
+
+ Applies updated bounds to the given active leaf index, refitting the tree to match.
+
+ Index of the leaf to update.
+ New minimum bounds for the leaf.
+ New maximum bounds for the leaf.
+
+
+
+ Clears out the broad phase's structures without releasing any resources.
+
+
+
+
+ Ensures that the broad phase structures can hold at least the given number of leaves.
+
+ Number of leaves to allocate space for in the active tree.
+ Number of leaves to allocate space for in the static tree.
+
+
+
+ Resizes the broad phase structures to hold the given number of leaves. Note that this is conservative; it will never orphan any existing leaves.
+
+ Number of leaves to allocate space for in the active tree.
+ Number of leaves to allocate space for in the static tree.
+
+
+
+ Releases memory used by the broad phase. Leaves the broad phase unusable.
+
+
+
+
+ Finds any intersections between a ray and leaf bounding boxes.
+
+ Type of the callback to execute on ray-leaf bounding box intersections.
+ Origin of the ray to cast.
+ Direction of the ray to cast.
+ Maximum length of the ray traversal in units of the direction's length.
+ Callback to execute on ray-leaf bounding box intersections.
+ User specified id of the ray.
+
+
+
+ Finds any intersections between a swept bounding box and leaf bounding boxes.
+
+ Type of the callback to execute on sweep-leaf bounding box intersections.
+ Minimum bounds of the box to sweep.
+ Maximum bounds of the box to sweep.
+ Direction along which to sweep the bounding box.
+ Maximum length of the sweep in units of the direction's length.
+ Callback to execute on sweep-leaf bounding box intersections.
+
+
+
+ Finds any intersections between a swept bounding box and leaf bounding boxes.
+
+ Type of the callback to execute on sweep-leaf bounding box intersections.
+ Bounding box to sweep.
+ Direction along which to sweep the bounding box.
+ Maximum length of the sweep in units of the direction's length.
+ Callback to execute on sweep-leaf bounding box intersections.
+
+
+
+ Finds any overlaps between a bounding box and leaf bounding boxes.
+
+ Type of the enumerator to call for overlaps.
+ Minimum bounds of the query box.
+ Maximum bounds of the query box.
+ Enumerator to call for overlaps.
+
+
+
+ Finds any overlaps between a bounding box and leaf bounding boxes.
+
+ Type of the enumerator to call for overlaps.
+ Query box bounds.
+ Enumerator to call for overlaps.
+
+
+
+ Defines a type that can act as a callback for broad phase sweep tests.
+
+
+
+
+ Timestep duration used by pairs which rely on velocity to compute local bounding boxes for pruning.
+
+
+
+
+ Forces any remaining partial batches to execute and disposes the batcher.
+
+
+
+
+ Reports the result of a convex collision test to the callbacks and, if necessary, to any continuations for postprocessing.
+
+ Unless you're building custom compound collision pairs or adding new contact processing continuations, you can safely ignore this.
+ Contacts detected for the pair.
+ Continuation describing the pair and what to do with it.
+
+
+
+ Submits a subpair whose testing was blocked by user callback as complete to any relevant continuations.
+
+ Unless you're building custom compound collision pairs or adding new contact processing continuations, you can safely ignore this.
+ Continuation describing the pair and what to do with it.
+
+
+
+ Defines a type which includes information necessary to apply some form of post processing to a collision test result.
+
+
+
+
+ Creates a collision test continuation with the given number of slots for subpairs.
+
+ Number of subpair slots to include in the continuation.
+ Pool to take resources from.
+
+
+
+ Handles what to do next when the child pair has finished execution and the resulting manifold is available.
+
+ Type of the callbacks used in the batcher.
+ Continuation instance being considered.
+ Contact manifold for the child pair.
+ Collision batcher processing the pair.
+
+
+
+ Handles what to do next when the child pair was rejected for testing, and no manifold exists.
+
+ Type of the callbacks used in the batcher.
+ Continuation instance being considered.
+ Collision batcher processing the pair.
+
+
+
+ Checks if the parent pair is complete and should be flushed.
+
+ Type of the callbacks used in the batcher.
+ Id of the pair to attempt to flush.
+ Collision batcher processing the pair.
+ True if the pair was done and got flushed, false otherwise.
+
+
+
+ Describes the flow control to apply to a convex-convex pair report.
+
+
+
+
+ Marks a pair as requiring no further processing before being reported to the user supplied continuations.
+
+
+
+
+ Marks a pair as part of a set of a higher (potentially multi-manifold) pair, potentially requiring contact reduction.
+
+
+
+
+ Marks a pair as a part of a set of mesh-convex collisions, potentially requiring mesh boundary smoothing.
+
+
+
+
+ Marks a pair as a part of a set of mesh-convex collisions spawned by a mesh-compound pair, potentially requiring mesh boundary smoothing.
+
+
+
+
+ Provides control over subtask generated results before they are reported to the parent task.
+
+ Id of the parent pair that spawned this child pair.
+ Index of the child belonging to collidable A in the subpair under consideration.
+ Index of the child belonging to collidable B in the subpair under consideration.
+ Manifold of the child pair to configure.
+
+
+
+ Checks whether further collision testing should be performed for a given subtask.
+
+ Id of the parent pair.
+ Index of the child belonging to collidable A in the subpair under consideration.
+ Index of the child belonging to collidable B in the subpair under consideration.
+ True if testing should proceed, false otherwise.
+
+
+
+ Gets the number of tasks to batch together before executing this task.
+
+
+
+
+ Gets the first shape type index associated with the task. Shape pairs provided to the task for execution should be in the order defined by these type two indices.
+ If a collision task isn't a top level shape pair task, this should be -1.
+
+
+
+
+ Gets the second shape type index associated with the task. Shape pairs provided to the task for execution should be in the order defined by these type two indices.
+ If a collision task isn't a top level shape pair task, this should be -1.
+
+
+
+
+ Gets whether the task is capable of generating subtasks. Note that subtask generators cannot generate subtasks that are themselves subtask generators.
+
+
+
+
+ Gets the pair type that the ExecuteBatch call requires.
+
+
+
+
+ Executes the task on the given input.
+
+ Type of the callbacks used to handle results of collision tasks.
+ Batcher responsible for the invocation.
+ Batch of pairs to test.
+ Continuations to invoke upon completion of a top level pair.
+ Filters to use to influence execution of the collision tasks.
+
+
+
+ General pair for two shapes with full pose and flip mask, but no bounds related data.
+
+
+
+
+ Pair specialized for convex pairs between two shapes of the same type.
+
+
+
+
+ Pair specialized for two spheres, requiring no flip mask or orientations.
+
+
+
+
+ Pair specialized for convex pairs that involve one sphere which requires no orientation.
+
+
+
+
+ Pair that requires computing local bounding boxes, and so requires extra information like velocity.
+
+
+
+
+ Gets the nubmer of pairs which would ideally be gathered together before executing a wide test.
+
+
+
+
+ Defines a type that holds scalar data for the collision batcher.
+
+
+
+
+ Gets the enumeration type associated with this pair type.
+
+
+
+
+ Stores whether the types involved in pair require that the resulting contact manifold be flipped to be consistent with the user-requested pair order.
+
+
+
+
+ Stores whether the types involved in pair require that the resulting contact manifold be flipped to be consistent with the user-requested pair order.
+
+
+
+
+ Pair of objects awaiting collision processing that involves velocities for bounds calculation.
+
+ Type of the first shape in the pair.
+ Type of the second shape in the pair.
+
+
+
+ Gets the cache's type id.
+ Note that this is not the same as a constraint type id or other type ids; it only refers to the type of the caches for storage within the PairCache's structures.
+
+
+
+
+ Accumulates constraints to remove from multiple threads, and efficiently removes them all as a batch.
+
+
+
+
+ Processes enqueued constraint removals and prepares removal jobs.
+
+ True if the constraint remover should maintain determinism at an added cost, false otherwise.
+ The number of removal jobs created. To complete the jobs, execute RemoveConstraintsFromTypeBatch for every index from 0 to the returned job count.
+
+
+
+ Returns the handles associated with all removed constraints to the solver's handle pool.
+
+
+
+
+ For uses of the ConstraintRemover that fully remove a constraint from the simulation (rather than simply moving it somewhere else),
+ the handle->constraint mapping must be updated. This has to wait until after the multithreaded operations actually complete to avoid corrupting parallel operations.
+
+
+
+
+ Provides indirection for reading from and updating constraints in the narrow phase.
+
+ This, like many other similar constructions in the engine, could conceptually be replaced by static function pointers and a few supplementary data fields.
+ We probably will do exactly that at some point.
+
+
+
+ Extracts references to data from a contact constraint of the accessor's type.
+
+ Type of the extractor to handle the extracted references.
+ Handle of the contact constraint to extract.
+ Solver in which the constraint lives.
+ Extractor to handle the extracted references.
+
+
+
+ Extracts references to data from a contact constraint of the accessor's type.
+
+ Type of the extractor to handle the extracted references.
+ Location of the constraint in the solver.
+ Solver in which the constraint lives.
+ Extractor to handle the extracted references.
+
+
+
+ Extracts references to data from a contact constraint of the accessor's type.
+
+ Type of the extractor to handle the extracted references.
+ Handle of the contact constraint to extract.
+ Solver in which the constraint lives.
+ Extractor to handle the extracted references.
+
+
+
+ Extracts references to data from a contact constraint of the accessor's type.
+
+ Type of the extractor to handle the extracted references.
+ Location of the constraint in the solver.
+ Solver in which the constraint lives.
+ Extractor to handle the extracted references.
+
+
+
+ Information about a single contact in a nonconvex collidable pair.
+ Nonconvex pairs can have different surface bases at each contact point, since the contact surface is not guaranteed to be a plane.
+
+
+
+
+ Offset from the position of collidable A to the contact position.
+
+
+
+
+ Penetration depth between the two collidables at this contact. Negative values represent separation.
+
+
+
+
+ Surface basis of the contact. If transformed into a rotation matrix, X and Z represent tangent directions and Y represents the contact normal. Points from collidable B to collidable A.
+
+
+
+
+ Id of the features involved in the collision that generated this contact. If a contact has the same feature id as in a previous frame, it is an indication that the
+ same parts of the shape contributed to its creation. This is useful for carrying information from frame to frame.
+
+
+
+
+ Information about a single contact in a convex collidable pair. Convex collidable pairs share one surface basis across the manifold, since the contact surface is guaranteed to be a plane.
+
+
+
+
+ Offset from the position of collidable A to the contact position.
+
+
+
+
+ Penetration depth between the two collidables at this contact. Negative values represent separation.
+
+
+
+
+ Id of the features involved in the collision that generated this contact. If a contact has the same feature id as in a previous frame, it is an indication that the
+ same parts of the shape contributed to its creation. This is useful for carrying information from frame to frame.
+
+
+
+
+ Gets the number of contacts in the manifold.
+
+
+
+
+ Gets whether the contact manifold was created by a pair of convex objects or not. True if convex, false if nonconvex.
+
+
+
+
+ Retrieves the feature id associated with a requested contact.
+
+ Index of the contact to grab the feature id of.
+ Feature id of the requested contact.
+
+
+
+ Retrieves a copy of a contact's data.
+
+ Index of the contact to copy data from.
+ Offset from the first collidable's position to the contact position.
+ Normal of the contact surface at the requested contact. Points from collidable B to collidable A.
+ Penetration depth at the requested contact.
+ Feature id of the requested contact.
+ Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames.
+
+
+
+ Pulls a reference to a contact's depth.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's depth.
+
+
+
+ Pulls a reference to a contact's normal. Points from collidable B to collidable A. For convex manifolds that share a normal, all contact indices will simply return a reference to the manifold-wide normal.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's normal (or the manifold-wide normal in a convex manifold).
+
+
+
+ Pulls a reference to a contact's offset.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's offset.
+
+
+
+ Pulls a reference to a contact's feature id.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's feature id.
+
+
+
+ Contains the data associated with a nonconvex contact manifold.
+
+
+
+
+ Offset from collidable A to collidable B.
+
+
+
+
+ The maximum number of contacts that can exist within a nonconvex manifold.
+
+
+
+
+ Retrieves a copy of a contact's data.
+
+ Index of the contact to copy data from.
+ Offset from the first collidable's position to the contact position.
+ Normal of the contact surface at the requested contact. Points from collidable B to collidable A.
+ Penetration depth at the requested contact.
+ Feature id of the requested contact.
+ Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames.
+
+
+
+ Retrieves the feature id associated with a requested contact.
+
+ Index of the contact to grab the feature id of.
+ Feature id of the requested contact.
+
+
+
+ Pulls a reference to a contact's depth.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's depth.
+
+
+
+ Pulls a reference to a contact's normal. Points from collidable B to collidable A.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's normal.
+
+
+
+ Pulls a reference to a contact's offset.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's offset.
+
+
+
+ Pulls a reference to a contact's feature id.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's feature id.
+
+
+
+ Contains the data associated with a convex contact manifold.
+
+
+
+
+ Offset from collidable A to collidable B.
+
+
+
+
+ Surface normal shared by all contacts. Points from collidable B to collidable A.
+
+
+
+
+ Retrieves the feature id associated with a requested contact.
+
+ Index of the contact to grab the feature id of.
+ Feature id of the requested contact.
+
+
+
+ Retrieves a copy of a contact's data.
+
+ Index of the contact to copy data from.
+ Offset from the first collidable's position to the contact position.
+ Normal of the contact surface at the requested contact. Points from collidable B to collidable A.
+ Penetration depth at the requested contact.
+ Feature id of the requested contact.
+ Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames.
+
+
+
+ Pulls a reference to a contact's depth.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's depth.
+
+
+
+ Pulls a reference to a contact manifold's normal. Points from collidable B to collidable A. Convex manifolds share a single normal across all contacts.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to the contact manifold's normal.
+
+
+
+ Pulls a reference to a contact's offset.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's offset.
+
+
+
+ Pulls a reference to a contact's feature id.
+
+ Manifold to pull a reference from.
+ Contact to pull data from.
+ Reference to a contact's feature id.
+
+
+
+ Gets the index of the continuation.
+
+
+
+
+ Gets the type index of the continuation.
+
+
+
+
+ Gets whether this index actually refers to anything. The Type and Index should only be used if this is true.
+
+
+
+
+ Coefficient of friction to apply for the constraint. Maximum friction force will be equal to the normal force times the friction coefficient.
+
+
+
+
+ Maximum relative velocity along the contact normal at which the collision constraint will recover from penetration. Clamps the velocity goal created from the spring settings.
+
+
+
+
+ Defines the constraint's penetration recovery spring properties.
+
+
+
+
+ Performs any required initialization logic after the Simulation instance has been constructed.
+
+ Simulation that owns these callbacks.
+
+
+
+ Chooses whether to allow contact generation to proceed for two overlapping collidables.
+
+ Index of the worker that identified the overlap.
+ Reference to the first collidable in the pair.
+ Reference to the second collidable in the pair.
+ True if collision detection should proceed, false otherwise.
+
+
+
+ Provides a notification that a manifold has been created for a pair. Offers an opportunity to change the manifold's details.
+
+ Index of the worker thread that created this manifold.
+ Pair of collidables that the manifold was detected between.
+ Set of contacts detected between the collidables.
+ Material properties of the manifold.
+ True if a constraint should be created for the manifold, false otherwise.
+
+
+
+ Chooses whether to allow contact generation to proceed for the children of two overlapping collidables in a compound-including pair.
+
+ Parent pair of the two child collidables.
+ Index of the child of collidable A in the pair. If collidable A is not compound, then this is always 0.
+ Index of the child of collidable B in the pair. If collidable B is not compound, then this is always 0.
+ True if collision detection should proceed, false otherwise.
+ This is called for each sub-overlap in a collidable pair involving compound collidables. If neither collidable in a pair is compound, this will not be called.
+ For compound-including pairs, if the earlier call to AllowContactGeneration returns false for owning pair, this will not be called. Note that it is possible
+ for this function to be called twice for the same subpair if the pair has continuous collision detection enabled;
+ the CCD sweep test that runs before the contact generation test also asks before performing child pair tests.
+
+
+
+ Provides a notification that a manifold has been created between the children of two collidables in a compound-including pair.
+ Offers an opportunity to change the manifold's details.
+
+ Index of the worker thread that created this manifold.
+ Pair of collidables that the manifold was detected between.
+ Index of the child of collidable A in the pair. If collidable A is not compound, then this is always 0.
+ Index of the child of collidable B in the pair. If collidable B is not compound, then this is always 0.
+ Set of contacts detected between the collidables.
+ True if this manifold should be considered for constraint generation, false otherwise.
+
+
+
+ Releases any resources held by the callbacks. Called by the owning narrow phase when it is being disposed.
+
+
+
+
+ Gets whether the support finder is sampling a shape with a spherical margin that should be applied after a solution is found for the core shape.
+
+
+
+
+ Margin associated with the shape according to this support finder.
+
+ Shape to find the margin of.
+ Margin of the shape.
+
+
+
+ Flag used to mark a contact as being generated by the face of a triangle in its feature id.
+
+
+
+
+ Minimum dot product between a triangle face and the contact normal for a collision to be considered a triangle face contact.
+
+
+
+
+ True if the manifold associated with this triangle has been blocked due to its detected infringement on another triangle, false otherwise.
+
+
+
+
+ True if the triangle did not act as a blocker for any other manifold and so can be removed if it is blocked, false otherwise.
+
+
+
+
+ Normal of a triangle detected as being infringed by the manifold associated with this triangle in mesh space.
+
+
+
+
+ Looks up the contact constraint accessor for the given constraint type id if it exists.
+
+ Constraint type id to look up a constraint accessor for.
+ Accessor for the given type id.
+ True if the constraint type id refers to a registered accessor, false otherwise.
+
+
+
+ Tries to extract contact prestep, impulse, and body reference data from the given handle. If it's not a contact constraint, returns false.
+
+ Type of the extractor used to collect contact data from the solver.
+ Constraint to try to extract data from.
+ Extractor used to collect contact data from the solver.
+ True if the constraint was a contact type, false otherwise.
+
+
+
+ Tries to extract prestep and impulse contact data from the given handle. If it's not a contact constraint, returns false.
+
+ Type of the extractor used to collect contact data from the solver.
+ Constraint to try to extract data from.
+ Extractor used to collect contact data from the solver.
+ True if the constraint was a contact type, false otherwise.
+
+
+
+ Gets whether a constraint type id maps to a contact constraint.
+
+ Id of the constraint to check.
+ True if the type id refers to a contact constraint. False otherwise.
+
+
+
+ Turns broad phase overlaps into contact manifolds and uses them to manage constraints in the solver.
+
+ Type of the callbacks to use.
+
+ When notified of a new constraint, immediately adds it to the solver.
+
+
+
+
+ Pair which will directly produce constraints.
+
+
+
+
+ Pair which samples a swept location for contacts and needs to be rewound to compute proper speculative depths in a post process.
+
+
+
+
+ Flushes pending constraints into the simulation without any form of synchronization. Adds occur in the order of manifold generation.
+ If the contact manifold generation is deterministic, then the result of this add will be deterministic.
+
+
+
+
+ Flushes pending constraints into the simulation without any form of synchronization. Adds occur in the order of manifold generation.
+ If the contact manifold generation is deterministic, then the result of this add will be deterministic.
+
+
+
+
+ Associated with a pair of two collidables that each are controlled by bodies.
+
+
+
+
+ Special type for collision pairs that do not need to store any supplementary information.
+
+
+
+
+ Phase one job in the awakener. JobIndex used to identify sub-job.
+
+
+
+
+ Sorts the constraints of a single type across all workers. Used by deterministic preflushes to schedule adds.
+ Accesses no buffer pools; memory is allocated and returned on main thread.
+
+
+
+
+ Identifies a first guess at the constraint batch to which every new constraint should be added to.
+ Accesses no buffer pools; memory is allocated and returned on main thread.
+
+
+
+
+ Adds constraints to the solver and constraint graph in an order determined by the previous sorts and with the help of the speculatively computed batch targets. Locally sequential.
+ Accesses main thread buffer pool when type batches are created or resized.
+
+
+
+
+ Adds constraints to the solver and constraint graph in an order determined by the collision detection phase. If the collision detection phase is nondeterministic due to threading, then
+ this will result in nondeterministic adds to the solver.
+ Accesses main thread buffer pool when type batches are created or resized.
+
+
+
+
+ Phase two job in the awakener. JobIndex used to identify sub-job.
+
+
+
+
+ Check the freshness bytes in a region to remove stale pairs.
+
+
+
+
+ Start region of a CheckFreshness or SpeculativeConstraintBatchSearch job.
+
+
+
+
+ End region of a CheckFreshness or SpeculativeConstraintBatchSearch job.
+
+
+
+
+ Narrow phase constraint type index targeted by a SpeculativeConstraintBatchSearch or SortContactConstraintType.
+
+
+
+
+ Index of the worker in which a range of constraints starts.
+ Used by SpeculativeConstraintBatchSearch.
+
+
+
+
+ Number of worker threads containing constraints to read in the SortContactConstraintType and NondeterministicConstraintAdd tasks.
+
+
+
+
+ Index of the job. Used by AwakenerPhaseOne and AwakenerPhaseTwo tasks.
+
+
+
+
+ Offset from the origin of the first shape's parent to the child's location in world space. If there is no parent, this is the zero vector.
+
+
+
+
+ Offset from the origin of the second shape's parent to the child's location in world space. If there is no parent, this is the zero vector.
+
+
+
+
+ A narrowphase-specific type and index into the pair cache's constraint data set. Collision pairs which have no associated constraint, either
+ because no contacts were generated or because the constraint was filtered, will have a nonexistent ConstraintCache.
+
+
+
+
+ A narrowphase-specific type and index into a batch of custom data for the pair. Many types do not use any supplementary data, but some make use of temporal coherence
+ to accelerate contact generation.
+
+
+
+
+ Per-pair 'freshness' flags set when a pair is added or updated by the narrow phase execution. Only initialized for the duration of the narrowphase's execution.
+
+
+ This stores one byte per pair. While it could be compressed to 1 bit, that requires manually ensuring thread safety. By using bytes, we rely on the
+ atomic setting behavior for data types no larger than the native pointer size. Further, smaller sizes actually pay a higher price in terms of increased false sharing.
+ Choice of data type is a balancing act between the memory bandwidth of the post analysis and the frequency of false sharing.
+
+
+
+
+ Flush all deferred changes from the last narrow phase execution.
+
+
+
+
+ Completes the addition of a constraint by filling in the narrowphase's pointer to the constraint and by distributing accumulated impulses.
+
+ Count-specialized type containing cached accumulated impulses.
+ Narrow phase that triggered the constraint add.
+ Solver containing the constraint to set the impulses of.
+ Warm starting impulses to apply to the contact constraint.
+ Index of the constraint cache to update.
+ Constraint handle associated with the constraint cache being updated.
+ Collidable pair associated with the new constraint.
+
+
+
+ Mapping from constraint handle back to collision detection pair cache locations.
+
+
+
+
+ Packed indirection to data associated with a pair cache entry.
+
+
+
+
+ Gets whether this index actually refers to anything. The Type and Index should only be used if this is true.
+
+
+
+
+ Gets whether this index refers to an active cache entry. If false, the entry exists in an inactive set.
+
+
+
+
+ Gets the index of the cache that owns the entry.
+
+
+
+
+ Gets the type index of the object.
+
+
+
+
+ Gets the index of the object within the type specific list.
+
+
+
+
+ Helps test the broad phase's active and static trees with a custom leaf tester.
+
+ Type used to test rays against leaves.
+
+
+
+ Constructs a ray batcher for the broad phase and initializes its backing resources.
+
+ Pool to pull resources from.
+ Ray tester used to test leaves found by the broad phase tree traversals.
+ Maximum number of rays to execute in each traversal.
+ This should typically be chosen as the highest value which avoids spilling data out of L2 cache.
+
+
+
+ Adds a ray to the batcher to test against the broad phase trees.
+ If the underlying ray batcher hits its maximum capacity, all the accumulated rays will be tested against the broad phase trees and the accumulator will be reset.
+
+ Origin of the ray to test against the tree.
+ Direction of the ray to test against the tree.
+ Maximum distance that the ray will travel in units of the ray's length.
+ Identifier value for the ray. Leaf tests will have access to the id.
+
+
+
+ Tests any accumulated rays against the broad phase trees and then resets the batcher.
+
+
+
+
+ Disposes the underlying batcher resources.
+
+
+
+
+ Tests batches of rays against the simulation.
+
+ Type used to handle hits against objects in the simulation.
+
+
+
+ Adds a ray to the batcher to test against the simulation.
+ If the underlying ray batcher hits its maximum capacity, all the accumulated rays will be tested against the simulation and the accumulator will be reset.
+
+ Origin of the ray to test against the simulation.
+ Direction of the ray to test against the simulation.
+ Maximum distance that the ray will travel in units of the ray's length.
+ Identifier value for the ray. Callbacks will have access to the id.
+
+
+
+ Tests any accumulated rays against the broad phase trees and then resets the batcher.
+
+
+
+
+
+ Gets the first shape type index associated with the task.
+
+
+
+
+ Gets the second shape type index associated with the task.
+
+
+
+
+ Allocates an element in the list, initializing the backing buffer if needed.
+
+ Number of bytes per element.
+ Minimum size of the backing buffer to create if this is a new allocation.
+ Pool to pull allocations from.
+ Index of the element in bytes within the list's buffer.
+
+
+
+ Helper class for creating runtime specialized vectorized ray intersection tests with shapes that support broadcasting.
+
+
+
+
+ The cached pair data created by a single worker during the last execution of narrow phase pair processing.
+
+
+
+
+ The set of pair-pointer associations created by this worker that should be added to the pair mapping.
+
+
+
+
+ The set of pairs to remove from the pair cache generated by the worker.
+
+
+
+
+ Contains a set of type batches whose constraints share no body references.
+
+
+
+
+ Gets a type batch in the batch matching the given type id.
+ Requires that there exists at least one constraint in the type batch.
+
+ Id of the TypeBatch's type to retrieve.
+ TypeBatch instance associated with the given type.
+
+
+
+ Gets a pointer to the type batch in the batch matching the given type id.
+ Requires that there exists at least one constraint in the type batch.
+
+ Id of the TypeBatch's type to retrieve.
+ TypeBatch instance associated with the given type.
+
+
+
+ Ensures that all type batches within this constraint batch meet or exceed the size requirements of the per-type capacities defined by the solver.
+
+ Solver to pull minimum capacities from.
+
+
+
+ Applies the solver-defined minimum capacities to existing type batches.
+
+ Solver to pull minimum capacities from.
+
+
+
+ Releases all memory used by the batch.
+
+
+
+
+ Enumerates the bodies attached to an active constraint and removes the constraint's handle from all of the connected body constraint reference lists.
+
+
+
+
+ Index of the target constraint bundle to optimize.
+
+
+
+
+ Index of the last optimized type batch.
+
+
+
+
+ Index of the last optimized batch.
+
+
+
+
+ If true, regions are offset by a half region width. Toggled each frame. Offsets allow the sorted regions to intermix, eventually converging to a full sort.
+
+
+
+
+ Gets the total number of bundles across all types and batches.
+
+
+
+
+ Gets the total number of bundles across all types and batches.
+
+
+
+
+ Gets whether this constraint set is allocated.
+
+
+
+
+ Constrains two bodies to rotate around a local axis attached to body A at a target velocity.
+
+
+
+
+ Axis of rotation in body A's local space.
+
+
+
+
+ Target relative angular velocity around the axis.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Angular component of a hinge. Constrains the angular degrees of freedom of two bodies such that they can only rotate relative to each other around the hinge's axis.
+
+
+
+
+ Hinge axis in the local space of A.
+
+
+
+
+ Hinge axis in the local space of B.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Constrains the relative angular velocity between two bodies to a target.
+
+
+
+
+ Target relative angular velocity between A and B, stored in A's local space. Target world space angular velocity of B is AngularVelocityA + TargetVelocityLocalA * OrientationA.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Constrains two bodies to have a target relative rotation.
+
+
+
+
+ The target relative rotation from body A to body B in body A's local space. The constraint tries to maintain OrientationB = TargetRelativeRotationLocalA * OrientationA.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Constrains two bodies with the angular component of a swivel hinge that allows rotation around two axes, like a laptop monitor hinge that allows flipping the screen.
+
+
+
+
+ Swivel axis in the local space of body A.
+
+
+
+
+ Hinge axis in the local space of body B.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Constrains the area of a triangle connecting the centers of three bodies to match a goal area.
+ Scaled volume computed from ||ab x ac||.
+
+
+
+
+ 2 times the target area of the triangle. Computed from ||ab x ac||.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Creates a new area constraint, initializing the target area using a set of initial positions.
+
+ Initial position of the first body.
+ Initial position of the second body.
+ Initial position of the third body.
+ Spring settings to apply to the volume constraint.
+
+
+
+ Handles the solve iterations of a bunch of ball socket constraints.
+
+
+
+
+ Constrains a point on one body to a point on another body.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Handles the solve iterations of a bunch of ball socket constraints.
+
+
+
+
+ Constrains the relative linear velocity between two bodies to a target.
+ Conceptually, controls the relative velocity by a virtual lever arm attached to the center of A and leading to the anchor of B.
+
+
+
+
+ Offset from body B to its anchor.
+
+
+
+
+ Target relative linear velocity between A and B, stored in A's local space. Target world space linear velocity of B is LinearVelocityA + TargetVelocityLocalA * OrientationA.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Handles the solve iterations of a bunch of ball socket motor constraints.
+
+
+
+
+ Constrains a point on one body to a point on another body.
+ Provides speed and force configuration that the BallSocket joint does not.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Handles the solve iterations of a bunch of ball socket servo constraints.
+
+
+
+
+ Provides shared functionality for constraints with jacobians similar to the BallSocket.
+
+
+
+
+ Constrains the center of two bodies to be separated by a goal distance.
+
+
+
+
+ Target distance between the body centers.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Handles the solve iterations of a bunch of distance servos.
+
+
+
+
+ Checks if a value is a finite number- neither infinite nor NaN.
+
+ Value to check.
+ True if the value is neither infinite nor NaN, false otherwise.
+
+
+
+ Checks if a value is a finite value greater than zero and not NaN.
+
+ Value to check.
+ True if the value is a finite number greater than zero and not NaN, false otherwise.
+
+
+
+ Checks if a value is a finite value greater than or equal to zero and not NaN.
+
+ Value to check.
+ True if the value is a finite number greater than or equal to zero and not NaN, false otherwise.
+
+
+
+ Checks if a value is a finite value less than zero and not NaN.
+
+ Value to check.
+ True if the value is a finite number less than zero and not NaN, false otherwise.
+
+
+
+ Checks if a value is a finite value less than or equal to zero and not NaN.
+
+ Value to check.
+ True if the value is a finite number less than or equal to zero and not NaN, false otherwise.
+
+
+
+ Handles the solve iterations of a bunch of 1-contact one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 2-contact one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 3-contact one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 4-contact one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 1-contact two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 2-contact two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 3-contact two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 4-contact two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 2-contact nonconvex two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 2-contact nonconvex one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 3-contact nonconvex two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 3-contact nonconvex one body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 4-contact nonconvex two body manifold constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of 4-contact nonconvex one body manifold constraints.
+
+
+
+
+ Callbacks for direct references to the solver's contact constraint data.
+
+
+
+
+ Provides a reference to a convex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Body handle referenced by the constraint.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a convex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ First body handle referenced by the constraint.
+ Second body handle referenced by the constraint.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a nonconvex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Body handle referenced by the constraint.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a nonconvex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ First body handle referenced by the constraint.
+ Second body handle referenced by the constraint.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Callbacks for direct references to the solver's contact constraint data. Includes only prestep and impulse data.
+
+
+
+
+ Provides a reference to a convex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a convex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a nonconvex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Provides a reference to a nonconvex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors).
+
+ Type of the prestep data returned.
+ Type of the accumulated impulses data returned.
+ Prestep data associated with the constraint.
+ Accumulated impulses associated with the constraint.
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Handles the tangent friction implementation.
+
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Handles the tangent friction implementation for one body contact constraints.
+
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Handles the tangent friction implementation.
+
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Handles the tangent friction implementation.
+
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Constrains points on two bodies to be separated by a distance within a range.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Minimum distance permitted between the point on A and the point on B.
+
+
+
+
+ Maximum distance permitted between the point on A and the point on B.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Creates a distance limit description.
+
+ Local offset from the center of body A to its attachment point.
+ Local offset from the center of body B to its attachment point.
+ Minimum distance permitted between the point on A and the point on B.
+ Maximum distance permitted between the point on A and the point on B.
+ Spring frequency and damping parameters.
+
+
+
+ Handles the solve iterations of a bunch of distance servos.
+
+
+
+
+ Constrains points on two bodies to be separated by a goal distance.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Distance that the constraint will try to reach between the attachment points.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Creates a distance servo description.
+
+ Local offset from the center of body A to its attachment point.
+ Local offset from the center of body B to its attachment point.
+ Distance that the constraint will try to reach between the attachment points.
+ Spring frequency and damping parameters.
+ Servo control parameters.
+
+
+
+ Handles the solve iterations of a bunch of distance servos.
+
+
+
+
+ A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve.
+
+
+
+
+ Prestep, warm start and solve iteration functions for a four body constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Shared implementation across all four body constraints.
+
+
+
+
+ Constrains two bodies with a hinge. Equivalent to a BallSocket constraint and an AngularHinge constraint solved together.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Hinge axis in the local space of A.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Hinge axis in the local space of B.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Marks a type as a description of a constraint associated with a particular batch.
+
+
+ Note that one batch may have multiple description types associated with it, each one potentially offering a different subset of properties or translation logic.
+
+ Type of the description object.
+
+
+
+ Changes the batch-held memory at a given location to match the given description.
+
+ Batch to modify.
+ Index of the target constraint's bundle.
+ Index of the target constraint within its bundle.
+
+
+
+ Creates a description from the batch-held memory at a given location.
+
+ Batch to read.
+ Index of the source constraint's bundle.
+ Index of the source constraint within its bundle.
+ Description of the constraint.
+
+
+
+ Gets the type id of the constraint that this is a description of.
+
+
+
+
+ Gets the type of the type batch which contains described constraints.
+
+
+
+
+ Marks a type as a one body constraint description.
+
+ Type of the description.
+ This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts.
+
+
+
+ Marks a type as a two body constraint description.
+
+ Type of the description.
+ This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts.
+
+
+
+ Marks a type as a three body constraint description.
+
+ Type of the description.
+ This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts.
+
+
+
+ Marks a type as a four body constraint description.
+
+ Type of the description.
+ This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts.
+
+
+
+ Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies.
+
+
+
+
+ Constrains points on two bodies to a range of offsets from each other along a direction anchored to body A.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Direction of the motorized axis in the local space of body A.
+
+
+
+
+ Minimum offset along the world axis between A and B's anchor points.
+
+
+
+
+ Maximum offset along the world axis between A and B's anchor points.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Constrains points on two bodies to move relative to each other along a direction.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Direction of the motorized axis in the local space of body A.
+
+
+
+
+ Target relative velocity along the world axis between A and B's anchor points.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Constrains points on two bodies to be on a plane defined in the local space of one of the bodies.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Direction of the plane normal in the local space of body A.
+
+
+
+
+ Target offset from A's plane anchor to B's anchor along the plane normal.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Defines some of the shared behavior across motor constraints.
+
+
+
+
+ Maximum amount of force the motor can apply in one unit of time.
+
+
+
+
+ Mass-scaled damping constant. If you want to simulate a viscous damping coefficient of D with an object of mass M, set this damping value to D / M.
+
+
+
+
+ Gets or sets how soft the constraint is. Values range from 0 to infinity. Softness is inverse damping; 0 is perfectly rigid, 1 is very soft, float.MaxValue is effectively nonexistent.
+
+
+
+
+ Checks if a settings instance has valid nonnegative values.
+
+ Instance to examine.
+ True if the settings are valid, false otherwise.
+
+
+
+ Defines settings for a motor constraint.
+
+ Maximum amount of force the motor can apply in one unit of time.
+ Gets or sets how soft the constraint is. Values range from 0 to infinity. Softness is inverse damping; 0 is perfectly rigid, 1 is very soft, float.MaxValue is effectively nonexistent.
+
+
+
+ Constrains the angular velocity of one body to the target.
+
+
+
+
+ Target angular velocity.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Constrains a single body to a target orientation.
+
+
+
+
+ Target orientation of the constraint.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Constrains a point on a body to have a target linear velocity.
+
+
+
+
+ Offset to the attachment point in the local space of the body.
+
+
+
+
+ Target velocity of the attachment point.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Constrains a point on a body to a target location.
+
+
+
+
+ Offset to the attachment point in the local space of the body.
+
+
+
+
+ Target position.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Prestep, warm start and solve iteration functions for a constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Prestep, warm start, solve iteration, and incremental contact update functions for a one body contact constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Shared implementation across all one body constraints.
+
+
+
+
+ Constrains a point on body B to be on a line attached to body A.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Direction of the line in the local space of body A.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Gets settings representing a servo with unlimited force, speed, and no base speed.
+
+
+
+
+ Checks servo settings to ensure valid values.
+
+ Settings to check.
+ True if the settings contain valid values, false otherwise.
+
+
+
+ Computes springiness values for a set of constraints.
+
+ Spring settings associated with the constraints.
+ Duration of the time step.
+ The multiplier applied to error to get bias velocity.
+ Scaling factor to apply to the effective mass to get the softened effective mass.
+ Scaling factor to apply to the accumulated impulse during the solve to soften the target velocity.
+
+
+
+ Target number of undamped oscillations per unit of time, scaled by 2 * PI.
+
+
+
+
+ Twice the ratio of the spring's actual damping to its critical damping.
+
+
+
+
+ Gets or sets the target number of undamped oscillations per unit of time.
+
+
+
+
+ Gets or sets the ratio of the spring's actual damping to its critical damping. 0 is undamped, 1 is critically damped, and higher values are overdamped.
+
+
+
+
+ Checks if a spring settings instance contains valid values.
+
+ Settings to check.
+ True if the spring settings are valid, false otherwise.
+
+
+
+ Constructs a new spring settings instance.
+
+ Target number of undamped oscillations per unit of time.
+ Ratio of the spring's actual damping to its critical damping. 0 is undamped, 1 is critically damped, and higher values are overdamped.
+
+
+
+ Restricts axes attached to two bodies to fall within a maximum swing angle.
+
+
+
+
+ Axis attached to body A in its local space.
+
+
+
+
+ Axis attached to body B in its local space.
+
+
+
+
+ Minimum dot product between the world space A and B axes that the constraint attempts to maintain.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Gets or sets the maximum swing angle that the constraint allows between world axis A and B. Based on the MinimumDot field.
+
+
+
+
+ Constrains two bodies with a swivel hinge that allows rotation around two axes, like a laptop monitor hinge that allows flipping the screen. Equivalent to a BallSocket constraint and an AngularSwivelHinge constraint solved together.
+
+
+
+
+ Local offset from the center of body A to its attachment point.
+
+
+
+
+ Swivel axis in the local space of body A.
+
+
+
+
+ Local offset from the center of body B to its attachment point.
+
+
+
+
+ Hinge axis in the local space of body B.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve.
+
+
+
+
+ Prestep, warm start and solve iteration functions for a three body constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Shared implementation across all four body constraints.
+
+
+
+
+ Constrains two bodies' rotations around attached twist axes to a range of permitted twist angles.
+
+
+
+
+ Local space basis attached to body A against which to measure body B's transformed axis. Expressed as a 3x3 rotation matrix, the X axis corresponds with 0 degrees,
+ the Y axis corresponds to 90 degrees, and the Z axis is the twist axis.
+
+
+
+
+ Local space basis attached to body B that will be measured against body A's basis.
+ Expressed as a 3x3 rotation matrix, the transformed X axis will be measured against A's X and Y axes. The Z axis is the twist axis.
+
+
+
+
+ Minimum angle between B's axis to measure and A's measurement axis.
+
+
+
+
+ Maximum angle between B's axis to measure and A's measurement axis.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Constrains the twist velocity between two bodies to a target.
+
+
+
+
+ Local twist axis attached to body A.
+
+
+
+
+ Local twist axis attached to body B.
+
+
+
+
+ Goal relative twist velocity around the body axes.
+
+
+
+
+ Motor control parameters.
+
+
+
+
+ Constrains two bodies to maintain a target twist angle around body-attached axes.
+
+
+
+
+ Local space basis attached to body A against which to measure body B's transformed axis. Expressed as a 3x3 rotation matrix, the X axis corresponds with 0 degrees,
+ the Y axis corresponds to 90 degrees, and the -Z axis is the twist axis. When viewed along the twist axis, positive change in angle causes counterclockwise rotation in right handed coordinates.
+
+
+
+
+ Local space basis attached to body B that will be measured against body A's basis.
+ Expressed as a 3x3 rotation matrix, the transformed X axis will be measured against A's X and Y axes. The Z axis is the twist axis.
+
+
+
+
+ Target angle between B's axis to measure and A's measurement axis.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Servo control parameters.
+
+
+
+
+ A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve.
+ Two address streams isn't much of a problem for prefetching.
+
+
+
+
+ Prestep, warm start and solve iteration functions for a two body constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Prestep, warm start, solve iteration, and incremental contact update functions for a two body contact constraint type.
+
+ Type of the prestep data used by the constraint.
+ Type of the accumulated impulses used by the constraint.
+ Type of the projection to input.
+
+
+
+ Shared implementation across all two body constraints.
+
+
+
+
+ Stores the raw AOSOA formatted data associated with constraints in a type batch.
+
+
+
+
+ Superclass of constraint type batch processors. Responsible for interpreting raw type batches for the purposes of bookkeeping and solving.
+
+
+ This class holds no actual state of its own. A solver creates a unique type processor for each registered constraint type, and all instances are held in untyped memory.
+ Splitting the functionality from the data allows for far fewer GC-tracked instances and allows the raw data layout to be shared more easily.
+ For example, sleeping simulation islands store type batches, but they are created and used differently- and for convenience, they are stored on a per-island basis.
+ Using the same system but with reference type TypeBatches, tens of thousands of inactive islands would imply tens of thousands of GC-tracked objects.
+ That's not acceptable, so here we are.
+ Conceptually, you can think of the solver's array of TypeProcessors like C function pointers.
+
+
+
+
+ Gets the number of bodies associated with each constraint in this type processor.
+
+
+
+
+ Gets the number of degrees of freedom that each constraint in this type processor constrains. Equal to the number of entries in the accumulated impulses.
+
+
+
+
+ Allocates a slot in the batch.
+
+ Type batch to allocate in.
+ Handle of the constraint to allocate. Establishes a link from the allocated constraint to its handle.
+ Pointer to a list of body indices (not handles!) with count equal to the type batch's expected number of involved bodies.
+ Allocation provider to use if the type batch has to be resized.
+ Index of the slot in the batch.
+
+
+
+ Moves a constraint from one ConstraintBatch's TypeBatch to another ConstraintBatch's TypeBatch of the same type.
+
+ Index of the batch that owns the type batch that is the source of the constraint transfer.
+ Index of the constraint to move in the current type batch.
+ Solver that owns the batches.
+ Bodies set that owns all the constraint's bodies.
+ Index of the ConstraintBatch in the solver to copy the constraint into.
+
+
+
+ Defines a function that creates a sort key from body references in a type batch. Used by constraint layout optimization.
+
+
+
+
+ Overwrites all the data in the target constraint slot with source data.
+
+
+
+
+ Removes a constraint from the batch.
+
+ Index of the constraint to remove.
+ The handle to constraint mapping used by the solver that could be modified by a swap on removal.
+
+
+
+ Moves a constraint from one ConstraintBatch's TypeBatch to another ConstraintBatch's TypeBatch of the same type.
+
+ Index of the batch that owns the type batch that is the source of the constraint transfer.
+ Index of the constraint to move in the current type batch.
+ Solver that owns the batches.
+ Bodies set that owns all the constraint's bodies.
+ Index of the ConstraintBatch in the solver to copy the constraint into.
+
+
+
+ Constrains the volume of a tetrahedron connecting the centers of four bodies to match a goal volume.
+ Scaled volume computed from (ab x ac) * ad; the volume may be negative depending on the winding of the tetrahedron.
+
+
+
+
+ 6 times the target volume of the tetrahedra. Computed from (ab x ac) * ad; this may be negative depending on the winding of the tetrahedron.
+
+
+
+
+ Spring frequency and damping parameters.
+
+
+
+
+ Creates a new volume constraint, initializing the target volume using a set of initial positions.
+
+ Initial position of the first body.
+ Initial position of the second body.
+ Initial position of the third body.
+ Initial position of the fourth body.
+ Spring settings to apply to the volume constraint.
+
+
+
+ Handles the solve iterations of a bunch of volume constraints.
+
+
+
+
+ Constrains two bodies to maintain a relative position and orientation. All six degrees of freedom are solved simultaneously.
+
+
+
+
+ Offset from body A to body B in the local space of A.
+
+
+
+
+ Target orientation of body B in body A's local space.
+
+
+
+
+ Springiness of the position and orientation constraints.
+
+
+
+
+ Handles the solve iterations of a bunch of ball socket constraints.
+
+
+
+
+ Helper class to register the default types within a simulation instance.
+
+
+
+
+ Registers the set of constraints that are packaged in the engine.
+
+
+
+
+ Creates a task registry containing the default collision pair types.
+
+
+
+
+ Creates a task registry containing the default sweep task types.
+
+
+
+
+ Contains constraints that could not belong to any lower constraint batch due to their involved bodies. All of the contained constraints will be solved using a fallback solver that
+ trades rigidity for parallelism.
+
+
+
+
+ Gets the number of bodies in the fallback batch.
+
+
+
+
+ Unique identifier of a body belonging to a simulation's Bodies collection.
+
+
+
+
+ Index in the handle-to-memory mapping table used to look up the current memory location of the body.
+ This value will not (and must not) change during the body's lifespan, but the memory that the table points to could change.
+
+
+
+
+ Unique identifier of a static belonging to a simulation's Statics collection.
+
+
+
+
+ Index in the handle-to-memory mapping table used to look up the current memory location of the body.
+ This value will not (and must not) change during the body's lifespan, but the memory that the table points to could change.
+
+
+
+
+ Unique identifier of a constraint belonging to a simulation's Solver.
+
+
+
+
+ Index in the handle-to-memory mapping table used to look up the current memory location of the constraint.
+ This value will not (and must not) change during the constraint's lifespan, but the memory that the table points to could change.
+
+
+
+
+ Collects body handles associated with an active constraint as integers.
+
+
+
+
+ Shared miscellaneous helper functions.
+
+
+
+
+ Provides functionality for efficiently waking up sleeping bodies.
+
+
+
+
+ Wakes up a body if it is sleeping. All bodies that can be found by traversing the constraint graph from the body will also be awakened.
+ If the body is already awake, this does nothing.
+
+ Handle of the body to awaken.
+
+
+
+ Wakes up any sleeping bodies associated with a constraint. All bodies that can be found by traversing the constraint graph from the constraint referenced bodies will also be awakened.
+ If all bodies associated with the constraint are already awake, this does nothing.
+
+ Handle of the constraint to awaken.
+
+
+
+ Wakes up all bodies and constraints within a set. Doesn't do anything if the set is awake (index zero).
+
+ Index of the set to awaken.
+
+
+
+ Awakens a list of set indices.
+
+ List of set indices to wake up.
+ Thread dispatcher to use when waking the bodies. Pass null to run on a single thread.
+
+
+
+ Represents the constraint batch structure and all references in an island. Holds everything necessary to create and gather a full island.
+
+
+
+
+ Gets or sets the multiplier applied to the active body count used to calculate the number of sleep traversals in a given timestep.
+
+
+
+
+ Gets or sets the fraction of the active set to target as the number of bodies slept in a given frame.
+ This is only a goal; the actual number of slept bodies may be more or less.
+
+
+
+
+ Gets or sets the fraction of the active set to target as the number of bodies traversed for sleeping in a given frame.
+ This is only a goal; the actual number of traversed bodies may be more or less.
+
+
+
+
+ Traverses the active constraint graph collecting bodies that match a predicate. If any body visited during the traversal fails to match the predicate, the traversal terminates.
+
+ Type of the predicate to test each body index with.
+ Pool to allocate temporary collections from.
+ Index of the active body to start the traversal at.
+ Predicate to test each traversed body with. If any body results in the predicate returning false, the traversal stops and the function returns false.
+ List to fill with body indices traversed during island collection. Bodies failing the predicate will not be included.
+ List to fill with constraint handles traversed during island collection.
+ True if the simulation graph was traversed without ever finding a body that made the predicate return false. False if any body failed the predicate.
+ The bodyIndices and constraintHandles lists will contain all traversed predicate-passing bodies and constraints.
+
+
+
+ If true, this job relates to a subset of body indices. If false, this job relates to a subset of constraint handles.
+
+
+
+
+ Forcefully sleeps a list of bodies and all bodies that can be reached by traversing the constraint graph from those bodies.
+
+ List of body indices to sleep.
+ Thread dispatcher to use for the sleep attempt, if any. If null, sleep is performed on the calling thread.
+ True if the sleep should produce deterministic results at higher cost, false otherwise.
+
+
+
+ Forces a body and all bodies that can be found by traversing the constraint graph from that body to go to sleep.
+
+ Index of the body to sleep in the active set.
+
+
+
+ Ensures that the Bodies, Solver, and NarrowPhase can hold at least the given number of sets (BodySets for the Bodies collection, ConstraintSets for the Solver, PairSubcaches for the NarrowPhase.PairCache).
+
+ Number of sets to guarantee space for.
+
+
+
+ Ensures that the Bodies and Solver can hold the given number of sets.
+ If the existing allocation is smaller than the requested sets capacity, the allocation will be enlarged.
+ If the existing allocation is larger than both the existing potentially allocated set range and the requested sets capacity, the allocation will be shrunk.
+ Shrinks will never cause an existing set to be lost.
+
+ Target number of sets to allocate space for.
+
+
+
+ Delegate used by ITimesteppers for their stage callbacks.
+
+ Time step duration.
+ Thread dispatcher used for this timestep.
+
+
+
+ Delegate used by ITimesteppers for stage callbacks within substepping loops.
+
+ Index of the substep executing this stage.
+ Time step duration.
+ Thread dispatcher used for this timestep.
+
+
+
+ Defines a type capable of updating the simulation state for a given elapsed time.
+
+
+
+
+ Callbacks to execute immediately before collision detection executes.
+
+
+
+
+ Callbacks to execute after collision detection completes.
+
+
+
+
+ Performs one timestep of the given length.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Defines how a pose integrator should handle angular velocity integration.
+
+
+
+
+ Angular velocity is directly integrated and does not change as the body pose changes. Does not conserve angular momentum.
+
+
+
+
+ Approximately conserves angular momentum by updating the angular velocity according to the change in orientation. Does a decent job for gyroscopes, but angular velocities will tend to drift towards a minimal inertia axis.
+
+
+
+
+ Approximately conserves angular momentum by including an implicit gyroscopic torque. Best option for Dzhanibekov effect simulation, but applies a damping effect that can make gyroscopes less useful.
+
+
+
+
+ Defines a type that handles callbacks for body pose integration.
+
+
+
+
+ Gets how the pose integrator should handle angular velocity integration.
+
+
+
+
+ Performs any required initialization logic after the Simulation instance has been constructed.
+
+ Simulation that owns these callbacks.
+
+
+
+ Called prior to integrating the simulation's active bodies. When used with a substepping timestepper, this could be called multiple times per frame with different time step values.
+
+ Current time step duration.
+
+
+
+ Callback called for each active body within the simulation during body integration.
+
+ Index of the body being visited.
+ Body's current pose.
+ Body's current local inertia.
+ Index of the worker thread processing this body.
+ Reference to the body's current velocity to integrate.
+
+
+
+ Provides helper functions for integrating body poses.
+
+
+
+
+ Integrates the velocity of mobile bodies over time into changes in position and orientation. Also applies gravitational acceleration to dynamic bodies.
+
+
+ This variant of the integrator uses a single global gravity. Other integrators that provide per-entity gravity could exist later.
+ This integrator also assumes that the bodies positions are stored in terms of single precision floats. Later on, we will likely modify the Bodies
+ storage to allow different representations for larger simulations. That will require changes in this integrator, the relative position calculation of collision detection,
+ the bounding box calculation, and potentially even in the broadphase in extreme cases (64 bit per component positions).
+
+
+
+
+ Updates the simulation in the order of: sleeper -> integrate body poses, velocity and bounding boxes -> collision detection -> solver -> data structure optimization.
+
+
+
+
+ Fires after the sleeper completes and before bodies are integrated.
+
+
+
+
+ Fires after bodies have had their position, velocity, and bounding boxes updated, but before collision detection begins.
+
+
+
+
+ Fires after all collisions have been identified, but before constraints are solved.
+
+
+
+
+ Fires after the solver executes and before data structures are incrementally optimized.
+
+
+
+
+ Updates the simulation in the order of: sleeper -> integrate velocities and update body bounding boxes -> collision detection -> solver -> integrate body poses -> data structure optimization.
+
+
+
+
+ Fires after the sleeper completes and before bodies are integrated.
+
+
+
+
+ Fires after bodies have had their velocities and bounding boxes updated, but before collision detection begins.
+
+
+
+
+ Fires after all collisions have been identified, but before constraints are solved.
+
+
+
+
+ Fires after the solver executes and before body poses are integrated.
+
+
+
+
+ Fires after bodies have their poses integrated and before data structures are incrementally optimized.
+
+
+
+
+ Orchestrates the bookkeeping and execution of a full dynamic simulation.
+
+
+
+
+ Gets the simulation profiler. Note that the SimulationProfiler implementation only exists when the library is compiled with the PROFILE compilation symbol; if not defined, returned times are undefined.
+
+
+
+
+ Gets the main memory pool used to fill persistent structures and main thread ephemeral resources across the engine.
+
+
+
+
+ Gets the timestepper used to update the simulation state.
+
+
+
+
+ Gets or sets whether to use a deterministic time step when using multithreading. When set to true, additional time is spent sorting constraint additions and transfers.
+ Note that this can only affect determinism locally- different processor architectures may implement instructions differently.
+
+
+
+
+ Constructs a simulation supporting dynamic movement and constraints with the specified narrow phase callbacks.
+
+ Buffer pool used to fill persistent structures and main thread ephemeral resources across the engine.
+ Callbacks to use in the narrow phase.
+ Callbacks to use in the pose integrator.
+ Timestepper that defines how the simulation state should be updated.
+ Number of iterations the solver should use.
+ Number of synchronized batches the solver should maintain before falling back to a lower quality jacobi hybrid solver.
+ Allocation sizes to initialize the simulation with. If left null, default values are chosen.
+ New simulation.
+
+
+
+ Executes the sleep stage, moving candidate
+
+ Thread dispatcher to use for the sleeper execution, if any.
+
+
+
+ Updates the position, velocity, world inertia, deactivation candidacy and bounding boxes of active bodies.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Predicts the bounding boxes of active bodies by speculatively integrating velocity. Does not actually modify body velocities. Updates deactivation candidacy.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Updates the velocities, world space inertias, bounding boxes, and deactivation candidacy of active bodies.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Updates the velocities and world space inertias of active bodies.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Updates the poses of active bodies.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Updates the broad phase structure for the current body bounding boxes, finds potentially colliding pairs, and then executes the narrow phase for all such pairs. Generates contact constraints for the solver.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Uses the current body velocities to incrementally update all active contact constraint penetration depths.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Solves all active constraints in the simulation.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Incrementally improves body and constraint storage for better performance.
+
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Performs one timestep of the given length.
+
+
+ Be wary of variable timesteps. They can harm stability. Whenever possible, keep the timestep the same across multiple frames unless you have a specific reason not to.
+
+ Duration of the time step.
+ Thread dispatcher to use for execution, if any.
+
+
+
+ Clears the simulation of every object, only returning memory to the pool that would be returned by sequential removes.
+ Other persistent allocations, like those in the Bodies set, will remain.
+
+
+
+
+ Increases the allocation size of any buffers too small to hold the allocation target.
+
+
+
+ The final size of the allocated buffers are constrained by the allocator. It is not guaranteed to be exactly equal to the target, but it is guaranteed to be at least as large.
+
+
+ This is primarily a convenience function. Everything it does internally can be done externally.
+ For example, if only type batches need to be resized, the solver's own functions can be used directly.
+
+
+ Allocation sizes to guarantee sufficient size for.
+
+
+
+ Increases the allocation size of any buffers too small to hold the allocation target, and decreases the allocation size of any buffers that are unnecessarily large.
+
+
+
+ The final size of the allocated buffers are constrained by the allocator. It is not guaranteed to be exactly equal to the target, but it is guaranteed to be at least as large.
+
+
+ This is primarily a convenience function. Everything it does internally can be done externally.
+ For example, if only type batches need to be resized, the solver's own functions can be used directly.
+
+
+ Allocation sizes to guarantee sufficient size for.
+
+
+
+ Clears the simulation of every object and returns all pooled memory to the buffer pool. Leaves the simulation in an unusable state.
+
+
+
+
+ Intersects a ray against the simulation.
+
+ Type of the callbacks to execute on ray-object intersections.
+ Origin of the ray to cast.
+ Direction of the ray to cast.
+ Maximum length of the ray traversal in units of the direction's length.
+ callbacks to execute on ray-object intersections.
+ User specified id of the ray.
+
+
+
+ Sweeps a shape against the simulation.
+
+ Type of the shape to sweep.
+ Type of the callbacks executed when a sweep impacts an object in the scene.
+ Shape to sweep.
+ Starting pose of the sweep.
+ Velocity of the swept shape.
+ Maximum length of the sweep in units of time used to integrate the velocity.
+ Pool to allocate any temporary resources in during execution.
+ Callbacks executed when a sweep impacts an object in the scene.
+ Simulation objects are treated as stationary during the sweep.
+ Minimum amount of progress in terms of t parameter that any iterative sweep tests should make for each sample.
+ Threshold in terms of t parameter under which iterative sweep tests are permitted to exit in collision.
+ Maximum number of iterations to use in iterative sweep tests.
+
+
+
+ Sweeps a shape against the simulation.
+
+ Type of the shape to sweep.
+ Type of the callbacks executed when a sweep impacts an object in the scene.
+ Shape to sweep.
+ Starting pose of the sweep.
+ Velocity of the swept shape.
+ Maximum length of the sweep in units of time used to integrate the velocity.
+ Pool to allocate any temporary resources in during execution.
+ Callbacks executed when a sweep impacts an object in the scene.
+ Simulation objects are treated as stationary during the sweep.
+
+
+
+ The common set of allocation sizes for a simulation.
+
+
+
+
+ The number of bodies to allocate space for.
+
+
+
+
+ The number of statics to allocate space for.
+
+
+
+
+ The number of inactive islands to allocate space for.
+
+
+
+
+ Minimum number of shapes to allocate space for in each shape type batch.
+
+
+
+
+ The number of constraints to allocate bookkeeping space for. This does not affect actual type batch allocation sizes, only the solver-level constraint handle storage.
+
+
+
+
+ The minimum number of constraints to allocate space for in each individual type batch.
+ New type batches will be given enough memory for this number of constraints, and any compaction will not reduce the allocations below it.
+ The number of constraints can vary greatly across types- there are usually far more contacts than ragdoll constraints.
+ Per type estimates can be assigned within the Solver.TypeBatchAllocation if necessary. This value acts as a lower bound for all types.
+
+
+
+
+ The minimum number of constraints to allocate space for in each body's constraint list.
+ New bodies will be given enough memory for this number of constraints, and any compaction will not reduce the allocations below it.
+
+
+
+
+ Stores profiling information for the previous simulation execution.
+
+
+
+
+ Gets the time it took to complete the last execution of the given stage. If no stage matching the given object ran, returns -1.
+
+ Stage to look up the time for.
+ Time it took to complete the last execution of the given stage.
+
+
+
+ Checks whether the child of a collidable should be tested against a ray. Only called by shape types that can have more than one child.
+
+ Index of the candidate in the parent collidable.
+ True if the child should be tested by the ray, false otherwise.
+
+
+
+ Called when a ray impact has been found.
+
+ Information about the ray associated with this hit.
+ Maximum distance along the ray that the traversal is allowed to go in units of ray direction length. Can be set to limit future tests.
+ Distance along the ray to the impact in units of ray direction length. In other words, hitLocation = ray.Origin + ray.Direction * t.
+ Surface normal at the hit location.
+ Index of the hit child. For convex shapes or other types that don't have multiple children, this is always zero.
+
+
+
+ Defines a type capable of filtering ray test candidates and handling ray hit results.
+
+
+
+
+ Checks whether a collidable identified by the acceleration structure should be tested against a ray.
+
+ Candidate collidable for ray testing.
+ True if the collidable should be tested by the ray, false otherwise.
+
+
+
+ Checks whether the child of a collidable should be tested against a ray. Only called by shape types that can have more than one child.
+
+ Parent of the candidate.
+ Index of the candidate in the parent collidable.
+ True if the child should be tested by the ray, false otherwise.
+
+
+
+ Called when a ray impact has been found.
+
+ Information about the ray associated with this hit.
+ Maximum distance along the ray that the traversal is allowed to go in units of ray direction length. Can be set to limit future tests.
+ Distance along the ray to the impact in units of ray direction length. In other words, hitLocation = ray.Origin + ray.Direction * t.
+ Surface normal at the hit location.
+ Collidable hit by the ray.
+ Index of the hit child. For convex shapes or other types that don't have multiple children, this is always zero.
+
+
+
+ Defines a type capable of filtering sweep candidates and handling sweep results.
+
+
+
+
+ Checks whether to run a detailed sweep test against a target collidable.
+
+ Collidable to check.
+ True if the sweep test should be attempted, false otherwise.
+
+
+
+ Checks whether to run a detailed sweep test against a target collidable's child.
+
+ Collidable to check.
+ Index of the child in the collidable to check.
+ True if the sweep test should be attempted, false otherwise.
+
+
+
+ Called when a sweep test detects a hit with nonzero T value.
+
+ Reference to maximumT passed to the traversal.
+ Time of impact for the sweep test.
+ Location of the first hit detected by the sweep.
+ Surface normal at the hit location.
+ Collidable hit by the traversal.
+
+
+
+ Called when a sweep test detects a hit at T = 0, meaning that no location or normal can be computed.
+
+ Reference to maximumT passed to the traversal.
+ Collidable hit by the traversal.
+
+
+
+ Buffer containing all constraint sets. The first slot is dedicated to the active set; subsequent slots may be occupied by the constraints associated with inactive islands.
+
+
+
+
+ Gets a reference to the active set of constraints, stored in the first set slot.
+
+
+
+
+ Pool to retrieve constraint handles from when creating new constraints.
+
+
+
+
+ Gets the maximum number of solver batches to allow before resorting to a fallback solver.
+ If a single body is constrained by more than FallbackBatchThreshold constraints, all constraints beyond FallbackBatchThreshold are placed into a fallback batch.
+ The fallback batch uses a different solver that can handle multiple constraints affecting a single body in a single batch, allowing greater parallelism at the cost of convergence speed.
+
+
+
+
+ Gets or sets the number of solver iterations to compute per call to Update.
+
+
+
+
+ Gets or sets the minimum amount of space, in constraints, initially allocated in any new type batch.
+
+
+
+
+ Sets the minimum capacity initially allocated to a new type batch of the given type.
+
+ Id of the constraint type to check the initial capacity of.
+ Minimum capacity to use for the type.
+
+
+
+ Gets the minimum initial capacity for a given type.
+ The returned value is the larger of MinimumCapacityPerTypeBatch and the value set by SetMinimumCapacityForType for the given type id.
+
+ Type id to retrieve the minm
+ Larger of MinimumCapacityPerTypeBatch and the given type's minimum set by SetMinimumCapacityForType.
+
+
+
+ Resets all per-type initial capacities to zero. Leaves the minimum capacity across all constraints unchanged.
+
+
+
+
+ Gets the total number of constraints across all sets, batches, and types. Requires enumerating
+ all type batches; this can be expensive.
+
+
+
+
+ Gets whether the given constraint handle refers to a constraint in the solver.
+
+ Constraint handle to check for existence in the solver.
+ True if the constraint handle exists in the solver, false otherwise.
+
+
+
+ Gets a direct reference to the constraint associated with a handle.
+ The reference is temporary; any constraint removals that affect the referenced type batch may invalidate the index.
+
+ Type of the type batch being referred to.
+ Handle index of the constraint.
+ Temporary direct reference to the type batch and index in the type batch associated with the constraint handle.
+ May be invalidated by constraint removals.
+
+
+
+ Attempts to locate a spot for a new constraint. Does not perform allocation for the constraint. If no batch exists, returns the index just beyond the end of the existing list of batches.
+
+ Index of the batch that the constraint would fit in.
+ This is used by the narrowphase's multithreaded constraint adders to locate a spot for a new constraint without requiring a lock. Only after a candidate is located
+ do those systems attempt an actual claim, limiting the duration of locks and increasing potential parallelism.
+
+
+
+ Applies a description to a constraint slot without waking up the associated island.
+
+ Type of the description to apply.
+ Reference of the constraint being updated.
+ Description to apply to the slot.
+
+
+
+ Applies a description to a constraint slot without waking up the associated island.
+
+ Type of the description to apply.
+ Handle of the constraint being updated.
+ Description to apply to the slot.
+
+
+
+ Applies a description to a constraint slot without waking up the associated island.
+
+ Type of the description to apply.
+ Handle of the constraint being updated.
+ Description to apply to the slot.
+
+
+
+ Applies a description to a constraint slot, waking up the connected bodies if necessary.
+
+ Type of the description to apply.
+ Handle of the constraint being updated.
+ Description to apply to the slot.
+
+
+
+ Applies a description to a constraint slot, waking up the connected bodies if necessary.
+
+ Type of the description to apply.
+ Handle of the constraint being updated.
+ Description to apply to the slot.
+
+
+
+ Allocates a constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ Body handles used by the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ Body handles referenced by the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a one-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ Body connected to the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a one-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a two-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a two-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a three-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Third body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a three-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Third body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a four-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Third body of the constraint.
+ Fourth body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Allocates a four-body constraint slot and sets up a constraint with the specified description.
+
+ Type of the constraint description to add.
+ First body of the constraint.
+ Second body of the constraint.
+ Third body of the constraint.
+ Fourth body of the constraint.
+ Allocated constraint handle.
+
+
+
+ Removes a constraint from a batch, performing any necessary batch cleanup, but does not return the constraint's handle to the pool.
+
+ Handle of the constraint being removed.
+ Index of the batch to remove from.
+ Type id of the constraint to remove.
+ Index of the constraint to remove within its type batch.
+
+
+
+ Removes the constraint associated with the given handle. Note that this may invalidate any outstanding direct constraint references
+ by reordering the constraints within the TypeBatch subject to removal.
+
+ Handle of the constraint to remove from the solver.
+
+
+
+ Changes the body references of all constraints associated with a body in response to its movement into a new slot.
+ Constraints associated with the body now at its old slot, if any, are left untouched.
+
+ Memory index that the moved body used to inhabit.
+ Memory index that the moved body now inhabits.
+
+
+
+ Changes the body references of all constraints associated with two bodies in response to them swapping slots in memory.
+
+ First swapped body index.
+ Second swapped body index.
+
+
+
+ Scales the accumulated impulses associated with a constraint set by a given scale.
+
+ Set to scale.
+ Scale to apply to accumulated impulses.
+
+
+
+ Scales all accumulated impulses in the active set.
+
+ Scale to apply to accumulated impulses.
+
+
+
+ Scales all accumulated impulses in all constraint sets.
+
+ Scale to apply to accumulated impulses.
+
+
+
+ Enumerates the accumulated impulses associated with a constraint.
+
+ Constraint to enumerate.
+ Enumerator to use.
+
+
+
+ Gathers the squared magnitude of the accumulated impulse for a given constraint.
+
+ Constraint to look up the accumulated impulses of.
+ Squared magnitude of the accumulated impulses associated with the given constraint.
+
+
+
+ Gathers the magnitude of the accumulated impulse for a given constraint.
+
+ Constraint to look up the accumulated impulses of.
+ Magnitude of the accumulated impulses associated with the given constraint.
+
+
+
+ Enumerates the set of bodies associated with a constraint in order of their references within the constraint.
+
+ Constraint to enumerate.
+ Enumerator to use.
+
+
+
+ Removes all objects from the solver. This is meant as a fast path to empty a simulation's constraints. It makes no attempt to retain synchronization with other systems
+ which may depend on the existence of constraints, like the per-body constraint lists.
+
+
+
+
+ Adjusts the size of the the solvers non-typebatch data structures. An allocation will grow if the given capacity exceeds the currently allocated capacity.
+
+ Size of the span of body handles to allocate space for. Applies to batch referenced handle sets.
+ Number of constraint handles to allocate space for. Applies to the handle->constraint mapping table.
+
+
+
+ Adjusts the size of the the solvers non-typebatch data structures. An allocation is allowed to shrink if it fits both all existing entries and the given capacity.
+ An allocation will grow if the given capacity exceeds the currently allocated capacity.
+
+ Size of the span of body handles to allocate space for. Applies to batch referenced handle sets.
+ Number of constraint handles to allocate space for. Applies to the handle->constraint mapping table.
+
+
+
+ Ensures all existing active type batches meet or exceed the current solver-defined minimum capacities. Type batches with capacities smaller than the minimums will be enlarged.
+
+
+
+
+ Applies the current solver-defined minimum capacities to existing type batches. Type batches with capacities larger than the minimums and counts less than the minimums may be shrunk.
+ Type batches with capacities smaller than the minimums will be enlarged.
+
+
+
+
+ Returns all pool-retrieved resources to the pool.
+
+
+ The solver cannot be 'rehydrated' for reuse after a disposal. If you want to return bulk data to the pool while leaving the solver in a usable state, consider using Clear instead.
+
+
+
+
+ Index of the first bundle in the block.
+
+
+
+
+ Exlusive end index of the bundle. Index of the last bundle in the block is End - 1.
+
+
+
+
+ Inclusive start of blocks known to be claimed by any worker.
+
+
+
+
+ Exclusive end of blocks known to be claimed by any worker.
+
+
+
+
+ Behaves like a framework SpinWait, but never voluntarily relinquishes the timeslice to off-core threads.
+
+ There are three big reasons for using this over the regular framework SpinWait:
+ 1) The framework spinwait relies on spins for quite a while before resorting to any form of timeslice surrender.
+ Empirically, this is not ideal for the solver- if the sync condition isn't met within several nanoseconds, it will tend to be some microseconds away.
+ This spinwait is much more aggressive about moving to yields.
+ 2) After a number of yields, the framework SpinWait will resort to calling Sleep.
+ This widens the potential set of schedulable threads to those not native to the current core. If we permit that transition, it is likely to evict cached solver data.
+ (For very large simulations, the use of Sleep(0) isn't that concerning- every iteration can be large enough to evict all of cache-
+ but there still isn't much benefit to using it over yields in context.)
+ 3) After a particularly long wait, the framework SpinWait resorts to Sleep(1). This is catastrophic for the solver- worse than merely interfering with cached data,
+ it also simply prevents the thread from being rescheduled for an extremely long period of time (potentially most of a frame!) under the default clock resolution.
+ Note that this isn't an indication that the framework SpinWait should be changed, but rather that the solver's requirements are extremely specific and don't match
+ a general purpose solution very well.
+
+
+
+ Describes the properties of a static object. When added to a simulation, static objects can collide but have no velocity and will not move in response to forces.
+
+
+
+
+ Position and orientation of the static.
+
+
+
+
+ Collidable properties of the static.
+
+
+
+
+ Builds a new static description.
+
+ Position of the static.
+ Orientation of the static.
+ Collidable description for the static.
+
+
+
+ Builds a new static description.
+
+ Position of the static.
+ Collidable description for the static.
+
+
+
+ Builds a new static description with discrete continuity.
+
+ Position of the static.
+ Orientation of the static.
+ Index of the static's shape in the simulation shapes set.
+ Distance beyond the surface of the static to allow speculative contacts to be generated.
+
+
+
+ Builds a new static description with discrete continuity.
+
+ Position of the static.
+ Index of the static's shape in the simulation shapes set.
+ Distance beyond the surface of the body to allow speculative contacts to be generated.
+
+
+
+ Convenience structure for directly referring to a static's properties.
+
+ Note that this type makes no attempt to protect against unsafe modification of static properties.
+
+
+
+ Handle of the static that this reference refers to.
+
+
+
+
+ The collection containing the static.
+
+
+
+
+ Constructs a new static reference.
+
+ Handle of the static to refer to.
+ Collection containing the static.
+
+
+
+ Gets whether the static reference exists within the static set. True if the handle maps to a valid memory location that agrees that the handle points to it, false otherwise.
+
+
+
+
+ Gets a the static's index in the statics collection.
+
+
+
+
+ Gets a reference to the static's pose.
+
+
+
+
+ Gets a reference to the static's collidable.
+
+
+
+
+ Gets a description of the static.
+
+ Description of the static.
+
+
+
+ Sets a static's properties according to a description.
+
+ Description of the static.
+
+
+
+ Changes the shape of a static.
+
+ Index of the new shape to use for the static.
+
+
+
+ Gets a copy of the static's bounding box.
+
+
+
+
+ Gets direct pointers to the static's bounding box minimum and maximum in the broad phase. Outputs null if the static has no shape.
+
+ Pointer to the bounding box minimum in the broad phase.
+ Pointer to the bounding box maximum in the broad phase.
+
+
+
+ Updates the static's bounds in the broad phase for its current state. Does not include velocity expansion. Does nothing if the static has no shape.
+
+ Can be useful if you made modifications to the static's state that you want reflected in the broad phase before the next timestep.
+ For example, if you want to perform ray casts against the broad phase after moving objects around directly, their bounds must be updated or else the broad phase bounds will be out of date and the ray will likely miss.
+
+
+
+ Collection of allocated static collidables.
+
+
+
+
+ Remaps a static handle integer value to the actual array index of the static.
+ The backing array index may change in response to cache optimization.
+
+
+
+
+ Remaps a static index to its handle.
+
+
+
+
+ The set of collidables owned by each static. Speculative margins, continuity settings, and shape indices can be changed directly.
+ Shape indices cannot transition between pointing at a shape and pointing at nothing or vice versa without notifying the broad phase of the collidable addition or removal.
+
+
+
+
+ Checks whether a static handle is currently registered with the statics set.
+
+ Handle to check for.
+ True if the handle exists in the collection, false otherwise.
+
+
+
+ Removes a static from the set by index. Any inactive bodies with bounding boxes overlapping the removed static's bounding box will be forced active.
+
+ Index of the static to remove.
+
+
+
+ Removes a static from the set. Any inactive bodies with bounding boxes overlapping the removed static's bounding box will be forced active.
+
+ Handle of the static to remove.
+
+
+
+ Updates the bounds held within the broad phase for the static's current state.
+
+
+
+
+ Adds a new static body to the simulation. All inactive bodies whose bounding boxes overlap the new static are forced active.
+
+ Description of the static to add.
+ Handle of the new static.
+
+
+
+ Changes the shape of a static and updates its bounds in the broad phase.
+
+ Handle of the static to change the shape of.
+ Index of the new shape to use for the static.
+
+
+
+ Applies a new description to an existing static object. All inactive bodies with bounding boxes overlapping the old or new static collidable are forced active.
+ Updates the bounds of the static in the broad phase.
+
+ Handle of the static to apply the description to.
+ Description to apply to the static.
+
+
+
+ Gets the current description of the static referred to by a given handle.
+
+ Handle of the static to look up the description of.
+ Gathered description of the handle-referenced static.
+
+
+
+ Gets a reference to a static by its handle.
+
+ Handle of the static to grab a reference of.
+ Reference to the desired static.
+
+
+
+ Clears all bodies from the set without returning any memory to the pool.
+
+
+
+
+ Resizes the allocated spans for static data. Note that this is conservative; it will never orphan existing objects.
+
+ Target static data capacity.
+
+
+
+ Increases the size of buffers if needed to hold the target capacity.
+
+ Target data capacity.
+
+
+
+ Returns all static resources to the pool used to create them.
+
+ The object can be reused if it is reinitialized by using EnsureCapacity or Resize.
+
+
+
+ Updates the simulation in the order of: sleeper -> predict body bounding boxes -> collision detection -> LOOP { contact data update (if on iteration > 0) -> integrate body velocities -> solver -> integrate body poses } -> data structure optimization.
+ Each inner loop execution simulates a sub-timestep of length dt/substepCount.
+ Useful for simulations with difficult to solve constraint systems that need shorter timestep durations but which don't require high frequency collision detection.
+
+
+
+
+ Gets or sets the number of substeps to execute during each timestep.
+
+
+
+
+ Fires after the sleeper completes and before bodies are integrated.
+
+
+
+
+ Fires after bodies have their bounding boxes updated for the frame's predicted motion and before collision detection.
+
+
+
+
+ Fires after all collisions have been identified, but before the substep loop begins.
+
+
+
+
+ Fires at the beginning of a substep.
+
+
+
+
+ Fires after contact constraints are incrementally updated at the beginning of substeps after the first and before velocities are integrated.
+
+
+
+
+ Fires after bodies have their velocities integrated and before the solver executes.
+
+
+
+
+ Fires after the solver executes and before body poses are integrated.
+
+
+
+
+ Fires after bodies have their poses integrated and before the substep ends.
+
+
+
+
+ Fires at the end of a substep.
+
+
+
+
+ Fires after all substeps are finished executing and before data structures are incrementally optimized.
+
+
+
+
+ Pointer to a leaf's tree location.
+
+ The identity of a leaf is implicit in its position within the leaf array.
+
+
+
+ Gets the index of the node that the leaf is directly held by.
+
+
+
+
+ Gets which child within the owning node the leaf is in.
+
+
+
+
+ 2-wide tree node.
+
+
+
+
+ Metadata associated with a 2-child tree node.
+
+
+
+
+ Cached change in cost of the tree starting at this node since the previous frame.
+ The local cost change is unioned with the refine flags. They're never used simultaneously.
+ This will be overwritten right after use, so don't expect anything meaningful here outside of refinement scheduling's scope.
+
+
+
+
+ Ray representation designed for quicker intersection against axis aligned bounding boxes.
+
+
+
+
+ Gets the number of rays in the batch.
+
+
+
+
+ Gets pointers to the data for a ray.
+
+ Index of the ray to grab.
+ Pointer to the ray's origin and direction. Note that changing the ray's origin and direction mid-traversal will not change the path of the traversal,
+ but it will be visible by any future leafs impacted by this ray.
+ Pointer to the maximum length of the ray in units of the ray's length.
+ Decreasing this value will prevent the traversal from visiting more distant nodes later in the traversal.
+
+
+
+ Gets a reference to the data for a ray.
+
+ Index of the ray to grab.
+ Returns a reference to the ray in the ray source.
+
+
+
+ Reusable structure for testing large numbers of rays against trees.
+
+
+
+
+ Constructs a ray batcher and initializes its backing resources.
+
+ Pool to pull resources from.
+ Maximum number of rays to execute in each traversal.
+ This should typically be chosen as the highest value which avoids spilling data out of L2 cache.
+ Tree depth to preallocate ray stack space for. If a traversal finds nodes deeper than this, a dynamic resize will be triggered.
+
+
+
+ Ray representation designed for quicker intersection against axis aligned bounding boxes.
+
+
+
+
+ Tests any batched rays against the given tree.
+
+ Tree to test the accumulated rays against.
+
+
+
+ Adds a ray to the batcher. Returns true if the batcher has reached maximum ray capacity and needs to be reset in order to continue adding rays.
+
+ Origin of the ray to test against the tree.
+ Direction of the ray to test against the tree.
+ Maximum distance that the ray will travel in units of the ray's length.
+ Identifier value for the ray. Leaf tests will have access to the id.
+ True if the batcher is full and requires a call to ResetRays before adding any more rays, false otherwise.
+
+
+
+ Resets the accumulated ray count to zero.
+
+
+
+
+ Disposes all the resources backing the ray batcher.
+
+
+
+
+ Constructs an empty tree.
+
+ Initial number of leaves to allocate room for.
+
+
+
+ Loads a tree from a byte buffer created by the Serialize function.
+
+ Data to load into the tree.
+ Pool to use to create the tree.
+
+
+
+ Gets the number of bytes required to store the tree.
+
+ Tree to measure.
+ Number of bytes required to store the tree.
+
+
+
+ Writes a tree into a byte buffer.
+
+ Tree to write into the buffer.
+ Buffer to hold the tree's data.
+
+
+
+ Resizes the buffers backing the tree's nodes and leaves. Will not shrink the buffers below the size needed by the currently resident nodes and leaves.
+
+ Pool from which to take and return resources.
+ The desired number of available leaf slots.
+
+
+
+ Resets the tree to a fresh post-construction state, clearing out leaves and nodes but leaving the backing resources intact.
+
+
+
+
+ Disposes the tree's backing resources, returning them to the Pool currently associated with the tree.
+
+ Pool to return resources to.
+ Disposed trees can be reused if EnsureCapacity or Resize is used to rehydrate them.
+
+
+
+ Tests if two tree references point to the same data.
+
+ First tree to compare.
+ Second tree to compare.
+ True if the two trees have the same nodes and node count, false otherwise.
+
+
+
+ Merges a new leaf node with an existing leaf node, producing a new internal node referencing both leaves, and then returns the index of the leaf node.
+
+ Bounding box of the leaf being added.
+ Index of the parent node that the existing leaf belongs to.
+ Index of the child wtihin the parent node that the existing leaf belongs to.
+ Bounding box holding both the new and existing leaves.
+ Index of the leaf
+
+
+
+ Adds a leaf to the tree with the given bounding box and returns the index of the added leaf.
+
+ Extents of the leaf bounds.
+ Resource pool to use if resizing is required.
+ Index of the leaf allocated in the tree's leaf array.
+
+
+
+ Attempts to swap two nodes. Aborts without changing memory if the swap is contested by another thread.
+
+ Uses Node.RefineFlag as a lock-keeping mechanism. All refine flags should be cleared to 0 before a multithreaded processing stage that performs swaps.
+ First node of the swap pair.
+ Second node of the swap pair.
+ True if the nodes were swapped, false if the swap was contested.
+
+
+
+ Moves the children if the specified node into the correct relative position in memory.
+ Takes care to avoid contested moves in multithreaded contexts. May not successfully
+ complete all desired moves if contested.
+
+ Node whose children should be optimized.
+ True if no other threads contested the optimization or if the node is already optimized, otherwise false.
+ Will return true even if not all nodes are optimized if the reason was a target index outside of the node list bounds.
+
+
+
+ Begins a cache optimization at the given node and proceeds all the way to the bottom of the tree.
+ Requires that the targeted node is already at the global optimum position.
+
+ Node to begin the optimization process at.
+
+
+
+ Prepares the jobs associated with a self test. Must be called before a dispatch over PairTest.
+
+ Callbacks used to handle individual overlaps detected by the self test.
+ Number of threads to prepare jobs for.
+
+
+
+ Cleans up after a multithreaded self test.
+
+
+
+
+ Executes a single worker of the multithreaded self test.
+
+ Index of the worker executing this set of tests.
+
+
+
+ Caches input and output for the multithreaded execution of a tree's refit and refinement operations.
+
+
+
+
+ Refits the bounding box of every parent of the node recursively to the root.
+
+ Node to propagate a node change for.
+
+
+
+ Removes a leaf at an index. If the index is not at the end of the leaf list, the last leaf is swapped into the removed location.
+
+ Index of the leaf to remove.
+ Former index of the leaf that was moved into the removed leaf's slot, if any.
+ If leafIndex pointed at the last slot in the list, then this returns -1 since no leaf was moved.
+
+
+
+ Prepares the jobs associated with a self test. Must be called before a dispatch over PairTest.
+
+ Tree to test against itself.
+ Callbacks used to handle individual overlaps detected by the self test.
+ Number of threads to prepare jobs for.
+
+
+
+ Cleans up after a multithreaded self test.
+
+
+
+
+ Executes a single worker of the multithreaded self test.
+
+ Index of the worker executing this set of tests.
+
+
+
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt.meta b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta
similarity index 75%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt.meta
rename to JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta
index 09f19c90..8a0086bd 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt.meta
+++ b/JNFrame/Assets/Packages/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 48d11621921abb349a5ac31a6e0b8a95
+guid: ab482ab5027a2d141a6b8234db8e5b1c
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Samples.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4.meta
similarity index 77%
rename from JNFrame/Assets/Samples.meta
rename to JNFrame/Assets/Packages/BepuUtilities.2.3.4.meta
index a3a1c067..c281db6d 100644
--- a/JNFrame/Assets/Samples.meta
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 636828e4e4b4ac1468433f7433083e68
+guid: 0c1dc29160d088b449c008c586f26c83
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/.signature.p7s b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/.signature.p7s
new file mode 100644
index 00000000..de706285
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/.signature.p7s differ
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec
new file mode 100644
index 00000000..752e925d
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec
@@ -0,0 +1,22 @@
+
+
+
+ BepuUtilities
+ 2.3.4
+ Ross Nordby
+ Apache-2.0
+ https://licenses.nuget.org/Apache-2.0
+ bepuphysicslogo256.png
+ https://github.com/bepu/bepuphysics2
+ Supporting utilities library for BEPUphysics v2.
+ © Bepu Entertainment LLC
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JNFrame/Assets/Scenes/Mode/New Scene.unity.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta
similarity index 74%
rename from JNFrame/Assets/Scenes/Mode/New Scene.unity.meta
rename to JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta
index 716f7617..35f30736 100644
--- a/JNFrame/Assets/Scenes/Mode/New Scene.unity.meta
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: efe1f62659bb4544a8658824baa5261f
+guid: 57ad12de7bd0a424b90fa6e65daca702
DefaultImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png
new file mode 100644
index 00000000..5d395e1f
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png differ
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta
new file mode 100644
index 00000000..793f3bc3
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta
@@ -0,0 +1,127 @@
+fileFormatVersion: 2
+guid: 994c9e52f887aba4d8bd51018a243ad4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 12
+ 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
+ ignoreMipmapLimit: 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
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Server
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib.meta
new file mode 100644
index 00000000..49c3c633
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 13939b529f639c64c9f8ed642ae8225d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0.meta
new file mode 100644
index 00000000..9f621d0b
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b3758ce5f94c47c40a26d23db7225cf7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll
new file mode 100644
index 00000000..0701746e
Binary files /dev/null and b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll differ
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll.meta
new file mode 100644
index 00000000..82ec2189
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: d18075e399b7444499be851fe111d283
+labels:
+- NuGetForUnity
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml
new file mode 100644
index 00000000..9ef8e06e
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml
@@ -0,0 +1,4105 @@
+
+
+
+ BepuUtilities
+
+
+
+
+ A transformation composed of a linear transformation and a translation.
+
+
+
+
+ Translation in the affine transform.
+
+
+
+
+ Linear transform in the affine transform.
+
+
+
+
+ Gets the identity affine transform.
+
+
+
+
+ Constructs a new affine transform.
+
+ Translation to use in the transform.
+
+
+
+ Constructs a new affine tranform.
+
+ Orientation to use as the linear transform.
+ Translation to use in the transform.
+
+
+
+ Constructs a new affine transform.
+
+ Scaling to apply in the linear transform.
+ Orientation to apply in the linear transform.
+ Translation to apply.
+
+
+
+ Constructs a new affine transform.
+
+ The linear transform component.
+ Translation component of the transform.
+
+
+
+ Transforms a vector by an affine transform.
+
+ Position to transform.
+ Transform to apply.
+ Transformed position.
+
+
+
+ Inverts an affine transform.
+
+ Transform to invert.
+ Inverse of the transform.
+
+
+
+ Inverts a rigid transform.
+
+ Transform to invert.
+ Inverse of the transform.
+
+
+
+ Multiplies a transform by another transform.
+
+ First transform.
+ Second transform.
+ Combined transform.
+
+
+
+ Provides XNA-like axis-aligned bounding box functionality.
+
+
+
+
+ Location with the lowest X, Y, and Z coordinates in the axis-aligned bounding box.
+
+
+
+
+ Location with the highest X, Y, and Z coordinates in the axis-aligned bounding box.
+
+
+
+
+ Constructs a bounding box from the specified minimum and maximum.
+
+ Location with the lowest X, Y, and Z coordinates contained by the axis-aligned bounding box.
+ Location with the highest X, Y, and Z coordinates contained by the axis-aligned bounding box.
+
+
+
+ Determines if a bounding box intersects another bounding box.
+
+ First bounding box to test.
+ Second bounding box to test.
+ Whether the bounding boxes intersected.
+
+
+
+ Determines if a bounding box intersects another bounding box.
+
+ First bounding box to test.
+ Second bounding box to test.
+ Whether the bounding boxes intersected.
+
+
+
+ Computes the volume of the bounding box.
+
+ Bounding box to measure.
+ Volume of the bounding box.
+
+
+
+ Computes a bounding box which contains two other bounding boxes.
+
+ Minimum of the first bounding box to merge.
+ Maximum of the first bounding box to merge.
+ Minimum of the second bounding box to merge.
+ Maximum of the second bounding box to merge.
+ Minimum of the merged bounding box.
+ Maximum of the merged bounding box.
+
+
+
+ Computes a bounding box which contains two other bounding boxes.
+
+ First bounding box to contain.
+ Second bounding box to contain.
+ Bounding box to contain both input boxes.
+
+
+
+ Determines if a bounding box intersects a bounding sphere.
+
+ Sphere to test for intersection.
+ Whether the bounding shapes intersect.
+
+
+
+ Creates the smallest possible bounding box that contains a list of points.
+
+ Points to enclose with a bounding box.
+ Bounding box which contains the list of points.
+
+
+
+ Creates a bounding box from a bounding sphere.
+
+ Bounding sphere to be used to create the bounding box.
+ Bounding box created from the bounding sphere.
+
+
+
+ Creates a string representation of the bounding box.
+
+ String representation of the bounding box.
+
+
+
+ Provides XNA-like bounding sphere functionality.
+
+
+
+
+ Location of the center of the sphere.
+
+
+
+
+ Radius of the sphere.
+
+
+
+
+ Constructs a new bounding sphere.
+
+ Location of the center of the sphere.
+ Radius of the sphere.
+
+
+
+ Some helpers for indexing into vector bundles.
+
+
+
+
+ .Count.]]>
+
+ The JIT recognizes that this value is constant!
+
+
+
+ > VectorShift divides x by Vector.Count.]]>
+
+ The JIT recognizes that this value is constant!
+
+
+
+ Enumerable wrapper of an array interval.
+
+ Type of the array elements.
+
+
+
+ Creates a enumerable that spans an interval in an array.
+
+ Array to iterate over.
+ Inclusive beginning of the iteration interval.
+ Exclusive end of the iteration interval.
+
+
+
+ Creates a enumerable that starts at the first index of the array.
+
+ Array to iterate over.
+ Exclusive end of the iteration interval.
+
+
+
+ Creates a enumerable over the entire array.
+
+ Array to iterate over.
+
+
+
+ Enumerates over a given array region.
+
+ Type of the array to iterate over.
+
+
+
+ Defines a type capable of comparing two objects passed by reference.
+
+ Type of the objects to compare.
+
+
+
+ Defines a type capable of performing the hashing and equality comparisons necessary for hash based collections.
+
+ Type of the elements to be hashed and compared.
+
+
+
+ Collection of unique indices supporting add, remove, and contains operations.
+
+
+
+
+ Since we only ever need to support add, remove and contains checks, and because the indices are guaranteed unique,
+ we can just use packed bitfields. Each bit represents one index's containment state.
+
+
+ This can grow up to the number of (indexCount / 8) bytes in the worst case, but that is much, much smaller than using a dictionary or set.
+ 16384 bodies would only take 2KB. Even if you have 1000 batches all at that size, it's a pretty unconcerning amount of storage.
+ (And to be clear, 1000 batches is a crazy pathological number. Most simulations will have less than 20 batches.)
+
+
+
+
+ Gets whether the batch could hold the specified indices.
+
+ List of indices to check for in the batch.
+ True if none of the indices are present in the set, false otherwise.
+
+
+
+ Disposes the internal buffer.
+
+ The instance can be reused after a Dispose if EnsureCapacity or Resize is called.
+ That's a little meaningless given that the instance is a value type, but hey, you don't have to new another one, that's something.
+
+
+
+ Defines a type able to match an element.
+
+ Type of the object to match.
+
+
+
+ Sorts a set of keys and their associated values using radix sort.
+
+ Only one invocation of the sort can be running at a time on a given instance of the sorter.
+ Type of the values to sort.
+ Type of the span that holds the keys to sort.
+ Type of the span that holds the values to sort.
+ Span containing the keys to sort.
+ Span containing the values to sort.
+ Scratch array to write temporary results into.
+ Scratch array to write temporary results into.
+ Start location of the sort.
+ Number of elements, including the start index, to sort.
+ Value equal to or greater than the value of any key within the sorted key set. Tighter bounds can allow faster execution.
+ Pool to pull temporary buffers from.
+ Span containing the sorted keys. Will be either the input keys span or scratchKeys span depending on the keysUpperBound.
+ Span containing the sorted values. Will be either the input values span or scratchValues span depending on the keysUpperBound.
+ Only the region defined by the startIndex and count is modified; the remainder of the span (whether it be the input span or the scratch span) is unmodified.
+
+
+
+ Provides optimized equality testing, comparison, and hashing for primitive types.
+
+ Type to compare and hash.
+
+
+
+ Contains basic helpers for hashing.
+
+
+
+
+ Redistributes a hash. Useful for converting unique but contiguous hashes into a semirandom distribution.
+
+ Hash to redistribute.
+ Hashed hash.
+
+
+
+ Container supporting constant time adds and removes of key-value pairs while preserving fast iteration times.
+ Offers very direct access to information at the cost of safety.
+
+
+
+ Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include:
+ it is a value type and copying it around will break things without extreme care,
+ it cannot be validly default-constructed,
+ it exposes internal structures to user modification,
+ it rarely checks input for errors,
+ the enumerator doesn't check for mid-enumeration modification,
+ it allows unsafe addition that can break if the user doesn't manage the capacity,
+ it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled,
+ it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from.
+
+ Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates.
+ A generous table capacity is recommended; this trades some memory for simplicity and runtime performance.
+ Type of key held by the container.
+ Type of value held by the container.
+ Type of the equality tester and hash calculator used.
+
+
+
+ Gets the number of elements in the dictionary.
+
+
+
+
+ Mask for use in performing fast modulo operations for hashes. Requires that the table span is a power of 2.
+
+
+
+
+ Desired size of the table relative to the size of the key/value spans in terms of a power of 2. Table capacity target will be elementCapacityTarget * 2^TablePowerOffset.
+
+
+
+
+ Backing memory of the dictionary's table. Values are distributed according to the EqualityComparer's hash function.
+ Slots containing 0 are unused and point to nothing. Slots containing higher values are equal to one plus the index of an element in the Span.
+
+
+
+
+ Backing memory containing the keys of the dictionary.
+ Indices from 0 to Count-1 hold actual data. All other data is undefined.
+
+
+
+
+ Backing memory containing the values of the dictionary.
+ Indices from 0 to Count-1 hold actual data. All other data is undefined.
+
+
+
+
+ Equality comparer used to compare and hash keys.
+
+
+
+
+ Gets or sets a key-value pair at the given index in the list representation.
+
+ Index to grab a pair from.
+ Pair at the given index in the dictionary.
+
+
+
+ Creates a new dictionary.
+
+ Span to use as backing memory of the dictionary keys.
+ Span to use as backing memory of the dictionary values.
+ Span to use as backing memory of the table. Must be zeroed.
+ Comparer to use for the dictionary.
+ Target size of the table relative to the number of stored elements.
+
+
+
+ Creates a new dictionary with a default constructed comparer.
+
+ Span to use as backing memory of the dictionary keys.
+ Span to use as backing memory of the dictionary values.
+ Span to use as backing memory of the table. Must be zeroed.
+ Comparer to use for the dictionary.
+ Target size of the table relative to the number of stored elements.
+
+
+
+ Creates a new dictionary.
+
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+ Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity.
+ Comparer to use in the dictionary.
+ Pool used for spans.
+
+
+
+ Creates a new dictionary with a default constructed comparer.
+
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+ Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity.
+ Comparer to use in the dictionary.
+ Pool used for spans.
+
+
+
+ Creates a new dictionary with a default constructed comparer.
+
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+ Comparer to use in the dictionary.
+ Pool used for spans.
+
+
+
+ Swaps out the dictionary's backing memory span for a new span.
+ If the new span is smaller, the dictionary's count is truncated and the extra elements are dropped.
+ The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it.
+
+ New span to use for keys.
+ New span to use for values.
+ New span to use for the table. Must be zeroed.
+ Previous span used for keys.
+ Previous span used for values.
+ Previous span used for the table.
+
+
+
+ Resizes the dictionary's backing array for the given size.
+ If the new span is smaller, the dictionary's count is truncated and the extra elements are dropped.
+
+ Minimum size of the new object memory block. Actual size may be larger.
+ Pool used for spans.
+
+
+
+ Returns the resources associated with the dictionary to pools.
+
+ Pool used for key spans.
+ Pool used for value spans.
+ Pool used for table spans.
+ Type of the pool used for key spans.
+ Type of the pool used for value spans.
+ Type of the pool used for table spans.
+
+
+
+ Ensures that the dictionary has enough room to hold the specified number of elements.
+
+ Pool used for spans.
+ Number of elements to hold.
+
+
+
+ Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools.
+
+ Pool used for spans.
+
+
+
+ Gets the index of the element in the table.
+
+ Element to look up.
+ Index of the element in the redirect table, or if it is not present, the index of where it would be added.
+ The index of the element in the element arrays, if it exists; -1 otherwise.
+ True if the element is present in the dictionary, false if it is not.
+
+
+
+ Gets the index of the key in the dictionary values list if it exists.
+
+ Key to get the index of.
+ The index of the key if the key exists in the dictionary, -1 otherwise.
+
+
+
+ Gets the index of the key in the dictionary values list if it exists.
+
+ Key to get the index of.
+ The index of the key if the key exists in the dictionary, -1 otherwise.
+
+
+
+ Checks if a given key already belongs to the dictionary.
+
+ Key to test for.
+ True if the key already belongs to the dictionary, false otherwise.
+
+
+
+ Checks if a given key already belongs to the dictionary.
+
+ Key to test for.
+ True if the key already belongs to the dictionary, false otherwise.
+
+
+
+ Tries to retrieve the value associated with a key if it exists.
+
+ Key to look up.
+ Value associated with the specified key.
+ True if a value was found, false otherwise.
+
+
+
+ Tries to retrieve the value associated with a key if it exists.
+
+ Key to look up.
+ Value associated with the specified key.
+ True if a value was found, false otherwise.
+
+
+
+ Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false.
+ If a new slot is allocated, the value stored in the slot is undefined.
+
+ Key to find or allocate a slot for.
+ Index of the found or allocated slot.
+ True if the key was already present in the dictionary, false otherwise.
+
+
+
+ Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false.
+ If a new slot is allocated, the value stored in the slot is undefined.
+
+ Key to find or allocate a slot for.
+ Index of the found or allocated slot.
+ True if the key was already present in the dictionary, false otherwise.
+
+
+
+ Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false.
+ If a new slot is allocated, the value stored in the slot is undefined.
+
+ Key to find or allocate a slot for.
+ Pool used to resize the container if necessary to allocate.
+ Index of the found or allocated slot.
+ True if the key was already present in the dictionary, false otherwise.
+
+
+
+ Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false.
+ If a new slot is allocated, the value stored in the slot is undefined.
+
+ Key to find or allocate a slot for.
+ Pool used to resize the container if necessary to allocate.
+ Index of the found or allocated slot.
+ True if the key was already present in the dictionary, false otherwise.
+
+
+
+ Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present,
+ the existing pair is replaced by the given version.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ True if the pair was added to the dictionary, false if the key was already present and its pair was replaced.
+
+
+
+ Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present,
+ the existing pair is replaced by the given version.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ True if the pair was added to the dictionary, false if the key was already present and its pair was replaced.
+
+
+
+ Adds a pair to the dictionary if it is not already present.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ True if the pair was added to the dictionary, false if the key was already present.
+
+
+
+ Adds a pair to the dictionary if it is not already present.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ True if the pair was added to the dictionary, false if the key was already present.
+
+
+
+ Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present,
+ the existing pair is replaced by the given version.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ Pool used for spans.
+ True if the pair was added to the dictionary, false if the key was already present and its pair was replaced.
+
+
+
+ Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present,
+ the existing pair is replaced by the given version.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ Pool used for spans.
+ True if the pair was added to the dictionary, false if the key was already present and its pair was replaced.
+
+
+
+ Adds a pair to the dictionary if it is not already present.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ Pool used for spans.
+ Type of the pool used for spans.
+ True if the pair was added to the dictionary, false if the key was already present.
+
+
+
+ Adds a pair to the dictionary if it is not already present.
+
+ Key of the pair to add.
+ Value of the pair to add.
+ Pool to pull resources from and to return resources to.
+ Type of the pool to use.
+ True if the pair was added to the dictionary, false if the key was already present.
+
+
+
+ Removes an element from the dictionary according to its table and element index. Can only be used if the table and element index are valid.
+
+ Index of the table entry associated with the existing element to remove.
+ Index of the existing element to remove in the contiguous key/value arrays.
+
+
+
+ Removes a pair associated with a key from the dictionary if belongs to the dictionary.
+ Does not preserve the order of elements in the dictionary.
+
+ Key of the pair to remove.
+ True if the key was found and removed, false otherwise.
+
+
+
+ Removes a pair associated with a key from the dictionary if belongs to the dictionary.
+ Does not preserve the order of elements in the dictionary.
+
+ Key of the pair to remove.
+ True if the key was found and removed, false otherwise.
+
+
+
+ Removes all elements from the dictionary.
+
+
+
+
+ Removes all elements from the dictionary without modifying the contents of the keys or values arrays.
+
+
+
+
+ Gets the keys and values wrapped in spans.
+
+ Keys from the dictionary.
+ Values from the dictionary.
+
+
+
+ Container supporting list-like behaviors built on top of unmanaged buffers.
+
+
+ Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include:
+ it is a value type and copying it around will break things without extreme care,
+ it cannot be validly default-constructed,
+ it exposes internal structures to user modification,
+ it rarely checks input for errors,
+ the enumerator doesn't check for mid-enumeration modification,
+ it allows unsafe addition that can break if the user doesn't manage the capacity,
+ it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled,
+ it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from.
+
+ Type of the elements in the list.
+
+
+
+ Backing memory containing the elements of the list.
+ Indices from 0 to Count-1 hold actual data. All other data is undefined.
+
+
+
+
+ Number of elements in the list.
+
+
+
+
+ Gets a reference to the element at the given index in the list.
+
+ Index to grab an element from.
+ Element at the given index in the list.
+
+
+
+ Gets a pointer to the element at the given index in the list.
+
+ Index to grab an element pointer from.
+ Pointer to the element at the given index in the list.
+
+
+
+ Creates a new list.
+
+ Span to use as backing memory to begin with.
+
+
+
+ Creates a new list.
+
+ Pool to pull a span from.
+ The minimum size of the region to be pulled from the pool. Actual span may be larger.
+
+
+
+ Swaps out the list's backing memory span for a new span.
+ If the new span is smaller, the list's count is truncated and the extra elements are dropped.
+ The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it.
+
+ New span to use.
+ Previous span used for elements.
+
+
+
+ Resizes the list's backing array for the given size.
+ Any elements that do not fit in the resized span are dropped and the count is truncated.
+
+ Minimum number of elements required in the new backing array. Actual capacity of the created span may exceed this size.
+ Pool to pull a new span from and return the old span to.
+
+
+
+ Returns the resources associated with the list to pools. Any managed references still contained within the list are cleared (and some unmanaged resources may also be cleared).
+
+ Pool used for element spans.
+
+
+
+ Ensures that the list has enough room to hold the specified number of elements. Can be used to initialize a list.
+
+ Number of elements to hold.
+ Pool used to obtain a new span if needed.
+
+
+
+ Compacts the internal buffer to the minimum size required for the number of elements in the list.
+
+
+
+
+ Adds the elements of a buffer to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a buffer to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the elements of a buffer to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a buffer to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the elements of a span to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a span to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the elements of a span to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a span to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the elements of a span to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a span to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the elements of a span to the QuickList without checking capacity.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+
+
+
+ Adds the elements of a span to the QuickList.
+
+ Span of elements to add.
+ Start index of the added range.
+ Number of elements in the added range.
+ Pool used to obtain a new span if needed.
+
+
+
+ Appends space on the end of the list without checking capacity and returns a reference to it.
+
+ Reference to the allocated space.
+
+
+
+ Appends space on the end of the list without checking capacity and returns a reference to the beginning of it.
+
+ Number of elements to allocate space for.
+ Reference to the beginning of the allocated space.
+
+
+
+ Appends space on the end of the list and returns a reference to it.
+
+ Reference to the allocated space.
+ Pool used to obtain a new span if needed.
+
+
+
+ Appends space on the end of the list and returns a reference to the beginning of it.
+
+ Reference to the beginning of the allocated space.
+ Number of elements to allocate space for.
+ Pool used to obtain a new span if needed.
+
+
+
+ Adds the element to the list without checking the count against the capacity.
+
+ Item to add.
+
+
+
+ Adds the element to the list.
+
+ Item to add.
+ Pool used to obtain a new span if needed.
+
+
+
+ Gets the index of the element in the list using the default comparer, if present.
+
+ Element to find.
+ Index of the element in the list if present, -1 otherwise.
+
+
+
+ Gets the index of the element in the list using the default comparer, if present.
+
+ Element to find.
+ Index of the element in the list if present, -1 otherwise.
+
+
+
+ Gets the index of the first element in the list which matches a predicate, if any.
+
+ Predicate to match.
+ Index of the first matching element in the list if present, -1 otherwise.
+
+
+
+ Removes an element from the list. Preserves the order of elements.
+
+ Element to remove from the list.
+ True if the element was present and was removed, false otherwise.
+
+
+
+ Removes an element from the list. Preserves the order of elements.
+
+ Element to remove from the list.
+ True if the element was present and was removed, false otherwise.
+
+
+
+ Removes the first element that matches a predicate from the list. Preserves the order of elements.
+
+ Predicate to test elements with.
+ True if an element matched and was removed, false otherwise.
+
+
+
+ Removes an element from the list. Does not preserve the order of elements.
+
+ Element to remove from the list.
+ True if the element was present and was removed, false otherwise.
+
+
+
+ Removes an element from the list. Comparisons use the default comparer for the type. Does not preserve the order of elements.
+
+ Element to remove from the list.
+ True if the element was present and was removed, false otherwise.
+
+
+
+ Removes the first element from the list that matches a predicate, moving from low to high indices. Does not preserve the order of elements.
+
+ Predicate to test elements with.
+ True if an element matched and was removed, false otherwise.
+
+
+
+ Removes an element from the list at the given index. Preserves the order of elements.
+
+ Index of the element to remove from the list.
+
+
+
+ Removes an element from the list at the given index. Does not preserve the order of elements.
+
+ Index of the element to remove from the list.
+
+
+
+ Removes and outputs the last element in the list. Assumes positive count. User is responsible for guaranteeing correctness.
+
+ Last element of the list.
+
+
+
+ Removes and outputs the last element in the list if it exists.
+
+ Last element of the list.
+ True if the element existed and was removed, false otherwise.
+
+
+
+ Determines whether the contains a specific value.
+
+
+ true if is found in the ; otherwise, false.
+
+ The object to locate in the .
+
+
+
+ Determines whether the collection contains a specific value.
+
+
+ True if is found in the collection; otherwise, false.
+
+ The object to locate in the collection.
+
+
+
+ Determines whether the collection contains an element that matches a predicate.
+
+
+ True if an element matching the predicate exists, otherwise false.
+
+ The predicate to test against elements in the list.
+
+
+
+ Clears the list by setting the count to zero and explicitly setting all relevant indices in the backing array to default values.
+
+
+
+
+ Container supporting double ended queue behaviors built on top of pooled arrays.
+
+
+ Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include:
+ it is a value type and copying it around will break things without extreme care,
+ it cannot be validly default-constructed,
+ it exposes internal structures to user modification,
+ it rarely checks input for errors,
+ the enumerator doesn't check for mid-enumeration modification,
+ it allows unsafe addition that can break if the user doesn't manage the capacity,
+ it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled,
+ it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from.
+
+ Type of the elements in the queue.
+
+
+
+ Number of elements in the queue.
+
+
+
+
+ Index of the first element in the queue.
+
+
+
+
+ Index of the last element in the queue.
+
+
+
+
+ Mask based on the current span length used to do fast modulo operations; requires that the span has a power of 2 length.
+
+
+
+
+ Gets the backing memory containing the elements of the queue.
+ Indices from FirstIndex to LastIndex inclusive hold actual data. All other data is undefined.
+ Watch out for wrap around; LastIndex can be less than FirstIndex even when count > 0!
+
+
+
+
+ Gets the backing array index for the logical queue index.
+
+ Index in the logical queue.
+ The index in in the backing array corresponding to the given logical queue index.
+
+
+
+ Gets an element at the given index in the queue.
+ 0 gets the element at the FirstIndex. Count-1 would get the element at LastIndex.
+
+ Index to grab an element from.
+ Element at the given index in the queue.
+
+
+
+ Creates a new queue.
+
+ Span to use as backing memory to begin with.
+
+
+
+ Creates a new queue.
+
+ Pool to pull a span from.
+ The minimum size of the region to be pulled from the pool. Actual span may be larger.
+
+
+
+ Swaps out the queue's backing memory span for a new span.
+ If the new span is smaller, the queue's count is truncated and the extra elements are dropped.
+ The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it.
+
+ New span to use.
+ Previous span used for elements.
+
+
+
+ Resizes the queue's backing array for the given size.
+ Any elements that do not fit in the resized span are dropped and the count is truncated.
+
+ Minimum number of elements required in the new backing array. Actual capacity of the created span may exceed this size.
+ Pool to pull a new span from and return the old span to.
+
+
+
+ Returns the resources associated with the queue to pools. Any managed references still contained within the queue are cleared (and some unmanaged resources may also be cleared).
+
+ Pool used for element spans.
+
+
+
+ Ensures that the queue has enough room to hold the specified number of elements.
+
+ Number of elements to hold.
+ Pool to pull a new span from and return the old span to.
+
+
+
+ Compacts the internal buffer to the minimum size required for the number of elements in the queue.
+
+ Pool to pull from if necessary.
+
+
+
+ Enqueues the element to the end of the queue, incrementing the last index.
+
+ Item to enqueue.
+
+
+
+ Enqueues the element to the start of the queue, decrementing the first index.
+
+ Item to enqueue.
+
+
+
+ Enqueues the element to the end of the queue, incrementing the last index.
+
+ Item to enqueue.
+
+
+
+ Enqueues the element to the start of the queue, decrementing the first index.
+
+ Item to enqueue.
+
+
+
+ Dequeues an element from the start of the queue, incrementing the first index.
+
+ Element removed from the queue.
+
+
+
+ Dequeues an element from the end of the queue, decrementing the last index.
+
+ Element removed from the queue.
+
+
+
+ Attempts to dequeue an element from the start of the queue, incrementing the first index.
+
+ Element removed from the queue, if any.
+ True if an element was available to remove, false otherwise.
+
+
+
+ Attempts to dequeue an element from the end of the queue, decrementing the last index.
+
+ Element removed from the queue, if any.
+ True if an element was available to remove, false otherwise.
+
+
+
+ Removes the element at the given index, preserving the order of the queue.
+
+ Index in the queue to remove. The index is in terms of the conceptual queue, not the backing array.
+
+
+
+ Clears the queue by setting the count to zero and explicitly setting all relevant indices in the backing array to default values.
+
+
+
+
+ Clears the queue without changing any of the values in the backing array. Be careful about using this if the queue contains reference types.
+
+
+
+
+ Container supporting constant time adds and removes while preserving fast iteration times.
+ Offers very direct access to information at the cost of safety.
+
+
+
+ Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include:
+ it is a value type and copying it around will break things without extreme care,
+ it cannot be validly default-constructed,
+ it exposes internal structures to user modification,
+ it rarely checks input for errors,
+ the enumerator doesn't check for mid-enumeration modification,
+ it allows unsafe addition that can break if the user doesn't manage the capacity,
+ it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled,
+ it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from.
+
+ Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates.
+ A generous table capacity is recommended; this trades some memory for simplicity and runtime performance.
+ Type of element held by the container.
+ Type of the equality tester and hash calculator used.
+
+
+
+ Gets the number of elements in the set.
+
+
+
+
+ Mask for use in performing fast modulo operations for hashes. Requires that the table span is a power of 2.
+
+
+
+
+ Desired size of the table relative to the size of the key/value spans in terms of a power of 2. Table capacity target will be elementCapacityTarget * 2^TablePowerOffset.
+
+
+
+
+ Backing memory of the set's table. Values are distributed according to the EqualityComparer's hash function.
+ Slots containing 0 are unused and point to nothing. Slots containing higher values are equal to one plus the index of an element in the Span.
+
+
+
+
+ Backing memory containing the elements of the set.
+ Indices from 0 to Count-1 hold actual data. All other data is undefined.
+
+
+
+
+ Equality comparer used to compare and hash elements.
+
+
+
+
+ Gets or sets an element at the given index in the list representation of the set.
+
+ Index to grab an element from.
+ Element at the given index in the set.
+
+
+
+ Creates a new set.
+
+ Span to use as backing memory of the set elements.
+ Span to use as backing memory of the table. Must be zeroed out.
+ Comparer to use for the set.
+ Target size of the table relative to the number of stored elements.
+
+
+
+ Creates a new set using a default constructed equality comparer.
+
+ Span to use as backing memory of the set elements.
+ Span to use as backing memory of the table. Must be zeroed.
+ Target size of the table relative to the number of stored elements.
+
+
+
+ Creates a new set.
+
+ Pool to pull spans from.
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+ Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity.
+ Comparer to use in the set.
+
+
+
+ Creates a new set with a default constructed comparer.
+
+ Pool to pull spans from.
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+ Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity.
+
+
+
+ Creates a new set with a default constructed comparer.
+
+ Pool to pull spans from.
+ Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity.
+
+
+
+ Swaps out the set's backing memory span for a new span.
+ If the new span is smaller, the set's count is truncated and the extra elements are dropped.
+ The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it.
+
+ New span to use for elements.
+ New span to use for the table. Must be zeroed.
+ Previous span used for elements.
+ Previous span used for the table.
+
+
+
+ Resizes the set's backing array for the given size.
+ If the new span is smaller, the set's count is truncated and the extra elements are dropped.
+
+ Minimum size of the new object memory block. Actual size may be larger.
+ Pool to take spans from.
+
+
+
+ Returns the resources associated with the set to pools. Any managed references still contained within the set are cleared (and some unmanaged resources may also be cleared).
+
+ Pool used for element spans.
+
+
+
+ Ensures that the set has enough room to hold the specified number of elements.
+
+ Pool used for spans.
+ Number of elements to hold.
+
+
+
+ Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools.
+
+ Element to add.
+ Pool used for spans.
+
+
+
+ Gets the index of the element in the table.
+
+ Element to look up.
+ Index of the element in the redirect table, or if it is not present, the index of where it would be added.
+ The index of the element in the elements array, if it exists; -1 otherwise.
+ True if the element is present in the set, false if it is not.
+
+
+
+ Gets the index of the element in the set if it exists.
+
+ Element to get the index of.
+ The index of the element if the element exists in the set, -1 otherwise.
+
+
+
+ Gets the index of the element in the set if it exists.
+
+ Element to get the index of.
+ The index of the element if the element exists in the set, -1 otherwise.
+
+
+
+ Checks if a given element already belongs to the set.
+
+ Element to test for.
+ True if the element already belongs to the set, false otherwise.
+
+
+
+ Checks if a given element already belongs to the set.
+
+ Element to test for.
+ True if the element already belongs to the set, false otherwise.
+
+
+
+ Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present,
+ it is replaced by the given version.
+ Does not resize in the event that the capacity is exceeded.
+
+ Element to add.
+ True if the element was added to the set, false if the element was already present and was instead replaced.
+
+
+
+ Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present,
+ it is replaced by the given version.
+ Does not resize in the event that the capacity is exceeded.
+
+ Element to add.
+ True if the element was added to the set, false if the element was already present and was instead replaced.
+
+
+
+ Adds an element to the set if it is not already present.
+ Does not resize in the event that the capacity is exceeded.
+
+ Element to add.
+ True if the element was added to the set, false if the element was already present.
+
+
+
+ Adds an element to the set if it is not already present.
+ Does not resize in the event that the capacity is exceeded.
+
+ Element to add.
+ True if the element was added to the set, false if the element was already present.
+
+
+
+ Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present,
+ it is replaced by the given version.
+
+ Element to add.
+ Pool used for spans.
+ True if the element was added to the set, false if the element was already present and was instead replaced.
+
+
+
+ Adds an element to the set if it is not already present.
+
+ Element to add.
+ Pool used for spans.
+ True if the element was added to the set, false if the element was already present.
+
+
+
+ Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present,
+ it is replaced by the given version.
+
+ Element to add.
+ Pool used for spans.
+ True if the element was added to the set, false if the element was already present and was instead replaced.
+
+
+
+ Adds an element to the set if it is not already present.
+
+ Element to add.
+ Pool used for spans.
+ True if the element was added to the set, false if the element was already present.
+
+
+
+ Removes an element from the dictionary according to its table and element index. Can only be used if the table and element index are valid.
+
+ Index of the table entry associated with the existing element to remove.
+ Index of the existing element to remove in the contiguous element array.
+
+
+
+ Removes an element from the set if belongs to the set.
+ Does not preserve the order of elements in the set.
+
+ Element to remove.
+ True if the element was found and removed, false otherwise.
+
+
+
+ Removes an element from the set if belongs to the set.
+ Does not preserve the order of elements in the set.
+
+ Element to remove.
+ True if the element was found and removed, false otherwise.
+
+
+
+ Removes all elements from the set.
+
+
+
+
+ Removes all elements from the set without modifying the contents of the elements array.
+
+
+
+
+ Provides equality comparison and hashing for referenced types.
+
+ Type to compare for equality and hash.
+
+
+
+ IEqualityComparerRef wrapper around an EqualityComparer.
+
+ Type of the objects to compare and hash.
+
+
+
+ Creates a default comparer for the given type.
+
+ Predicate to test against other items using the default comparer for this type.
+
+
+
+ IPredicate wrapper around an EqualityComparer and an object to compare against.
+
+ Type of the objects to compare.
+
+
+
+ Creates a default comparer for the given type.
+
+ Item to compare against other items.
+ Predicate to test against other items using the default comparer for this type.
+
+
+
+ The current containment state of two objects.
+
+
+
+
+ The objects are separate.
+
+
+
+
+ One object fully contains the other.
+
+
+
+
+ The objects are intersecting, but neither object fully contains the other.
+
+
+
+
+ Gets a reference to an element from a vector without using pointers, bypassing direct vector access for codegen reasons. This performs no bounds testing!
+
+
+
+
+ Copies from one bundle lane to another. The bundle must be a contiguous block of Vector types.
+
+ Type of the copied bundles.
+ Source bundle of the data to copy.
+ Index of the lane within the source bundle.
+ Target bundle of the data to copy.
+ Index of the lane within the target bundle.
+
+ For performance critical operations, a specialized implementation should be used. This uses a loop with stride equal to a Vector that isn't yet unrolled.
+
+
+
+
+ Clears a bundle lane using the default value of the specified type. The bundle must be a contiguous block of Vector types, all sharing the same type,
+ and the first vector must start at the address pointed to by the bundle reference.
+
+ Type containing one or more Vectors.
+ Type of the vectors to clear.
+ Target bundle to clear a lane in.
+ Index of the lane within the target bundle to clear.
+
+ For performance critical operations, a specialized implementation should be used. This uses a loop with stride equal to a Vector.
+
+
+
+
+ Gets a reference to a shifted bundle container such that the first slot of each bundle covers the given inner index of the original bundle reference.
+
+ Type of the bundle container.
+ Bundle container whose reference acts as the base for the shifted reference.
+ Index within the bundle to access with the shifted reference.
+ Shifted bundle container reference covering the inner index of the original bundle reference.
+
+
+
+ Gets a reference to the first element in the vector reference.
+
+ Type of value held by the vector.
+ Vector to pull the first slot value from.
+ Reference to the value in the given vector's first slot.
+
+
+
+ Defines a loop body function able to handle the equivalent of a foreach's body. Takes a ref parameter for efficiency when dealing with large value types.
+
+ Type to enumerate over.
+
+
+
+ Defines a loop body function able to handle the equivalent of a foreach's body.
+
+ Type to enumerate over.
+
+
+
+ Defines a loop body function able to handle the equivalent of a foreach's body that supports breaking the loop early.
+
+ Type to enumerate over.
+
+
+
+ Executes one execution of the loop body.
+
+ Visited element.
+ True if the loop should continue, false otherwise.
+
+
+
+ Defines a loop body function able to handle the equivalent of a foreach's body that supports breaking the loop early.
+ Takes a ref parameter for efficiency when dealing with large value types.
+
+ Type to enumerate over.
+
+
+
+ Executes one execution of the loop body.
+
+ Visited element.
+ True if the loop should continue, false otherwise.
+
+
+
+ Provides simple 2d cell hashing.
+
+
+
+
+ A set of 3 integers, useful for spatial hashing.
+
+
+
+
+ Provides multithreading dispatch primitives, a thread count, and per thread resource pools for the simulation to use.
+
+
+ Note that the simulation does not require a true load balancing forloop implementation. All that's needed is a way to jumpstart some threads.
+ All systems which use multithreading tend to have some form of domain specific load balancing that a general purpose thread pool or parallel for loop implementation
+ couldn't match. The simulation also tends to keep the number of dispatches as low as it can. Combined, these two things reduce the importance of a
+ very highly optimized dispatcher.
+ This is important when a user wants to share some other thread pool, but doesn't have the time to guarantee extremely high performance and high quality
+ load balancing. Instead of worrying about that, they can just wrap whatever implementation they happen to have and it'll probably work fine.
+
+
+
+
+ Gets the number of workers available in the thread dispatcher.
+
+ Note that some systems (like the solver) expect the ThreadCount to be backed by truly independent threads capable of progression even when one is blocked.
+ If the ThreadCount doesn't represent independent threads, deadlocks will occur.
+
+
+
+
+ Dispatches all the available workers.
+
+ Delegate to be invoked on for every worker.
+
+
+
+ Gets the memory pool associated with a given worker index. It is guaranteed that no other workers will share the same pool for the duration of the worker's execution.
+
+ All usages of the memory pool within the simulation are guaranteed to return thread pool memory before the function returns. In other words,
+ thread memory pools are used for strictly ephemeral memory, and it will never be held by the simulation outside the scope of a function that
+ takes the IThreadDispatcher as input.
+ Index of the worker to grab the pool for.
+ The memory pool for the specified worker index.
+
+
+
+ Contains conditional extensions to check for bad values in various structures.
+
+
+
+
+ Checks a single float for validity.
+
+ Value to validate.
+ True if the value is invalid, false if it is valid.
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown.
+ This is only run when the CHECKMATH symbol is defined.
+
+
+
+
+ Contains helper math methods.
+
+
+
+
+ Approximate value of Pi.
+
+
+
+
+ Approximate value of Pi multiplied by two.
+
+
+
+
+ Approximate value of Pi divided by two.
+
+
+
+
+ Approximate value of Pi divided by four.
+
+
+
+
+ Clamps a value between a minimum and maximum value.
+
+ Value to clamp.
+ Minimum value. If the value is less than this, the minimum is returned instead.
+ Maximum value. If the value is more than this, the maximum is returned instead.
+ Clamped value.
+
+
+
+ Returns the higher value of the two parameters.
+
+ First value.
+ Second value.
+ Higher value of the two parameters.
+
+
+
+ Returns the lower value of the two parameters.
+
+ First value.
+ Second value.
+ Lower value of the two parameters.
+
+
+
+ Clamps a value between a minimum and maximum value.
+
+ Value to clamp.
+ Minimum value. If the value is less than this, the minimum is returned instead.
+ Maximum value. If the value is more than this, the maximum is returned instead.
+ Clamped value.
+
+
+
+ Returns the higher value of the two parameters.
+
+ First value.
+ Second value.
+ Higher value of the two parameters.
+
+
+
+ Returns the lower value of the two parameters.
+
+ First value.
+ Second value.
+ Lower value of the two parameters.
+
+
+
+ Clamps a value between a minimum and maximum value.
+
+ Value to clamp.
+ Minimum value. If the value is less than this, the minimum is returned instead.
+ Maximum value. If the value is more than this, the maximum is returned instead.
+ Clamped value.
+
+
+
+ Returns the higher value of the two parameters.
+
+ First value.
+ Second value.
+ Higher value of the two parameters.
+
+
+
+ Returns the lower value of the two parameters.
+
+ First value.
+ Second value.
+ Lower value of the two parameters.
+
+
+
+ Converts degrees to radians.
+
+ Degrees to convert.
+ Radians equivalent to the input degrees.
+
+
+
+ Converts radians to degrees.
+
+ Radians to convert.
+ Degrees equivalent to the input radians.
+
+
+
+ Returns -1 if the value is negative and 1 otherwise.
+
+ Value to compute the sign of.
+ -1 if the input is negative, and 1 otherwise.
+
+
+
+ Computes an approximation of cosine. Maximum error a little above 3e-6.
+
+ Value to take the cosine of.
+ Approximate cosine of the input value.
+
+
+
+ Computes an approximation of sine. Maximum error a little above 3e-6.
+
+ Value to take the sine of.
+ Approximate sine of the input value.
+
+
+
+ Computes an approximation of cosine. Maximum error a little above 3e-6.
+
+ Values to take the cosine of.
+ Approximate cosine of the input values.
+
+
+
+ Computes an approximation of sine. Maximum error a little above 3e-6.
+
+ Value to take the sine of.
+ Approximate sine of the input value.
+
+
+
+ Computes an approximation of arccos. Maximum error less than 6.8e-5.
+
+ Input value to the arccos function.
+ Result of the arccos function.
+
+
+
+ Gets the change in angle from a to b as a signed value from -pi to pi.
+
+ Source angle.
+ Target angle.
+ Difference between a and b, expressed as a value from -pi to pi.
+
+
+
+ Provides SIMD-aware 4x4 matrix math.
+
+
+ All functions assume row vectors.
+
+
+
+
+ Row 1 of the matrix.
+
+
+
+
+ Row 2 of the matrix.
+
+
+
+
+ Row 3 of the matrix.
+
+
+
+
+ Row 4 of the matrix.
+
+
+
+
+ Transforms a vector with a transposed matrix.
+
+ Row vector to transform.
+ Matrix whose transpose will be applied to the vector.
+ Transformed vector.
+
+
+
+ Transforms a vector with a matrix.
+
+ Row vector to transform.
+ Matrix to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms a vector with a matrix. Implicitly uses 1 as the fourth component of the input vector.
+
+ Row vector to transform.
+ Matrix to apply to the vector.
+ Transformed vector.
+
+
+
+ Multiplies a matrix by another matrix.
+
+ First matrix.
+ Second matrix.
+ Result of the matrix multiplication.
+
+
+
+ Concatenates two matrices.
+
+ First input matrix.
+ Second input matrix.
+ Concatenated transformation of the form m1 * m2.
+
+
+
+ Creates a right-handed perspective matrix.
+
+ Vertical field of view of the perspective in radians.
+ Width of the viewport over the height of the viewport.
+ Near clip plane of the perspective.
+ Far clip plane of the perspective.
+ Resulting perspective matrix.
+
+
+
+ Creates a left-handed perspective matrix.
+
+ Vertical field of view of the perspective in radians.
+ Width of the viewport over the height of the viewport.
+ Near clip plane of the perspective.
+ Far clip plane of the perspective.
+ Resulting perspective matrix.
+
+
+
+ Creates a right-handed perspective matrix.
+
+ Vertical field of view of the perspective in radians.
+ Horizontal field of view of the perspective in radians.
+ Near clip plane of the perspective.
+ Far clip plane of the perspective.
+ Resulting perspective matrix.
+
+
+
+ Creates a right-handed perspective matrix.
+
+ Vertical field of view of the perspective in radians.
+ Horizontal field of view of the perspective in radians.
+ Near clip plane of the perspective.
+ Far clip plane of the perspective.
+ Resulting perspective matrix.
+
+
+
+ Creates a right-handed perspective matrix.
+
+ Vertical field of view of the perspective in radians.
+ Width of the viewport over the height of the viewport.
+ Near clip plane of the perspective.
+ Far clip plane of the perspective.
+ Resulting perspective matrix.
+
+
+
+ Creates a right handed orthographic projection.
+
+ Leftmost coordinate of the projected area.
+ Rightmost coordinate of the projected area.
+ Bottom coordinate of the projected area.
+ Top coordinate of the projected area.
+ Near plane of the projection.
+ Far plane of the projection.
+ The resulting orthographic projection matrix.
+
+
+
+ Inverts the matrix.
+
+ Matrix to invert.
+ Inverted version of the matrix.
+
+
+
+ Inverts the matrix.
+
+ Matrix to invert.
+ Inverted version of the matrix.
+
+
+
+ Creates a view matrix pointing from a position to a target with the given up vector.
+
+ Position of the camera.
+ Target of the camera.
+ Up vector of the camera.
+ Look at matrix.
+
+
+
+ Creates a view matrix pointing from a position to a target with the given up vector.
+
+ Position of the camera.
+ Target of the camera.
+ Up vector of the camera.
+ Look at matrix.
+
+
+
+ Creates a view matrix pointing in a direction with a given up vector.
+
+ Position of the camera.
+ Forward direction of the camera.
+ Up vector of the camera.
+ Look at matrix.
+
+
+
+ Creates a view matrix pointing looking in a direction with a given up vector.
+
+ Position of the camera.
+ Forward direction of the camera.
+ Up vector of the camera.
+ Look at matrix.
+
+
+
+ Creates a rigid world matrix from a rotation and position.
+
+ Rotation of the transform.
+ Position of the transform.
+ 4x4 matrix representing the combined transform.
+
+
+
+ Creates a rigid world matrix from a rotation and position.
+
+ Rotation of the transform.
+ Position of the transform.
+ 4x4 matrix representing the combined transform.
+
+
+
+ Creates a 4x4 matrix from a 3x3 matrix. All extra columns and rows filled with 0 except the W.W, which is set to 1.
+
+ Smaller matrix to base the larger matrix on.
+ Larger matrix that has the smaller matrix as a submatrix.
+
+
+
+ Creates a 4x4 matrix from a 3x3 matrix. All extra columns and rows filled with 0 except the W.W, which is set to 1.
+
+ Smaller matrix to base the larger matrix on.
+ Larger matrix that has the smaller matrix as a submatrix.
+
+
+
+ First row of the matrix.
+
+
+
+
+ Second row of the matrix.
+
+
+
+
+ Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b).
+
+ First matrix in the pair.
+ Matrix to be sampled as if it were transposed when multiplied with the first matrix.
+ Result of the multiplication a * transpose(b).
+
+
+
+ Multiplies every component in the matrix by the given scalar value.
+
+ Matrix to scale.
+ Scaling value to apply to the matrix's components.
+ Resulting matrix with scaled components.
+
+
+
+ Adds the components of one matrix to another.
+
+ First matrix to add.
+ Second matrix to add.
+ Sum of the two given matrices.
+
+
+
+ Subtracts the components of one matrix from another.
+
+ Matrix to be subtracted from..
+ Matrix to subtract from the other.
+ Result of the subtraction.
+
+
+
+ Inverts the given matix.
+
+ Matrix to be inverted.
+ Inverted matrix.
+
+
+
+ First row of the matrix.
+
+
+
+
+ Second row of the matrix.
+
+
+
+
+ Multiplies a matrix by another matrix, where the first matrix is sampled as if it were transposed: result = transpose(a) * b.
+
+ Matrix to be sampled as if it were transposed when multiplied with the second matrix.
+ Second matrix in the pair.
+ Result of the multiplication transpose(a) * b.
+
+
+
+ Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b).
+
+ First matrix in the pair.
+ Matrix to be sampled as if it were transposed when multiplied with the first matrix.
+ Result of the multiplication a * transpose(b).
+
+
+
+ Multiplies every component in the matrix by the given scalar value.
+
+ Matrix to scale.
+ Scaling value to apply to the matrix's components.
+ Resulting matrix with scaled components.
+
+
+
+ 3 row, 3 column matrix.
+
+
+
+
+ Gets the 3x3 identity matrix.
+
+
+
+
+ Adds the components of two matrices together.
+
+ First matrix to add.
+ Second matrix to add.
+ Sum of the two input matrices.
+
+
+
+ Scales the components of a matrix by a scalar.
+
+ Matrix to scale.
+ Scale to apply to the matrix's components.
+ Scaled matrix.
+
+
+
+ Subtracts the components of one matrix from another.
+
+ Matrix to be subtracted from.
+ Matrix to subtract from a.
+ Difference of the two input matrices.
+
+
+
+ Computes the transposed matrix of a matrix.
+
+ Matrix to transpose.
+ Transposed matrix.
+
+
+
+ Calculates the determinant of the matrix.
+
+ The matrix's determinant.
+
+
+
+ Inverts the given matix.
+
+ Matrix to be inverted.
+ Inverted matrix.
+
+
+
+ Inverts the given matix.
+
+ Matrix to be inverted.
+ Inverted matrix.
+
+
+
+ Transforms the vector by the matrix.
+
+ Vector3 to transform.
+ Matrix to use as the transformation.
+ Product of the transformation.
+
+
+
+ Transforms the vector by the matrix's transpose.
+
+ Vector3 to transform.
+ Matrix to use as the transformation transpose.
+ Product of the transformation.
+
+
+
+ Multiplies the two matrices.
+
+ First matrix to multiply.
+ Second matrix to multiply.
+ Product of the multiplication.
+
+
+
+ Multiplies the two matrices, where a is treated as transposed: result = transpose(a) * b
+
+ First matrix to multiply that will be transposed.
+ Second matrix to multiply.
+ Product of the multiplication.
+
+
+
+ Creates a 3x3 matrix representing the given scale along its local axes.
+
+ Scale to represent.
+ Matrix representing a scale.
+
+
+
+ Creates a matrix representing a rotation derived from an axis and angle.
+
+ Axis of the rotation.
+ Angle of the rotation.
+ Resulting rotation matrix.
+
+
+
+ Creates a matrix representing a rotation derived from an axis and angle.
+
+ Axis of the rotation.
+ Angle of the rotation.
+ Resulting rotation matrix.
+
+
+
+ Creates a matrix such that a x v = a * result.
+
+ Vector to build the skew symmetric matrix from.
+ Skew symmetric matrix representing the cross product.
+
+
+
+ Concatenates two matrices.
+
+ First input matrix.
+ Second input matrix.
+ Concatenated transformation of the form m1 * m2.
+
+
+
+ First row of the matrix.
+
+
+
+
+ Second row of the matrix.
+
+
+
+
+ Third row of the matrix.
+
+
+
+
+ Multiplies a matrix by another matrix, where the first matrix is sampled as if it were transposed: result = transpose(a) * b.
+
+ Matrix to be sampled as if it were transposed when multiplied with the second matrix.
+ Second matrix in the pair.
+ Result of the multiplication transpose(a) * b.
+
+
+
+ Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b).
+
+ First matrix in the pair.
+ Matrix to be sampled as if it were transposed when multiplied with the first matrix.
+ Result of the multiplication a * transpose(b).
+
+
+
+ Negates the components of a matrix.
+
+ Matrix to negate.
+ Negated result matrix.
+
+
+
+ Multiplies every component in the matrix by the given scalar value.
+
+ Matrix to scale.
+ Scaling value to apply to the matrix's components.
+ Resulting matrix with scaled components.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Non-SIMD type to store the lane in.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Index of the lane within the wide representation to read.
+ Non-SIMD type to store the lane in.
+
+
+
+ Represents a chunk of abstract memory supporting allocations and deallocations.
+ Never moves any memory.
+
+ Uses an extremely simple ring buffer that makes no attempt to skip groups of allocations. Not particularly efficient.
+
+
+
+ Gets or sets the capacity of the allocator.
+
+
+
+
+ Index in allocations that we should start at during the next allocation attempt.
+
+
+
+
+ Creates a new allocator.
+
+ Size of the memory handled by the allocator in elements.
+ Estimated number of allocations to allocate room for in the internal structures.
+ Pool to pull internal resources from.
+
+
+
+ Checks if the id is currently allocated.
+
+ Id to check for.
+ True if the id is present in the allocations set, false otherwise.
+
+
+
+ Gets the allocation region associated with the given allocation id if it is present.
+
+ Allocation id to look up the allocation for.
+ Allocation associated with the id, if present.
+ True if the allocationId was present in the allocator, false otherwise.
+
+
+
+ Checks if a block of memory can fit into the current state of the allocator.
+
+ Size of the memory to test.
+ Ids of allocations to treat as nonexistent for the purposes of the test.
+ True if the size could fit, false if out of memory or if memory was too fragmented to find a spot.
+
+
+
+ Checks if a block of memory can fit into the current state of the allocator.
+
+ Size of the memory to test.
+ True if the size could fit, false if out of memory or if memory was too fragmented to find a spot.
+
+
+
+ Attempts to allocate a range of memory.
+
+ Unique id of the memory to allocate.
+ Size of the memory to allocate.
+ Starting index of the allocated memory, if successful.
+ True if the allocation succeeded, false if out of memory or if memory was too fragmented to find a spot.
+
+
+
+ Removes the memory associated with the id from the pool.
+
+ Id to remove.
+ True of the id was found, false otherwise.
+
+
+
+ Gets the size of the largest contiguous area and the total free space in the allocator.
+ Not very efficient; runs in linear time for the number of allocations.
+
+ Largest contiguous region in the allocator. The allocator can hold an allocation up to this size.
+ Total free space in the allocator.
+
+
+
+ Finds the first allocation with empty space before it and pulls it forward to close the gap. Assumes the ability to perform synchronous reallocation.
+
+ Id of the allocation to be moved, if any.
+ Size of the moved allocation.
+ Old starting location of the allocation.
+ New starting location of the allocation.
+ True if a compaction was performed, false otherwise.
+
+
+
+ Attempts to resize a given allocation to a new size. If the new size is smaller, the start index remains unchanged.
+
+ Id of the allocation to resize.
+ New desired size of the allocation.
+ Old start location of the allocation.
+ New start location of the allocation.
+ True if the resize was successful. False if there was insufficient room for the larger allocation.
+
+
+
+ Span over an unmanaged memory region.
+
+ Type of the memory exposed by the span.
+
+
+
+ Implementation specific identifier of the raw buffer set by its source. If taken from a BufferPool, Id represents the index in the power pool from which it was taken.
+
+
+
+
+ Gets a reference to the element at the given index.
+
+ Index of the element to grab a reference of.
+ Reference to the element at the given index.
+
+
+
+ Gets a pointer to the element at the given index.
+
+ Index of the element to retrieve a pointer for.
+ Pointer to the element at the given index.
+
+
+
+ Creates a view of a subset of the buffer's memory.
+
+ Index at which to start the sliced buffer.
+ Number of elements to include in the sliced buffer.
+ Buffer spanning the specified subset of the original buffer.
+
+
+
+ Creates a view of a subset of the buffer's memory, starting from the first index.
+
+ Number of elements to include in the sliced buffer.
+ Buffer spanning the specified subset of the original buffer.
+
+
+
+ Creates a view of a subset of the buffer's memory.
+
+ Index at which to start the sliced buffer.
+ Number of elements to include in the sliced buffer.
+ Buffer spanning the specified subset of the original buffer.
+
+
+
+ Creates a view of a subset of the buffer's memory, starting from the first index.
+
+ Number of elements to include in the sliced buffer.
+ Buffer spanning the specified subset of the original buffer.
+
+
+
+ Gets the length of the buffer in typed elements.
+
+
+
+
+ Gets whether the buffer references non-null memory.
+
+
+
+
+ Zeroes out the buffer's memory.
+
+ Start location in the buffer.
+ Number of elements to clear beyond the start index.
+
+
+
+ Copies buffer data into another buffer.
+
+ Start index in the source buffer.
+ Target buffer to copy into.
+ Start index in the target buffer.
+ Number of elements to copy from the source buffer into the target buffer.
+
+
+
+ Copies buffer data into another buffer.
+
+ Start index in the source buffer.
+ Target buffer to copy into.
+ Start index in the target buffer.
+ Number of elements to copy from the source buffer into the target buffer.
+
+
+
+ Copies span data into this buffer.
+
+ Source span to copy from.
+ Start index in the source buffer.
+ Start index in the target buffer.
+ Number of elements to copy from the source buffer into the target buffer.
+
+
+
+ Copies span data into this buffer.
+
+ Source span to copy from.
+ Start index in the source buffer.
+ Start index in the target buffer.
+ Number of elements to copy from the source buffer into the target buffer.
+
+
+
+ Gets the index of an element in the buffer using the type's default comparer.
+
+ Element to look for in the buffer.
+ Start index at which to begin the search.
+ Number of elements to scan beyond the start index.
+ Index of the element in the buffer if found, -1 otherwise.
+
+
+
+ Gets the index of an element in the buffer using the type's default comparer.
+
+ Element to look for in the buffer.
+ Start index at which to begin the search.
+ Number of elements to scan beyond the start index.
+ Index of the element in the buffer if found, -1 otherwise.
+
+
+
+ Gets the index of the first element that matches a provided predicate.
+
+ Predicate to test each element with.
+ Start index at which to begin the search.
+ Number of elements to scan beyond the start index.
+ Index of the first matching element in the buffer if any, -1 otherwise.
+
+
+
+ Creates an untyped buffer containing the same data as the Buffer.
+
+ Untyped buffer containing the same data as the source buffer.
+
+
+
+ Unmanaged memory pool that creates pinned blocks of memory for use in spans.
+
+ This currently works by allocating large managed arrays and pinning them under the assumption that they'll end up in the large object heap.
+
+
+
+ Unpins and drops the reference to the underlying array.
+
+
+
+
+ Pool of slots available to this power level.
+
+
+
+
+ Creates a new buffer pool.
+
+ Minimum size of individual block allocations. Must be a power of 2.
+ Pools with single allocations larger than the minimum will use the minimum value necessary to hold one element.
+ Buffers will be suballocated from blocks.
+ Use a value larger than the large object heap cutoff (85000 bytes as of this writing in the microsoft runtime)
+ to avoid interfering with generational garbage collection.
+ Number of suballocations to preallocate reference space for.
+ This does not preallocate actual blocks, just the space to hold references that are waiting in the pool.
+
+
+
+ Ensures that the pool associated with a given power has at least a certain amount of capacity, measured in bytes.
+
+ Minimum number of bytes to require for the power pool.
+ Power associated with the pool to check.
+
+
+
+ Gets the capacity allocated for a power.
+
+ Power to check.
+ Allocated capacity for the given power.
+
+
+
+ Takes a buffer large enough to contain a number of bytes. Capacity may be larger than requested.
+
+ Desired minimum capacity of the buffer in bytes.
+ Buffer that can hold the bytes.
+
+
+
+ Takes a buffer of the requested size from the pool.
+
+ Desired capacity of the buffer in bytes.
+ Buffer of the requested size.
+
+
+
+ Takes a buffer large enough to contain a number of elements of a given type. Capacity may be larger than requested.
+
+ Type of the elements in the buffer.
+ Desired minimum capacity of the buffer in typed elements.
+ Buffer large enough to contain the requested number of elements.
+
+
+
+ Takes a typed buffer of the requested size from the pool.
+
+ Type of the instances in the buffer.
+ Desired capacity of the buffer in typed elements.
+ Typed buffer of the requested size.
+
+
+
+ Takes a buffer large enough to contain a number of bytes given by a power, where the number of bytes is 2^power.
+
+ Number of bytes that should fit within the buffer as an exponent, where the number of bytes is 2^power.
+ Buffer that can hold the bytes.
+
+
+
+ Returns a buffer to the pool by id.
+
+ Buffer to return to the pool.
+ Typed buffer pools zero out the passed-in buffer by convention.
+ This costs very little and avoids a wide variety of bugs (either directly or by forcing fast failure). For consistency, BufferPool.Return does the same thing.
+ This "Unsafe" overload should be used only in cases where there's a reason to bypass the clear; the naming is intended to dissuade casual use.
+
+
+
+ Returns a buffer to the pool.
+
+ Buffer to return to the pool.
+
+
+
+ Returns a buffer to the pool.
+
+ Buffer to return to the pool.
+
+
+
+ Resizes a buffer to the smallest size available in the pool which contains the target size. Copies a subset of elements into the new buffer.
+ Final buffer size is at least as large as the target size and may be larger.
+
+ Buffer reference to resize.
+ Number of bytes to resize the buffer for.
+ Number of bytes to copy into the new buffer from the old buffer.
+
+
+
+ Resizes a buffer to the target size. Copies a subset of elements into the new buffer.
+
+ Buffer reference to resize.
+ Number of bytes to resize the buffer for.
+ Number of bytes to copy into the new buffer from the old buffer.
+
+
+
+ Resizes a typed buffer to the smallest size available in the pool which contains the target size. Copies a subset of elements into the new buffer.
+ Final buffer size is at least as large as the target size and may be larger.
+
+ Type of the buffer to resize.
+ Buffer reference to resize.
+ Number of elements to resize the buffer for.
+ Number of elements to copy into the new buffer from the old buffer.
+
+
+
+ Resizes a buffer to the target size. Copies a subset of elements into the new buffer.
+
+ Type of the buffer to resize.
+ Buffer reference to resize.
+ Number of elements to resize the buffer for.
+ Number of elements to copy into the new buffer from the old buffer.
+
+
+
+ Gets or sets whether the BufferPool's backing resources are pinned. If no blocks are allocated internally, this returns true.
+ Setting this to false invalidates all outstanding pointers, and any attempt to take or return buffers while unpinned will fail (though not necessarily immediately).
+ The only valid operations while unpinned are setting Pinned to true and clearing the pool.
+
+
+
+
+ Unpins and drops reference to all memory. Any outstanding buffers will be invalidated silently.
+
+
+
+
+ Manages a pool of identifier values. Grabbing an id from the pool picks a number that has been picked and returned before,
+ or if none of those are available, the minimum value greater than any existing id.
+
+
+
+
+ Gets the highest value which any index claimed thus far could possibly have.
+ This is not necessarily the current highest claimed index; this value may represent an earlier claim that has already been released.
+ -1 if nothing has ever been claimed.
+
+
+
+
+ Gets the number of previously returned ids waiting in the pool.
+
+
+
+
+ Gets whether the id pool has backing resources allocated to it and is ready to use.
+
+
+
+
+ Returns an id to the pool without checking if a resize is required on the available id stack.
+
+ Id to return.
+
+
+
+ Resets the IdPool.
+
+
+
+
+ Ensures that the underlying id queue can hold at least a certain number of ids.
+
+ Number of elements to preallocate space for in the available ids queue.
+ Pool to pull resized spans from.
+
+
+
+ Shrinks the available ids queue to the smallest size that can fit the given count and the current available id count.
+
+ Number of elements to guarantee space for in the available ids queue.
+
+
+
+ Resizes the underlying buffer to the smallest size required to hold the given count and the current available id count.
+
+ Number of elements to guarantee space for in the available ids queue.
+
+
+
+ Returns underlying memory to the pool.
+
+ The IdPool can be reused only if EnsureCapacity or Resize is called.
+
+
+
+ Defines a type that is capable of pooling blocks of unmanaged memory.
+
+
+
+
+ Takes a buffer large enough to contain a number of elements of a given type. Capacity may be larger than requested.
+
+ Type of the elements in the buffer.
+ Desired minimum capacity of the buffer in typed elements.
+ Buffer large enough to contain the requested number of elements.
+
+
+
+ Takes a typed buffer of the requested size from the pool.
+
+ Type of the instances in the buffer.
+ Desired capacity of the buffer in typed elements.
+ Typed buffer of the requested size.
+
+
+
+ Returns a buffer to the pool.
+
+ Type of the buffer's elements.
+ Buffer to return to the pool.
+
+
+
+ Gets the capacity of a buffer that would be returned by the pool if a given element count was requested from TakeAtLeast.
+
+ Type of the elements being requested.
+ Number of elements to request.
+ Capacity of a buffer that would be returned if the given element count was requested.
+
+
+
+ Manages a pool of identifier values. Grabbing an id from the pool picks a number that has been picked and returned before,
+ or if none of those are available, the minimum value greater than any existing id.
+
+ This contrasts with the IdPool which operates on unmanaged memory. This version only exists to support use cases where the unmanaged version can't be used-
+ for example, in the BufferPool. While the implementation can be shared, doing so involves creating enough supporting infrastructure that it's simpler to have a managed-only version.
+
+
+
+ Gets the highest value which any index claimed thus far could possibly have.
+ This is not necessarily the current highest claimed index; this value may represent an earlier claim that has already been released.
+ -1 if nothing has ever been claimed.
+
+
+
+
+ Gets the number of previously returned ids waiting in the pool.
+
+
+
+
+ Gets the capacity of the id pool for returned ids.
+
+ public int Capacity => availableIds.Length;
+
+
+
+ Returns an id to the pool without checking if a resize is required on the available id stack.
+
+ Id to return.
+
+
+
+ Resets the IdPool.
+
+
+
+
+ Ensures that the underlying id queue can hold at least a certain number of ids.
+
+ Number of elements to preallocate space for in the available ids queue.
+
+
+
+ Shrinks the available ids queue to the smallest size that can fit the given count and the current available id count.
+
+ Number of elements to guarantee space for in the available ids queue.
+
+
+
+ Resizes the underlying buffer to the smallest size required to hold the given count and the current available id count.
+
+ Number of elements to guarantee space for in the available ids queue.
+
+
+
+ Manages a cache of a type of resource.
+
+ Type of object to pool.
+
+
+
+ Gets the number of existing elements in the pool. This number of elements can be requested without creating any new ones.
+
+
+ Does not do any locking. Should not be used while elements may still be getting added to or removed from the pool.
+
+
+
+
+ Gets or sets the function used to create new objects when the pool has no existing objects available.
+
+
+
+
+ Gets or sets the function used to initialize objects taken from the pool. Runs even if the object was just created by the Creator delegate.
+
+
+
+
+ Gets or sets the action applied to an element when it is returned to the pool.
+
+
+
+
+ Clears all elements from the pool.
+
+
+
+
+ Takes an element from the pool. If the pool is empty, a new resource is created and returned.
+
+ Element from the pool.
+
+
+
+ Returns the specified item to the pool. If a cleaner delegate is set, the item is cleaned.
+
+ Item to give back to the pool.
+
+
+
+ Raw byte buffer with some helpers for interoperating with typed spans.
+
+
+
+
+ Implementation specific identifier of the raw buffer set by its source. If taken from a BufferPool, Id represents the packed power and internal power pool index from which it was taken.
+
+
+
+
+ Interprets the bytes at the memory location as a given type.
+
+ Type to interpret the memory as.
+ Memory location to interpret.
+ Reference to the memory as a given type.
+
+
+
+ Takes a region of the raw buffer as a typed buffer.
+
+ Type to interpret the region as.
+ Start of the region in terms of the type's size.
+ Number of elements in the region in terms of the type.
+ A typed buffer.
+
+
+
+ Creates a typed region from the raw buffer with the largest capacity that can fit within the allocated bytes.
+
+ Type of the buffer.
+ Typed buffer of maximum extent within the current raw buffer.
+
+
+
+ The highest size span exponent. The largest span is 2^MaximumSpanSizePower. This avoids overflow.
+
+
+
+
+ Computes the largest integer N such that 2^N is less than or equal to i.
+
+ Integer to compute the power of.
+ Lowest integer N such that 2^N is less than or equal to i.
+
+
+
+ Computes the lowest integer N such that 2^N >= i.
+
+ Integer to compute the power of.
+ Lowest integer N such that 2^N >= i.
+
+
+
+ Tests if a generic parameter is primitive. Fast path; specialized compilation.
+
+ Type to check for primitiveness.
+ True if the type is one of the primitive types, false otherwise.
+
+
+
+
+ Copies data from one buffer to another.
+
+ Type of element being copied.
+ Source buffer to pull elements from.
+ Index in the buffer to start pulling elements from.
+ Target buffer to set values.
+ Index in the buffer to start putting elements into.
+ Number of elements to copy.
+
+
+
+ Copies data from a buffer to a span.
+
+ Type of element being copied.
+ Source buffer to pull elements from.
+ Index in the buffer to start pulling elements from.
+ Target span to set values.
+ Index in the span to start putting elements into.
+ Number of elements to copy.
+
+
+
+ Copies data from a span to a buffer.
+
+ Type of element being copied.
+ Source span to pull elements from.
+ Index in the span to start pulling elements from.
+ Target buffer to set values into.
+ Index in the buffer to start putting elements into.
+ Number of elements to copy.
+
+
+
+ Copies data from a span to a buffer.
+
+ Type of element being copied.
+ Source span to pull elements from.
+ Index in the span to start pulling elements from.
+ Target buffer to set values into.
+ Index in the buffer to start putting elements into.
+ Number of elements to copy.
+
+
+
+ Provides additional functionality and some lower overhead function variants for Quaternions.
+
+
+
+
+ Adds two quaternions together.
+
+ First quaternion to add.
+ Second quaternion to add.
+ Sum of the addition.
+
+
+
+ Scales a quaternion.
+
+ Quaternion to multiply.
+ Amount to multiply each component of the quaternion by.
+ Scaled quaternion.
+
+
+
+ Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to
+ transformed = (v * a) * b.
+ Assumes that neither input parameter overlaps the output parameter.
+
+ First quaternion to concatenate.
+ Second quaternion to concatenate.
+ Product of the concatenation.
+
+
+
+ Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to
+ transformed = (v * a) * b.
+
+ First quaternion to concatenate.
+ Second quaternion to concatenate.
+ Product of the concatenation.
+
+
+
+ Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to
+ transformed = (v * a) * b.
+
+ First quaternion to multiply.
+ Second quaternion to multiply.
+ Product of the multiplication.
+
+
+
+ Quaternion representing the identity transform.
+
+
+
+
+ Constructs a quaternion from a rotation matrix.
+
+ Rotation matrix to create the quaternion from.
+ Quaternion based on the rotation matrix.
+
+
+
+ Creates a quaternion from a rotation matrix.
+
+ Rotation matrix used to create a new quaternion.
+ Quaternion representing the same rotation as the matrix.
+
+
+
+ Constructs a quaternion from a rotation matrix.
+
+ Rotation matrix to create the quaternion from.
+ Quaternion based on the rotation matrix.
+
+
+
+ Constructs a quaternion from a rotation matrix.
+
+ Rotation matrix to create the quaternion from.
+ Quaternion based on the rotation matrix.
+
+
+
+ Ensures the quaternion has unit length.
+
+ Quaternion to normalize.
+
+
+
+ Computes the squared length of the quaternion.
+
+ Squared length of the quaternion.
+
+
+
+ Computes the length of the quaternion.
+
+ Length of the quaternion.
+
+
+
+ Blends two quaternions together to get an intermediate state.
+
+ Starting point of the interpolation.
+ Ending point of the interpolation.
+ Amount of the end point to use.
+ Interpolated intermediate quaternion.
+
+
+
+ Blends two quaternions together to get an intermediate state.
+
+ Starting point of the interpolation.
+ Ending point of the interpolation.
+ Amount of the end point to use.
+ Interpolated intermediate quaternion.
+
+
+
+ Computes the conjugate of the quaternion.
+
+ Quaternion to conjugate.
+ Conjugated quaternion.
+
+
+
+ Computes the conjugate of the quaternion.
+
+ Quaternion to conjugate.
+ Conjugated quaternion.
+
+
+
+ Computes the inverse of the quaternion.
+
+ Quaternion to invert.
+ Result of the inversion.
+
+
+
+ Computes the inverse of the quaternion.
+
+ Quaternion to invert.
+ Result of the inversion.
+
+
+
+ Negates the components of a quaternion.
+
+ Quaternion to negate.
+ Negated result.
+
+
+
+ Negates the components of a quaternion.
+
+ Quaternion to negate.
+ Negated result.
+
+
+
+ Transforms the vector using a quaternion, assuming that the output does not alias with the input.
+
+ Vector to transform.
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the vector using a quaternion.
+
+ Vector to transform.
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the vector using a quaternion.
+
+ Vector to transform.
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit X direction using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit Y vector using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit Z vector using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Creates a quaternion from an axis and angle.
+
+ Axis of rotation.
+ Angle to rotate around the axis.
+ Quaternion representing the axis and angle rotation.
+
+
+
+ Creates a quaternion from an axis and angle.
+
+ Axis of rotation.
+ Angle to rotate around the axis.
+ Quaternion representing the axis and angle rotation.
+
+
+
+ Constructs a quaternion from yaw, pitch, and roll.
+
+ Yaw of the rotation.
+ Pitch of the rotation.
+ Roll of the rotation.
+ Quaternion representing the yaw, pitch, and roll.
+
+
+
+ Constructs a quaternion from yaw, pitch, and roll.
+
+ Yaw of the rotation.
+ Pitch of the rotation.
+ Roll of the rotation.
+ Quaternion representing the yaw, pitch, and roll.
+
+
+
+ Computes the angle change represented by a normalized quaternion.
+
+ Quaternion to be converted.
+ Angle around the axis represented by the quaternion.
+
+
+
+ Computes the axis angle representation of a normalized quaternion.
+
+ Quaternion to be converted.
+ Axis represented by the quaternion.
+ Angle around the axis represented by the quaternion.
+
+
+
+ Computes the quaternion rotation between two normalized vectors.
+
+ First unit-length vector.
+ Second unit-length vector.
+ Quaternion representing the rotation from v1 to v2.
+
+
+
+ Computes the rotation from the start orientation to the end orientation such that end = Quaternion.Concatenate(start, relative).
+ Assumes that neither input parameter overlaps with the output parameter.
+
+ Starting orientation.
+ Ending orientation.
+ Relative rotation from the start to the end orientation.
+
+
+
+ Transforms the rotation into the local space of the target basis such that rotation = Quaternion.Concatenate(localRotation, targetBasis)
+ Assumes that neither input parameter overlaps with the output parameter.
+
+ Rotation in the original frame of reference.
+ Basis in the original frame of reference to transform the rotation into.
+ Rotation in the local space of the target basis.
+
+
+
+ Takes a slot from the source quaternion and broadcasts it into all slots of the target quaternion.
+
+ Quaternion to pull values from.
+ Slot in the source vectors to pull values from.
+ Target quaternion to be filled with the selected data.
+
+
+
+ Constructs a quaternion from a rotation matrix.
+
+ Rotation matrix to create the quaternion from.
+ Quaternion based on the rotation matrix.
+
+
+
+ Adds the components of two quaternions together.
+
+ First quaternion to add.
+ Second quaternion to add.
+ Sum of the two input quaternions.
+
+
+
+ Computes the quaternion rotation between two normalized vectors.
+
+ First unit-length vector.
+ Second unit-length vector.
+ Quaternion representing the rotation from v1 to v2.
+
+
+
+ Gets an axis and angle representation of the rotation stored in a quaternion. Angle is approximated.
+
+ Quaternion to extract an axis-angle representation from.
+ Axis of rotation extracted from the quaternion.
+ Approximated angle of rotation extracted from the quaternion.
+
+
+
+ Transforms the vector using a quaternion. Assumes that the memory backing the input and output do not overlap.
+
+ Vector to transform.
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the vector using a quaternion.
+
+ Vector to transform.
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit X direction using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit Y vector using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit Z vector using a quaternion.
+
+ Rotation to apply to the vector.
+ Transformed vector.
+
+
+
+ Transforms the unit X and unit Y direction using a quaternion.
+
+ Rotation to apply to the vectors.
+ Transformed unit X vector.
+ Transformed unit Y vector.
+
+
+
+ Transforms the unit X and unit Z direction using a quaternion.
+
+ Rotation to apply to the vectors.
+ Transformed unit X vector.
+ Transformed unit Z vector.
+
+
+
+ Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to
+ transformed = (v * a) * b. Assumes that the memory backing the input and output do not overlap.
+
+ First quaternion to concatenate.
+ Second quaternion to concatenate.
+ Product of the concatenation.
+
+
+
+ Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to
+ transformed = (v * a) * b.
+
+ First quaternion to concatenate.
+ Second quaternion to concatenate.
+ Product of the concatenation.
+
+
+
+ Computes the conjugate of the quaternion.
+
+ Quaternion to conjugate.
+ Conjugated quaternion.
+
+
+
+ Gathers values from the first slot of a wide quaternion and puts them into a narrow representation.
+
+ Wide quaternion to copy values from.
+ Narrow quaternion to place values into.
+
+
+
+ Gathers values from a quaternion and places them into the first indices of the target wide quaternion.
+
+ Quaternion to copy values from.
+ Wide quaternion to place values into.
+
+
+
+ Stores the lower left triangle (including diagonal) of a 2x2 matrix.
+
+
+
+
+ Computes m * scale * mT.
+
+ Matrix to sandwich the scale with.
+ Scale to be sandwiched.
+ Result of m * scale * mT.
+ This is a peculiar operation, but it's useful for computing linear effective mass contributions in 2DOF constraints.
+
+
+
+ Computes result = transpose(transpose(a) * b), assuming b is symmetric.
+
+ Matrix to be transposed and multiplied.
+ Symmetric matrix to multiply.
+ Result of transpose(transpose(a) * b).
+
+
+
+ Computes a * transpose(b), assuming a = b * M for some symmetric matrix M. This is conceptually the second half of Triangular3x3Wide.MatrixSandwich.
+
+ First matrix to multiply. Must be of the form a = b * M for some symmetric matrix M.
+ Matrix to be transaposed and multiplied with a..
+ Symmetric result of a * transpose(b), assuming a = b * M.
+
+
+
+ Lower left triangle (including diagonal) of a symmetric 3x3 matrix.
+
+
+
+
+ First row, first column of the matrix.
+
+
+
+
+ Second row, first column of the matrix.
+
+
+
+
+ Second row, second column of the matrix.
+
+
+
+
+ Third row, first column of the matrix.
+
+
+
+
+ Third row, second column of the matrix.
+
+
+
+
+ Third row, third column of the matrix.
+
+
+
+
+ Computes rT * m * r for a symmetric matrix m and a rotation matrix R.
+
+ Rotation matrix to use as the sandwich bread.
+ Succulent interior symmetric matrix.
+ Result of v * m * transpose(v) for a symmetric matrix m.
+
+
+
+ Computes the determinant of a symmetric matrix.
+
+ Matrix to intepret as symmetric.
+ Determinant of the matrix interpreted as symmetric.
+
+
+
+ Inverts the given matix.
+
+ Matrix to be inverted.
+ Inverted matrix.
+
+
+
+ Adds the components of two matrices together.
+
+ First matrix to add.
+ Second matrix to add.
+ Matrix with components equal to the components of the two input matrices added together.
+
+
+
+ Subtracts the components of b from a.
+
+ Matrix to be subtracted from.
+ Matrix to subtract from the first matrix..
+ Matrix with subtracted components.
+
+
+
+ Adds the components of two matrices together.
+
+ First matrix to add.
+ Second matrix to add.
+ Matrix with components equal to the components of the two input matrices added together.
+
+
+
+ Subtracts the components of one matrix from another.
+
+ Matrix to be subtracted from.
+ Matrix to subtract from the first matrix.
+ Matrix with components equal to the difference of the two input matrices.
+
+
+
+ Multiplies every component in the matrix by the given scale.
+
+ Matrix to be scaled.
+ Scale to apply to every component of the original matrix.
+ Scaled result.
+
+
+
+ Multiplies the two matrices as if they were symmetric.
+
+ First matrix to multiply.
+ Second matrix to multiply.
+ Product of the multiplication.
+
+
+
+ Multiplies the two matrices.
+
+ First matrix to multiply.
+ Second matrix to multiply.
+ Product of the multiplication.
+
+
+
+ Transforms a vector by a symmetric matrix.
+
+ Vector to transform.
+ Matrix to interpret as symmetric transform.
+ Result of transforming the vector by the given symmetric matrix.
+
+
+
+ Stores the lower left triangle (including diagonal) of a 3x3 matrix. Useful for symmetric matrices (and sometimes antisymmetric matrices).
+
+
+
+
+ First row, first column of the matrix.
+
+
+
+
+ Second row, first column of the matrix.
+
+
+
+
+ Second row, second column of the matrix.
+
+
+
+
+ Third row, first column of the matrix.
+
+
+
+
+ Third row, second column of the matrix.
+
+
+
+
+ Third row, third column of the matrix.
+
+
+
+
+ Inverts the matrix as if it is a symmetric matrix where M32 == M23, M13 == M31, and M21 == M12.
+
+ Symmetric matrix to invert.
+ Inverse of the symmetric matrix.
+
+
+
+ Adds the components of two symmetric matrices together.
+
+ First matrix to add.
+ Second matrix to add.
+ Sum of the two input matrices.
+
+
+
+ Subtracts one symmetric matrix's components from another.
+
+ Matrix to be subtracted from.
+ Matrix to subtract from the first matrix.
+ Result of a - b.
+
+
+
+ Computes skewSymmetric(v) * m * transpose(skewSymmetric(v)) for a symmetric matrix m. Assumes that the input and output matrices do not overlap.
+
+ Symmetric matrix.
+ Vector to create the skew symmetric matrix from to act as the sandwich bread.
+ Result of skewSymmetric(v) * m * transpose(skewSymmetric(v)).
+ This operation might have a formal name that isn't skew sandwich. But that's okay, its real name is skew sandwich.
+
+
+
+ Computes v * m * transpose(v) for a symmetric matrix m. Assumes that the input and output do not overlap.
+
+ Vector acting as the sandwich bread.
+ Succulent interior symmetric matrix.
+ Result of v * m * transpose(v) for a symmetric matrix m.
+ Since I called the other one a skew sandwich, I really don't have a choice in the naming convention anymore.
+
+
+
+ Computes rT * m * r for a symmetric matrix m and a rotation matrix R.
+
+ Rotation matrix to use as the sandwich bread.
+ Succulent interior symmetric matrix.
+ Result of v * m * transpose(v) for a symmetric matrix m.
+
+
+
+ Computes result = a * b, assuming that b represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap.
+
+ First matrix of the pair to multiply.
+ Matrix to be reinterpreted as symmetric for the multiply.
+ Result of multiplying a * b.
+
+
+
+ Computes result = a * b, assuming that b represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap.
+
+ First matrix of the pair to multiply.
+ Matrix to be reinterpreted as symmetric for the multiply.
+ Result of multiplying a * b.
+
+
+
+ Computes result = a * b, assuming that a represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap.
+
+ Matrix to be reinterpreted as symmetric for the multiply.
+ Second matrix of the pair to multiply.
+ Result of multiplying a * b.
+
+
+
+ Computes result = a * transpose(b).
+
+ Matrix to multiply with the transposed matrix.
+ Matrix to transpose and concatenate with the first matrix.
+ Result of a * transpose(b).
+
+
+
+ Computes result = transpose(a * transpose(b)).
+
+ Matrix to multiply with the transposed matrix.
+ Matrix to transpose and concatenate with the first matrix.
+ Result of transpose(a * transpose(b)).
+
+
+
+ Computes m * t * mT for a symmetric matrix t and a matrix m.
+
+ Matrix to use as the sandwich bread.
+ Succulent interior symmetric matrix.
+ Result of m * t * mT for a symmetric matrix t.
+
+
+
+ Computes result = a * b, where a = transpose(b) * M for some symmetric matrix M.
+
+ Some matrix equal to transpose(b) * M for some symmetric matrix M.
+ Matrix used to sandwich the original matrix M.
+ Complete result of transpose(b) * M * b.
+
+
+
+ Computes result = tranpose(a) * b, where a = transpose(transpose(b) * M) for some symmetric matrix M. In other words, we're just treating matrix a as a 3x2 matrix.
+
+ Some matrix equal to transpose(b) * M for some symmetric matrix M.
+ Matrix used to sandwich the original matrix M.
+ Complete result of transpose(b) * M * b.
+
+
+
+ Computes result = a * transpose(b), where a = b * M for some symmetric matrix M.
+
+ Some matrix equal to b * M for some symmetric matrix M.
+ Matrix used to sandwich the original matrix M, to be transposed.
+ Complete result of b * M * transpose(b).
+
+
+
+ Computes result = transpose(a) * b, where b = M * a for some symmetric matrix M.
+
+ Matrix used to sandwich the original matrix M.
+ Some matrix equal to M * a for some symmetric matrix M.
+ Complete result of transpose(a) * M * a.
+
+
+
+ Returns a reference to the upper left 3x3 block of the matrix.
+
+ Matrix to pull a block from.
+ Reference to the requested block.
+
+
+
+ Returns a reference to the upper right 3x1 (or lower left 1x3) block of the matrix.
+
+ Matrix to pull a block from.
+ Reference to the requested block.
+
+
+
+ Scales each component of m by the given scale.
+
+ Matrix to scale.
+ Scale to apply to the components of m.
+ Result of scaling each component of m by scale.
+
+
+
+ Computes result = v * m.
+
+ Vector to transform.
+ Matrix to transform with.
+ Result of the transform.
+
+
+
+ Upper left 3x3 block of the matrix.
+
+
+
+
+ Lower left 2x3 block of the matrix.
+
+
+
+
+ Lower right 2x2 block of the matrix.
+
+
+
+
+ Scales each component of m by the given scale.
+
+ Matrix to scale.
+ Scale to apply to the components of m.
+ Result of scaling each component of m by scale.
+
+
+
+ Computes result = v * m, where v and result are 1x5 vectors which are split into two subvectors.
+
+ First half of the a vector.
+ Second half of the a vector.
+ Matrix to transform with.
+ First half of the result.
+ Second half of the result.
+
+
+
+ Scales each component of m by the given scale.
+
+ Matrix to scale.
+ Scale to apply to the components of m.
+ Result of scaling each component of m by scale.
+
+
+
+ Computes result = v * m, where v and result are 1x6 vectors which are split into two 1x3 values.
+
+ First half of the a vector.
+ Second half of the a vector.
+ Matrix to transform with.
+ First half of the result.
+ Second half of the result.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Non-SIMD type to store the lane in.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Index of the lane within the wide representation to read.
+ Non-SIMD type to store the lane in.
+
+
+
+ Gathers values from a vector and places them into the first indices of the target vector.
+
+ Vector to copy values from.
+ Wide vectorto place values into.
+
+
+
+ Writes a value into a slot of the target bundle.
+
+ Source of the value to write.
+ Index of the slot to write into.
+ Bundle to write the value into.
+
+
+
+ Finds the result of adding a scalar to every component of a vector.
+
+ Vector to add to.
+ Scalar to add to every component of the vector.
+ Vector with components equal to the input vector added to the input scalar.
+
+
+
+ Finds the result of subtracting a scalar from every component of a vector.
+
+ Vector to subtract from.
+ Scalar to subtract from every component of the vector.
+ Vector with components equal the input scalar subtracted from the input vector.
+
+
+
+ Finds the result of subtracting the components of a vector from a scalar.
+
+ Vector to subtract from the scalar.
+ Scalar to subtract from.
+ Vector with components equal the input vector subtracted from the input scalar.
+
+
+
+ Computes the per-component minimum between a scalar value and the components of a vector.
+
+ Scalar to compare to each vector component.
+ Vector whose components will be compared.
+ Vector with components matching the smaller of the scalar value and the input vector.
+
+
+
+ Computes the per-component minimum of two vectors.
+
+ First vector whose components will be compared.
+ Second vector whose components will be compared.
+ Vector with components matching the smaller of the two input vectors.
+
+
+
+ Computes the per-component maximum between a scalar value and the components of a vector.
+
+ Scalar to compare to each vector component.
+ Vector whose components will be compared.
+ Vector with components matching the larger of the scalar value and the input vector.
+
+
+
+ Computes the per-component maximum of two vectors.
+
+ First vector whose components will be compared.
+ Second vector whose components will be compared.
+ Vector with components matching the larger of the two input vectors.
+
+
+
+ Multiplies the components of one vector with another.
+
+ First vector to multiply.
+ Second vector to multiply.
+ Result of the multiplication.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Index of the lane within the wide representation to read.
+ Non-SIMD type to store the lane in.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Non-SIMD type to store the lane in.
+
+
+
+ Gathers values from a vector and places them into the first indices of the target vector.
+
+ Vector to copy values from.
+ Wide vectorto place values into.
+
+
+
+ Writes a value into a slot of the target bundle.
+
+ Source of the value to write.
+ Index of the slot to write into.
+ Bundle to write the value into.
+
+
+
+ Expands each scalar value to every slot of the bundle.
+
+ Source value to write to every bundle slot.
+ Bundle containing the source's components in every slot.
+
+
+
+ Takes a slot from the source vector and broadcasts it into all slots of the target vector.
+
+ Vector to pull values from.
+ Slot in the source vectors to pull values from.
+ Target vector to be filled with the selected data.
+
+
+
+ Takes a slot from the source vector and places it into a slot of the target.
+
+ Vector to pull values from.
+ Slot in the source vectors to pull values from.
+ Target vector whose slot will be filled with the selected data.
+ Slot in the target vectors to write values into.
+
+
+
+ Computes the per-component minimum of two vectors.
+
+ First vector whose components will be compared.
+ Second vector whose components will be compared.
+ Vector with components matching the smaller of the two input vectors.
+
+
+
+ Computes the per-component maximum of two vectors.
+
+ First vector whose components will be compared.
+ Second vector whose components will be compared.
+ Vector with components matching the larger of the two input vectors.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Index of the lane within the wide representation to read.
+ Non-SIMD type to store the lane in.
+
+
+
+ Pulls one lane out of the wide representation.
+
+ Source of the lane.
+ Non-SIMD type to store the lane in.
+
+
+
+ Gathers values from a vector and places them into the first indices of the target vector.
+
+ Vector to copy values from.
+ Wide vectorto place values into.
+
+
+
diff --git a/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta
new file mode 100644
index 00000000..1e671884
--- /dev/null
+++ b/JNFrame/Assets/Packages/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d4e1291355a40db41ab3daa142d4681b
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec
deleted file mode 100644
index a8481f68..00000000
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- System.Runtime.CompilerServices.Unsafe
- 4.5.2
- System.Runtime.CompilerServices.Unsafe
- Microsoft
- microsoft,dotnetframework
- false
- https://github.com/dotnet/corefx/blob/master/LICENSE.TXT
- https://dot.net/
- http://go.microsoft.com/fwlink/?LinkID=288859
- Provides the System.Runtime.CompilerServices.Unsafe class, which provides generic, low-level functionality for manipulating pointers.
-
-Commonly Used Types:
-System.Runtime.CompilerServices.Unsafe
-
-02b11eeee1fbc5f3ef43a1452fe07efd25fa1715
-When using NuGet 3.x this package requires at least version 3.4.
- https://go.microsoft.com/fwlink/?LinkID=799421
- © Microsoft Corporation. All rights reserved.
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT
deleted file mode 100644
index db542ca2..00000000
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT
+++ /dev/null
@@ -1,309 +0,0 @@
-.NET Core uses third-party libraries or other resources that may be
-distributed under licenses different than the .NET Core software.
-
-In the event that we accidentally failed to list a required notice, please
-bring it to our attention. Post an issue or email us:
-
- dotnet@microsoft.com
-
-The attached notices are provided for information only.
-
-License notice for Slicing-by-8
--------------------------------
-
-http://sourceforge.net/projects/slicing-by-8/
-
-Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
-
-
-This software program is licensed subject to the BSD License, available at
-http://www.opensource.org/licenses/bsd-license.html.
-
-
-License notice for Unicode data
--------------------------------
-
-http://www.unicode.org/copyright.html#License
-
-Copyright © 1991-2017 Unicode, Inc. All rights reserved.
-Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Unicode data files and any associated documentation
-(the "Data Files") or Unicode software and any associated documentation
-(the "Software") to deal in the Data Files or Software
-without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, and/or sell copies of
-the Data Files or Software, and to permit persons to whom the Data Files
-or Software are furnished to do so, provided that either
-(a) this copyright and permission notice appear with all copies
-of the Data Files or Software, or
-(b) this copyright and permission notice appear in associated
-Documentation.
-
-THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
-NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale,
-use or other dealings in these Data Files or Software without prior
-written authorization of the copyright holder.
-
-License notice for Zlib
------------------------
-
-https://github.com/madler/zlib
-http://zlib.net/zlib_license.html
-
-/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.11, January 15th, 2017
-
- Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
-
-*/
-
-License notice for Mono
--------------------------------
-
-http://www.mono-project.com/docs/about-mono/
-
-Copyright (c) .NET Foundation Contributors
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the Software), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-License notice for International Organization for Standardization
------------------------------------------------------------------
-
-Portions (C) International Organization for Standardization 1986:
- Permission to copy in any form is granted for use with
- conforming SGML systems and applications as defined in
- ISO 8879, provided this notice is included in all copies.
-
-License notice for Intel
-------------------------
-
-"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-License notice for Xamarin and Novell
--------------------------------------
-
-Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-Copyright (c) 2011 Novell, Inc (http://www.novell.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-Third party notice for W3C
---------------------------
-
-"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE
-Status: This license takes effect 13 May, 2015.
-This work is being provided by the copyright holders under the following license.
-License
-By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
-Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:
-The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
-Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
-Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)."
-Disclaimers
-THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
-COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
-The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders."
-
-License notice for Bit Twiddling Hacks
---------------------------------------
-
-Bit Twiddling Hacks
-
-By Sean Eron Anderson
-seander@cs.stanford.edu
-
-Individually, the code snippets here are in the public domain (unless otherwise
-noted) — feel free to use them however you please. The aggregate collection and
-descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are
-distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and
-without even the implied warranty of merchantability or fitness for a particular
-purpose.
-
-License notice for Brotli
---------------------------------------
-
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-compress_fragment.c:
-Copyright (c) 2011, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-decode_fuzzer.c:
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll
deleted file mode 100644
index 31562392..00000000
Binary files a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll and /dev/null differ
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml
deleted file mode 100644
index 6a7cfcff..00000000
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
- System.Runtime.CompilerServices.Unsafe
-
-
-
- Contains generic, low-level functionality for manipulating pointers.
-
-
- Adds an element offset to the given reference.
- The reference to add the offset to.
- The offset to add.
- The type of reference.
- A new reference that reflects the addition of offset to pointer.
-
-
- Adds an element offset to the given reference.
- The reference to add the offset to.
- The offset to add.
- The type of reference.
- A new reference that reflects the addition of offset to pointer.
-
-
- Adds a byte offset to the given reference.
- The reference to add the offset to.
- The offset to add.
- The type of reference.
- A new reference that reflects the addition of byte offset to pointer.
-
-
- Determines whether the specified references point to the same location.
- The first reference to compare.
- The second reference to compare.
- The type of reference.
- true if left and right point to the same location; otherwise, false.
-
-
- Casts the given object to the specified type.
- The object to cast.
- The type which the object will be cast to.
- The original object, casted to the given type.
-
-
- Reinterprets the given reference as a reference to a value of type TTo.
- The reference to reinterpret.
- The type of reference to reinterpret..
- The desired type of the reference.
- A reference to a value of type TTo.
-
-
- Returns a pointer to the given by-ref parameter.
- The object whose pointer is obtained.
- The type of object.
- A pointer to the given value.
-
-
- Reinterprets the given location as a reference to a value of type T.
- The location of the value to reference.
- The type of the interpreted location.
- A reference to a value of type T.
-
-
- Determines the byte offset from origin to target from the given references.
- The reference to origin.
- The reference to target.
- The type of reference.
- Byte offset from origin to target i.e. target - origin.
-
-
- Copies a value of type T to the given location.
- The location to copy to.
- A reference to the value to copy.
- The type of value to copy.
-
-
- Copies a value of type T to the given location.
- The location to copy to.
- A pointer to the value to copy.
- The type of value to copy.
-
-
- Copies bytes from the source address to the destination address.
- The destination address to copy to.
- The source address to copy from.
- The number of bytes to copy.
-
-
- Copies bytes from the source address to the destination address.
- The destination address to copy to.
- The source address to copy from.
- The number of bytes to copy.
-
-
- Copies bytes from the source address to the destination address
-without assuming architecture dependent alignment of the addresses.
- The destination address to copy to.
- The source address to copy from.
- The number of bytes to copy.
-
-
- Copies bytes from the source address to the destination address
-without assuming architecture dependent alignment of the addresses.
- The destination address to copy to.
- The source address to copy from.
- The number of bytes to copy.
-
-
- Initializes a block of memory at the given location with a given initial value.
- The address of the start of the memory block to initialize.
- The value to initialize the block to.
- The number of bytes to initialize.
-
-
- Initializes a block of memory at the given location with a given initial value.
- The address of the start of the memory block to initialize.
- The value to initialize the block to.
- The number of bytes to initialize.
-
-
- Initializes a block of memory at the given location with a given initial value
-without assuming architecture dependent alignment of the address.
- The address of the start of the memory block to initialize.
- The value to initialize the block to.
- The number of bytes to initialize.
-
-
- Initializes a block of memory at the given location with a given initial value
-without assuming architecture dependent alignment of the address.
- The address of the start of the memory block to initialize.
- The value to initialize the block to.
- The number of bytes to initialize.
-
-
- Reads a value of type T from the given location.
- The location to read from.
- The type to read.
- An object of type T read from the given location.
-
-
- Reads a value of type T from the given location
-without assuming architecture dependent alignment of the addresses.
- The location to read from.
- The type to read.
- An object of type T read from the given location.
-
-
- Reads a value of type T from the given location
-without assuming architecture dependent alignment of the addresses.
- The location to read from.
- The type to read.
- An object of type T read from the given location.
-
-
- Returns the size of an object of the given type parameter.
- The type of object whose size is retrieved.
- The size of an object of type T.
-
-
- Subtracts an element offset from the given reference.
- The reference to subtract the offset from.
- The offset to subtract.
- The type of reference.
- A new reference that reflects the subraction of offset from pointer.
-
-
- Subtracts an element offset from the given reference.
- The reference to subtract the offset from.
- The offset to subtract.
- The type of reference.
- A new reference that reflects the subraction of offset from pointer.
-
-
- Subtracts a byte offset from the given reference.
- The reference to subtract the offset from.
-
- The type of reference.
- A new reference that reflects the subraction of byte offset from pointer.
-
-
- Writes a value of type T to the given location.
- The location to write to.
- The value to write.
- The type of value to write.
-
-
- Writes a value of type T to the given location
-without assuming architecture dependent alignment of the addresses.
- The location to write to.
- The value to write.
- The type of value to write.
-
-
- Writes a value of type T to the given location
-without assuming architecture dependent alignment of the addresses.
- The location to write to.
- The value to write.
- The type of value to write.
-
-
-
\ No newline at end of file
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt
deleted file mode 100644
index 69308609..00000000
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt
+++ /dev/null
@@ -1 +0,0 @@
-02b11eeee1fbc5f3ef43a1452fe07efd25fa1715
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0.meta
new file mode 100644
index 00000000..5c1c54d6
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 40d60631611f025478821fa08409cd8c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/.signature.p7s
similarity index 50%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/.signature.p7s
index a7fbb734..2a015f96 100644
Binary files a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s and b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/.signature.p7s differ
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png
new file mode 100644
index 00000000..a0f1fdbf
Binary files /dev/null and b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png differ
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png.meta
new file mode 100644
index 00000000..81793ddc
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png.meta
@@ -0,0 +1,127 @@
+fileFormatVersion: 2
+guid: 0e3d51ee714483b4296ed3f345349d94
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 12
+ 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
+ ignoreMipmapLimit: 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
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Server
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT
similarity index 100%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT.meta
similarity index 75%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT.meta
index 5fc83469..6ebbd896 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/LICENSE.TXT.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 730c983d2c070864992ba21ba91d94c9
+guid: 1534653a6df9fba499a0f8b0836c9b5d
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec
new file mode 100644
index 00000000..d6590a91
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec
@@ -0,0 +1,29 @@
+
+
+
+ System.Runtime.CompilerServices.Unsafe
+ 6.0.0
+ Microsoft
+ MIT
+ https://licenses.nuget.org/MIT
+ Icon.png
+ https://dot.net/
+ Provides the System.Runtime.CompilerServices.Unsafe class, which provides generic, low-level functionality for manipulating pointers.
+
+Commonly Used Types:
+System.Runtime.CompilerServices.Unsafe
+ https://go.microsoft.com/fwlink/?LinkID=799421
+ © Microsoft Corporation. All rights reserved.
+ true
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec.meta
similarity index 74%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec.meta
index 5e2fc268..1a6c0c09 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.nuspec.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/System.Runtime.CompilerServices.Unsafe.nuspec.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0ad80367ad9e0fd418de576d0bc7197c
+guid: 5cdca09920d14404fad09bd3b9048dd3
DefaultImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT
new file mode 100644
index 00000000..89c59b21
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT
@@ -0,0 +1,939 @@
+.NET Runtime uses third-party libraries or other resources that may be
+distributed under licenses different than the .NET Runtime software.
+
+In the event that we accidentally failed to list a required notice, please
+bring it to our attention. Post an issue or email us:
+
+ dotnet@microsoft.com
+
+The attached notices are provided for information only.
+
+License notice for ASP.NET
+-------------------------------
+
+Copyright (c) .NET Foundation. All rights reserved.
+Licensed under the Apache License, Version 2.0.
+
+Available at
+https://github.com/dotnet/aspnetcore/blob/main/LICENSE.txt
+
+License notice for Slicing-by-8
+-------------------------------
+
+http://sourceforge.net/projects/slicing-by-8/
+
+Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
+
+
+This software program is licensed subject to the BSD License, available at
+http://www.opensource.org/licenses/bsd-license.html.
+
+
+License notice for Unicode data
+-------------------------------
+
+https://www.unicode.org/license.html
+
+Copyright © 1991-2020 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+License notice for Zlib
+-----------------------
+
+https://github.com/madler/zlib
+http://zlib.net/zlib_license.html
+
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.11, January 15th, 2017
+
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+*/
+
+License notice for Mono
+-------------------------------
+
+http://www.mono-project.com/docs/about-mono/
+
+Copyright (c) .NET Foundation Contributors
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the Software), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for International Organization for Standardization
+-----------------------------------------------------------------
+
+Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+License notice for Intel
+------------------------
+
+"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for Xamarin and Novell
+-------------------------------------
+
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Third party notice for W3C
+--------------------------
+
+"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE
+Status: This license takes effect 13 May, 2015.
+This work is being provided by the copyright holders under the following license.
+License
+By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
+Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:
+The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
+Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)."
+Disclaimers
+THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders."
+
+License notice for Bit Twiddling Hacks
+--------------------------------------
+
+Bit Twiddling Hacks
+
+By Sean Eron Anderson
+seander@cs.stanford.edu
+
+Individually, the code snippets here are in the public domain (unless otherwise
+noted) — feel free to use them however you please. The aggregate collection and
+descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are
+distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and
+without even the implied warranty of merchantability or fitness for a particular
+purpose.
+
+License notice for Brotli
+--------------------------------------
+
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+compress_fragment.c:
+Copyright (c) 2011, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+decode_fuzzer.c:
+Copyright (c) 2015 The Chromium Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+
+License notice for Json.NET
+-------------------------------
+
+https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md
+
+The MIT License (MIT)
+
+Copyright (c) 2007 James Newton-King
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for vectorized base64 encoding / decoding
+--------------------------------------------------------
+
+Copyright (c) 2005-2007, Nick Galbreath
+Copyright (c) 2013-2017, Alfred Klomp
+Copyright (c) 2015-2017, Wojciech Mula
+Copyright (c) 2016-2017, Matthieu Darbois
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for RFC 3492
+---------------------------
+
+The punycode implementation is based on the sample code in RFC 3492
+
+Copyright (C) The Internet Society (2003). All Rights Reserved.
+
+This document and translations of it may be copied and furnished to
+others, and derivative works that comment on or otherwise explain it
+or assist in its implementation may be prepared, copied, published
+and distributed, in whole or in part, without restriction of any
+kind, provided that the above copyright notice and this paragraph are
+included on all such copies and derivative works. However, this
+document itself may not be modified in any way, such as by removing
+the copyright notice or references to the Internet Society or other
+Internet organizations, except as needed for the purpose of
+developing Internet standards in which case the procedures for
+copyrights defined in the Internet Standards process must be
+followed, or as required to translate it into languages other than
+English.
+
+The limited permissions granted above are perpetual and will not be
+revoked by the Internet Society or its successors or assigns.
+
+This document and the information contained herein is provided on an
+"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+License notice for Algorithm from Internet Draft document "UUIDs and GUIDs"
+---------------------------------------------------------------------------
+
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. &
+Digital Equipment Corporation, Maynard, Mass.
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty: permission to use, copy,
+modify, and distribute this file for any purpose is hereby
+granted without fee, provided that the above copyright notices and
+this notice appears in all source code copies, and that none of
+the names of Open Software Foundation, Inc., Hewlett-Packard
+Company, or Digital Equipment Corporation be used in advertising
+or publicity pertaining to distribution of the software without
+specific, written prior permission. Neither Open Software
+Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital Equipment
+Corporation makes any representations about the suitability of
+this software for any purpose.
+
+Copyright(C) The Internet Society 1997. All Rights Reserved.
+
+This document and translations of it may be copied and furnished to others,
+and derivative works that comment on or otherwise explain it or assist in
+its implementation may be prepared, copied, published and distributed, in
+whole or in part, without restriction of any kind, provided that the above
+copyright notice and this paragraph are included on all such copies and
+derivative works.However, this document itself may not be modified in any
+way, such as by removing the copyright notice or references to the Internet
+Society or other Internet organizations, except as needed for the purpose of
+developing Internet standards in which case the procedures for copyrights
+defined in the Internet Standards process must be followed, or as required
+to translate it into languages other than English.
+
+The limited permissions granted above are perpetual and will not be revoked
+by the Internet Society or its successors or assigns.
+
+This document and the information contained herein is provided on an "AS IS"
+basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE
+DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY
+RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
+PARTICULAR PURPOSE.
+
+License notice for Algorithm from RFC 4122 -
+A Universally Unique IDentifier (UUID) URN Namespace
+----------------------------------------------------
+
+Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc.
+Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. &
+Digital Equipment Corporation, Maynard, Mass.
+Copyright (c) 1998 Microsoft.
+To anyone who acknowledges that this file is provided "AS IS"
+without any express or implied warranty: permission to use, copy,
+modify, and distribute this file for any purpose is hereby
+granted without fee, provided that the above copyright notices and
+this notice appears in all source code copies, and that none of
+the names of Open Software Foundation, Inc., Hewlett-Packard
+Company, Microsoft, or Digital Equipment Corporation be used in
+advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. Neither Open Software
+Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital
+Equipment Corporation makes any representations about the
+suitability of this software for any purpose."
+
+License notice for The LLVM Compiler Infrastructure
+---------------------------------------------------
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+License notice for Bob Jenkins
+------------------------------
+
+By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this
+code any way you wish, private, educational, or commercial. It's free.
+
+License notice for Greg Parker
+------------------------------
+
+Greg Parker gparker@cs.stanford.edu December 2000
+This code is in the public domain and may be copied or modified without
+permission.
+
+License notice for libunwind based code
+----------------------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for Printing Floating-Point Numbers (Dragon4)
+------------------------------------------------------------
+
+/******************************************************************************
+ Copyright (c) 2014 Ryan Juckett
+ http://www.ryanjuckett.com/
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+******************************************************************************/
+
+License notice for Printing Floating-point Numbers (Grisu3)
+-----------------------------------------------------------
+
+Copyright 2012 the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for xxHash
+-------------------------
+
+xxHash Library
+Copyright (c) 2012-2014, Yann Collet
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for Berkeley SoftFloat Release 3e
+------------------------------------------------
+
+https://github.com/ucb-bar/berkeley-softfloat-3
+https://github.com/ucb-bar/berkeley-softfloat-3/blob/master/COPYING.txt
+
+License for Berkeley SoftFloat Release 3e
+
+John R. Hauser
+2018 January 20
+
+The following applies to the whole of SoftFloat Release 3e as well as to
+each source file individually.
+
+Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the
+University of California. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions, and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for xoshiro RNGs
+--------------------------------
+
+Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org)
+
+To the extent possible under law, the author has dedicated all copyright
+and related and neighboring rights to this software to the public domain
+worldwide. This software is distributed without any warranty.
+
+See .
+
+License for fastmod (https://github.com/lemire/fastmod) and ibm-fpgen (https://github.com/nigeltao/parse-number-fxx-test-data)
+--------------------------------------
+
+ Copyright 2018 Daniel Lemire
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+License notice for The C++ REST SDK
+-----------------------------------
+
+C++ REST SDK
+
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+License notice for MessagePack-CSharp
+-------------------------------------
+
+MessagePack for C#
+
+MIT License
+
+Copyright (c) 2017 Yoshifumi Kawai
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+License notice for lz4net
+-------------------------------------
+
+lz4net
+
+Copyright (c) 2013-2017, Milosz Krajewski
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for Nerdbank.Streams
+-----------------------------------
+
+The MIT License (MIT)
+
+Copyright (c) Andrew Arnott
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+License notice for RapidJSON
+----------------------------
+
+Tencent is pleased to support the open source community by making RapidJSON available.
+
+Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
+
+Licensed under the MIT License (the "License"); you may not use this file except
+in compliance with the License. You may obtain a copy of the License at
+
+http://opensource.org/licenses/MIT
+
+Unless required by applicable law or agreed to in writing, software distributed
+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
+specific language governing permissions and limitations under the License.
+
+License notice for DirectX Math Library
+---------------------------------------
+
+https://github.com/microsoft/DirectXMath/blob/master/LICENSE
+
+ The MIT License (MIT)
+
+Copyright (c) 2011-2020 Microsoft Corp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
+software and associated documentation files (the "Software"), to deal in the Software
+without restriction, including without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be included in all copies
+or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for ldap4net
+---------------------------
+
+The MIT License (MIT)
+
+Copyright (c) 2018 Alexander Chermyanin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for vectorized sorting code
+------------------------------------------
+
+MIT License
+
+Copyright (c) 2020 Dan Shechter
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+License notice for musl
+-----------------------
+
+musl as a whole is licensed under the following standard MIT license:
+
+Copyright © 2005-2020 Rich Felker, et al.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+License notice for "Faster Unsigned Division by Constants"
+------------------------------
+
+Reference implementations of computing and using the "magic number" approach to dividing
+by constants, including codegen instructions. The unsigned division incorporates the
+"round down" optimization per ridiculous_fish.
+
+This is free and unencumbered software. Any copyright is dedicated to the Public Domain.
+
+
+License notice for mimalloc
+-----------------------------------
+
+MIT License
+
+Copyright (c) 2019 Microsoft Corporation, Daan Leijen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT.meta
similarity index 75%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT.meta
index 1758acfd..70fe96eb 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/THIRD-PARTY-NOTICES.TXT.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 495cf1a0b48abaf439035bd6e3ba0226
+guid: ea4fcbd60d6e4f243aa4a62f64e4a3d0
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive.meta
new file mode 100644
index 00000000..16dfdfe9
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f4213adfea72d9240a09f40695da02e9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0.meta
new file mode 100644
index 00000000..ce1a0aac
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d8739582cedf4f74da8a39231ff16e58
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets
new file mode 100644
index 00000000..98eb1d3b
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets.meta
new file mode 100644
index 00000000..dfc49876
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 503a5ac04b691ab48b605122089a63f4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1.meta
new file mode 100644
index 00000000..1d9eb0fe
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23320644219dec0458a5459a4dd27ef9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._
similarity index 100%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._.meta
new file mode 100644
index 00000000..56679ec7
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/buildTransitive/netcoreapp3.1/_._.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 852620e6ae9311740af3d7cdd082b899
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib.meta
new file mode 100644
index 00000000..29f4bca0
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4e171f328f7c83c4fae2179e09e4ae38
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0.meta
new file mode 100644
index 00000000..71f3bae4
--- /dev/null
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0320b56f1a748e74daec15e95b977570
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll
new file mode 100644
index 00000000..491a80a9
Binary files /dev/null and b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll differ
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta
similarity index 91%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta
index 9416513d..e7068d17 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 6dc30032884285a4c9d2e3474a13121d
+guid: b29c0fb409eb0924b954a11e415c7194
labels:
- NuGetForUnity
PluginImporter:
diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml
similarity index 55%
rename from JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml
index 6a7cfcff..9d794922 100644
--- a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml
@@ -1,4 +1,5 @@
-
+
+
System.Runtime.CompilerServices.Unsafe
@@ -20,6 +21,20 @@
The type of reference.
A new reference that reflects the addition of offset to pointer.
+
+ Adds an element offset to the given reference.
+ The reference to add the offset to.
+ The offset to add.
+ The type of reference.
+ A new reference that reflects the addition of offset to pointer.
+
+
+ Adds an element offset to the given void pointer.
+ The void pointer to add the offset to.
+ The offset to add.
+ The type of void pointer.
+ A new void pointer that reflects the addition of offset to the specified pointer.
+
Adds a byte offset to the given reference.
The reference to add the offset to.
@@ -27,12 +42,20 @@
The type of reference.
A new reference that reflects the addition of byte offset to pointer.
+
+ Adds a byte offset to the given reference.
+ The reference to add the offset to.
+ The offset to add.
+ The type of reference.
+ A new reference that reflects the addition of byte offset to pointer.
+
Determines whether the specified references point to the same location.
The first reference to compare.
The second reference to compare.
The type of reference.
- true if left and right point to the same location; otherwise, false.
+
+ if and point to the same location; otherwise, .
Casts the given object to the specified type.
@@ -41,11 +64,11 @@
The original object, casted to the given type.
- Reinterprets the given reference as a reference to a value of type TTo.
+ Reinterprets the given reference as a reference to a value of type .
The reference to reinterpret.
- The type of reference to reinterpret..
+ The type of reference to reinterpret.
The desired type of the reference.
- A reference to a value of type TTo.
+ A reference to a value of type .
Returns a pointer to the given by-ref parameter.
@@ -53,31 +76,37 @@
The type of object.
A pointer to the given value.
+
+ Reinterprets the given read-only reference as a reference.
+ The read-only reference to reinterpret.
+ The type of reference.
+ A reference to a value of type .
+
- Reinterprets the given location as a reference to a value of type T.
+ Reinterprets the given location as a reference to a value of type .
The location of the value to reference.
The type of the interpreted location.
- A reference to a value of type T.
+ A reference to a value of type .
Determines the byte offset from origin to target from the given references.
The reference to origin.
The reference to target.
The type of reference.
- Byte offset from origin to target i.e. target - origin.
-
-
- Copies a value of type T to the given location.
- The location to copy to.
- A reference to the value to copy.
- The type of value to copy.
+ Byte offset from origin to target i.e. - .
- Copies a value of type T to the given location.
+ Copies a value of type to the given location.
The location to copy to.
A pointer to the value to copy.
The type of value to copy.
+
+ Copies a value of type to the given location.
+ The location to copy to.
+ A reference to the value to copy.
+ The type of value to copy.
+
Copies bytes from the source address to the destination address.
The destination address to copy to.
@@ -90,16 +119,14 @@
The source address to copy from.
The number of bytes to copy.
-
- Copies bytes from the source address to the destination address
-without assuming architecture dependent alignment of the addresses.
+
+ Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.
The destination address to copy to.
The source address to copy from.
The number of bytes to copy.
-
- Copies bytes from the source address to the destination address
-without assuming architecture dependent alignment of the addresses.
+
+ Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.
The destination address to copy to.
The source address to copy from.
The number of bytes to copy.
@@ -117,81 +144,145 @@ without assuming architecture dependent alignment of the addresses.
The number of bytes to initialize.
- Initializes a block of memory at the given location with a given initial value
-without assuming architecture dependent alignment of the address.
+ Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.
The address of the start of the memory block to initialize.
The value to initialize the block to.
The number of bytes to initialize.
- Initializes a block of memory at the given location with a given initial value
-without assuming architecture dependent alignment of the address.
+ Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.
The address of the start of the memory block to initialize.
The value to initialize the block to.
The number of bytes to initialize.
+
+ Returns a value that indicates whether a specified reference is greater than another specified reference.
+ The first value to compare.
+ The second value to compare.
+ The type of the reference.
+
+ if is greater than ; otherwise, .
+
+
+ Returns a value that indicates whether a specified reference is less than another specified reference.
+ The first value to compare.
+ The second value to compare.
+ The type of the reference.
+
+ if is less than ; otherwise, .
+
+
+ Determines if a given reference to a value of type is a null reference.
+ The reference to check.
+ The type of the reference.
+
+ if is a null reference; otherwise, .
+
+
+ Returns a reference to a value of type that is a null reference.
+ The type of the reference.
+ A reference to a value of type that is a null reference.
+
- Reads a value of type T from the given location.
+ Reads a value of type from the given location.
The location to read from.
The type to read.
- An object of type T read from the given location.
+ An object of type read from the given location.
- Reads a value of type T from the given location
-without assuming architecture dependent alignment of the addresses.
+ Reads a value of type from the given location without assuming architecture dependent alignment of the addresses.
The location to read from.
The type to read.
- An object of type T read from the given location.
+ An object of type read from the given location.
- Reads a value of type T from the given location
-without assuming architecture dependent alignment of the addresses.
+ Reads a value of type from the given location without assuming architecture dependent alignment of the addresses.
The location to read from.
The type to read.
- An object of type T read from the given location.
+ An object of type read from the given location.
Returns the size of an object of the given type parameter.
The type of object whose size is retrieved.
- The size of an object of type T.
+ The size of an object of type .
+
+
+ Bypasses definite assignment rules for a given value.
+ The uninitialized object.
+ The type of the uninitialized object.
Subtracts an element offset from the given reference.
The reference to subtract the offset from.
The offset to subtract.
The type of reference.
- A new reference that reflects the subraction of offset from pointer.
+ A new reference that reflects the subtraction of offset from pointer.
+ Subtracts an element offset from the given reference.
+ The reference to subtract the offset from.
+ The offset to subtract.
+ The type of reference.
+ A new reference that reflects the subtraction of offset from pointer.
+
+
Subtracts an element offset from the given reference.
The reference to subtract the offset from.
The offset to subtract.
The type of reference.
A new reference that reflects the subraction of offset from pointer.
+
+ Subtracts an element offset from the given void pointer.
+ The void pointer to subtract the offset from.
+ The offset to subtract.
+ The type of the void pointer.
+ A new void pointer that reflects the subtraction of offset from the specified pointer.
+
Subtracts a byte offset from the given reference.
The reference to subtract the offset from.
-
+ The offset to subtract.
+ The type of reference.
+ A new reference that reflects the subtraction of byte offset from pointer.
+
+
+ Subtracts a byte offset from the given reference.
+ The reference to subtract the offset from.
+ The offset to subtract.
The type of reference.
A new reference that reflects the subraction of byte offset from pointer.
+
+ Returns a to a boxed value.
+ The value to unbox.
+ The type to be unboxed.
+
+ is , and is a non-nullable value type.
+
+ is not a boxed value type.
+
+-or-
+
+ is not a boxed .
+
+ cannot be found.
+ A to the boxed value .
+
- Writes a value of type T to the given location.
+ Writes a value of type to the given location.
The location to write to.
The value to write.
The type of value to write.
- Writes a value of type T to the given location
-without assuming architecture dependent alignment of the addresses.
+ Writes a value of type to the given location without assuming architecture dependent alignment of the addresses.
The location to write to.
The value to write.
The type of value to write.
- Writes a value of type T to the given location
-without assuming architecture dependent alignment of the addresses.
+ Writes a value of type to the given location without assuming architecture dependent alignment of the addresses.
The location to write to.
The value to write.
The type of value to write.
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta
similarity index 75%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta
index d28b51b8..2641446b 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 2861a8d84ffb5fd43a88e4c52b8ce4f0
+guid: cb36e62886c4d824496d9c809cf06491
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt
similarity index 100%
rename from JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt
diff --git a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt.meta b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt.meta
similarity index 75%
rename from JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt.meta
rename to JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt.meta
index ccccb5fe..471f33ef 100644
--- a/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt.meta
+++ b/JNFrame/Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/useSharedDesignerContext.txt.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 6ebb778c1b6cae64aa3983e2f5abdbe2
+guid: 130ffb8196621b640bd6373840a172ea
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics.meta
new file mode 100644
index 00000000..1e22a945
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b9d9fb46b16434388c671f9f5e7bbee
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components.meta
new file mode 100644
index 00000000..afd414a6
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d2b94b429bbc44d6952a716c15b9e637
+timeCreated: 1706686833
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs
new file mode 100644
index 00000000..30b11b1a
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Numerics;
+using BepuPhysics;
+using BepuPhysics.Collidables;
+
+namespace Plugins.JNGame.BepuPhysics.Components
+{
+ public abstract class BPhysicsBase : UnityEngine.MonoBehaviour
+ {
+
+ //世界索引
+ public int worldIndex = 0;
+
+ protected BodyHandle BodyId;
+ protected StaticHandle StaticBodyId;
+
+ //是否静态
+ public Boolean isStatic = false;
+
+ public JNBepuPhysics Physics
+ {
+ get
+ {
+ JNBepuPhysics.Physics.TryGetValue(worldIndex, out var value);
+ return value;
+ }
+ }
+
+ protected void AddDynamic(TShape shape,BodyInertia shapeInertia) where TShape : unmanaged, IShape
+ {
+
+ var sphereIndex = this.Physics.Simulation.Shapes.Add(shape);
+ var transformPosition = transform.position;
+ var transformRotation = transform.rotation;
+ var spherePose = new RigidPose(new Vector3(transformPosition.x,transformPosition.y,transformPosition.z), new Quaternion(transformRotation.x,transformRotation.y,transformRotation.z,transformRotation.w));
+ BodyId = this.Physics.Simulation.Bodies.Add(BodyDescription.CreateDynamic(spherePose,
+ shapeInertia,
+ new CollidableDescription(sphereIndex, 0.01f),
+ new BodyActivityDescription(0.01f)));
+
+ }
+
+ protected void AddStatic(TShape shape) where TShape : unmanaged, IShape
+ {
+
+ var transformPosition = transform.position;
+ var transformRotation = transform.rotation;
+ StaticBodyId = this.Physics.Simulation.Statics.Add(
+ new StaticDescription(new Vector3(transformPosition.x, transformPosition.y, transformPosition.z),
+ new Quaternion(transformRotation.x,transformRotation.y,transformRotation.z,transformRotation.w),
+ new CollidableDescription(this.Physics.Simulation.Shapes.Add(shape), 0.01f)));
+
+ }
+
+ public void OnPhysicsUpdate(float dt)
+ {
+
+ if (this.Physics == null) return;
+ if (this.isStatic) return;
+
+ this.Physics.Simulation.Bodies.GetDescription(this.BodyId,out var info);
+
+ //同步位置
+ var transform1 = transform;
+ transform1.position =
+ new UnityEngine.Vector3(info.Pose.Position.X, info.Pose.Position.Y, info.Pose.Position.Z);
+ //同步旋转
+ transform1.rotation =
+ new UnityEngine.Quaternion(info.Pose.Orientation.X, info.Pose.Orientation.Y, info.Pose.Position.Z,info.Pose.Orientation.W);
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs.meta
new file mode 100644
index 00000000..3c770998
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBase.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 3e204f22f96e497ab13682ad13267883
+timeCreated: 1706687376
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs
new file mode 100644
index 00000000..474f0bfe
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs
@@ -0,0 +1,37 @@
+using BepuPhysics;
+using BepuPhysics.Collidables;
+using UnityEngine;
+using NotImplementedException = System.NotImplementedException;
+using Quaternion = System.Numerics.Quaternion;
+using Vector3 = System.Numerics.Vector3;
+
+namespace Plugins.JNGame.BepuPhysics.Components
+{
+ public class BPhysicsBox : BPhysicsBase
+ {
+
+ private BodyHandle bodyId;
+
+ void Awake()
+ {
+
+ if (this.Physics == null) return;
+ Debug.Log("BPhysicsSphere");
+
+ this.Physics.Shapes.Add(this);
+ var localScale = transform.localScale;
+ var sphereBox = new Box(localScale.x,localScale.y,localScale.z);
+ if (this.isStatic)
+ {
+ this.AddStatic(sphereBox);
+ }
+ else
+ {
+ sphereBox.ComputeInertia(0.5f, out var inertia);
+ this.AddDynamic(sphereBox,inertia);
+ }
+
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs.meta
new file mode 100644
index 00000000..30910ff0
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsBox.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2f56304910dd4846981c5f978f90ebf6
+timeCreated: 1706690344
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs
new file mode 100644
index 00000000..96020371
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs
@@ -0,0 +1,24 @@
+using BepuPhysics.Collidables;
+using UnityEngine;
+
+namespace Plugins.JNGame.BepuPhysics.Components
+{
+ public class BPhysicsSphere : BPhysicsBase
+ {
+
+ void Awake()
+ {
+
+ if (this.Physics == null) return;
+ Debug.Log("BPhysicsSphere");
+
+ this.Physics.Shapes.Add(this);
+ var sphereShape = new Sphere(transform.localScale.x / 2);
+ sphereShape.ComputeInertia(0.5f, out var sphereInertia);
+ this.AddDynamic(sphereShape,sphereInertia);
+
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs.meta
new file mode 100644
index 00000000..841862c2
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BPhysicsSphere.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 98c11bfd0d424f98a6634403fca61c34
+timeCreated: 1706686910
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs
new file mode 100644
index 00000000..b27bc4c6
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs
@@ -0,0 +1,8 @@
+namespace Plugins.JNGame.BepuPhysics.Components
+{
+ public enum BShape
+ {
+ /// Sphere shape type
+ Sphere = 1,
+ }
+}
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs.meta
new file mode 100644
index 00000000..fa6d192d
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Components/BShape.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 499b044e9991435ab5054521c2833c00
+timeCreated: 1706686981
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs
new file mode 100644
index 00000000..595fd501
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs
@@ -0,0 +1,46 @@
+using System.Collections.Generic;
+using BepuPhysics;
+using BepuPhysics.Collidables;
+using BepuUtilities;
+using BepuUtilities.Memory;
+using Plugins.JNGame.BepuPhysics.Components;
+using Plugins.JNGame.BepuPhysics.Utilities;
+using UnityEngine;
+using Vector3 = System.Numerics.Vector3;
+
+namespace Plugins.JNGame.BepuPhysics
+{
+ public class JNBepuPhysics
+ {
+
+ public static Dictionary Physics = new();
+
+ private UnityEngine.Vector3 _gravity = new (0,10,0);
+ public Simulation Simulation { get; protected set; }
+ public BufferPool BufferPool { get; private set; }
+
+ public List Shapes = new();
+
+
+ public JNBepuPhysics(int index = 0)
+ {
+ Debug.Log($"初始化物理引擎");
+ Physics[index] = this;
+ BufferPool = new BufferPool();
+ Simulation = Simulation.Create(BufferPool,new JNNarrowPhaseCallbacks(),new JNPoseIntegratorCallbacks(new Vector3(_gravity.x, -_gravity.y, _gravity.z)),new PositionFirstTimestepper());
+ }
+
+
+
+ //更新
+ public void OnUpdate(float dt)
+ {
+ Simulation.Timestep(dt);
+ Shapes.ForEach(shapes =>
+ {
+ shapes.OnPhysicsUpdate(dt);
+ });
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta
new file mode 100644
index 00000000..d9ddaa8f
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 99bf23b7fe9748f1a3e20d10104d3d85
+timeCreated: 1706683683
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities.meta
new file mode 100644
index 00000000..39357351
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7c60528953194e20af106b83b9e746de
+timeCreated: 1706683642
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs
new file mode 100644
index 00000000..41f3d1dc
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs
@@ -0,0 +1,134 @@
+using System;
+using BepuPhysics;
+using BepuPhysics.Collidables;
+using BepuPhysics.CollisionDetection;
+using BepuPhysics.Constraints;
+using System.Runtime.CompilerServices;
+using System.Numerics;
+using BepuUtilities;
+
+namespace Plugins.JNGame.BepuPhysics.Utilities
+{
+ public struct JNPoseIntegratorCallbacks : IPoseIntegratorCallbacks
+ {
+ ///
+ /// Gravity to apply to dynamic bodies in the simulation.
+ ///
+ public Vector3 Gravity;
+ ///
+ /// Fraction of dynamic body linear velocity to remove per unit of time. Values range from 0 to 1. 0 is fully undamped, while values very close to 1 will remove most velocity.
+ ///
+ public float LinearDamping;
+ ///
+ /// Fraction of dynamic body angular velocity to remove per unit of time. Values range from 0 to 1. 0 is fully undamped, while values very close to 1 will remove most velocity.
+ ///
+ public float AngularDamping;
+
+ Vector3 gravityDt;
+ float linearDampingDt;
+ float angularDampingDt;
+
+ public AngularIntegrationMode AngularIntegrationMode => AngularIntegrationMode.Nonconserving;
+
+ public void Initialize(Simulation simulation)
+ {
+ //In this demo, we don't need to initialize anything.
+ //If you had a simulation with per body gravity stored in a CollidableProperty or something similar, having the simulation provided in a callback can be helpful.
+ }
+
+ ///
+ /// Creates a new set of simple callbacks for the demos.
+ ///
+ /// Gravity to apply to dynamic bodies in the simulation.
+ /// Fraction of dynamic body linear velocity to remove per unit of time. Values range from 0 to 1. 0 is fully undamped, while values very close to 1 will remove most velocity.
+ /// Fraction of dynamic body angular velocity to remove per unit of time. Values range from 0 to 1. 0 is fully undamped, while values very close to 1 will remove most velocity.
+ public JNPoseIntegratorCallbacks(Vector3 gravity, float linearDamping = .03f, float angularDamping = .03f) : this()
+ {
+ Gravity = gravity;
+ LinearDamping = linearDamping;
+ AngularDamping = angularDamping;
+ }
+
+ public void PrepareForIntegration(float dt)
+ {
+ //No reason to recalculate gravity * dt for every body; just cache it ahead of time.
+ gravityDt = Gravity * dt;
+ //Since these callbacks don't use per-body damping values, we can precalculate everything.
+ linearDampingDt = MathF.Pow(MathHelper.Clamp(1 - LinearDamping, 0, 1), dt);
+ angularDampingDt = MathF.Pow(MathHelper.Clamp(1 - AngularDamping, 0, 1), dt);
+ }
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public void IntegrateVelocity(int bodyIndex, in RigidPose pose, in BodyInertia localInertia, int workerIndex, ref BodyVelocity velocity)
+ {
+ //Note that we avoid accelerating kinematics. Kinematics are any body with an inverse mass of zero (so a mass of ~infinity). No force can move them.
+ if (localInertia.InverseMass > 0)
+ {
+ velocity.Linear = (velocity.Linear + gravityDt) * linearDampingDt;
+ velocity.Angular = velocity.Angular * angularDampingDt;
+ }
+ //Implementation sidenote: Why aren't kinematics all bundled together separately from dynamics to avoid this per-body condition?
+ //Because kinematics can have a velocity- that is what distinguishes them from a static object. The solver must read velocities of all bodies involved in a constraint.
+ //Under ideal conditions, those bodies will be near in memory to increase the chances of a cache hit. If kinematics are separately bundled, the the number of cache
+ //misses necessarily increases. Slowing down the solver in order to speed up the pose integrator is a really, really bad trade, especially when the benefit is a few ALU ops.
+
+ //Note that you CAN technically modify the pose in IntegrateVelocity by directly accessing it through the Simulation.Bodies.ActiveSet.Poses, it just requires a little care and isn't directly exposed.
+ //If the PositionFirstTimestepper is being used, then the pose integrator has already integrated the pose.
+ //If the PositionLastTimestepper or SubsteppingTimestepper are in use, the pose has not yet been integrated.
+ //If your pose modification depends on the order of integration, you'll want to take this into account.
+
+ //This is also a handy spot to implement things like position dependent gravity or per-body damping.
+ }
+
+ }
+
+ public struct JNNarrowPhaseCallbacks : INarrowPhaseCallbacks
+ {
+ public SpringSettings ContactSpringiness;
+
+ public void Initialize(Simulation simulation)
+ {
+ //Use a default if the springiness value wasn't initialized.
+ if (ContactSpringiness.AngularFrequency == 0 && ContactSpringiness.TwiceDampingRatio == 0)
+ ContactSpringiness = new SpringSettings(30, 1);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool AllowContactGeneration(int workerIndex, CollidableReference a, CollidableReference b)
+ {
+ //While the engine won't even try creating pairs between statics at all, it will ask about kinematic-kinematic pairs.
+ //Those pairs cannot emit constraints since both involved bodies have infinite inertia. Since most of the demos don't need
+ //to collect information about kinematic-kinematic pairs, we'll require that at least one of the bodies needs to be dynamic.
+ return a.Mobility == CollidableMobility.Dynamic || b.Mobility == CollidableMobility.Dynamic;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool AllowContactGeneration(int workerIndex, CollidablePair pair, int childIndexA, int childIndexB)
+ {
+ return true;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool ConfigureContactManifold(int workerIndex, CollidablePair pair,
+ ref TManifold manifold, out PairMaterialProperties pairMaterial)
+ where TManifold : struct, IContactManifold
+ {
+ pairMaterial.FrictionCoefficient = 1f;
+ pairMaterial.MaximumRecoveryVelocity = 2f;
+ pairMaterial.SpringSettings = ContactSpringiness;
+ return true;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool ConfigureContactManifold(int workerIndex, CollidablePair pair, int childIndexA, int childIndexB,
+ ref ConvexContactManifold manifold)
+ {
+ return true;
+ }
+
+ public void Dispose()
+ {
+
+ }
+ }
+
+}
diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs.meta
new file mode 100644
index 00000000..bc66f79f
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 12d59c2959b546898001fd2ee9c2533d
+timeCreated: 1706683943
\ No newline at end of file
diff --git a/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs b/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs
index b9581708..c607c376 100644
--- a/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs
+++ b/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs
@@ -80,7 +80,7 @@ namespace Plugins.JNGame.Sync.Frame
public override Task OnInit()
{
- Physics.simulationMode = SimulationMode.Script;
+ Physics.autoSimulation = false;
Physics.autoSyncTransforms = false;
this.OnReset();
return Task.CompletedTask;
@@ -110,6 +110,7 @@ namespace Plugins.JNGame.Sync.Frame
this._nLocalRunFrame = 0;
this.dtTotal = 0;
this.dtInputTotal = 0;
+ this._isRequestServerData = false;
Physics.SyncTransforms();
EventDispatcher.Event.Dispatch(JNSyncFrameEvent.CREATE);
diff --git a/JNFrame/Assets/Plugins/JNGame/UI.meta b/JNFrame/Assets/Plugins/JNGame/UI.meta
new file mode 100644
index 00000000..80f19bbe
--- /dev/null
+++ b/JNFrame/Assets/Plugins/JNGame/UI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be2eae9924066194f8328fd4f593a63a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs b/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs
index 50842028..a2b125bb 100644
--- a/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs
+++ b/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs
@@ -42,7 +42,7 @@ namespace Plugins.JNGame.Util
public async UniTask Post(string url,TA data)
{
- var request = UnityWebRequest.PostWwwForm($"{this._config.BaseURL}/{url}",JsonConvert.SerializeObject(data));
+ var request = UnityWebRequest.Post($"{this._config.BaseURL}/{url}",JsonConvert.SerializeObject(data));
return JsonConvert.DeserializeObject((await request.SendWebRequest()).downloadHandler.text);
}
diff --git a/JNFrame/Assets/Resources/PerformanceTestRunInfo.json b/JNFrame/Assets/Resources/PerformanceTestRunInfo.json
new file mode 100644
index 00000000..c818df77
--- /dev/null
+++ b/JNFrame/Assets/Resources/PerformanceTestRunInfo.json
@@ -0,0 +1 @@
+{"TestSuite":"","Date":0,"Player":{"Development":false,"ScreenWidth":0,"ScreenHeight":0,"ScreenRefreshRate":0,"Fullscreen":false,"Vsync":0,"AntiAliasing":0,"Batchmode":false,"RenderThreadingMode":"MultiThreaded","GpuSkinning":true,"Platform":"","ColorSpace":"","AnisotropicFiltering":"","BlendWeights":"","GraphicsApi":"","ScriptingBackend":"Mono2x","AndroidTargetSdkVersion":"AndroidApiLevelAuto","AndroidBuildSystem":"Gradle","BuildTarget":"Android","StereoRenderingPath":"MultiPass"},"Hardware":{"OperatingSystem":"","DeviceModel":"","DeviceName":"","ProcessorType":"","ProcessorCount":0,"GraphicsDeviceName":"","SystemMemorySizeMB":0},"Editor":{"Version":"2022.3.16f1c1","Branch":"2022.3/china_unity/release","Changeset":"2f3f1b3bde89","Date":1706067553},"Dependencies":["com.unity.ai.navigation@1.1.5","com.unity.collab-proxy@2.2.0","com.unity.feature.development@1.0.1","com.unity.ide.rider@3.0.27","com.unity.ide.visualstudio@2.0.22","com.unity.ide.vscode@1.2.5","com.unity.physics@1.0.16","com.unity.test-framework@1.1.33","com.unity.textmeshpro@3.0.6","com.unity.timeline@1.7.6","com.unity.ugui@1.0.0","com.unity.visualscripting@1.9.1","com.unity.modules.ai@1.0.0","com.unity.modules.androidjni@1.0.0","com.unity.modules.animation@1.0.0","com.unity.modules.assetbundle@1.0.0","com.unity.modules.audio@1.0.0","com.unity.modules.cloth@1.0.0","com.unity.modules.director@1.0.0","com.unity.modules.imageconversion@1.0.0","com.unity.modules.imgui@1.0.0","com.unity.modules.jsonserialize@1.0.0","com.unity.modules.particlesystem@1.0.0","com.unity.modules.screencapture@1.0.0","com.unity.modules.terrain@1.0.0","com.unity.modules.terrainphysics@1.0.0","com.unity.modules.tilemap@1.0.0","com.unity.modules.ui@1.0.0","com.unity.modules.uielements@1.0.0","com.unity.modules.umbra@1.0.0","com.unity.modules.unityanalytics@1.0.0","com.unity.modules.unitywebrequest@1.0.0","com.unity.modules.unitywebrequestassetbundle@1.0.0","com.unity.modules.unitywebrequestaudio@1.0.0","com.unity.modules.unitywebrequesttexture@1.0.0","com.unity.modules.unitywebrequestwww@1.0.0","com.unity.modules.vehicles@1.0.0","com.unity.modules.video@1.0.0","com.unity.modules.vr@1.0.0","com.unity.modules.wind@1.0.0","com.unity.modules.xr@1.0.0","com.unity.modules.physics@1.0.0","com.unity.modules.subsystems@1.0.0","com.unity.modules.physics2d@1.0.0","com.unity.ext.nunit@1.0.6","com.unity.burst@1.8.11","com.unity.collections@2.1.4","com.unity.entities@1.0.16","com.unity.mathematics@1.2.6","com.unity.editorcoroutines@1.0.0","com.unity.performance.profile-analyzer@1.2.2","com.unity.testtools.codecoverage@1.2.4","com.unity.serialization@3.1.1","com.unity.test-framework.performance@3.0.2","com.unity.nuget.mono-cecil@1.11.4","com.unity.scriptablebuildpipeline@1.21.21","com.unity.profiling.core@1.0.2","com.unity.settings-manager@2.0.1"],"Results":[]}
\ No newline at end of file
diff --git a/JNFrame/Assets/Resources/PerformanceTestRunInfo.json.meta b/JNFrame/Assets/Resources/PerformanceTestRunInfo.json.meta
new file mode 100644
index 00000000..d3ab54a6
--- /dev/null
+++ b/JNFrame/Assets/Resources/PerformanceTestRunInfo.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f7ec362023f3eff42a3eaff69a58fc26
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Resources/PerformanceTestRunSettings.json b/JNFrame/Assets/Resources/PerformanceTestRunSettings.json
new file mode 100644
index 00000000..49438ae1
--- /dev/null
+++ b/JNFrame/Assets/Resources/PerformanceTestRunSettings.json
@@ -0,0 +1 @@
+{"MeasurementCount":-1}
\ No newline at end of file
diff --git a/JNFrame/Assets/Resources/PerformanceTestRunSettings.json.meta b/JNFrame/Assets/Resources/PerformanceTestRunSettings.json.meta
new file mode 100644
index 00000000..4e8074f9
--- /dev/null
+++ b/JNFrame/Assets/Resources/PerformanceTestRunSettings.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 27541f44f94c2bd4a93d3938c97216ff
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 1.prefab b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 1.prefab
index 482db5f0..0fb0b99f 100644
--- a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 1.prefab
+++ b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 1.prefab
@@ -11,8 +11,7 @@ GameObject:
- component: {fileID: 664841175096201691}
- component: {fileID: 664841175096201690}
- component: {fileID: 664841175096201689}
- - component: {fileID: 574656058432384995}
- - component: {fileID: 2113456302054558747}
+ - component: {fileID: 923251041587902903}
m_Layer: 0
m_Name: Sphere 1
m_TagString: Untagged
@@ -85,51 +84,17 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
---- !u!135 &574656058432384995
-SphereCollider:
+--- !u!114 &923251041587902903
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
- m_Material: {fileID: 0}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_LayerOverridePriority: 0
- m_IsTrigger: 0
- m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 3
- m_Radius: 0.5
- m_Center: {x: 0, y: 0, z: 0}
---- !u!54 &2113456302054558747
-Rigidbody:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664841175096201695}
- serializedVersion: 4
- m_Mass: 1
- m_Drag: 0
- m_AngularDrag: 0.05
- m_CenterOfMass: {x: 0, y: 0, z: 0}
- m_InertiaTensor: {x: 1, y: 1, z: 1}
- m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ImplicitCom: 1
- m_ImplicitTensor: 1
- m_UseGravity: 1
- m_IsKinematic: 0
- m_Interpolate: 0
- m_Constraints: 0
- m_CollisionDetection: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 98c11bfd0d424f98a6634403fca61c34, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ worldIndex: 0
+ isStatic: 0
diff --git a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 2.prefab b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 2.prefab
index e5f45367..2824d375 100644
--- a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 2.prefab
+++ b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere 2.prefab
@@ -11,8 +11,7 @@ GameObject:
- component: {fileID: 664841175096201691}
- component: {fileID: 664841175096201690}
- component: {fileID: 664841175096201689}
- - component: {fileID: -289448904210163489}
- - component: {fileID: -1515477822795860743}
+ - component: {fileID: 1943898370675082398}
m_Layer: 0
m_Name: Sphere 2
m_TagString: Untagged
@@ -85,51 +84,17 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
---- !u!54 &-289448904210163489
-Rigidbody:
+--- !u!114 &1943898370675082398
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
- serializedVersion: 4
- m_Mass: 1
- m_Drag: 0
- m_AngularDrag: 0.05
- m_CenterOfMass: {x: 0, y: 0, z: 0}
- m_InertiaTensor: {x: 1, y: 1, z: 1}
- m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ImplicitCom: 1
- m_ImplicitTensor: 1
- m_UseGravity: 1
- m_IsKinematic: 0
- m_Interpolate: 0
- m_Constraints: 0
- m_CollisionDetection: 0
---- !u!135 &-1515477822795860743
-SphereCollider:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664841175096201695}
- m_Material: {fileID: 0}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_LayerOverridePriority: 0
- m_IsTrigger: 0
- m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 3
- m_Radius: 0.5
- m_Center: {x: 0, y: 0, z: 0}
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 98c11bfd0d424f98a6634403fca61c34, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ worldIndex: 0
+ isStatic: 0
diff --git a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere.prefab b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere.prefab
index ca2cb04c..9ccc4cca 100644
--- a/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere.prefab
+++ b/JNFrame/Assets/Resources/Prefab/Mode/WorldSceneMode/Sphere.prefab
@@ -11,8 +11,7 @@ GameObject:
- component: {fileID: 664841175096201691}
- component: {fileID: 664841175096201690}
- component: {fileID: 664841175096201689}
- - component: {fileID: 5459639529223246069}
- - component: {fileID: 6482499274382216103}
+ - component: {fileID: -4506523599465892499}
m_Layer: 0
m_Name: Sphere
m_TagString: Untagged
@@ -85,51 +84,17 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
---- !u!135 &5459639529223246069
-SphereCollider:
+--- !u!114 &-4506523599465892499
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664841175096201695}
- m_Material: {fileID: 0}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_LayerOverridePriority: 0
- m_IsTrigger: 0
- m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 3
- m_Radius: 0.5
- m_Center: {x: 0, y: 0, z: 0}
---- !u!54 &6482499274382216103
-Rigidbody:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664841175096201695}
- serializedVersion: 4
- m_Mass: 1
- m_Drag: 0
- m_AngularDrag: 0.05
- m_CenterOfMass: {x: 0, y: 0, z: 0}
- m_InertiaTensor: {x: 1, y: 1, z: 1}
- m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
- m_IncludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ExcludeLayers:
- serializedVersion: 2
- m_Bits: 0
- m_ImplicitCom: 1
- m_ImplicitTensor: 1
- m_UseGravity: 1
- m_IsKinematic: 0
- m_Interpolate: 0
- m_Constraints: 0
- m_CollisionDetection: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 98c11bfd0d424f98a6634403fca61c34, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ worldIndex: 0
+ isStatic: 0
diff --git a/JNFrame/Assets/Samples/Unity Physics.meta b/JNFrame/Assets/Samples/Unity Physics.meta
deleted file mode 100644
index f77bf165..00000000
--- a/JNFrame/Assets/Samples/Unity Physics.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 19f77faebdc567b488940d510d374f17
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16.meta
deleted file mode 100644
index 0ef7607e..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 63defbb40447be042a23a204dbabfea1
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring.meta
deleted file mode 100644
index 91d8ee9b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 05b2d911c4f5b3942a29cd70d1ac526b
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor.meta
deleted file mode 100644
index 67dceffa..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 924801193ae5c634d814f3e2efdf5e5c
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs
deleted file mode 100644
index 22def83c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Unity.Physics.Custom.EditModeTests")]
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs.meta
deleted file mode 100644
index fc13560c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/AssemblyInfo.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 016d8a3094fcbdf44961b10be9ac5c56
-timeCreated: 1680116734
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools.meta
deleted file mode 100644
index 3ea96472..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: df54d2bd08525d5449ae01cf06c0117f
-timeCreated: 1678291379
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledBoxBoundsHandle.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledBoxBoundsHandle.cs
deleted file mode 100644
index 737e766b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledBoxBoundsHandle.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- class BeveledBoxBoundsHandle : BoxBoundsHandle
- {
- public float bevelRadius
- {
- get => math.min(m_BevelRadius, math.cmin(GetSize()) * 0.5f);
- set
- {
- if (!m_IsDragging)
- m_BevelRadius = math.max(0f, value);
- }
- }
- float m_BevelRadius = ConvexHullGenerationParameters.Default.BevelRadius;
- bool m_IsDragging = false;
-
- static PhysicsBoundsHandleUtility.Corner[] s_Corners = new PhysicsBoundsHandleUtility.Corner[8];
-
- public new void DrawHandle()
- {
- int prevHotControl = GUIUtility.hotControl;
- if (prevHotControl == 0)
- m_IsDragging = false;
- base.DrawHandle();
- int currHotcontrol = GUIUtility.hotControl;
- if (currHotcontrol != prevHotControl)
- m_IsDragging = currHotcontrol != 0;
- }
-
- protected override void DrawWireframe()
- {
- if (this.bevelRadius <= 0f)
- {
- base.DrawWireframe();
- return;
- }
-
- var cameraPosition = float3.zero;
- var cameraForward = new float3 { z = 1f };
- if (Camera.current != null)
- {
- cameraPosition = Camera.current.transform.position;
- cameraForward = Camera.current.transform.forward;
- }
-
- var bounds = new Bounds(this.center, this.size);
- bool isCameraInsideBox = Camera.current != null && bounds.Contains(Handles.inverseMatrix.MultiplyPoint(cameraPosition));
- var bevelRadius = this.bevelRadius;
- var origin = (float3)this.center;
- var size = (float3)this.size;
-
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), bevelRadius, 0, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(-1f, 1f, 1f), bevelRadius, 0, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), bevelRadius, 1, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, -1f, 1f), bevelRadius, 1, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), bevelRadius, 2, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, -1f), bevelRadius, 2, axes, isCameraInsideBox);
-
- var corner = 0.5f * size - new float3(1f) * bevelRadius;
- var axisx = new float3(1f, 0f, 0f);
- var axisy = new float3(0f, 1f, 0f);
- var axisz = new float3(0f, 0f, 1f);
-
- // Since the geometry is transformed by Handles.matrix during rendering, we transform the camera position
- // by the inverse matrix so that the two-shaded wireframe will have the proper orientation.
- var invMatrix = Handles.inverseMatrix;
- cameraPosition = invMatrix.MultiplyPoint(cameraPosition);
- cameraForward = invMatrix.MultiplyVector(cameraForward);
- var cameraOrtho = Camera.current == null || Camera.current.orthographic;
-
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, 1f, -1f), quaternion.LookRotation(-axisz, axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[0]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, 1f, 1f), quaternion.LookRotation(-axisx, axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[1]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, 1f, 1f), quaternion.LookRotation(axisz, axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[2]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, 1f, -1f), quaternion.LookRotation(axisx, axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[3]);
-
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, -1f, -1f), quaternion.LookRotation(-axisx, -axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[4]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, -1f, 1f), quaternion.LookRotation(axisz, -axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[5]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, -1f, 1f), quaternion.LookRotation(axisx, -axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[6]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, -1f, -1f), quaternion.LookRotation(-axisz, -axisy), cameraPosition, cameraForward, cameraOrtho, bevelRadius, out s_Corners[7]);
-
- for (int i = 0; i < s_Corners.Length; i++)
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[i], true);
-
- // Draw the horizon edges between the corners
- for (int upA = 3, upB = 0; upB < 4; upA = upB, upB++)
- {
- int dnA = upA + 4;
- int dnB = upB + 4;
-
- if (s_Corners[upA].splitAxis[0].z && s_Corners[upB].splitAxis[1].x) Handles.DrawLine(s_Corners[upA].points[0], s_Corners[upB].points[1]);
- if (s_Corners[upA].splitAxis[1].z && s_Corners[upB].splitAxis[0].x) Handles.DrawLine(s_Corners[upA].points[1], s_Corners[upB].points[0]);
-
- if (s_Corners[dnA].splitAxis[0].x && s_Corners[dnB].splitAxis[1].z) Handles.DrawLine(s_Corners[dnA].points[0], s_Corners[dnB].points[1]);
- if (s_Corners[dnA].splitAxis[1].x && s_Corners[dnB].splitAxis[0].z) Handles.DrawLine(s_Corners[dnA].points[1], s_Corners[dnB].points[0]);
-
- if (s_Corners[dnA].splitAxis[0].y && s_Corners[upA].splitAxis[1].y) Handles.DrawLine(s_Corners[dnA].points[0], s_Corners[upA].points[1]);
- if (s_Corners[dnA].splitAxis[1].y && s_Corners[upA].splitAxis[0].y) Handles.DrawLine(s_Corners[dnA].points[1], s_Corners[upA].points[0]);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs
deleted file mode 100644
index 9844c86d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs
+++ /dev/null
@@ -1,350 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- class BeveledCylinderBoundsHandle : PrimitiveBoundsHandle
- {
- public float bevelRadius
- {
- get => math.min(m_BevelRadius, math.cmin(GetSize()) * 0.5f);
- set
- {
- if (!m_IsDragging)
- m_BevelRadius = math.max(0f, value);
- }
- }
-
- float m_BevelRadius = ConvexHullGenerationParameters.Default.BevelRadius;
-
- bool m_IsDragging = false;
-
- public float height
- {
- get => GetSize().z;
- set
- {
- var size = GetSize();
- size.z = math.max(0f, value);
- SetSize(size);
- }
- }
-
- public float radius
- {
- get
- {
- var size = (float3)GetSize();
- var diameter = 0f;
- // only consider size values on enabled axes
- if (IsAxisEnabled(0)) diameter = math.max(diameter, math.abs(size.x));
- else if (IsAxisEnabled(1)) diameter = math.max(diameter, math.abs(size.y));
- return diameter * 0.5f;
- }
- set
- {
- var size = (float3)GetSize();
- size.x = size.y = math.max(0f, value * 2.0f);
- SetSize(size);
- }
- }
-
- public int sideCount
- {
- get => m_SideCount;
- set
- {
- if (value == m_SideCount)
- return;
-
- m_SideCount = value;
-
- Array.Resize(ref m_TopPoints, m_SideCount * 2);
- Array.Resize(ref m_BottomPoints, m_SideCount * 2);
- Array.Resize(ref m_Corners, m_SideCount * 2);
- }
- }
- int m_SideCount;
-
- PhysicsBoundsHandleUtility.Corner[] m_Corners = Array.Empty();
- Vector3[] m_TopPoints = Array.Empty();
- Vector3[] m_BottomPoints = Array.Empty();
-
- public new void DrawHandle()
- {
- int prevHotControl = GUIUtility.hotControl;
- if (prevHotControl == 0)
- m_IsDragging = false;
- base.DrawHandle();
- int currHotcontrol = GUIUtility.hotControl;
- if (currHotcontrol != prevHotControl)
- m_IsDragging = currHotcontrol != 0;
- }
-
- protected override void DrawWireframe()
- {
- using (new Handles.DrawingScope(Handles.matrix))
- {
- var backfacedColor = PhysicsBoundsHandleUtility.GetStateColor(true);
- var frontfacedColor = Handles.color;
- bool isCameraInsideBox = false;
-
- var radius = this.radius;
- var bevelRadius = this.bevelRadius;
-
- var halfHeight = new float3(0f, 0f, height * 0.5f);
- var ctr = (float3)center;
- var halfAngleStep = math.PI / m_SideCount;
- var angleStep = 2f * halfAngleStep;
- const float kHalfPI = (math.PI * 0.5f);
-
- var bottom = ctr + halfHeight + new float3 { z = bevelRadius };
- var top = ctr - halfHeight - new float3 { z = bevelRadius };
- var tangent = new float3(1, 0, 0);
- var binormal = new float3(0, 1, 0);
- var topBackFaced = PhysicsBoundsHandleUtility.IsBackfaced(top, -tangent, binormal, axes, isCameraInsideBox);
- var bottomBackFaced = PhysicsBoundsHandleUtility.IsBackfaced(bottom, tangent, binormal, axes, isCameraInsideBox);
-
- var cameraCenter = float3.zero;
- var cameraForward = new float3 { z = 1f };
- if (Camera.current != null)
- {
- cameraCenter = Camera.current.transform.position;
- cameraForward = Camera.current.transform.forward;
- }
-
- // Since the geometry is transformed by Handles.matrix during rendering, we transform the camera position
- // by the inverse matrix so that the two-shaded wireframe will have the proper orientation.
- var invMatrix = Handles.inverseMatrix;
- cameraCenter = invMatrix.MultiplyPoint(cameraCenter);
- cameraForward = invMatrix.MultiplyVector(cameraForward);
- var cameraOrtho = Camera.current != null && Camera.current.orthographic;
-
- var noSides = (radius - bevelRadius) < PhysicsBoundsHandleUtility.kDistanceEpsilon;
- var up = new float3(0, 0, -1f);
-
- var t = ((m_SideCount - 2) * angleStep);
- var xyAngle0 = new float3(math.cos(t), math.sin(t), 0f);
-
- t = (m_SideCount - 1) * angleStep;
- var xyAngle1 = new float3(math.cos(t), math.sin(t), 0f);
- var sideways1 = new float3(math.cos(t + kHalfPI - halfAngleStep), math.sin(t + kHalfPI - halfAngleStep), 0f);
- var direction1 = new float3(math.cos(t + halfAngleStep), math.sin(t + halfAngleStep), 0f);
- var bevelGreaterThanZero = bevelRadius > 0f;
- var bevelLessThanCylinderRadius = bevelRadius < radius;
- for (var i = 0; i < m_SideCount; ++i)
- {
- t = i * angleStep;
- var xyAngle2 = new float3(math.cos(t), math.sin(t), 0f);
- var sideways2 = new float3(math.cos(t + kHalfPI - halfAngleStep), math.sin(t + kHalfPI - halfAngleStep), 0f);
- var direction2 = new float3(math.cos(t + halfAngleStep), math.sin(t + halfAngleStep), 0f);
-
- var offset0 = xyAngle0 * (radius - bevelRadius);
- var offset1 = xyAngle1 * (radius - bevelRadius);
- var offset2 = xyAngle2 * (radius - bevelRadius);
-
- var top1 = ctr + offset1 - (halfHeight - new float3 { z = bevelRadius });
- var bottom1 = ctr + offset1 + (halfHeight - new float3 { z = bevelRadius });
-
- var top2 = ctr + offset2 - (halfHeight - new float3 { z = bevelRadius });
- var bottom2 = ctr + offset2 + (halfHeight - new float3 { z = bevelRadius });
-
- var startOffset = direction1 * bevelRadius;
-
- if (bevelGreaterThanZero)
- {
- var upOffset = up * bevelRadius;
-
- // top/bottom caps
- if (bevelLessThanCylinderRadius)
- {
- Handles.color = topBackFaced ? backfacedColor : frontfacedColor;
- Handles.DrawLine(top1 + upOffset, top2 + upOffset);
-
- Handles.color = bottomBackFaced ? backfacedColor : frontfacedColor;
- Handles.DrawLine(bottom1 - upOffset, bottom2 - upOffset);
- }
-
- var currSideMidPoint = ctr + ((top1 + bottom1 + top2 + bottom2) * 0.25f) + startOffset;
- var currSideBackFaced = PhysicsBoundsHandleUtility.IsBackfaced(currSideMidPoint, up, sideways2, axes, isCameraInsideBox);
-
- Handles.color = currSideBackFaced ? backfacedColor : frontfacedColor;
- if (!noSides)
- {
- // Square side of bevelled cylinder
- Handles.DrawLine(top2 + startOffset, bottom2 + startOffset);
- Handles.DrawLine(bottom2 + startOffset, bottom1 + startOffset);
- Handles.DrawLine(bottom1 + startOffset, top1 + startOffset);
- Handles.DrawLine(top1 + startOffset, top2 + startOffset);
- }
- else
- {
- // Square side of bevelled cylinder, when squashed to a single line
- Handles.DrawLine(top2 + startOffset, bottom2 + startOffset);
- }
- }
- else
- {
- var top0 = ctr + offset0 - (halfHeight - new float3 { z = bevelRadius });
- var bottom0 = ctr + offset0 + (halfHeight - new float3 { z = bevelRadius });
-
- var prevMidPoint = ctr + ((top0 + top1 + bottom0 + bottom1) * 0.25f) + startOffset;
- var prevSideBackFaced = PhysicsBoundsHandleUtility.IsBackfaced(prevMidPoint, up, sideways1, axes, isCameraInsideBox);
-
- var currMidPoint = ctr + ((top1 + top2 + bottom1 + bottom2) * 0.25f) + startOffset;
- var currSideBackFaced = PhysicsBoundsHandleUtility.IsBackfaced(currMidPoint, up, sideways2, axes, isCameraInsideBox);
-
- // Square side of bevelled cylinder
- Handles.color = (currSideBackFaced && prevSideBackFaced) ? backfacedColor : frontfacedColor;
- Handles.DrawLine(bottom1 + startOffset, top1 + startOffset);
-
- Handles.color = (currSideBackFaced && topBackFaced) ? backfacedColor : frontfacedColor;
- Handles.DrawLine(top1 + startOffset, top2 + startOffset);
-
- Handles.color = (currSideBackFaced && bottomBackFaced) ? backfacedColor : frontfacedColor;
- Handles.DrawLine(bottom2 + startOffset, bottom1 + startOffset);
- }
-
- if (bevelGreaterThanZero)
- {
- Handles.color = frontfacedColor;
-
- var cornerIndex0 = i;
- var cornerIndex1 = i + m_SideCount;
- {
- var orientation = quaternion.LookRotation(xyAngle2, up);
- var cornerNormal = math.normalize(math.mul(orientation, new float3(0f, 1f, 1f)));
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(top2,
- new float3x3(direction1, up, direction2),
- cornerNormal, cameraCenter, cameraForward, cameraOrtho,
- bevelRadius, out m_Corners[cornerIndex0]);
- }
- {
- var orientation = quaternion.LookRotation(xyAngle2, -up);
- var cornerNormal = math.normalize(math.mul(orientation, new float3(0f, 1f, 1f)));
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(bottom2,
- new float3x3(direction2, -up, direction1),
- cornerNormal, cameraCenter, cameraForward, cameraOrtho,
- bevelRadius, out m_Corners[cornerIndex1]);
- }
- }
-
- direction1 = direction2;
- sideways1 = sideways2;
- xyAngle0 = xyAngle1;
- xyAngle1 = xyAngle2;
- }
-
- if (bevelGreaterThanZero)
- {
- Handles.color = frontfacedColor;
- for (int a = m_SideCount - 1, b = 0; b < m_SideCount; a = b, ++b)
- {
- var up0 = a;
- var dn0 = a + m_SideCount;
-
- var up1 = b;
- var dn1 = b + m_SideCount;
-
- // Side horizon on vertical curved edge
- if (m_Corners[up1].splitCount > 1 &&
- m_Corners[dn1].splitCount > 1)
- {
- if ((m_Corners[up1].splitAxis[0].y || m_Corners[up1].splitAxis[1].y) &&
- (m_Corners[dn1].splitAxis[0].y || m_Corners[dn1].splitAxis[1].y))
- {
- var point0 = m_Corners[up1].splitAxis[0].y ? m_Corners[up1].points[0] : m_Corners[up1].points[1];
- var point1 = m_Corners[dn1].splitAxis[0].y ? m_Corners[dn1].points[0] : m_Corners[dn1].points[1];
- Handles.DrawLine(point0, point1);
- }
- }
- // Top horizon on horizontal curved edge
- if (m_Corners[up0].splitCount > 1 &&
- m_Corners[up1].splitCount > 1)
- {
- if ((m_Corners[up0].splitAxis[0].x || m_Corners[up0].splitAxis[1].x) &&
- (m_Corners[up1].splitAxis[0].z || m_Corners[up1].splitAxis[1].z))
- {
- var point0 = m_Corners[up0].splitAxis[0].x ? m_Corners[up0].points[0] : m_Corners[up0].points[1];
- var point1 = m_Corners[up1].splitAxis[0].z ? m_Corners[up1].points[0] : m_Corners[up1].points[1];
- Handles.DrawLine(point0, point1);
- }
- }
- // Bottom horizon on horizontal curved edge
- if (m_Corners[dn0].splitCount > 1 &&
- m_Corners[dn1].splitCount > 1)
- {
- if ((m_Corners[dn0].splitAxis[0].z || m_Corners[dn0].splitAxis[1].z) &&
- (m_Corners[dn1].splitAxis[0].x || m_Corners[dn1].splitAxis[1].x))
- {
- var point0 = m_Corners[dn0].splitAxis[0].z ? m_Corners[dn0].points[0] : m_Corners[dn0].points[1];
- var point1 = m_Corners[dn1].splitAxis[0].x ? m_Corners[dn1].points[0] : m_Corners[dn1].points[1];
- Handles.DrawLine(point0, point1);
- }
- }
- }
-
- for (var i = 0; i < m_Corners.Length; ++i)
- PhysicsBoundsHandleUtility.DrawCorner(m_Corners[i], new bool3(true, true, !noSides));
- }
- }
- }
-
- protected override Bounds OnHandleChanged(HandleDirection handle, Bounds boundsOnClick, Bounds newBounds)
- {
- const int k_DirectionX = 0;
- const int k_DirectionY = 1;
- const int k_DirectionZ = 2;
-
- var changedAxis = k_DirectionX;
- var otherRadiusAxis = k_DirectionY;
- switch (handle)
- {
- case HandleDirection.NegativeY:
- case HandleDirection.PositiveY:
- changedAxis = k_DirectionY;
- otherRadiusAxis = k_DirectionX;
- break;
- case HandleDirection.NegativeZ:
- case HandleDirection.PositiveZ:
- changedAxis = k_DirectionZ;
- break;
- }
-
- var upperBound = newBounds.max;
- var lowerBound = newBounds.min;
-
- var convexDiameter = 2f * bevelRadius;
-
- // ensure changed dimension cannot be made less than convex diameter
- if (upperBound[changedAxis] - lowerBound[changedAxis] < convexDiameter)
- {
- switch (handle)
- {
- case HandleDirection.PositiveX:
- case HandleDirection.PositiveY:
- case HandleDirection.PositiveZ:
- upperBound[changedAxis] = lowerBound[changedAxis] + convexDiameter;
- break;
- default:
- lowerBound[changedAxis] = upperBound[changedAxis] - convexDiameter;
- break;
- }
- }
-
- // ensure radius changes uniformly
- if (changedAxis != k_DirectionZ)
- {
- var rad = 0.5f * (upperBound[changedAxis] - lowerBound[changedAxis]);
-
- lowerBound[otherRadiusAxis] = center[otherRadiusAxis] - rad;
- upperBound[otherRadiusAxis] = center[otherRadiusAxis] + rad;
- }
-
- return new Bounds((upperBound + lowerBound) * 0.5f, upperBound - lowerBound);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs.meta
deleted file mode 100644
index 8e58a36a..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/BeveledCylinderBoundsHandle.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4f5e502486013d44c9cc7466f6c3bcd1
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs
deleted file mode 100644
index f9b601da..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs
+++ /dev/null
@@ -1,343 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEngine;
-using static UnityEditor.IMGUI.Controls.PrimitiveBoundsHandle;
-
-namespace Unity.Physics.Editor
-{
- static class PhysicsBoundsHandleUtility
- {
- internal const float kBackfaceAlphaMultiplier = 0.2f;
- const float kDegreeEpsilon = 0.001f;
- public const float kDistanceEpsilon = 0.0001f;
-
- public static bool IsBackfaced(float3 localPos, float3 localTangent, float3 localBinormal, Axes axes, bool isCameraInsideBox)
- {
- // if inside the box then ignore back facing alpha multiplier (otherwise all handles will look disabled)
- if (isCameraInsideBox || axes != Axes.All)
- return false;
-
- // use tangent and binormal to calculate normal in case handle matrix is skewed
- float3 worldTangent = math.normalize(Handles.matrix.MultiplyVector(localTangent));
- float3 worldBinormal = math.normalize(Handles.matrix.MultiplyVector(localBinormal));
- float3 worldDir = math.normalize(math.cross(worldTangent, worldBinormal));
-
- // adjust color if handle is back facing
- float cosV;
-
- var currentCamera = Camera.current;
- if (currentCamera != null && !currentCamera.orthographic)
- {
- float3 cameraPos = currentCamera.transform.position;
- float3 worldPos = Handles.matrix.MultiplyPoint(localPos);
- cosV = math.dot(math.normalize(cameraPos - worldPos), worldDir);
- }
- else
- {
- float3 cameraForward = currentCamera == null ? Vector3.forward : currentCamera.transform.forward;
- cosV = math.dot(-cameraForward, worldDir);
- }
-
- return cosV < -0.0001f;
- }
-
- public static Color GetStateColor(bool isBackfaced)
- {
- float alphaMultiplier = isBackfaced ? kBackfaceAlphaMultiplier : 1f;
- return Handles.color * new Color(1f, 1f, 1f, alphaMultiplier);
- }
-
- static void AdjustMidpointHandleColor(bool isBackfaced)
- {
- Handles.color = GetStateColor(isBackfaced);
- }
-
- static readonly Vector3[] s_FacePoints = new Vector3[8];
- static readonly Vector3[] s_LinePoints = new Vector3[2];
-
- static readonly int[] k_NextAxis = { 1, 2, 0 };
-
- public static void DrawFace(float3 center, float3 size, float cornerRadius, int normalAxis, Axes axes, bool isCameraInsideBox)
- {
- // 0 = 0 1 2
- // 1 = 1 2 0
- // 2 = 2 0 1
-
- int a = normalAxis;
- int b = k_NextAxis[a];
- int c = k_NextAxis[b];
-
- cornerRadius = math.abs(cornerRadius);
- size *= 0.5f;
- var normal = new float3 { [a] = size[a] };
- var ctr = center + normal;
- size -= new float3(cornerRadius);
-
- // check if our face is a point
- if (math.abs(size[c]) < kDistanceEpsilon &&
- math.abs(size[b]) < kDistanceEpsilon)
- return;
-
- Vector3[] points;
- // check if our face is a line or not
- if (math.abs(size[c]) >= kDistanceEpsilon &&
- math.abs(size[b]) >= kDistanceEpsilon)
- {
- var i = 0;
- s_FacePoints[i++] = ctr + new float3 { [b] = size[b], [c] = size[c] };
- s_FacePoints[i++] = ctr + new float3 { [b] = -size[b], [c] = size[c] };
-
- s_FacePoints[i++] = ctr + new float3 { [b] = -size[b], [c] = size[c] };
- s_FacePoints[i++] = ctr + new float3 { [b] = -size[b], [c] = -size[c] };
-
- s_FacePoints[i++] = ctr + new float3 { [b] = -size[b], [c] = -size[c] };
- s_FacePoints[i++] = ctr + new float3 { [b] = size[b], [c] = -size[c] };
-
- s_FacePoints[i++] = ctr + new float3 { [b] = size[b], [c] = -size[c] };
- s_FacePoints[i++] = ctr + new float3 { [b] = size[b], [c] = size[c] };
- points = s_FacePoints;
- }
- else if (math.abs(size[c]) >= kDistanceEpsilon)
- {
- var i = 0;
- s_LinePoints[i++] = ctr + new float3 { [b] = size[b], [c] = size[c] };
- s_LinePoints[i++] = ctr + new float3 { [b] = size[b], [c] = -size[c] };
- points = s_LinePoints;
- }
- else
- {
- var i = 0;
- s_LinePoints[i++] = ctr + new float3 { [c] = size[c], [b] = size[b] };
- s_LinePoints[i++] = ctr + new float3 { [c] = size[c], [b] = -size[b] };
- points = s_LinePoints;
- }
-
- float3 tangent, biNormal;
- if (size[c] > 0)
- {
- tangent = math.cross(normal, math.normalizesafe(new float3 { [c] = size[c] }));
- biNormal = math.cross(normal, tangent);
- }
- else
- {
- tangent = math.cross(normal, math.normalizesafe(new float3 { [b] = size[b] }));
- biNormal = math.cross(normal, tangent);
- }
-
- using (new Handles.DrawingScope(Handles.color))
- {
- AdjustMidpointHandleColor(IsBackfaced(ctr, tangent, biNormal, axes, isCameraInsideBox));
- Handles.DrawLines(points);
- }
- }
-
- public struct Corner
- {
- public float3 angle;
- public float3x2 intersections;
- public float3x2 points;
- public float3x3 axes;
- public float3x3 normals;
- public bool3x2 splitAxis;
- public int splitCount;
-
- public float3 position;
- public float radius;
- public bool isBackFaced;
-
- public float3 cameraForward;
- }
-
- public static void CalculateCornerHorizon(float3 cornerPosition, quaternion orientation, float3 cameraCenter, float3 cameraForward, bool cameraOrtho, float radius, out Corner corner)
- {
- var axisx = new float3(1f, 0f, 0f);
- var axisy = new float3(0f, 1f, 0f);
- var axisz = new float3(0f, 0f, 1f);
-
- // a vector pointing away from the center of the corner
- var cornerNormal = math.normalize(math.mul(orientation, new float3(1f, 1f, 1f)));
-
- var axes = math.mul(new float3x3(orientation), new float3x3(axisx, axisy, axisz));
- CalculateCornerHorizon(cornerPosition,
- axes,
- cornerNormal,
- cameraCenter, cameraForward, cameraOrtho,
- radius, out corner);
- }
-
- public static void CalculateCornerHorizon(float3 cornerPosition, float3x3 axes, float3 cornerNormal, float3 cameraCenter, float3 cameraForward, bool cameraOrtho, float radius, out Corner corner)
- {
- var cameraToCenter = cornerPosition - cameraCenter; // vector from camera to center
- var sqrRadius = radius * radius;
- var sqrDistCameraToCenter = math.lengthsq(cameraToCenter);
- var sqrOffset = (sqrRadius * sqrRadius / sqrDistCameraToCenter); // squared distance from actual center to drawn disc center
-
- if (!cameraOrtho)
- cameraForward = cameraToCenter;
-
- var normals = new float3x3
- {
- c0 = math.normalize(math.cross(axes[1], axes[2])),
- c1 = math.normalize(math.cross(axes[2], axes[0])),
- c2 = math.normalize(math.cross(axes[0], axes[1]))
- };
-
- corner = new Corner
- {
- angle = new float3(
- Vector3.Angle(axes[0], axes[1]),
- Vector3.Angle(axes[1], axes[2]),
- Vector3.Angle(axes[2], axes[0])
- ),
- intersections = default,
- points = default,
- splitAxis = default,
-
- axes = axes,
- normals = normals,
-
- position = cornerPosition,
- radius = radius,
- cameraForward = cameraForward,
- isBackFaced = math.dot(cornerNormal, cameraForward) > 0,
- splitCount = 0
- };
-
- if (math.abs(sqrDistCameraToCenter) <= sqrRadius)
- return;
-
- for (int n = 0, sign = -1; n < 2; n++, sign += 2)
- {
- for (int i = 0; i < 3; i++)
- {
- var axis1 = normals[i] * sign;
- var axis2 = axes[(i + 1) % 3] * sign;
- var axis3 = axes[(i + 2) % 3] * sign;
-
- var Q = Vector3.Angle(cameraForward, axis1);
- var f = math.tan(math.radians(90 - math.min(Q, 180 - Q)));
- var g = sqrOffset + f * f * sqrOffset;
- if (g >= sqrRadius)
- continue;
-
- var e = math.degrees(math.asin(math.sqrt(g) / radius));
- var vectorToPointOnHorizon = Quaternion.AngleAxis(e, axis1) * math.normalize(math.cross(axis1, cameraForward));
-
- vectorToPointOnHorizon = math.normalize(Vector3.ProjectOnPlane(vectorToPointOnHorizon, axis1));
-
- var intersectionDirection = vectorToPointOnHorizon;
- var angle1 = Vector3.SignedAngle(axis2, intersectionDirection, axis1);
- var angle2 = Vector3.SignedAngle(axis3, intersectionDirection, axis1);
-
- if (angle1 <= 0 || angle2 >= 0)
- continue;
-
- var point = corner.position + (float3)(intersectionDirection * radius);
-
- if (corner.splitCount < 2)
- {
- corner.splitAxis[corner.splitCount][i] = true;
- corner.intersections[corner.splitCount] = intersectionDirection;
- corner.points[corner.splitCount] = point;
-
- corner.splitCount++;
- }
- }
- }
-
- if (!math.any(corner.splitAxis[0]) &&
- !math.any(corner.splitAxis[1]))
- {
- corner.splitCount = 0;
- corner.splitAxis[0] = false;
- corner.splitAxis[1] = false;
- }
- }
-
- public static void DrawCorner(Corner corner, bool3 showAxis)
- {
- var color = Handles.color;
- var axes = corner.axes;
- var intersections = corner.intersections;
- var normals = corner.normals;
- var origin = corner.position;
- var radius = corner.radius;
-
- if (corner.splitCount <= 1)
- {
- AdjustMidpointHandleColor(corner.isBackFaced);
- if (showAxis[0]) Handles.DrawWireArc(origin, normals[0], axes[1], corner.angle[1], radius);
- if (showAxis[1]) Handles.DrawWireArc(origin, normals[1], axes[2], corner.angle[2], radius);
- if (showAxis[2]) Handles.DrawWireArc(origin, normals[2], axes[0], corner.angle[0], radius);
- }
- else
- {
- var angleLength = Vector3.SignedAngle(Vector3.ProjectOnPlane(intersections[0], corner.cameraForward),
- Vector3.ProjectOnPlane(intersections[1], corner.cameraForward), corner.cameraForward);
- bool reversePolarity = angleLength < 0;
- if (reversePolarity)
- Handles.DrawWireArc(origin, corner.cameraForward, corner.points[1] - origin, -angleLength, radius);
- else
- Handles.DrawWireArc(origin, corner.cameraForward, corner.points[0] - origin, angleLength, radius);
-
-
- var backfacedColor = GetStateColor(true);
-
- var axesBackfaced = new bool3(math.length(intersections[0] - axes[0]) < kDistanceEpsilon || math.length(intersections[1] - axes[0]) < kDistanceEpsilon,
- math.length(intersections[0] - axes[1]) < kDistanceEpsilon || math.length(intersections[1] - axes[1]) < kDistanceEpsilon,
- math.length(intersections[0] - axes[2]) < kDistanceEpsilon || math.length(intersections[1] - axes[2]) < kDistanceEpsilon);
-
- var color1 = reversePolarity ? color : backfacedColor;
- var color2 = reversePolarity ? backfacedColor : color;
-
- for (int A = 1, B = 2, C = 0; C < 3; A = B, B = C, C++)
- {
- if (corner.splitAxis[0][C] == corner.splitAxis[1][C])
- {
- if (!axesBackfaced[A]) { angleLength = Vector3.Angle(intersections[0], axes[A]); axesBackfaced[A] = (angleLength corner.angle[C] - kDegreeEpsilon); }
- if (!axesBackfaced[B]) { angleLength = Vector3.Angle(intersections[1], axes[A]); axesBackfaced[B] = (angleLength corner.angle[C] - kDegreeEpsilon); }
- }
- else if (corner.splitAxis[0][C])
- {
- if (showAxis[C])
- {
- angleLength = Vector3.Angle(intersections[0], axes[A]);
- Handles.color = color1; Handles.DrawWireArc(origin, normals[C], intersections[0], -angleLength, radius);
- Handles.color = color2; Handles.DrawWireArc(origin, normals[C], intersections[0], corner.angle[A] - angleLength, radius);
- }
- axesBackfaced[A] = true;
- }
- else
- //if (corner.splitAxis[1][C])
- {
- if (showAxis[C])
- {
- angleLength = Vector3.Angle(intersections[1], axes[A]);
- Handles.color = color2; Handles.DrawWireArc(origin, normals[C], intersections[1], -angleLength, radius);
- Handles.color = color1; Handles.DrawWireArc(origin, normals[C], intersections[1], corner.angle[A] - angleLength, radius);
- }
- axesBackfaced[B] = true;
- }
- }
-
- // check for singularity
- if (math.all(axesBackfaced))
- axesBackfaced = corner.isBackFaced;
-
- for (int A = 1, B = 2, C = 0; C < 3; A = B, B = C, C++)
- {
- if (!showAxis[C])
- continue;
-
- if (corner.splitAxis[0][C] == corner.splitAxis[1][C])
- {
- Handles.color = (axesBackfaced[B] && axesBackfaced[A]) ? color1 : color2;
- Handles.DrawWireArc(origin, normals[C], axes[A], corner.angle[A], radius);
- }
- }
- }
- Handles.color = color;
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs.meta
deleted file mode 100644
index a4752253..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsBoundsHandleUtility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: e3c60d0e0940c3c419ec030b9685c622
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs
deleted file mode 100644
index 773b1905..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- class PhysicsCapsuleBoundsHandle : CapsuleBoundsHandle
- {
- static PhysicsBoundsHandleUtility.Corner[] s_Corners = new PhysicsBoundsHandleUtility.Corner[8];
-
- protected override void DrawWireframe()
- {
- if (this.radius <= 0f)
- {
- base.DrawWireframe();
- return;
- }
-
- var cameraPos = default(float3);
- var cameraFwd = new float3 { z = 1f };
- var cameraOrtho = true;
- if (Camera.current != null)
- {
- cameraPos = Camera.current.transform.position;
- cameraFwd = Camera.current.transform.forward;
- cameraOrtho = Camera.current.orthographic;
- }
-
- var size = new float3(this.radius * 2f, this.radius * 2f, height);
- var radius = this.radius;
- var origin = (float3)this.center;
- var bounds = new Bounds(this.center, size);
-
- // Since the geometry is transformed by Handles.matrix during rendering, we transform the camera position
- // by the inverse matrix so that the two-shaded wireframe will have the proper orientation.
- var invMatrix = Handles.inverseMatrix;
- var cameraCenter = (float3)invMatrix.MultiplyPoint(cameraPos);
- var cameraForward = (float3)invMatrix.MultiplyVector(cameraFwd);
-
- bool isCameraInsideBox = Camera.current != null
- && bounds.Contains(invMatrix.MultiplyPoint(cameraPos));
-
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), radius, 0, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(-1f, 1f, 1f), radius, 0, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), radius, 1, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, -1f, 1f), radius, 1, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, 1f), radius, 2, axes, isCameraInsideBox);
- PhysicsBoundsHandleUtility.DrawFace(origin, size * new float3(1f, 1f, -1f), radius, 2, axes, isCameraInsideBox);
-
- var corner = 0.5f * size - new float3(1f) * radius;
- var axisx = new float3(1f, 0f, 0f);
- var axisy = new float3(0f, 1f, 0f);
- var axisz = new float3(0f, 0f, 1f);
-
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, 1f, -1f), quaternion.LookRotation(-axisz, axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[0]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, 1f, 1f), quaternion.LookRotation(-axisx, axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[1]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, 1f, 1f), quaternion.LookRotation(axisz, axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[2]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, 1f, -1f), quaternion.LookRotation(axisx, axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[3]);
-
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, -1f, -1f), quaternion.LookRotation(-axisx, -axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[4]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(-1f, -1f, 1f), quaternion.LookRotation(axisz, -axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[5]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, -1f, 1f), quaternion.LookRotation(axisx, -axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[6]);
- PhysicsBoundsHandleUtility.CalculateCornerHorizon(origin + corner * new float3(1f, -1f, -1f), quaternion.LookRotation(-axisz, -axisy), cameraCenter, cameraForward, cameraOrtho, radius, out s_Corners[7]);
-
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[0], new bool3(false, true, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[3], new bool3(true, false, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[4], new bool3(true, false, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[7], new bool3(false, true, true));
-
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[1], new bool3(true, false, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[2], new bool3(false, true, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[5], new bool3(false, true, true));
- PhysicsBoundsHandleUtility.DrawCorner(s_Corners[6], new bool3(true, false, true));
-
- // Draw the horizon edges between the corners
- for (int upA = 3, upB = 0; upB < 4; upA = upB, upB++)
- {
- int dnA = upA + 4;
- int dnB = upB + 4;
-
- if (s_Corners[upA].splitAxis[0].z && s_Corners[upB].splitAxis[1].x) Handles.DrawLine(s_Corners[upA].points[0], s_Corners[upB].points[1]);
- if (s_Corners[upA].splitAxis[1].z && s_Corners[upB].splitAxis[0].x) Handles.DrawLine(s_Corners[upA].points[1], s_Corners[upB].points[0]);
-
- if (s_Corners[dnA].splitAxis[0].x && s_Corners[dnB].splitAxis[1].z) Handles.DrawLine(s_Corners[dnA].points[0], s_Corners[dnB].points[1]);
- if (s_Corners[dnA].splitAxis[1].x && s_Corners[dnB].splitAxis[0].z) Handles.DrawLine(s_Corners[dnA].points[1], s_Corners[dnB].points[0]);
-
- if (s_Corners[dnA].splitAxis[0].y && s_Corners[upA].splitAxis[1].y) Handles.DrawLine(s_Corners[dnA].points[0], s_Corners[upA].points[1]);
- if (s_Corners[dnA].splitAxis[1].y && s_Corners[upA].splitAxis[0].y) Handles.DrawLine(s_Corners[dnA].points[1], s_Corners[upA].points[0]);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs.meta
deleted file mode 100644
index 15f8f000..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsCapsuleBoundsHandle.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c1af170fae6badc40bb2ed5376031c6f
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs
deleted file mode 100644
index ea78fc01..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- class PhysicsSphereBoundsHandle : SphereBoundsHandle
- {
- protected override void DrawWireframe()
- {
- bool x = IsAxisEnabled(Axes.X);
- bool y = IsAxisEnabled(Axes.Y);
- bool z = IsAxisEnabled(Axes.Z);
-
- if (x && !y && !z)
- Handles.DrawLine(Vector3.right * radius, Vector3.left * radius);
- if (!x && y && !z)
- Handles.DrawLine(Vector3.up * radius, Vector3.down * radius);
- if (!x && !y && z)
- Handles.DrawLine(Vector3.forward * radius, Vector3.back * radius);
-
- const float kEpsilon = 0.000001F;
-
- if (radius > 0)
- {
- var frontfacedColor = Handles.color;
- var backfacedColor = Handles.color * new Color(1f, 1f, 1f, PhysicsBoundsHandleUtility.kBackfaceAlphaMultiplier);
- var discVisible = new bool[]
- {
- y && z,
- x && z,
- x && y
- };
- var discOrientations = new float3[]
- {
- Vector3.right,
- Vector3.up,
- Vector3.forward
- };
-
- // Since the geometry is transformed by Handles.matrix during rendering, we transform the camera position
- // by the inverse matrix so that the two-shaded wireframe will have the proper orientation.
- var invMatrix = Handles.inverseMatrix;
-
- var cameraCenter = Camera.current == null ? Vector3.zero : Camera.current.transform.position;
- var cameraToCenter = center - invMatrix.MultiplyPoint(cameraCenter); // vector from camera to center
- var sqrDistCameraToCenter = cameraToCenter.sqrMagnitude;
- var sqrRadius = radius * radius; // squared radius
- var isCameraOrthographic = Camera.current == null || Camera.current.orthographic;
- var sqrOffset = isCameraOrthographic ? 0 : (sqrRadius * sqrRadius / sqrDistCameraToCenter); // squared distance from actual center to drawn disc center
- var insideAmount = sqrOffset / sqrRadius;
- if (insideAmount < 1)
- {
- if (math.abs(sqrDistCameraToCenter) >= kEpsilon)
- {
- using (new Handles.DrawingScope(frontfacedColor))
- {
- if (isCameraOrthographic)
- {
- var horizonRadius = radius;
- var horizonCenter = center;
- Handles.DrawWireDisc(horizonCenter, cameraToCenter, horizonRadius);
- }
- else
- {
- var horizonRadius = math.sqrt(sqrRadius - sqrOffset);
- var horizonCenter = center - sqrRadius * cameraToCenter / sqrDistCameraToCenter;
- Handles.DrawWireDisc(horizonCenter, cameraToCenter, horizonRadius);
- }
- }
-
- var planeNormal = cameraToCenter.normalized;
- for (int i = 0; i < 3; i++)
- {
- if (!discVisible[i])
- continue;
-
- var discOrientation = discOrientations[i];
-
- var angleBetweenDiscAndNormal = math.acos(math.dot(discOrientation, planeNormal));
- angleBetweenDiscAndNormal = (math.PI * 0.5f) - math.min(angleBetweenDiscAndNormal, math.PI - angleBetweenDiscAndNormal);
-
- float f = math.tan(angleBetweenDiscAndNormal);
- float g = math.sqrt(sqrOffset + f * f * sqrOffset) / radius;
- if (g < 1)
- {
- var angleToHorizon = math.degrees(math.asin(g));
- var discTangent = math.cross(discOrientation, planeNormal);
- var vectorToPointOnHorizon = Quaternion.AngleAxis(angleToHorizon, discOrientation) * discTangent;
- var horizonArcLength = (90 - angleToHorizon) * 2.0f;
-
- using (new Handles.DrawingScope(frontfacedColor))
- Handles.DrawWireArc(center, discOrientation, vectorToPointOnHorizon, horizonArcLength, radius);
- using (new Handles.DrawingScope(backfacedColor))
- Handles.DrawWireArc(center, discOrientation, vectorToPointOnHorizon, horizonArcLength - 360, radius);
- }
- else
- {
- using (new Handles.DrawingScope(backfacedColor))
- Handles.DrawWireDisc(center, discOrientation, radius);
- }
- }
- }
- }
- else
- {
- using (new Handles.DrawingScope(backfacedColor))
- {
- for (int i = 0; i < 3; i++)
- {
- var discOrientation = discOrientations[i];
- Handles.DrawWireDisc(center, discOrientation, radius);
- }
- }
- }
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs.meta
deleted file mode 100644
index 64640af3..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/EditorTools/PhysicsSphereBoundsHandle.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d4f82f07aa94f9241ad081812f8c3b1a
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors.meta
deleted file mode 100644
index 3f24ba1e..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 30413a61e5b44d54dbd680b077804e45
-timeCreated: 1678288991
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs
deleted file mode 100644
index d7edae61..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-#if UNITY_EDITOR
-
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(BallAndSocketJoint))]
- public class BallAndSocketEditor : UnityEditor.Editor
- {
- protected virtual void OnSceneGUI()
- {
- BallAndSocketJoint ballAndSocket = (BallAndSocketJoint)target;
-
- EditorGUI.BeginChangeCheck();
-
- EditorUtilities.EditPivot(ballAndSocket.worldFromA, ballAndSocket.worldFromB, ballAndSocket.AutoSetConnected,
- ref ballAndSocket.PositionLocal, ref ballAndSocket.PositionInConnectedEntity, ballAndSocket);
- }
- }
-}
-
-#endif
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs.meta
deleted file mode 100644
index 00e754e4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/BallAndSocketJointEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 8bfafdfc59379ec4c86d512554577279
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs
deleted file mode 100644
index 65663c7c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEditorInternal;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(CustomPhysicsMaterialTagNames))]
- [CanEditMultipleObjects]
- class CustomPhysicsMaterialTagNamesEditor : BaseEditor
- {
- #pragma warning disable 649
- [AutoPopulate(ElementFormatString = "Custom Physics Material Tag {0}", Resizable = false, Reorderable = false)]
- ReorderableList m_TagNames;
- #pragma warning restore 649
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs.meta
deleted file mode 100644
index cf6f2efb..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/CustomPhysicsMaterialTagNamesEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9a6f5e4709a915246864e50578af0cf3
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs
deleted file mode 100644
index 90d5b394..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-using UnityEngine;
-using Unity.Mathematics;
-using static Unity.Physics.Math;
-
-#if UNITY_EDITOR
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-
-namespace Unity.Physics.Editor
-{
- ///
- /// Provides utilities that use Handles to set positions and axes,
- ///
- public class EditorUtilities
- {
- // Editor for a joint pivot or pivot pair
- public static void EditPivot(RigidTransform worldFromA, RigidTransform worldFromB, bool lockBtoA,
- ref float3 pivotA, ref float3 pivotB, Object target)
- {
- EditorGUI.BeginChangeCheck();
- float3 pivotAinW = Handles.PositionHandle(math.transform(worldFromA, pivotA), quaternion.identity);
- float3 pivotBinW;
-
- if (lockBtoA)
- {
- pivotBinW = pivotAinW;
- pivotB = math.transform(math.inverse(worldFromB), pivotBinW);
- }
- else
- {
- pivotBinW = Handles.PositionHandle(math.transform(worldFromB, pivotB), quaternion.identity);
- }
-
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(target, "Edit joint pivot");
- pivotA = math.transform(math.inverse(worldFromA), pivotAinW);
- pivotB = math.transform(math.inverse(worldFromB), pivotBinW);
- }
-
- Handles.DrawLine(worldFromA.pos, pivotAinW);
- Handles.DrawLine(worldFromB.pos, pivotBinW);
- }
-
- // Editor for a joint axis or axis pair
- public class AxisEditor
- {
- // Even though we're only editing axes and not rotations, we need to track a full rotation in order to keep the rotation handle stable
- private quaternion m_RefA = quaternion.identity;
- private quaternion m_RefB = quaternion.identity;
-
- // Detect changes in the object being edited to reset the reference orientations
- private Object m_LastTarget;
-
- private static bool NormalizeSafe(ref float3 x)
- {
- float lengthSq = math.lengthsq(x);
- const float epsSq = 1e-8f;
- if (math.abs(lengthSq - 1) > epsSq)
- {
- if (lengthSq > epsSq)
- {
- x *= math.rsqrt(lengthSq);
- }
- else
- {
- x = new float3(1, 0, 0);
- }
-
- return true;
- }
-
- return false;
- }
-
- private static bool NormalizePerpendicular(float3 axis, ref float3 perpendicular)
- {
- // make sure perpendicular is actually perpendicular to direction
- float dot = math.dot(axis, perpendicular);
- float absDot = math.abs(dot);
- if (absDot > 1.0f - 1e-5f)
- {
- // parallel, choose an arbitrary perpendicular
- float3 dummy;
- CalculatePerpendicularNormalized(axis, out perpendicular, out dummy);
- return true;
- }
-
- if (absDot > 1e-5f)
- {
- // reject direction
- perpendicular -= dot * axis;
- NormalizeSafe(ref perpendicular);
- return true;
- }
-
- return NormalizeSafe(ref perpendicular);
- }
-
- public void Update(RigidTransform worldFromA, RigidTransform worldFromB, bool lockBtoA, float3 pivotA, float3 pivotB,
- ref float3 directionA, ref float3 directionB, ref float3 perpendicularA, ref float3 perpendicularB, Object target)
- {
- // Work in world space
- float3 directionAinW = math.rotate(worldFromA, directionA);
- float3 directionBinW = math.rotate(worldFromB, directionB);
- float3 perpendicularAinW = math.rotate(worldFromB, perpendicularA);
- float3 perpendicularBinW = math.rotate(worldFromB, perpendicularB);
- bool changed = false;
-
- // If the target changed, fix up the inputs and reset the reference orientations to align with the new target's axes
- if (target != m_LastTarget)
- {
- m_LastTarget = target;
-
- // Enforce normalized directions
- changed |= NormalizeSafe(ref directionAinW);
- changed |= NormalizeSafe(ref directionBinW);
-
- // Enforce normalized perpendiculars, orthogonal to their respective directions
- changed |= NormalizePerpendicular(directionAinW, ref perpendicularAinW);
- changed |= NormalizePerpendicular(directionBinW, ref perpendicularBinW);
-
- // Calculate the rotation of the joint in A from direction and perpendicular
- float3x3 rotationA = new float3x3(directionAinW, perpendicularAinW, math.cross(directionAinW, perpendicularAinW));
- m_RefA = new quaternion(rotationA);
-
- if (lockBtoA)
- {
- m_RefB = m_RefA;
- }
- else
- {
- // Calculate the rotation of the joint in B from direction and perpendicular
- float3x3 rotationB = new float3x3(directionBinW, perpendicularBinW, math.cross(directionBinW, perpendicularBinW));
- m_RefB = new quaternion(rotationB);
- }
- }
-
- EditorGUI.BeginChangeCheck();
-
- // Make rotators
- quaternion oldRefA = m_RefA;
- quaternion oldRefB = m_RefB;
-
- float3 pivotAinW = math.transform(worldFromA, pivotA);
- m_RefA = Handles.RotationHandle(m_RefA, pivotAinW);
-
- float3 pivotBinW;
- if (lockBtoA)
- {
- directionB = math.rotate(math.inverse(worldFromB), directionAinW);
- perpendicularB = math.rotate(math.inverse(worldFromB), perpendicularAinW);
- pivotBinW = pivotAinW;
- m_RefB = m_RefA;
- }
- else
- {
- pivotBinW = math.transform(worldFromB, pivotB);
- m_RefB = Handles.RotationHandle(m_RefB, pivotBinW);
- }
-
- // Apply changes from the rotators
- if (EditorGUI.EndChangeCheck())
- {
- quaternion dqA = math.mul(m_RefA, math.inverse(oldRefA));
- quaternion dqB = math.mul(m_RefB, math.inverse(oldRefB));
- directionAinW = math.mul(dqA, directionAinW);
- directionBinW = math.mul(dqB, directionBinW);
- perpendicularAinW = math.mul(dqB, perpendicularAinW);
- perpendicularBinW = math.mul(dqB, perpendicularBinW);
- changed = true;
- }
-
- // Write back if the axes changed
- if (changed)
- {
- Undo.RecordObject(target, "Edit joint axis");
- directionA = math.rotate(math.inverse(worldFromA), directionAinW);
- directionB = math.rotate(math.inverse(worldFromB), directionBinW);
- perpendicularA = math.rotate(math.inverse(worldFromB), perpendicularAinW);
- perpendicularB = math.rotate(math.inverse(worldFromB), perpendicularBinW);
- }
-
- // Draw the updated axes
- float3 z = new float3(0, 0, 1); // ArrowHandleCap() draws an arrow pointing in (0, 0, 1)
- Handles.ArrowHandleCap(0, pivotAinW, Quaternion.FromToRotation(z, directionAinW), HandleUtility.GetHandleSize(pivotAinW) * 0.75f, Event.current.type);
- Handles.ArrowHandleCap(0, pivotAinW, Quaternion.FromToRotation(z, perpendicularAinW), HandleUtility.GetHandleSize(pivotAinW) * 0.75f, Event.current.type);
- if (!lockBtoA)
- {
- Handles.ArrowHandleCap(0, pivotBinW, Quaternion.FromToRotation(z, directionBinW), HandleUtility.GetHandleSize(pivotBinW) * 0.75f, Event.current.type);
- Handles.ArrowHandleCap(0, pivotBinW, Quaternion.FromToRotation(z, perpendicularBinW), HandleUtility.GetHandleSize(pivotBinW) * 0.75f, Event.current.type);
- }
- }
- }
-
- public static void EditLimits(RigidTransform worldFromA, RigidTransform worldFromB, float3 pivotA, float3 axisA, float3 axisB, float3 perpendicularA, float3 perpendicularB,
- ref float minLimit, ref float maxLimit, JointAngularLimitHandle limitHandle, Object target)
- {
- // Transform to world space
- float3 pivotAinW = math.transform(worldFromA, pivotA);
- float3 axisAinW = math.rotate(worldFromA, axisA);
- float3 perpendicularAinW = math.rotate(worldFromA, perpendicularA);
- float3 axisBinW = math.rotate(worldFromA, axisB);
- float3 perpendicularBinW = math.rotate(worldFromB, perpendicularB);
-
- // Get rotations from joint space
- // JointAngularLimitHandle uses axis = (1, 0, 0) with angle = 0 at (0, 0, 1), so choose the rotations to point those in the directions of our axis and perpendicular
- float3x3 worldFromJointA = new float3x3(axisAinW, -math.cross(axisAinW, perpendicularAinW), perpendicularAinW);
- float3x3 worldFromJointB = new float3x3(axisBinW, -math.cross(axisBinW, perpendicularBinW), perpendicularBinW);
- float3x3 jointBFromA = math.mul(math.transpose(worldFromJointB), worldFromJointA);
-
- // Set orientation for the angular limit control
- float angle = CalculateTwistAngle(new quaternion(jointBFromA), 0); // index = 0 because axis is the first column in worldFromJoint
- quaternion limitOrientation = math.mul(quaternion.AxisAngle(axisAinW, angle), new quaternion(worldFromJointA));
- Matrix4x4 handleMatrix = Matrix4x4.TRS(pivotAinW, limitOrientation, Vector3.one);
-
- float size = HandleUtility.GetHandleSize(pivotAinW) * 0.75f;
-
- limitHandle.xMin = -maxLimit;
- limitHandle.xMax = -minLimit;
- limitHandle.xMotion = ConfigurableJointMotion.Limited;
- limitHandle.yMotion = ConfigurableJointMotion.Locked;
- limitHandle.zMotion = ConfigurableJointMotion.Locked;
- limitHandle.yHandleColor = new Color(0, 0, 0, 0);
- limitHandle.zHandleColor = new Color(0, 0, 0, 0);
- limitHandle.radius = size;
-
- using (new Handles.DrawingScope(handleMatrix))
- {
- // Draw the reference axis
- float3 z = new float3(0, 0, 1); // ArrowHandleCap() draws an arrow pointing in (0, 0, 1)
- Handles.ArrowHandleCap(0, float3.zero, Quaternion.FromToRotation(z, new float3(1, 0, 0)), size, Event.current.type);
-
- // Draw the limit editor handle
- EditorGUI.BeginChangeCheck();
- limitHandle.DrawHandle();
- if (EditorGUI.EndChangeCheck())
- {
- // Record the target object before setting new limits so changes can be undone/redone
- Undo.RecordObject(target, "Edit joint angular limits");
- minLimit = -limitHandle.xMax;
- maxLimit = -limitHandle.xMin;
- }
- }
- }
- }
-}
-#endif
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs.meta
deleted file mode 100644
index 0c9364a9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/EditorUtilities.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 5c7e2e7874c307546bb3ab423b21a11e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs
deleted file mode 100644
index d1d46037..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-#if UNITY_EDITOR
-
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(LimitedHingeJoint))]
- public class LimitedHingeEditor : UnityEditor.Editor
- {
- private EditorUtilities.AxisEditor m_AxisEditor = new EditorUtilities.AxisEditor();
- private JointAngularLimitHandle m_LimitHandle = new JointAngularLimitHandle();
-
- public override void OnInspectorGUI()
- {
- LimitedHingeJoint limitedHinge = (LimitedHingeJoint)target;
-
- EditorGUI.BeginChangeCheck();
-
- GUILayout.BeginHorizontal();
- GUILayout.Label("Editors:");
- limitedHinge.EditPivots = GUILayout.Toggle(limitedHinge.EditPivots, new GUIContent("Pivot"), "Button");
- limitedHinge.EditAxes = GUILayout.Toggle(limitedHinge.EditAxes, new GUIContent("Axis"), "Button");
- limitedHinge.EditLimits = GUILayout.Toggle(limitedHinge.EditLimits, new GUIContent("Limits"), "Button");
- GUILayout.EndHorizontal();
- DrawDefaultInspector();
-
- if (EditorGUI.EndChangeCheck())
- {
- SceneView.RepaintAll();
- }
- }
-
- protected virtual void OnSceneGUI()
- {
- LimitedHingeJoint limitedHinge = (LimitedHingeJoint)target;
-
- if (limitedHinge.EditPivots)
- {
- EditorUtilities.EditPivot(limitedHinge.worldFromA, limitedHinge.worldFromB, limitedHinge.AutoSetConnected,
- ref limitedHinge.PositionLocal, ref limitedHinge.PositionInConnectedEntity, limitedHinge);
- }
- if (limitedHinge.EditAxes)
- {
- m_AxisEditor.Update(limitedHinge.worldFromA, limitedHinge.worldFromB,
- limitedHinge.AutoSetConnected,
- limitedHinge.PositionLocal, limitedHinge.PositionInConnectedEntity,
- ref limitedHinge.HingeAxisLocal, ref limitedHinge.HingeAxisInConnectedEntity,
- ref limitedHinge.PerpendicularAxisLocal, ref limitedHinge.PerpendicularAxisInConnectedEntity,
- limitedHinge);
- }
- if (limitedHinge.EditLimits)
- {
- EditorUtilities.EditLimits(limitedHinge.worldFromA, limitedHinge.worldFromB,
- limitedHinge.PositionLocal,
- limitedHinge.HingeAxisLocal, limitedHinge.HingeAxisInConnectedEntity,
- limitedHinge.PerpendicularAxisLocal, limitedHinge.PerpendicularAxisInConnectedEntity,
- ref limitedHinge.MinAngle, ref limitedHinge.MaxAngle, m_LimitHandle, limitedHinge);
- }
- }
- }
-}
-
-#endif
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs.meta
deleted file mode 100644
index 9a69c5e4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/LimitedHingeJointEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f79ce4d7693ece94fb5927586cd79ad9
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs
deleted file mode 100644
index 3633a695..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-using System.Collections.Generic;
-using Unity.Mathematics;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(PhysicsBodyAuthoring))]
- [CanEditMultipleObjects]
- class PhysicsBodyAuthoringEditor : BaseEditor
- {
- static class Content
- {
- public static readonly GUIContent MassLabel = EditorGUIUtility.TrTextContent("Mass");
- public static readonly GUIContent CenterOfMassLabel = EditorGUIUtility.TrTextContent(
- "Center of Mass", "Center of mass in the space of this body's transform."
- );
- public static readonly GUIContent InertiaTensorLabel = EditorGUIUtility.TrTextContent(
- "Inertia Tensor", "Resistance to angular motion about each axis of rotation."
- );
- public static readonly GUIContent OrientationLabel = EditorGUIUtility.TrTextContent(
- "Orientation", "Orientation of the body's inertia tensor in the space of its transform."
- );
- public static readonly GUIContent AdvancedLabel = EditorGUIUtility.TrTextContent(
- "Advanced", "Advanced options"
- );
- }
-
- #pragma warning disable 649
- [AutoPopulate] SerializedProperty m_MotionType;
- [AutoPopulate] SerializedProperty m_Smoothing;
- [AutoPopulate] SerializedProperty m_Mass;
- [AutoPopulate] SerializedProperty m_GravityFactor;
- [AutoPopulate] SerializedProperty m_LinearDamping;
- [AutoPopulate] SerializedProperty m_AngularDamping;
- [AutoPopulate] SerializedProperty m_InitialLinearVelocity;
- [AutoPopulate] SerializedProperty m_InitialAngularVelocity;
- [AutoPopulate] SerializedProperty m_OverrideDefaultMassDistribution;
- [AutoPopulate] SerializedProperty m_CenterOfMass;
- [AutoPopulate] SerializedProperty m_Orientation;
- [AutoPopulate] SerializedProperty m_InertiaTensor;
- [AutoPopulate] SerializedProperty m_WorldIndex;
- [AutoPopulate] SerializedProperty m_CustomTags;
- #pragma warning restore 649
-
- bool showAdvanced;
-
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
-
- EditorGUI.BeginChangeCheck();
-
- EditorGUILayout.PropertyField(m_MotionType);
-
- if (m_MotionType.intValue != (int)BodyMotionType.Static)
- EditorGUILayout.PropertyField(m_Smoothing);
-
- var dynamic = m_MotionType.intValue == (int)BodyMotionType.Dynamic;
-
- if (dynamic)
- EditorGUILayout.PropertyField(m_Mass, Content.MassLabel);
- else
- {
- EditorGUI.BeginDisabledGroup(true);
- var position = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
- EditorGUI.BeginProperty(position, Content.MassLabel, m_Mass);
- EditorGUI.FloatField(position, Content.MassLabel, float.PositiveInfinity);
- EditorGUI.EndProperty();
- EditorGUI.EndDisabledGroup();
- }
-
- if (m_MotionType.intValue == (int)BodyMotionType.Dynamic)
- {
- EditorGUILayout.PropertyField(m_LinearDamping, true);
- EditorGUILayout.PropertyField(m_AngularDamping, true);
- }
-
- if (m_MotionType.intValue != (int)BodyMotionType.Static)
- {
- EditorGUILayout.PropertyField(m_InitialLinearVelocity, true);
- EditorGUILayout.PropertyField(m_InitialAngularVelocity, true);
- }
-
- if (m_MotionType.intValue == (int)BodyMotionType.Dynamic)
- {
- EditorGUILayout.PropertyField(m_GravityFactor, true);
- }
-
- showAdvanced = EditorGUILayout.Foldout(showAdvanced, Content.AdvancedLabel);
- if (showAdvanced)
- {
- ++EditorGUI.indentLevel;
- EditorGUILayout.PropertyField(m_WorldIndex);
- if (m_MotionType.intValue != (int)BodyMotionType.Static)
- {
- EditorGUILayout.PropertyField(m_OverrideDefaultMassDistribution);
- if (m_OverrideDefaultMassDistribution.boolValue)
- {
- ++EditorGUI.indentLevel;
- EditorGUILayout.PropertyField(m_CenterOfMass, Content.CenterOfMassLabel);
-
- EditorGUI.BeginDisabledGroup(!dynamic);
- if (dynamic)
- {
- EditorGUILayout.PropertyField(m_Orientation, Content.OrientationLabel);
- EditorGUILayout.PropertyField(m_InertiaTensor, Content.InertiaTensorLabel);
- }
- else
- {
- EditorGUI.BeginDisabledGroup(true);
- var position =
- EditorGUILayout.GetControlRect(true, EditorGUI.GetPropertyHeight(m_InertiaTensor));
- EditorGUI.BeginProperty(position, Content.InertiaTensorLabel, m_InertiaTensor);
- EditorGUI.Vector3Field(position, Content.InertiaTensorLabel,
- Vector3.one * float.PositiveInfinity);
- EditorGUI.EndProperty();
- EditorGUI.EndDisabledGroup();
- }
-
- EditorGUI.EndDisabledGroup();
-
- --EditorGUI.indentLevel;
- }
- }
- EditorGUILayout.PropertyField(m_CustomTags);
- --EditorGUI.indentLevel;
- }
-
- if (EditorGUI.EndChangeCheck())
- serializedObject.ApplyModifiedProperties();
-
- DisplayStatusMessages();
- }
-
- MessageType m_Status;
- List m_StatusMessages = new List(8);
-
- void DisplayStatusMessages()
- {
- m_Status = MessageType.None;
- m_StatusMessages.Clear();
-
- var hierarchyStatus = StatusMessageUtility.GetHierarchyStatusMessage(targets, out var hierarchyStatusMessage);
- if (!string.IsNullOrEmpty(hierarchyStatusMessage))
- {
- m_StatusMessages.Add(hierarchyStatusMessage);
- m_Status = (MessageType)math.max((int)m_Status, (int)hierarchyStatus);
- }
-
- if (m_StatusMessages.Count > 0)
- EditorGUILayout.HelpBox(string.Join("\n\n", m_StatusMessages), m_Status);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs.meta
deleted file mode 100644
index 4bae0089..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsBodyAuthoringEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: a63bbe7a0e8f0934fb7896991b8408ce
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs
deleted file mode 100644
index 5f5c1a38..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEditorInternal;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(PhysicsCategoryNames))]
- [CanEditMultipleObjects]
- class PhysicsCategoryNamesEditor : BaseEditor
- {
- #pragma warning disable 649
- [AutoPopulate(ElementFormatString = "Category {0}", Resizable = false, Reorderable = false)]
- ReorderableList m_CategoryNames;
- #pragma warning restore 649
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs.meta
deleted file mode 100644
index 3f9586d6..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsCategoryNamesEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: fcbb532fa3ab5ca4cb5005410a82cc83
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs
deleted file mode 100644
index 194b86b1..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs
+++ /dev/null
@@ -1,1187 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Unity.Burst;
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using Unity.Entities;
-using Unity.Jobs;
-using Unity.Mathematics;
-using Unity.Physics.Authoring;
-using Unity.Physics.Extensions;
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(PhysicsShapeAuthoring))]
- [CanEditMultipleObjects]
- class PhysicsShapeAuthoringEditor : BaseEditor
- {
- static class Styles
- {
- const string k_Plural = "One or more selected objects";
- const string k_Singular = "This object";
-
- public static readonly string GenericUndoMessage = L10n.Tr("Change Shape");
- public static readonly string MultipleShapeTypesLabel =
- L10n.Tr("Multiple shape types in current selection.");
- public static readonly string PreviewGenerationNotification =
- L10n.Tr("Generating collision geometry preview...");
-
- static readonly GUIContent k_FitToRenderMeshesLabel =
- EditorGUIUtility.TrTextContent("Fit to Enabled Render Meshes");
- static readonly GUIContent k_FitToRenderMeshesWarningLabelSg = new GUIContent(
- k_FitToRenderMeshesLabel.text,
- EditorGUIUtility.Load("console.warnicon") as Texture,
- L10n.Tr($"{k_Singular} has non-uniform scale. Trying to fit the shape to render meshes might produce unexpected results.")
- );
- static readonly GUIContent k_FitToRenderMeshesWarningLabelPl = new GUIContent(
- k_FitToRenderMeshesLabel.text,
- EditorGUIUtility.Load("console.warnicon") as Texture,
- L10n.Tr($"{k_Plural} has non-uniform scale. Trying to fit the shape to render meshes might produce unexpected results.")
- );
- public static readonly GUIContent CenterLabel = EditorGUIUtility.TrTextContent("Center");
- public static readonly GUIContent SizeLabel = EditorGUIUtility.TrTextContent("Size");
- public static readonly GUIContent OrientationLabel = EditorGUIUtility.TrTextContent(
- "Orientation", "Euler orientation in the shape's local space (ZXY order)."
- );
- public static readonly GUIContent CylinderSideCountLabel = EditorGUIUtility.TrTextContent("Side Count");
- public static readonly GUIContent RadiusLabel = EditorGUIUtility.TrTextContent("Radius");
- public static readonly GUIContent ForceUniqueLabel = EditorGUIUtility.TrTextContent(
- "Force Unique",
- "If set to true, then this object will always produce a unique collider for run-time during conversion. " +
- "If set to false, then this object may share its collider data with other objects if they have the same inputs. " +
- "You should enable this option if you plan to modify this instance's collider at run-time."
- );
- public static readonly GUIContent MaterialLabel = EditorGUIUtility.TrTextContent("Material");
- public static readonly GUIContent SetRecommendedConvexValues = EditorGUIUtility.TrTextContent(
- "Set Recommended Default Values",
- "Set recommended values for convex hull generation parameters based on either render meshes or custom mesh."
- );
-
- public static GUIContent GetFitToRenderMeshesLabel(int numTargets, MessageType status) =>
- status >= MessageType.Warning
- ? numTargets == 1 ? k_FitToRenderMeshesWarningLabelSg : k_FitToRenderMeshesWarningLabelPl
- : k_FitToRenderMeshesLabel;
-
- static readonly string[] k_NoGeometryWarning =
- {
- L10n.Tr($"{k_Singular} has no enabled render meshes in its hierarchy and no custom mesh assigned."),
- L10n.Tr($"{k_Plural} has no enabled render meshes in their hierarchies and no custom mesh assigned.")
- };
-
- public static string GetNoGeometryWarning(int numTargets) =>
- numTargets == 1 ? k_NoGeometryWarning[0] : k_NoGeometryWarning[1];
-
- static readonly string[] k_NonReadableGeometryWarning =
- {
- L10n.Tr($"{k_Singular} has a non-readable mesh in its hierarchy. Move it into a sub-scene or assign a custom mesh with Read/Write enabled in its import settings if it needs to be converted at run-time."),
- L10n.Tr($"{k_Plural} has a non-readable mesh in its hierarchy. Move it into a sub-scene or assign a custom mesh with Read/Write enabled in its import settings if it needs to be converted at run-time.")
- };
-
- public static string GetNonReadableGeometryWarning(int numTargets) =>
- numTargets == 1 ? k_NonReadableGeometryWarning[0] : k_NonReadableGeometryWarning[1];
-
- static readonly string[] k_MeshWithSkinnedPointsWarning =
- {
- L10n.Tr($"{k_Singular} is a mesh based on its render geometry, but its render geometry includes skinned points. These points will be excluded from the automatically generated shape."),
- L10n.Tr($"{k_Plural} is a mesh based on its render geometry, but its render geometry includes skinned points. These points will be excluded from the automatically generated shape.")
- };
-
- public static string GetMeshWithSkinnedPointsWarning(int numTargets) =>
- numTargets == 1 ? k_MeshWithSkinnedPointsWarning[0] : k_MeshWithSkinnedPointsWarning[1];
-
- static readonly string[] k_StaticColliderStatusMessage =
- {
- L10n.Tr($"{k_Singular} will be considered static. Add a {ObjectNames.NicifyVariableName(typeof(PhysicsBodyAuthoring).Name)} component if you will move it at run-time."),
- L10n.Tr($"{k_Plural} will be considered static. Add a {ObjectNames.NicifyVariableName(typeof(PhysicsBodyAuthoring).Name)} component if you will move them at run-time.")
- };
-
- public static string GetStaticColliderStatusMessage(int numTargets) =>
- numTargets == 1 ? k_StaticColliderStatusMessage[0] : k_StaticColliderStatusMessage[1];
-
- public static readonly string BoxCapsuleSuggestion =
- L10n.Tr($"Target {ShapeType.Box} has uniform size on its two short axes and a large convex radius. Consider using a {ShapeType.Capsule} instead.");
- public static readonly string BoxPlaneSuggestion =
- L10n.Tr($"Target {ShapeType.Box} is flat. Consider using a {ShapeType.Plane} instead.");
- public static readonly string BoxSphereSuggestion =
- L10n.Tr($"Target {ShapeType.Box} has uniform size and large convex radius. Consider using a {ShapeType.Sphere} instead.");
- public static readonly string CapsuleSphereSuggestion =
- L10n.Tr($"Target {ShapeType.Capsule}'s diameter is equal to its height. Consider using a {ShapeType.Sphere} instead.");
- public static readonly string CylinderCapsuleSuggestion =
- L10n.Tr($"Target {ShapeType.Cylinder} has a large convex radius. Consider using a {ShapeType.Capsule} instead.");
- public static readonly string CylinderSphereSuggestion =
- L10n.Tr($"Target {ShapeType.Cylinder} has a large convex radius and its diameter is equal to its height. Consider using a {ShapeType.Sphere} instead.");
-
- public static readonly GUIStyle Button =
- new GUIStyle(EditorStyles.miniButton) { padding = new RectOffset() };
- public static readonly GUIStyle ButtonDropDown =
- new GUIStyle(EditorStyles.popup) { alignment = TextAnchor.MiddleCenter };
- }
-
- #pragma warning disable 649
- [AutoPopulate] SerializedProperty m_ShapeType;
- [AutoPopulate] SerializedProperty m_PrimitiveCenter;
- [AutoPopulate] SerializedProperty m_PrimitiveSize;
- [AutoPopulate] SerializedProperty m_PrimitiveOrientation;
- [AutoPopulate] SerializedProperty m_Capsule;
- [AutoPopulate] SerializedProperty m_Cylinder;
- [AutoPopulate] SerializedProperty m_CylinderSideCount;
- [AutoPopulate] SerializedProperty m_SphereRadius;
- [AutoPopulate] SerializedProperty m_ConvexHullGenerationParameters;
- [AutoPopulate(PropertyPath = "m_ConvexHullGenerationParameters.m_BevelRadius")] SerializedProperty m_BevelRadius;
- [AutoPopulate] SerializedProperty m_MinimumSkinnedVertexWeight;
- [AutoPopulate] SerializedProperty m_CustomMesh;
- [AutoPopulate] SerializedProperty m_Material;
- [AutoPopulate] SerializedProperty m_ForceUnique;
- #pragma warning restore 649
-
- [Flags]
- enum GeometryState
- {
- Okay = 0,
- NoGeometry = 1 << 0,
- NonReadableGeometry = 1 << 1,
- MeshWithSkinnedPoints = 1 << 2
- }
-
- GeometryState m_GeometryState;
- int m_NumImplicitStatic;
- // keep track of when the user is dragging some control to prevent continually rebuilding preview geometry
- [NonSerialized]
- int m_DraggingControlID;
- [NonSerialized]
- FitToRenderMeshesDropDown m_DropDown;
-
- protected override void OnEnable()
- {
- base.OnEnable();
-
- HashUtility.Initialize();
-
- m_NumImplicitStatic = targets.Cast().Count(
- shape => shape.GetPrimaryBody() == shape.gameObject
- && shape.GetComponent() == null
- && shape.GetComponent() == null
- );
-
- Undo.undoRedoPerformed += Repaint;
- }
-
- void OnDisable()
- {
- Undo.undoRedoPerformed -= Repaint;
-
- SceneViewUtility.ClearNotificationInSceneView();
-
- foreach (var preview in m_PreviewData.Values)
- preview.Dispose();
-
- if (m_DropDown != null)
- m_DropDown.CloseWithoutUndo();
- }
-
- class PreviewMeshData : IDisposable
- {
- [BurstCompile]
- struct CreateTempHullJob : IJob
- {
- public ConvexHullGenerationParameters GenerationParameters;
- [ReadOnly]
- [DeallocateOnJobCompletion]
- public NativeArray Points;
- public NativeArray> Output;
-
- public void Execute() => Output[0] = ConvexCollider.Create(Points, GenerationParameters, CollisionFilter.Default);
- }
-
- [BurstCompile]
- struct CreateTempMeshJob : IJob
- {
- [ReadOnly]
- [DeallocateOnJobCompletion]
- public NativeArray Points;
- [ReadOnly]
- [DeallocateOnJobCompletion]
- public NativeArray Triangles;
- public NativeArray> Output;
-
- public void Execute() => Output[0] = MeshCollider.Create(Points, Triangles);
- }
-
- static readonly List s_ReusableEdges = new List(1024);
-
- public Vector3[] Edges = Array.Empty();
-
- public Aabb Bounds = new Aabb();
-
- bool m_Disposed;
- uint m_InputHash;
- ConvexHullGenerationParameters m_HashedConvexParameters;
- NativeArray m_HashedPoints = new NativeArray(0, Allocator.Persistent);
- // multiple preview jobs might be running if user assigned a different mesh before previous job completed
- JobHandle m_MostRecentlyScheduledJob;
- Dictionary>> m_PreviewJobsOutput =
- new Dictionary>>();
-
- unsafe uint GetInputHash(
- PhysicsShapeAuthoring shape,
- NativeList currentPoints,
- NativeArray hashedPoints,
- ConvexHullGenerationParameters hashedConvexParameters,
- out ConvexHullGenerationParameters currentConvexProperties
- )
- {
- currentConvexProperties = default;
- switch (shape.ShapeType)
- {
- case ShapeType.ConvexHull:
- shape.GetBakedConvexProperties(currentPoints); // TODO: use HashableShapeInputs
- currentConvexProperties = shape.ConvexHullGenerationParameters;
-
- return math.hash(
- new uint3(
- (uint)shape.ShapeType,
- currentConvexProperties.GetStableHash(hashedConvexParameters),
- currentPoints.GetStableHash(hashedPoints)
- )
- );
-
- case ShapeType.Mesh:
- var triangles = new NativeList(1024, Allocator.Temp);
- shape.GetBakedMeshProperties(currentPoints, triangles); // TODO: use HashableShapeInputs
-
- return math.hash(
- new uint3(
- (uint)shape.ShapeType,
- currentPoints.GetStableHash(hashedPoints),
- math.hash(triangles.GetUnsafePtr(), UnsafeUtility.SizeOf() * triangles.Length)
- )
- );
-
- default:
- return (uint)shape.ShapeType;
- }
- }
-
- public void SchedulePreviewIfChanged(PhysicsShapeAuthoring shape)
- {
- using (var currentPoints = new NativeList(65535, Allocator.Temp))
- {
- var hash = GetInputHash(
- shape, currentPoints, m_HashedPoints, m_HashedConvexParameters, out var currentConvexParameters
- );
- if (m_InputHash == hash)
- return;
-
- m_InputHash = hash;
- m_HashedConvexParameters = currentConvexParameters;
- m_HashedPoints.Dispose();
- m_HashedPoints = new NativeArray(currentPoints.Length, Allocator.Persistent);
- m_HashedPoints.CopyFrom(currentPoints.AsArray());
- }
-
- if (shape.ShapeType != ShapeType.ConvexHull && shape.ShapeType != ShapeType.Mesh)
- return;
-
- // TODO: cache results per input data hash, and simply use existing data (e.g., to make undo/redo faster)
- var output = new NativeArray>(1, Allocator.Persistent);
-
- m_MostRecentlyScheduledJob = shape.ShapeType == ShapeType.Mesh
- ? ScheduleMeshPreview(shape, output)
- : ScheduleConvexHullPreview(shape, output);
- m_PreviewJobsOutput.Add(m_MostRecentlyScheduledJob, output);
- if (m_PreviewJobsOutput.Count == 1)
- {
- CheckPreviewJobsForCompletion();
- if (m_MostRecentlyScheduledJob.Equals(default(JobHandle)))
- return;
- EditorApplication.update += CheckPreviewJobsForCompletion;
- EditorApplication.delayCall += () =>
- {
- SceneViewUtility.DisplayProgressNotification(
- Styles.PreviewGenerationNotification, () => float.PositiveInfinity
- );
- };
- }
- }
-
- JobHandle ScheduleConvexHullPreview(PhysicsShapeAuthoring shape, NativeArray> output)
- {
- var pointCloud = new NativeList(65535, Allocator.Temp);
- shape.GetBakedConvexProperties(pointCloud);
-
- if (pointCloud.Length == 0)
- return default;
-
- // copy to NativeArray because NativeList not yet compatible with DeallocateOnJobCompletion
- var pointsArray = new NativeArray(
- pointCloud.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory
- );
- pointsArray.CopyFrom(pointCloud.AsArray());
-
- // TODO: if there is still an active job with the same input data hash, then just set it to be most recently scheduled job
- return new CreateTempHullJob
- {
- GenerationParameters = shape.ConvexHullGenerationParameters.ToRunTime(),
- Points = pointsArray,
- Output = output
- }.Schedule();
- }
-
- JobHandle ScheduleMeshPreview(PhysicsShapeAuthoring shape, NativeArray> output)
- {
- var points = new NativeList(1024, Allocator.Temp);
- var triangles = new NativeList(1024, Allocator.Temp);
- shape.GetBakedMeshProperties(points, triangles);
-
- if (points.Length == 0 || triangles.Length == 0)
- return default;
-
- // copy to NativeArray because NativeList not yet compatible with DeallocateOnJobCompletion
- var pointsArray = new NativeArray(
- points.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory
- );
- pointsArray.CopyFrom(points.AsArray());
- var triangleArray = new NativeArray(
- triangles.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory
- );
- triangleArray.CopyFrom(triangles.AsArray());
-
- // TODO: if there is still an active job with the same input data hash, then just set it to be most recently scheduled job
- return new CreateTempMeshJob
- {
- Points = pointsArray,
- Triangles = triangleArray,
- Output = output
- }.Schedule();
- }
-
- unsafe void CheckPreviewJobsForCompletion()
- {
- var repaintSceneViews = false;
-
- foreach (var job in m_PreviewJobsOutput.Keys.ToArray()) // TODO: don't allocate on heap
- {
- // repaint scene views to indicate progress if most recent preview job is still in the queue
- var mostRecentlyScheduledJob = m_MostRecentlyScheduledJob.Equals(job);
- repaintSceneViews |= mostRecentlyScheduledJob;
-
- if (!job.IsCompleted)
- continue;
-
- var output = m_PreviewJobsOutput[job];
- m_PreviewJobsOutput.Remove(job);
- job.Complete();
-
- // only populate preview edge data if not already disposed and this job was actually the most recent
- if (!m_Disposed && mostRecentlyScheduledJob)
- {
- if (!output[0].IsCreated)
- {
- Edges = Array.Empty();
- Bounds = new Aabb();
- }
- else
- {
- switch (output[0].Value.Type)
- {
- case ColliderType.Convex:
- ref var convex = ref output[0].As();
- DrawingUtility.GetConvexColliderEdges(
- ref convex, s_ReusableEdges
- );
- Bounds = convex.CalculateAabb();
- break;
- case ColliderType.Mesh:
- ref var mesh = ref output[0].As();
- DrawingUtility.GetMeshColliderEdges(
- ref mesh, s_ReusableEdges
- );
- Bounds = mesh.CalculateAabb();
- break;
- }
-
- Edges = s_ReusableEdges.ToArray();
- }
-
- EditorApplication.delayCall += SceneViewUtility.ClearNotificationInSceneView;
- }
-
- if (output.IsCreated)
- {
- if (output[0].IsCreated)
- output[0].Dispose();
- output.Dispose();
- }
- }
-
- if (repaintSceneViews)
- SceneView.RepaintAll();
-
- if (m_PreviewJobsOutput.Count == 0)
- EditorApplication.update -= CheckPreviewJobsForCompletion;
- }
-
- public void Dispose()
- {
- m_Disposed = true;
- m_HashedPoints.Dispose();
- }
- }
-
- Dictionary m_PreviewData = new Dictionary();
-
- PreviewMeshData GetPreviewData(PhysicsShapeAuthoring shape)
- {
- if (shape.ShapeType != ShapeType.ConvexHull && shape.ShapeType != ShapeType.Mesh)
- return null;
-
- if (!m_PreviewData.TryGetValue(shape, out var preview))
- {
- preview = m_PreviewData[shape] = new PreviewMeshData();
- preview.SchedulePreviewIfChanged(shape);
- }
-
- // do not generate a new preview until the user has finished dragging a control handle (e.g., scale)
- if (m_DraggingControlID == 0 && !EditorGUIUtility.editingTextField)
- preview.SchedulePreviewIfChanged(shape);
-
- return preview;
- }
-
- void UpdateGeometryState()
- {
- m_GeometryState = GeometryState.Okay;
- var skinnedPoints = new NativeList(8192, Allocator.Temp);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- // if a custom mesh is assigned, only check it
- using (var so = new SerializedObject(shape))
- {
- var customMesh = so.FindProperty(m_CustomMesh.propertyPath).objectReferenceValue as UnityEngine.Mesh;
- if (customMesh != null)
- {
- m_GeometryState |= GetGeometryState(customMesh, shape.gameObject);
- continue;
- }
- }
-
- // otherwise check all mesh filters in the hierarchy that might be included
- var geometryState = GeometryState.Okay;
- using (var scope = new GetActiveChildrenScope(shape, shape.transform))
- {
- foreach (var meshFilter in scope.Buffer)
- {
- if (scope.IsChildActiveAndBelongsToShape(meshFilter, filterOutInvalid: false))
- geometryState |= GetGeometryState(meshFilter.sharedMesh, shape.gameObject);
- }
- }
-
- if (shape.ShapeType == ShapeType.Mesh)
- {
- PhysicsShapeAuthoring.GetAllSkinnedPointsInHierarchyBelongingToShape(
- shape, skinnedPoints, false, default, default, default
- );
- if (skinnedPoints.Length > 0)
- geometryState |= GeometryState.MeshWithSkinnedPoints;
- }
-
- m_GeometryState |= geometryState;
- }
- skinnedPoints.Dispose();
- }
-
- static GeometryState GetGeometryState(UnityEngine.Mesh mesh, GameObject host)
- {
- if (mesh == null)
- return GeometryState.NoGeometry;
- if (!mesh.IsValidForConversion(host))
- return GeometryState.NonReadableGeometry;
- return GeometryState.Okay;
- }
-
- public override void OnInspectorGUI()
- {
- var hotControl = GUIUtility.hotControl;
- switch (Event.current.GetTypeForControl(hotControl))
- {
- case EventType.MouseDrag:
- m_DraggingControlID = hotControl;
- break;
- case EventType.MouseUp:
- m_DraggingControlID = 0;
- break;
- }
-
- UpdateGeometryState();
-
- serializedObject.Update();
-
- UpdateStatusMessages();
-
- EditorGUI.BeginChangeCheck();
-
- DisplayShapeSelector();
-
- ++EditorGUI.indentLevel;
-
- if (m_ShapeType.hasMultipleDifferentValues)
- EditorGUILayout.HelpBox(Styles.MultipleShapeTypesLabel, MessageType.None);
- else
- {
- switch ((ShapeType)m_ShapeType.intValue)
- {
- case ShapeType.Box:
- AutomaticPrimitiveControls();
- DisplayBoxControls();
- break;
- case ShapeType.Capsule:
- AutomaticPrimitiveControls();
- DisplayCapsuleControls();
- break;
- case ShapeType.Sphere:
- AutomaticPrimitiveControls();
- DisplaySphereControls();
- break;
- case ShapeType.Cylinder:
- AutomaticPrimitiveControls();
- DisplayCylinderControls();
- break;
- case ShapeType.Plane:
- AutomaticPrimitiveControls();
- DisplayPlaneControls();
- break;
- case ShapeType.ConvexHull:
- RecommendedConvexValuesButton();
- EditorGUILayout.PropertyField(m_ConvexHullGenerationParameters);
- EditorGUILayout.PropertyField(m_MinimumSkinnedVertexWeight);
- DisplayMeshControls();
- break;
- case ShapeType.Mesh:
- DisplayMeshControls();
- break;
- default:
- throw new UnimplementedShapeException((ShapeType)m_ShapeType.intValue);
- }
-
- EditorGUILayout.PropertyField(m_ForceUnique, Styles.ForceUniqueLabel);
- }
-
- --EditorGUI.indentLevel;
-
- EditorGUILayout.LabelField(Styles.MaterialLabel);
-
- ++EditorGUI.indentLevel;
-
- EditorGUILayout.PropertyField(m_Material);
-
- --EditorGUI.indentLevel;
-
- if (m_StatusMessages.Count > 0)
- EditorGUILayout.HelpBox(string.Join("\n\n", m_StatusMessages), m_Status);
-
- if (EditorGUI.EndChangeCheck())
- serializedObject.ApplyModifiedProperties();
- }
-
- void RecommendedConvexValuesButton()
- {
- EditorGUI.BeginDisabledGroup(
- (m_GeometryState & GeometryState.NoGeometry) == GeometryState.NoGeometry ||
- EditorUtility.IsPersistent(target)
- );
- var rect = EditorGUI.IndentedRect(
- EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight, EditorStyles.miniButton)
- );
- var buttonLabel = Styles.SetRecommendedConvexValues;
- if (GUI.Button(rect, buttonLabel, Styles.Button))
- {
- Undo.RecordObjects(targets, buttonLabel.text);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- shape.InitializeConvexHullGenerationParameters();
- EditorUtility.SetDirty(shape);
- }
- }
-
- EditorGUI.EndDisabledGroup();
- }
-
- MessageType m_GeometryStatus;
- List m_GeometryStatusMessages = new List();
- HashSet m_ShapeSuggestions = new HashSet();
- MessageType m_Status;
- List m_StatusMessages = new List(8);
- MessageType m_MatrixStatus;
- List m_MatrixStates = new List();
-
- void UpdateStatusMessages()
- {
- m_Status = MessageType.None;
- m_StatusMessages.Clear();
-
- if (m_NumImplicitStatic != 0)
- m_StatusMessages.Add(Styles.GetStaticColliderStatusMessage(targets.Length));
-
- m_ShapeSuggestions.Clear();
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- const float k_Epsilon = HashableShapeInputs.k_DefaultLinearPrecision;
- switch (shape.ShapeType)
- {
- case ShapeType.Box:
- var box = shape.GetBakedBoxProperties();
- var max = math.cmax(box.Size);
- var min = math.cmin(box.Size);
- if (min < k_Epsilon)
- m_ShapeSuggestions.Add(Styles.BoxPlaneSuggestion);
- else if (math.abs(box.BevelRadius - min * 0.5f) < k_Epsilon)
- {
- if (math.abs(max - min) < k_Epsilon)
- m_ShapeSuggestions.Add(Styles.BoxSphereSuggestion);
- else if (math.abs(math.lengthsq(box.Size - new float3(min)) - math.pow(max - min, 2f)) < k_Epsilon)
- m_ShapeSuggestions.Add(Styles.BoxCapsuleSuggestion);
- }
- break;
- case ShapeType.Capsule:
- var capsule = shape.GetBakedCapsuleProperties();
- if (math.abs(capsule.Height - 2f * capsule.Radius) < k_Epsilon)
- m_ShapeSuggestions.Add(Styles.CapsuleSphereSuggestion);
- break;
- case ShapeType.Cylinder:
- var cylinder = shape.GetBakedCylinderProperties();
- if (math.abs(cylinder.BevelRadius - cylinder.Radius) < k_Epsilon)
- {
- m_ShapeSuggestions.Add(math.abs(cylinder.Height - 2f * cylinder.Radius) < k_Epsilon
- ? Styles.CylinderSphereSuggestion
- : Styles.CylinderCapsuleSuggestion);
- }
- break;
- }
- }
- foreach (var suggestion in m_ShapeSuggestions)
- m_StatusMessages.Add(suggestion);
-
- var hierarchyStatus = StatusMessageUtility.GetHierarchyStatusMessage(targets, out var hierarchyStatusMessage);
- if (!string.IsNullOrEmpty(hierarchyStatusMessage))
- {
- m_StatusMessages.Add(hierarchyStatusMessage);
- m_Status = (MessageType)math.max((int)m_Status, (int)hierarchyStatus);
- }
-
- m_MatrixStates.Clear();
- foreach (var t in targets)
- {
- var localToWorld = (float4x4)(t as Component).transform.localToWorldMatrix;
- m_MatrixStates.Add(ManipulatorUtility.GetMatrixState(ref localToWorld));
- }
-
- m_MatrixStatus = StatusMessageUtility.GetMatrixStatusMessage(m_MatrixStates, out var matrixStatusMessage);
- if (m_MatrixStatus != MessageType.None)
- {
- m_StatusMessages.Add(matrixStatusMessage);
- m_Status = (MessageType)math.max((int)m_Status, (int)m_MatrixStatus);
- }
-
- m_GeometryStatus = MessageType.None;
- m_GeometryStatusMessages.Clear();
- if ((m_GeometryState & GeometryState.NoGeometry) == GeometryState.NoGeometry)
- {
- m_GeometryStatusMessages.Add(Styles.GetNoGeometryWarning(targets.Length));
- m_GeometryStatus = (MessageType)math.max((int)m_GeometryStatus, (int)MessageType.Error);
- }
- if ((m_GeometryState & GeometryState.NonReadableGeometry) == GeometryState.NonReadableGeometry)
- {
- m_GeometryStatusMessages.Add(Styles.GetNonReadableGeometryWarning(targets.Length));
- m_GeometryStatus = (MessageType)math.max((int)m_GeometryStatus, (int)MessageType.Warning);
- }
- if ((m_GeometryState & GeometryState.MeshWithSkinnedPoints) == GeometryState.MeshWithSkinnedPoints)
- {
- m_GeometryStatusMessages.Add(Styles.GetMeshWithSkinnedPointsWarning(targets.Length));
- m_GeometryStatus = (MessageType)math.max((int)m_GeometryStatus, (int)MessageType.Warning);
- }
- }
-
- void DisplayShapeSelector()
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_ShapeType);
- if (!EditorGUI.EndChangeCheck())
- return;
-
- Undo.RecordObjects(targets, Styles.GenericUndoMessage);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- switch ((ShapeType)m_ShapeType.intValue)
- {
- case ShapeType.Box:
- shape.SetBox(shape.GetBoxProperties(out var orientation), orientation);
- break;
- case ShapeType.Capsule:
- shape.SetCapsule(shape.GetCapsuleProperties());
- break;
- case ShapeType.Sphere:
- shape.SetSphere(shape.GetSphereProperties(out orientation), orientation);
- break;
- case ShapeType.Cylinder:
- shape.SetCylinder(shape.GetCylinderProperties(out orientation), orientation);
- break;
- case ShapeType.Plane:
- shape.GetPlaneProperties(out var center, out var size2D, out orientation);
- shape.SetPlane(center, size2D, orientation);
- break;
- case ShapeType.ConvexHull:
- case ShapeType.Mesh:
- return;
- default:
- throw new UnimplementedShapeException((ShapeType)m_ShapeType.intValue);
- }
- EditorUtility.SetDirty(shape);
- }
-
- GUIUtility.ExitGUI();
- }
-
- void AutomaticPrimitiveControls()
- {
- EditorGUI.BeginDisabledGroup(
- (m_GeometryState & GeometryState.NoGeometry) == GeometryState.NoGeometry || EditorUtility.IsPersistent(target)
- );
-
- var buttonLabel = Styles.GetFitToRenderMeshesLabel(targets.Length, m_MatrixStatus);
-
- var rect = EditorGUI.IndentedRect(
- EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight, EditorStyles.miniButton)
- );
-
- if (GUI.Button(rect, buttonLabel, Styles.ButtonDropDown))
- m_DropDown = FitToRenderMeshesDropDown.Show(rect, buttonLabel.text, m_MinimumSkinnedVertexWeight);
-
- EditorGUI.EndDisabledGroup();
- }
-
- class FitToRenderMeshesDropDown : EditorWindow
- {
- static class Styles
- {
- public const float WindowWidth = 400f;
- public const float LabelWidth = 200f;
- public static GUIStyle Button => PhysicsShapeAuthoringEditor.Styles.Button;
- }
-
- static class Content
- {
- public static readonly string ApplyLabel = L10n.Tr("Apply");
- public static readonly string CancelLabel = L10n.Tr("Cancel");
- }
-
- bool m_ApplyChanges;
- bool m_ClosedWithoutUndo;
- int m_UndoGroup;
- SerializedProperty m_MinimumSkinnedVertexWeight;
-
- public static FitToRenderMeshesDropDown Show(
- Rect buttonRect, string title, SerializedProperty minimumSkinnedVertexWeight
- )
- {
- var window = CreateInstance();
- window.titleContent = EditorGUIUtility.TrTextContent(title);
- window.m_UndoGroup = Undo.GetCurrentGroup();
- window.m_MinimumSkinnedVertexWeight = minimumSkinnedVertexWeight;
- var size = new Vector2(
- math.max(buttonRect.width, Styles.WindowWidth),
- (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing) * 3f
- );
- window.maxSize = window.minSize = size;
- window.ShowAsDropDown(GUIUtility.GUIToScreenRect(buttonRect), size);
- return window;
- }
-
- void OnGUI()
- {
- var labelWidth = EditorGUIUtility.labelWidth;
- EditorGUIUtility.labelWidth = Styles.LabelWidth;
-
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_MinimumSkinnedVertexWeight);
- if (EditorGUI.EndChangeCheck())
- ApplyChanges();
-
- EditorGUIUtility.labelWidth = labelWidth;
-
- GUILayout.FlexibleSpace();
-
- var buttonRect = GUILayoutUtility.GetRect(0f, EditorGUIUtility.singleLineHeight);
-
- var buttonLeft = new Rect(buttonRect)
- {
- width = 0.5f * (buttonRect.width - EditorGUIUtility.standardVerticalSpacing)
- };
- var buttonRight = new Rect(buttonLeft)
- {
- x = buttonLeft.xMax + EditorGUIUtility.standardVerticalSpacing
- };
-
- var close = false;
-
- buttonRect = Application.platform == RuntimePlatform.OSXEditor ? buttonLeft : buttonRight;
- if (
- GUI.Button(buttonRect, Content.CancelLabel, Styles.Button)
- || Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape
- )
- {
- close = true;
- }
-
- buttonRect = Application.platform == RuntimePlatform.OSXEditor ? buttonRight : buttonLeft;
- if (GUI.Button(buttonRect, Content.ApplyLabel, Styles.Button))
- {
- close = true;
- m_ApplyChanges = true;
- }
-
- if (close)
- {
- Close();
- EditorGUIUtility.ExitGUI();
- }
- }
-
- void ApplyChanges()
- {
- m_MinimumSkinnedVertexWeight.serializedObject.ApplyModifiedProperties();
- Undo.RecordObjects(m_MinimumSkinnedVertexWeight.serializedObject.targetObjects, titleContent.text);
- foreach (PhysicsShapeAuthoring shape in m_MinimumSkinnedVertexWeight.serializedObject.targetObjects)
- {
- using (var so = new SerializedObject(shape))
- {
- shape.FitToEnabledRenderMeshes(
- so.FindProperty(m_MinimumSkinnedVertexWeight.propertyPath).floatValue
- );
- EditorUtility.SetDirty(shape);
- }
- }
- m_MinimumSkinnedVertexWeight.serializedObject.Update();
- }
-
- public void CloseWithoutUndo()
- {
- m_ApplyChanges = true;
- Close();
- }
-
- void OnDestroy()
- {
- if (m_ApplyChanges)
- ApplyChanges();
- else
- Undo.RevertAllDownToGroup(m_UndoGroup);
- }
- }
-
- void DisplayBoxControls()
- {
- EditorGUILayout.PropertyField(m_PrimitiveSize, Styles.SizeLabel, true);
-
- EditorGUILayout.PropertyField(m_PrimitiveCenter, Styles.CenterLabel, true);
- EditorGUILayout.PropertyField(m_PrimitiveOrientation, Styles.OrientationLabel, true);
-
- EditorGUILayout.PropertyField(m_BevelRadius);
- }
-
- void DisplayCapsuleControls()
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_Capsule);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObjects(targets, Styles.GenericUndoMessage);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- shape.SetCapsule(shape.GetCapsuleProperties());
- EditorUtility.SetDirty(shape);
- }
- }
-
- EditorGUILayout.PropertyField(m_PrimitiveCenter, Styles.CenterLabel, true);
- EditorGUILayout.PropertyField(m_PrimitiveOrientation, Styles.OrientationLabel, true);
- }
-
- void DisplaySphereControls()
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_SphereRadius, Styles.RadiusLabel);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObjects(targets, Styles.GenericUndoMessage);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- shape.SetSphere(shape.GetSphereProperties(out EulerAngles orientation), orientation);
- EditorUtility.SetDirty(shape);
- }
- }
-
- EditorGUILayout.PropertyField(m_PrimitiveCenter, Styles.CenterLabel, true);
- EditorGUILayout.PropertyField(m_PrimitiveOrientation, Styles.OrientationLabel, true);
- }
-
- void DisplayCylinderControls()
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_Cylinder);
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObjects(targets, Styles.GenericUndoMessage);
- foreach (PhysicsShapeAuthoring shape in targets)
- {
- shape.SetCylinder(shape.GetCylinderProperties(out var orientation), orientation);
- EditorUtility.SetDirty(shape);
- }
- }
-
- EditorGUILayout.PropertyField(m_PrimitiveCenter, Styles.CenterLabel, true);
- EditorGUILayout.PropertyField(m_PrimitiveOrientation, Styles.OrientationLabel, true);
-
- EditorGUILayout.PropertyField(m_CylinderSideCount, Styles.CylinderSideCountLabel);
-
- EditorGUILayout.PropertyField(m_BevelRadius);
- }
-
- void DisplayPlaneControls()
- {
- EditorGUILayout.PropertyField(m_PrimitiveSize, Styles.SizeLabel, true);
-
- EditorGUILayout.PropertyField(m_PrimitiveCenter, Styles.CenterLabel, true);
- EditorGUILayout.PropertyField(m_PrimitiveOrientation, Styles.OrientationLabel, true);
- }
-
- void DisplayMeshControls()
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_CustomMesh);
- if (EditorGUI.EndChangeCheck())
- {
- serializedObject.ApplyModifiedProperties();
- serializedObject.Update();
- }
-
- if (m_GeometryStatusMessages.Count > 0)
- EditorGUILayout.HelpBox(string.Join("\n\n", m_GeometryStatusMessages), m_GeometryStatus);
- }
-
- static readonly BeveledBoxBoundsHandle s_Box = new BeveledBoxBoundsHandle();
- static readonly PhysicsCapsuleBoundsHandle s_Capsule =
- new PhysicsCapsuleBoundsHandle { heightAxis = CapsuleBoundsHandle.HeightAxis.Z };
- static readonly BeveledCylinderBoundsHandle s_Cylinder = new BeveledCylinderBoundsHandle();
- static readonly PhysicsSphereBoundsHandle s_Sphere = new PhysicsSphereBoundsHandle();
- static readonly BoxBoundsHandle s_Plane =
- new BoxBoundsHandle { axes = PrimitiveBoundsHandle.Axes.X | PrimitiveBoundsHandle.Axes.Z };
-
- static readonly Color k_ShapeHandleColor = new Color32(145, 244, 139, 210);
- static readonly Color k_ShapeHandleColorDisabled = new Color32(84, 200, 77, 140);
-
- void OnSceneGUI()
- {
- var hotControl = GUIUtility.hotControl;
- switch (Event.current.GetTypeForControl(hotControl))
- {
- case EventType.MouseDrag:
- m_DraggingControlID = hotControl;
- break;
- case EventType.MouseUp:
- m_DraggingControlID = 0;
- break;
- }
-
- var shape = target as PhysicsShapeAuthoring;
-
- var handleColor = shape.enabled ? k_ShapeHandleColor : k_ShapeHandleColorDisabled;
- var handleMatrix = shape.GetShapeToWorldMatrix();
- using (new Handles.DrawingScope(handleColor, handleMatrix))
- {
- switch (shape.ShapeType)
- {
- case ShapeType.Box:
- var boxGeometry = shape.GetBakedBoxProperties();
- s_Box.bevelRadius = boxGeometry.BevelRadius;
- s_Box.center = float3.zero;
- s_Box.size = boxGeometry.Size;
- EditorGUI.BeginChangeCheck();
- {
- using (new Handles.DrawingScope(math.mul(Handles.matrix, float4x4.TRS(boxGeometry.Center, boxGeometry.Orientation, 1f))))
- s_Box.DrawHandle();
- }
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(shape, Styles.GenericUndoMessage);
- shape.SetBakedBoxSize(s_Box.size, s_Box.bevelRadius);
- }
- break;
- case ShapeType.Capsule:
- s_Capsule.center = float3.zero;
- var capsuleGeometry = shape.GetBakedCapsuleProperties();
- s_Capsule.height = capsuleGeometry.Height;
- s_Capsule.radius = capsuleGeometry.Radius;
- EditorGUI.BeginChangeCheck();
- {
- using (new Handles.DrawingScope(math.mul(Handles.matrix, float4x4.TRS(capsuleGeometry.Center, capsuleGeometry.Orientation, 1f))))
- s_Capsule.DrawHandle();
- }
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(shape, Styles.GenericUndoMessage);
- shape.SetBakedCapsuleSize(s_Capsule.height, s_Capsule.radius);
- }
- break;
- case ShapeType.Sphere:
- var sphereGeometry = shape.GetBakedSphereProperties(out EulerAngles orientation);
- s_Sphere.center = float3.zero;
- s_Sphere.radius = sphereGeometry.Radius;
- EditorGUI.BeginChangeCheck();
- {
- using (new Handles.DrawingScope(math.mul(Handles.matrix, float4x4.TRS(sphereGeometry.Center, orientation, 1f))))
- s_Sphere.DrawHandle();
- }
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(shape, Styles.GenericUndoMessage);
- shape.SetBakedSphereRadius(s_Sphere.radius);
- }
- break;
- case ShapeType.Cylinder:
- var cylinderGeometry = shape.GetBakedCylinderProperties();
- s_Cylinder.center = float3.zero;
- s_Cylinder.height = cylinderGeometry.Height;
- s_Cylinder.radius = cylinderGeometry.Radius;
- s_Cylinder.sideCount = cylinderGeometry.SideCount;
- s_Cylinder.bevelRadius = cylinderGeometry.BevelRadius;
- EditorGUI.BeginChangeCheck();
- {
- using (new Handles.DrawingScope(math.mul(Handles.matrix, float4x4.TRS(cylinderGeometry.Center, cylinderGeometry.Orientation, 1f))))
- s_Cylinder.DrawHandle();
- }
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(shape, Styles.GenericUndoMessage);
- shape.SetBakedCylinderSize(s_Cylinder.height, s_Cylinder.radius, s_Cylinder.bevelRadius);
- }
- break;
- case ShapeType.Plane:
- shape.GetPlaneProperties(out var center, out var size2, out orientation);
- s_Plane.center = float3.zero;
- s_Plane.size = new float3(size2.x, 0f, size2.y);
- EditorGUI.BeginChangeCheck();
- {
- var m = math.mul(shape.transform.localToWorldMatrix, float4x4.TRS(center, orientation, 1f));
- using (new Handles.DrawingScope(m))
- s_Plane.DrawHandle();
- var right = math.mul(m, new float4 { x = 1f }).xyz;
- var forward = math.mul(m, new float4 { z = 1f }).xyz;
- var normal = math.cross(math.normalizesafe(forward), math.normalizesafe(right))
- * 0.5f * math.lerp(math.length(right) * size2.x, math.length(forward) * size2.y, 0.5f);
-
- using (new Handles.DrawingScope(float4x4.identity))
- Handles.DrawLine(m.c3.xyz, m.c3.xyz + normal);
- }
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(shape, Styles.GenericUndoMessage);
- shape.SetBakedPlaneSize(((float3)s_Plane.size).xz);
- }
- break;
- case ShapeType.ConvexHull:
- if (Event.current.type != EventType.Repaint)
- break;
- var points = GetPreviewData(shape).Edges;
- // TODO: follow transformation until new preview is generated if e.g., user is dragging handles
- if (points.Length > 0)
- Handles.DrawLines(points);
- break;
- case ShapeType.Mesh:
- if (Event.current.type != EventType.Repaint)
- break;
- points = GetPreviewData(shape).Edges;
- if (points.Length > 0)
- Handles.DrawLines(points);
- break;
- default:
- throw new UnimplementedShapeException(shape.ShapeType);
- }
- }
- }
-
- // ReSharper disable once UnusedMember.Global - magic method called by unity inspector
- public bool HasFrameBounds()
- {
- return true;
- }
-
- static Bounds TransformBounds(Bounds localBounds, float4x4 matrix)
- {
- var center = new float4(localBounds.center, 1);
- Bounds bounds = new Bounds(math.mul(matrix, center).xyz, Vector3.zero);
- var extent = new float4(localBounds.extents, 0);
- for (int i = 0; i < 8; ++i)
- {
- extent.x = (i & 1) == 0 ? -extent.x : extent.x;
- extent.y = (i & 2) == 0 ? -extent.y : extent.y;
- extent.z = (i & 4) == 0 ? -extent.z : extent.z;
- var worldPoint = math.mul(matrix, center + extent).xyz;
- bounds.Encapsulate(worldPoint);
- }
- return bounds;
- }
-
- // ReSharper disable once UnusedMember.Global - magic method called by unity inspector
- public Bounds OnGetFrameBounds()
- {
- var shape = target as PhysicsShapeAuthoring;
-
- var shapeMatrix = shape.GetShapeToWorldMatrix();
- Bounds bounds = new Bounds();
- switch (shape.ShapeType)
- {
- case ShapeType.Box:
- var boxGeometry = shape.GetBakedBoxProperties();
- bounds = new Bounds(float3.zero, boxGeometry.Size);
- bounds = TransformBounds(bounds, float4x4.TRS(boxGeometry.Center, boxGeometry.Orientation, 1f));
- break;
- case ShapeType.Capsule:
- var capsuleGeometry = shape.GetBakedCapsuleProperties();
- var cd = capsuleGeometry.Radius * 2;
- bounds = new Bounds(float3.zero, new float3(cd, cd, capsuleGeometry.Height));
- bounds = TransformBounds(bounds, float4x4.TRS(capsuleGeometry.Center, capsuleGeometry.Orientation, 1f));
- break;
- case ShapeType.Sphere:
- var sphereGeometry = shape.GetBakedSphereProperties(out var orientation);
- var sd = sphereGeometry.Radius * 2;
- bounds = new Bounds(sphereGeometry.Center, new float3(sd, sd, sd));
- break;
- case ShapeType.Cylinder:
- var cylinderGeometry = shape.GetBakedCylinderProperties();
- var cyld = cylinderGeometry.Radius * 2;
- bounds = new Bounds(float3.zero, new float3(cyld, cyld, cylinderGeometry.Height));
- bounds = TransformBounds(bounds, float4x4.TRS(cylinderGeometry.Center, cylinderGeometry.Orientation, 1f));
- break;
- case ShapeType.Plane:
- shape.GetPlaneProperties(out var center, out var size2, out orientation);
- bounds = new Bounds(float3.zero, new float3(size2.x, 0, size2.y));
- bounds = TransformBounds(bounds, float4x4.TRS(center, orientation, 1f));
- break;
- case ShapeType.ConvexHull:
- case ShapeType.Mesh:
- var previewData = GetPreviewData(shape);
- if (previewData != null)
- bounds = new Bounds(previewData.Bounds.Center, previewData.Bounds.Extents);
- break;
- default:
- throw new UnimplementedShapeException(shape.ShapeType);
- }
-
- return TransformBounds(bounds, shapeMatrix);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs.meta
deleted file mode 100644
index 5fc92bd4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/PhysicsShapeAuthoringEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 209b4a4e54f038844baf182ae186f813
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs
deleted file mode 100644
index f74da3ed..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-#if UNITY_EDITOR
-
-using UnityEditor;
-using UnityEditor.IMGUI.Controls;
-using UnityEngine;
-using Unity.Mathematics;
-using Unity.Physics.Authoring;
-
-namespace Unity.Physics.Editor
-{
- [CustomEditor(typeof(RagdollJoint))]
- public class RagdollJointEditor : UnityEditor.Editor
- {
- private EditorUtilities.AxisEditor m_AxisEditor = new EditorUtilities.AxisEditor();
- private JointAngularLimitHandle m_LimitHandle = new JointAngularLimitHandle();
-
- public override void OnInspectorGUI()
- {
- RagdollJoint ragdoll = (RagdollJoint)target;
-
- EditorGUI.BeginChangeCheck();
-
- GUILayout.BeginVertical();
- GUILayout.Space(10.0f);
-
- GUILayout.BeginHorizontal();
- GUILayout.Label("Editors:");
- ragdoll.EditPivots = GUILayout.Toggle(ragdoll.EditPivots, new GUIContent("Pivot"), "Button");
- ragdoll.EditAxes = GUILayout.Toggle(ragdoll.EditAxes, new GUIContent("Axis"), "Button");
- ragdoll.EditLimits = GUILayout.Toggle(ragdoll.EditLimits, new GUIContent("Limits"), "Button");
- GUILayout.EndHorizontal();
-
- GUILayout.Space(10.0f);
- GUILayout.EndVertical();
-
- DrawDefaultInspector();
-
- if (EditorGUI.EndChangeCheck())
- {
- SceneView.RepaintAll();
- }
- }
-
- private static void DrawCone(float3 point, float3 axis, float angle, Color color)
- {
-#if UNITY_EDITOR
- Handles.color = color;
-
- float3 dir;
- float scale = Math.NormalizeWithLength(axis, out dir);
-
- float3 arm;
- {
- float3 perp1, perp2;
- Math.CalculatePerpendicularNormalized(dir, out perp1, out perp2);
- arm = math.mul(quaternion.AxisAngle(perp1, angle), dir) * scale;
- }
-
- const int res = 16;
- quaternion q = quaternion.AxisAngle(dir, 2.0f * (float)math.PI / res);
- for (int i = 0; i < res; i++)
- {
- float3 nextArm = math.mul(q, arm);
- Handles.DrawLine(point, point + arm);
- Handles.DrawLine(point + arm, point + nextArm);
- arm = nextArm;
- }
-#endif
- }
-
- protected virtual void OnSceneGUI()
- {
- RagdollJoint ragdoll = (RagdollJoint)target;
-
- bool drawCones = false;
- if (ragdoll.EditPivots)
- {
- EditorUtilities.EditPivot(ragdoll.worldFromA, ragdoll.worldFromB, ragdoll.AutoSetConnected,
- ref ragdoll.PositionLocal, ref ragdoll.PositionInConnectedEntity, ragdoll);
- }
- if (ragdoll.EditAxes)
- {
- m_AxisEditor.Update(ragdoll.worldFromA, ragdoll.worldFromB, ragdoll.AutoSetConnected,
- ragdoll.PositionLocal, ragdoll.PositionInConnectedEntity, ref ragdoll.TwistAxisLocal, ref ragdoll.TwistAxisInConnectedEntity,
- ref ragdoll.PerpendicularAxisLocal, ref ragdoll.PerpendicularAxisInConnectedEntity, ragdoll);
- drawCones = true;
- }
- if (ragdoll.EditLimits)
- {
- EditorUtilities.EditLimits(ragdoll.worldFromA, ragdoll.worldFromB, ragdoll.PositionLocal, ragdoll.TwistAxisLocal, ragdoll.TwistAxisInConnectedEntity,
- ragdoll.PerpendicularAxisLocal, ragdoll.PerpendicularAxisInConnectedEntity, ref ragdoll.MinTwistAngle, ref ragdoll.MaxTwistAngle, m_LimitHandle, ragdoll);
- }
-
- if (drawCones)
- {
- float3 pivotB = math.transform(ragdoll.worldFromB, ragdoll.PositionInConnectedEntity);
- float3 axisB = math.rotate(ragdoll.worldFromB, ragdoll.TwistAxisInConnectedEntity);
- DrawCone(pivotB, axisB, math.radians(ragdoll.MaxConeAngle), Color.yellow);
-
- float3 perpendicularB = math.rotate(ragdoll.worldFromB, ragdoll.PerpendicularAxisInConnectedEntity);
- DrawCone(pivotB, perpendicularB, math.radians(ragdoll.MinPerpendicularAngle + 90f), Color.red);
- DrawCone(pivotB, perpendicularB, math.radians(ragdoll.MaxPerpendicularAngle + 90f), Color.red);
- }
- }
- }
-}
-
-#endif
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs.meta
deleted file mode 100644
index acb6b349..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Editors/RagdollJointEditor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4c97c008c29536647add5a287db56ae2
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers.meta
deleted file mode 100644
index be02863e..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 23d0032aba561954aaf56c65acf751bd
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs
deleted file mode 100644
index db2bae7e..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- abstract class BaseDrawer : PropertyDrawer
- {
- protected abstract bool IsCompatible(SerializedProperty property);
-
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- return IsCompatible(property)
- ? EditorGUI.GetPropertyHeight(property)
- : EditorGUIUtility.singleLineHeight;
- }
-
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- if (IsCompatible(property))
- DoGUI(position, property, label);
- else
- EditorGUIControls.DisplayCompatibilityWarning(position, label, ObjectNames.NicifyVariableName(GetType().Name));
- }
-
- protected abstract void DoGUI(Rect position, SerializedProperty property, GUIContent label);
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs.meta
deleted file mode 100644
index 67d1cab5..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/BaseDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: a4ce107efdd5d5f439469b8b109f601f
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs
deleted file mode 100644
index 8f57673f..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(EnumFlagsAttribute))]
- class EnumFlagsDrawer : BaseDrawer
- {
- protected override bool IsCompatible(SerializedProperty property)
- {
- return property.propertyType == SerializedPropertyType.Enum;
- }
-
- protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- EditorGUI.BeginProperty(position, label, property);
-
- var value = property.longValue;
- EditorGUI.BeginChangeCheck();
- value = Convert.ToInt64(
- EditorGUI.EnumFlagsField(position, label, (Enum)Enum.ToObject(fieldInfo.FieldType, value))
- );
- if (EditorGUI.EndChangeCheck())
- property.longValue = value;
-
- EditorGUI.EndProperty();
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs.meta
deleted file mode 100644
index eef88b76..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EnumFlagsDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 91d983b20a4beed4794e82ce61acb452
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs
deleted file mode 100644
index 01326892..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(EulerAngles))]
- class EulerAnglesDrawer : BaseDrawer
- {
- protected override bool IsCompatible(SerializedProperty property) => true;
-
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- var value = property.FindPropertyRelative(nameof(EulerAngles.Value));
- return EditorGUI.GetPropertyHeight(value);
- }
-
- protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- var value = property.FindPropertyRelative(nameof(EulerAngles.Value));
- EditorGUI.PropertyField(position, value, label, true);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs.meta
deleted file mode 100644
index d3352ae3..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/EulerAnglesDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: aa19ca1ba7846e443a44ba0fff644d17
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs
deleted file mode 100644
index d0865e3f..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(ExpandChildrenAttribute))]
- class ExpandChildrenDrawer : PropertyDrawer
- {
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- property.isExpanded = true;
- return EditorGUI.GetPropertyHeight(property)
- - EditorGUIUtility.standardVerticalSpacing
- - EditorGUIUtility.singleLineHeight;
- }
-
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- var endProperty = property.GetEndProperty();
- var childProperty = property.Copy();
- childProperty.NextVisible(true);
- while (!SerializedProperty.EqualContents(childProperty, endProperty))
- {
- position.height = EditorGUI.GetPropertyHeight(childProperty);
- OnChildPropertyGUI(position, childProperty);
- position.y += position.height + EditorGUIUtility.standardVerticalSpacing;
- childProperty.NextVisible(false);
- }
- }
-
- protected virtual void OnChildPropertyGUI(Rect position, SerializedProperty childProperty)
- {
- EditorGUI.PropertyField(position, childProperty, true);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs.meta
deleted file mode 100644
index 2f3ade5c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/ExpandChildrenDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 0c02598cdac1be04a9039046cc3b8459
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs
deleted file mode 100644
index 1f690ba0..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(PhysicsMaterialCoefficient))]
- class PhysicsMaterialCoefficientDrawer : BaseDrawer
- {
- static class Styles
- {
- public const float PopupWidth = 100f;
- }
-
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label) =>
- EditorGUIUtility.singleLineHeight;
-
- protected override bool IsCompatible(SerializedProperty property) => true;
-
- protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- EditorGUI.BeginProperty(position, label, property);
- EditorGUI.PropertyField(
- new Rect(position) { xMax = position.xMax - Styles.PopupWidth },
- property.FindPropertyRelative("Value"),
- label
- );
-
- var indent = EditorGUI.indentLevel;
- EditorGUI.indentLevel = 0;
- EditorGUI.PropertyField(
- new Rect(position) { xMin = position.xMax - Styles.PopupWidth + EditorGUIUtility.standardVerticalSpacing },
- property.FindPropertyRelative("CombineMode"),
- GUIContent.none
- );
- EditorGUI.indentLevel = indent;
- EditorGUI.EndProperty();
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs.meta
deleted file mode 100644
index 775e0a20..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialCoefficientDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 637c07be1ce65064687a822ad33de1aa
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs
deleted file mode 100644
index a0140fff..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-using System.Collections.Generic;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(PhysicsMaterialProperties))]
- class PhysicsMaterialPropertiesDrawer : BaseDrawer
- {
- static class Content
- {
- public static readonly GUIContent AdvancedGroupFoldout = EditorGUIUtility.TrTextContent("Advanced");
- public static readonly GUIContent BelongsToLabel = EditorGUIUtility.TrTextContent(
- "Belongs To",
- "Specifies the categories to which this object belongs."
- );
- public static readonly GUIContent CollidesWithLabel = EditorGUIUtility.TrTextContent(
- "Collides With",
- "Specifies the categories of objects with which this object will collide, " +
- "or with which it will raise events if intersecting a trigger."
- );
- public static readonly GUIContent CollisionFilterGroupFoldout =
- EditorGUIUtility.TrTextContent("Collision Filter");
- public static readonly GUIContent CustomFlagsLabel =
- EditorGUIUtility.TrTextContent("Custom Tags", "Specify custom tags to read at run-time.");
- public static readonly GUIContent FrictionLabel = EditorGUIUtility.TrTextContent(
- "Friction",
- "Specifies how resistant the body is to motion when sliding along other surfaces, " +
- "as well as what value should be used when colliding with an object that has a different value."
- );
- public static readonly GUIContent RestitutionLabel = EditorGUIUtility.TrTextContent(
- "Restitution",
- "Specifies how bouncy the object will be when colliding with other surfaces, " +
- "as well as what value should be used when colliding with an object that has a different value."
- );
- public static readonly GUIContent CollisionResponseLabel = EditorGUIUtility.TrTextContent(
- "Collision Response",
- "Specifies whether the shape should collide normally, raise trigger events when intersecting other shapes, " +
- "collide normally and raise notifications of collision events with other shapes, " +
- "or completely ignore collisions (but still move and intercept queries)."
- );
- }
-
- const string k_CollisionFilterGroupKey = "m_BelongsToCategories";
- const string k_AdvancedGroupKey = "m_CustomMaterialTags";
-
- Dictionary m_SerializedTemplates = new Dictionary();
-
- SerializedProperty GetTemplateValueProperty(SerializedProperty property)
- {
- var key = property.propertyPath;
- var template = property.FindPropertyRelative("m_Template").objectReferenceValue;
- SerializedObject serializedTemplate;
- if (
- !m_SerializedTemplates.TryGetValue(key, out serializedTemplate)
- || serializedTemplate?.targetObject != template
- )
- m_SerializedTemplates[key] = serializedTemplate = template == null ? null : new SerializedObject(template);
- serializedTemplate?.Update();
- return serializedTemplate?.FindProperty("m_Value");
- }
-
- void FindToggleAndValueProperties(
- SerializedProperty property, SerializedProperty templateValueProperty, string relativePath,
- out SerializedProperty toggle, out SerializedProperty value
- )
- {
- var relative = property.FindPropertyRelative(relativePath);
- toggle = relative.FindPropertyRelative("m_Override");
- value = toggle.boolValue || templateValueProperty == null
- ? relative.FindPropertyRelative("m_Value")
- : templateValueProperty.FindPropertyRelative(relativePath).FindPropertyRelative("m_Value");
- }
-
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- var templateValueProperty = GetTemplateValueProperty(property);
-
- // m_CollisionResponse, collision filter foldout, advanced foldout
- var height = 3f * EditorGUIUtility.singleLineHeight + 2f * EditorGUIUtility.standardVerticalSpacing;
-
- // m_BelongsTo, m_CollidesWith
- var group = property.FindPropertyRelative(k_CollisionFilterGroupKey);
- if (group.isExpanded)
- height += 2f * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing);
-
- // m_CustomTags
- group = property.FindPropertyRelative(k_AdvancedGroupKey);
- if (group.isExpanded)
- height += (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing);
-
- // m_Template
- if (property.FindPropertyRelative("m_SupportsTemplate").boolValue)
- height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
-
- // m_Friction, m_Restitution
- FindToggleAndValueProperties(property, templateValueProperty, "m_CollisionResponse", out _, out var collisionResponse);
- // Check if regular collider
- CollisionResponsePolicy collisionResponseEnum = (CollisionResponsePolicy)collisionResponse.intValue;
- if (collisionResponseEnum == CollisionResponsePolicy.Collide ||
- collisionResponseEnum == CollisionResponsePolicy.CollideRaiseCollisionEvents)
- height += 2f * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing);
-
- return height;
- }
-
- protected override bool IsCompatible(SerializedProperty property) => true;
-
- static void DisplayOverridableProperty(
- Rect position, GUIContent label, SerializedProperty toggle, SerializedProperty value, bool templateAssigned
- )
- {
- if (templateAssigned)
- {
- var labelWidth = EditorGUIUtility.labelWidth;
- EditorGUIUtility.labelWidth -= 16f + EditorGUIUtility.standardVerticalSpacing;
- var togglePosition = new Rect(position) { width = EditorGUIUtility.labelWidth + 16f + EditorGUIUtility.standardVerticalSpacing };
- EditorGUI.PropertyField(togglePosition, toggle, label);
- EditorGUIUtility.labelWidth = labelWidth;
-
- EditorGUI.BeginDisabledGroup(!toggle.boolValue);
- var indent = EditorGUI.indentLevel;
- EditorGUI.indentLevel = 0;
- EditorGUI.PropertyField(new Rect(position) { xMin = togglePosition.xMax }, value, GUIContent.none, true);
- EditorGUI.indentLevel = indent;
- EditorGUI.EndDisabledGroup();
- }
- else
- {
- EditorGUI.PropertyField(position, value, label, true);
- }
- }
-
- protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- var template = property.FindPropertyRelative("m_Template");
- var templateAssigned = template.objectReferenceValue != null;
- var supportsTemplate = property.FindPropertyRelative("m_SupportsTemplate");
- if (supportsTemplate.boolValue)
- {
- position.height = EditorGUI.GetPropertyHeight(template);
- EditorGUI.PropertyField(position, template);
-
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- }
-
- var templateValue = GetTemplateValueProperty(property);
-
- FindToggleAndValueProperties(property, templateValue, "m_CollisionResponse", out var collisionResponseDropDown, out var collisionResponse);
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.CollisionResponseLabel, collisionResponseDropDown, collisionResponse, templateAssigned);
-
- SerializedProperty toggle;
-
- // Check if regular collider
- CollisionResponsePolicy collisionResponseEnum = (CollisionResponsePolicy)collisionResponse.intValue;
- if (collisionResponseEnum == CollisionResponsePolicy.Collide ||
- collisionResponseEnum == CollisionResponsePolicy.CollideRaiseCollisionEvents)
- {
- FindToggleAndValueProperties(property, templateValue, "m_Friction", out toggle, out var friction);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.FrictionLabel, toggle, friction, templateAssigned);
-
- FindToggleAndValueProperties(property, templateValue, "m_Restitution", out toggle, out var restitution);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.RestitutionLabel, toggle, restitution, templateAssigned);
- }
-
- // collision filter group
- var collisionFilterGroup = property.FindPropertyRelative(k_CollisionFilterGroupKey);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- collisionFilterGroup.isExpanded =
- EditorGUI.Foldout(position, collisionFilterGroup.isExpanded, Content.CollisionFilterGroupFoldout, true);
- if (collisionFilterGroup.isExpanded)
- {
- ++EditorGUI.indentLevel;
-
- FindToggleAndValueProperties(property, templateValue, "m_BelongsToCategories", out toggle, out var belongsTo);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.BelongsToLabel, toggle, belongsTo, templateAssigned);
-
- FindToggleAndValueProperties(property, templateValue, "m_CollidesWithCategories", out toggle, out var collidesWith);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.CollidesWithLabel, toggle, collidesWith, templateAssigned);
-
- --EditorGUI.indentLevel;
- }
-
- // advanced group
- var advancedGroup = property.FindPropertyRelative(k_AdvancedGroupKey);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- advancedGroup.isExpanded =
- EditorGUI.Foldout(position, advancedGroup.isExpanded, Content.AdvancedGroupFoldout, true);
- if (advancedGroup.isExpanded)
- {
- ++EditorGUI.indentLevel;
-
- FindToggleAndValueProperties(property, templateValue, "m_CustomMaterialTags", out toggle, out var customFlags);
- position.y = position.yMax + EditorGUIUtility.standardVerticalSpacing;
- position.height = EditorGUIUtility.singleLineHeight;
- DisplayOverridableProperty(position, Content.CustomFlagsLabel, toggle, customFlags, templateAssigned);
-
- --EditorGUI.indentLevel;
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs.meta
deleted file mode 100644
index 8931e7e0..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/PhysicsMaterialPropertiesDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 72400ec801359f34e9b82e3be224cde5
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs
deleted file mode 100644
index 66fc0f45..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [CustomPropertyDrawer(typeof(SoftRangeAttribute))]
- class SoftRangeDrawer : BaseDrawer
- {
- protected override bool IsCompatible(SerializedProperty property)
- {
- return property.propertyType == SerializedPropertyType.Float;
- }
-
- protected override void DoGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- var attr = attribute as SoftRangeAttribute;
- EditorGUIControls.SoftSlider(
- position, label, property, attr.SliderMin, attr.SliderMax, attr.TextFieldMin, attr.TextFieldMax
- );
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs.meta
deleted file mode 100644
index 17fa1735..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/SoftRangeDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b3973ec625484cb418fb92f5b2bbffdd
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs
deleted file mode 100644
index 0864bf6d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- abstract class TagsDrawer : PropertyDrawer where T : ScriptableObject, ITagNames
- {
- static class Styles
- {
- public static readonly string EverythingName = L10n.Tr("Everything");
- public static readonly string MixedName = L10n.Tr("Mixed...");
- public static readonly string NothingName = L10n.Tr("Nothing");
-
- public static readonly string MultipleAssetsTooltip =
- L10n.Tr("Multiple {0} assets found. UI will display labels defined in {1}.");
-
- public static readonly GUIContent MultipleAssetsWarning =
- new GUIContent { image = EditorGUIUtility.Load("console.warnicon") as Texture };
- }
-
- protected abstract int MaxNumCategories { get; }
- protected abstract string DefaultCategoryName { get; }
- internal string FirstChildPropertyPath { get; set; } // TODO: remove when all usages of bool[] are migrated
-
- string DefaultFormatString => L10n.Tr($"(Undefined {DefaultCategoryName})");
-
- string[] DefaultOptions =>
- m_DefaultOptions ?? (
- m_DefaultOptions =
- Enumerable.Range(0, MaxNumCategories)
- .Select(i => string.Format(DefaultFormatString, i))
- .ToArray()
- );
- string[] m_DefaultOptions;
-
- string[] GetOptions()
- {
- if (m_Options != null)
- return m_Options;
-
- var guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}");
- m_NamesAssets = guids
- .Select(AssetDatabase.GUIDToAssetPath)
- .Select(AssetDatabase.LoadAssetAtPath)
- .Where(c => c != null)
- .ToArray();
-
- m_Options = m_NamesAssets.FirstOrDefault()?.TagNames.ToArray() ?? DefaultOptions;
- for (var i = 0; i < m_Options.Length; ++i)
- {
- if (string.IsNullOrEmpty(m_Options[i]))
- m_Options[i] = DefaultOptions[i];
-
- m_Options[i] = $"{i}: {m_Options[i]}";
- }
-
- return m_Options;
- }
-
- string[] m_Options;
-
- static string GetButtonLabel(int value, IReadOnlyList optionNames)
- {
- switch (value)
- {
- case 0:
- return Styles.NothingName;
- case ~0:
- return Styles.EverythingName;
- default:
- {
- for (var i = 0; i < 32; i++)
- {
- if (value == 1 << i)
- return optionNames[i];
- }
- break;
- }
- }
- return Styles.MixedName;
- }
-
- T[] m_NamesAssets;
-
- // TODO: remove when all usages of bool[] are migrated
- SerializedProperty GetFirstChildProperty(SerializedProperty property)
- {
- if (!string.IsNullOrEmpty(FirstChildPropertyPath))
- return property.FindPropertyRelative(FirstChildPropertyPath);
- var sp = property.Copy();
- sp.NextVisible(true);
- return sp;
- }
-
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- if (m_NamesAssets?.Length > 1)
- position.xMax -= EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
-
- EditorGUI.BeginProperty(position, label, property);
-
- var controlPosition = EditorGUI.PrefixLabel(position, label);
-
- var indent = EditorGUI.indentLevel;
- EditorGUI.indentLevel = 0;
- var showMixed = EditorGUI.showMixedValue;
-
- var value = 0;
- var everything = 0;
- var sp = GetFirstChildProperty(property);
- for (int i = 0, count = MaxNumCategories; i < count; ++i)
- {
- EditorGUI.showMixedValue |= sp.hasMultipleDifferentValues;
- value |= sp.boolValue ? 1 << i : 0;
- everything |= 1 << i;
- sp.NextVisible(false);
- }
- // in case size is smaller than 32
- if (value == everything)
- value = ~0;
-
- var options = GetOptions();
- if (
- EditorGUI.DropdownButton(
- controlPosition,
- EditorGUIUtility.TrTempContent(GetButtonLabel(value, options)),
- FocusType.Passive,
- EditorStyles.popup
- )
- )
- {
- var menu = new GenericMenu();
-
- menu.AddItem(
- new GUIContent(Styles.NothingName),
- value == 0,
- () =>
- {
- sp = GetFirstChildProperty(property);
- for (int i = 0, count = MaxNumCategories; i < count; ++i)
- {
- sp.boolValue = false;
- sp.NextVisible(false);
- }
- sp.serializedObject.ApplyModifiedProperties();
- }
- );
-
- menu.AddItem(
- new GUIContent(Styles.EverythingName),
- value == ~0,
- () =>
- {
- sp = GetFirstChildProperty(property);
- for (int i = 0, count = MaxNumCategories; i < count; ++i)
- {
- sp.boolValue = true;
- sp.NextVisible(false);
- }
- sp.serializedObject.ApplyModifiedProperties();
- }
- );
-
- for (var option = 0; option < options.Length; ++option)
- {
- var callbackValue = option;
- menu.AddItem(
- EditorGUIUtility.TrTextContent(options[option]),
- ((1 << option) & value) != 0,
- args =>
- {
- var changedBitAndValue = (KeyValuePair)args;
- sp = GetFirstChildProperty(property);
- for (int i = 0, count = changedBitAndValue.Key; i < count; ++i)
- sp.NextVisible(false);
- sp.boolValue = changedBitAndValue.Value;
- sp.serializedObject.ApplyModifiedProperties();
- },
- new KeyValuePair(callbackValue, ((1 << option) & value) == 0)
- );
- }
-
- menu.AddSeparator(string.Empty);
-
- menu.AddItem(
- EditorGUIUtility.TrTempContent($"Edit {ObjectNames.NicifyVariableName(typeof(T).Name)}"),
- false,
- () =>
- {
- if (m_NamesAssets.Length > 0)
- Selection.activeObject = m_NamesAssets[0];
- else
- {
- var assetPath = AssetDatabase.GenerateUniqueAssetPath($"Assets/{typeof(T).Name}.asset");
- AssetDatabase.CreateAsset(ScriptableObject.CreateInstance(), assetPath);
- Selection.activeObject = AssetDatabase.LoadAssetAtPath(assetPath);
- m_Options = null;
- }
- }
- );
- menu.DropDown(controlPosition);
- }
-
- EditorGUI.showMixedValue = showMixed;
- EditorGUI.indentLevel = indent;
-
- EditorGUI.EndProperty();
-
- if (m_NamesAssets?.Length > 1)
- {
- var id = GUIUtility.GetControlID(FocusType.Passive);
- if (Event.current.type == EventType.Repaint)
- {
- position.width = EditorGUIUtility.singleLineHeight;
- position.x = controlPosition.xMax + EditorGUIUtility.standardVerticalSpacing;
- Styles.MultipleAssetsWarning.tooltip = string.Format(
- Styles.MultipleAssetsTooltip,
- ObjectNames.NicifyVariableName(typeof(T).Name),
- m_NamesAssets.FirstOrDefault(n => n != null)?.name
- );
- GUIStyle.none.Draw(position, Styles.MultipleAssetsWarning, id);
- }
- }
- }
- }
-
- [CustomPropertyDrawer(typeof(CustomPhysicsBodyTags))]
- class CustomBodyTagsDrawer : TagsDrawer
- {
- protected override string DefaultCategoryName => "Custom Physics Body Tag";
- protected override int MaxNumCategories => 8;
- }
-
- [CustomPropertyDrawer(typeof(CustomPhysicsMaterialTags))]
- class CustomMaterialTagsDrawer : TagsDrawer
- {
- protected override string DefaultCategoryName => "Custom Physics Material Tag";
- protected override int MaxNumCategories => 8;
- }
-
- [CustomPropertyDrawer(typeof(PhysicsCategoryTags))]
- class PhysicsCategoryTagsDrawer : TagsDrawer
- {
- protected override string DefaultCategoryName => "Physics Category";
- protected override int MaxNumCategories => 32;
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs.meta
deleted file mode 100644
index 9662c0dc..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/PropertyDrawers/TagsDrawer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: bacae2b76edd4224d8ccf21bbeb71833
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef
deleted file mode 100644
index 02245a21..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "Unity.Physics.Custom.Editor",
- "references": [
- "Unity.Burst",
- "Unity.Collections",
- "Unity.Entities",
- "Unity.Mathematics",
- "Unity.Physics",
- "Unity.Physics.Editor",
- "Unity.Physics.Hybrid",
- "Unity.Physics.Samples",
- "Unity.Physics.Custom"
- ],
- "includePlatforms": [
- "Editor"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": true,
- "overrideReferences": false,
- "precompiledReferences": [],
- "autoReferenced": true,
- "defineConstraints": [],
- "versionDefines": []
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef.meta
deleted file mode 100644
index effde57d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Unity.Physics.Custom.Editor.asmdef.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: dde4aa253ec0b874ba280d1bde6b5386
-AssemblyDefinitionImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities.meta
deleted file mode 100644
index c30fd8de..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: f3d7894b5b13854409e8c11b2c933f3e
-timeCreated: 1678290090
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs
deleted file mode 100644
index fefb5e4c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using Unity.Mathematics;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- [InitializeOnLoad]
- static class EditorGUIControls
- {
- static EditorGUIControls()
- {
- if (k_SoftSlider == null)
- Debug.LogException(new MissingMemberException("Could not find expected signature of EditorGUI.Slider() for soft slider."));
- }
-
- static class Styles
- {
- public static readonly string CompatibilityWarning = L10n.Tr("Not compatible with {0}.");
- }
-
- public static void DisplayCompatibilityWarning(Rect position, GUIContent label, string incompatibleType)
- {
- EditorGUI.HelpBox(
- EditorGUI.PrefixLabel(position, label),
- string.Format(Styles.CompatibilityWarning, incompatibleType),
- MessageType.Error
- );
- }
-
- static readonly MethodInfo k_SoftSlider = typeof(EditorGUI).GetMethod(
- "Slider",
- BindingFlags.Static | BindingFlags.NonPublic,
- null,
- new[]
- {
- typeof(Rect), // position
- typeof(GUIContent), // label
- typeof(float), // value
- typeof(float), // sliderMin
- typeof(float), // sliderMax
- typeof(float), // textFieldMin
- typeof(float) // textFieldMax
- },
- Array.Empty()
- );
-
- static readonly object[] k_SoftSliderArgs = new object[7];
-
- public static void SoftSlider(
- Rect position, GUIContent label, SerializedProperty property,
- float sliderMin, float sliderMax,
- float textFieldMin, float textFieldMax
- )
- {
- if (property.propertyType != SerializedPropertyType.Float)
- {
- DisplayCompatibilityWarning(position, label, property.propertyType.ToString());
- }
- else if (k_SoftSlider == null)
- {
- EditorGUI.BeginChangeCheck();
- EditorGUI.PropertyField(position, property, label);
- if (EditorGUI.EndChangeCheck())
- property.floatValue = math.clamp(property.floatValue, textFieldMin, textFieldMax);
- }
- else
- {
- k_SoftSliderArgs[0] = position;
- k_SoftSliderArgs[1] = label;
- k_SoftSliderArgs[2] = property.floatValue;
- k_SoftSliderArgs[3] = sliderMin;
- k_SoftSliderArgs[4] = sliderMax;
- k_SoftSliderArgs[5] = textFieldMin;
- k_SoftSliderArgs[6] = textFieldMax;
- EditorGUI.BeginProperty(position, label, property);
- EditorGUI.BeginChangeCheck();
- var result = k_SoftSlider.Invoke(null, k_SoftSliderArgs);
- if (EditorGUI.EndChangeCheck())
- property.floatValue = (float)result;
- EditorGUI.EndProperty();
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs.meta
deleted file mode 100644
index 43a11a2b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/EditorGUIControls.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 871e6b9236392b347a91f460fd84f976
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs
deleted file mode 100644
index 4810f3d6..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- enum MatrixState
- {
- UniformScale,
- NonUniformScale,
- ZeroScale,
- NotValidTRS
- }
-
- static class ManipulatorUtility
- {
- public static MatrixState GetMatrixState(ref float4x4 localToWorld)
- {
- if (
- localToWorld.c0.w != 0f
- || localToWorld.c1.w != 0f
- || localToWorld.c2.w != 0f
- || localToWorld.c3.w != 1f
- )
- return MatrixState.NotValidTRS;
-
- var m = new float3x3(localToWorld.c0.xyz, localToWorld.c1.xyz, localToWorld.c2.xyz);
- var lossyScale = new float3(math.length(m.c0.xyz), math.length(m.c1.xyz), math.length(m.c2.xyz));
- if (math.determinant(m) < 0f)
- lossyScale.x *= -1f;
- if (math.lengthsq(lossyScale) == 0f)
- return MatrixState.ZeroScale;
- return math.abs(math.cmax(lossyScale)) - math.abs(math.cmin(lossyScale)) > 0.000001f
- ? MatrixState.NonUniformScale
- : MatrixState.UniformScale;
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs.meta
deleted file mode 100644
index d280c5ae..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/ManipulatorUtility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 1ed6267b3a6f75e4aa4aca986451797e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs
deleted file mode 100644
index 344098d4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- static class SceneViewUtility
- {
- static class Styles
- {
- public static readonly GUIStyle ProgressBarTrack = new GUIStyle
- {
- fixedHeight = 4f,
- normal = new GUIStyleState { background = Texture2D.whiteTexture }
- };
- public static readonly GUIStyle ProgressBarIndicator = new GUIStyle
- {
- fixedHeight = 4f,
- normal = new GUIStyleState { background = Texture2D.whiteTexture }
- };
- public static readonly GUIStyle SceneViewStatusMessage = new GUIStyle("NotificationBackground")
- {
- fontSize = EditorStyles.label.fontSize
- };
-
- static Styles() => SceneViewStatusMessage.padding = SceneViewStatusMessage.border;
- }
-
- const string k_NotificationsPrefKey = "SceneView/Tools/Notifications";
- const bool k_DefaultNotifications = true;
- const string k_NotificationSpeedPrefKey = "SceneView/Tools/Notification Speed";
- const float k_DefaultNotificationsSpeed = 20f;
-
- const float k_NotificationDuration = 1f;
- const float k_NotificationFadeInTime = 0.04f;
- const float k_NotificationFadeOutTime = 0.2f;
- static readonly AnimationCurve k_NotificationFadeCurve = new AnimationCurve
- {
- keys = new[]
- {
- new Keyframe { time = 0f, value = 0f, outTangent = 1f / k_NotificationFadeInTime },
- new Keyframe { time = k_NotificationFadeInTime, value = 1f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_NotificationDuration - k_NotificationFadeOutTime, value = 1f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_NotificationDuration, value = 0f, inTangent = -1f / k_NotificationFadeOutTime }
- },
- postWrapMode = WrapMode.Clamp,
- preWrapMode = WrapMode.Clamp
- };
- const float k_IndeterminateProgressCurveDuration = 2f;
- static readonly AnimationCurve k_IndeterminateProgressCurveLeftMargin = new AnimationCurve
- {
- keys = new[]
- {
- new Keyframe { time = 0f, value = 0f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_IndeterminateProgressCurveDuration / 2f, value = 0.25f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_IndeterminateProgressCurveDuration, value = 1f, inTangent = 0f, outTangent = 0f }
- },
- postWrapMode = WrapMode.Loop,
- preWrapMode = WrapMode.Loop
- };
- static readonly AnimationCurve k_IndeterminateProgressCurveRightMargin = new AnimationCurve
- {
- keys = new[]
- {
- new Keyframe { time = 0f, value = 1f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_IndeterminateProgressCurveDuration / 2f, value = 0f, inTangent = 0f, outTangent = 0f },
- new Keyframe { time = k_IndeterminateProgressCurveDuration, value = 0f, inTangent = 0f, outTangent = 0f }
- },
- postWrapMode = WrapMode.Loop,
- preWrapMode = WrapMode.Loop
- };
-
- static string s_StatusMessage;
- static DateTime s_StartTime;
- static bool s_IsTemporary;
- static Func s_GetProgress;
-
- public static void DisplayProgressNotification(string message, Func getProgress) =>
- // insert an extra line to make room for progress bar
- DisplayNotificationInSceneView(getProgress == null ? message : $"{message}\n", false, getProgress);
-
- public static void DisplayPersistentNotification(string message) =>
- DisplayNotificationInSceneView(message, false, null);
-
- public static void DisplayTemporaryNotification(string message) =>
- DisplayNotificationInSceneView(message, true, null);
-
- static void DisplayNotificationInSceneView(string message, bool temporary, Func getProgress)
- {
- s_StatusMessage = message ?? string.Empty;
- s_StartTime = DateTime.Now;
- s_IsTemporary = temporary;
- s_GetProgress = getProgress;
- ClearNotificationInSceneView();
- SceneView.duringSceneGui += ToolNotificationCallback;
- SceneView.RepaintAll();
- }
-
- static void ToolNotificationCallback(SceneView obj)
- {
- if (Camera.current == null)
- return;
-
- var duration = math.max(s_StatusMessage.Length, 1)
- / EditorPrefs.GetFloat(k_NotificationSpeedPrefKey, k_DefaultNotificationsSpeed);
- var t = (float)(DateTime.Now - s_StartTime).TotalSeconds;
- if (
- s_IsTemporary
- && (t >= duration || !EditorPrefs.GetBool(k_NotificationsPrefKey, k_DefaultNotifications))
- )
- {
- ClearNotificationInSceneView();
- }
- else
- {
- Handles.BeginGUI();
- var color = GUI.color;
- var progress = s_GetProgress?.Invoke() ?? 0f;
- GUI.color *=
- new Color(1f, 1f, 1f, math.max(k_NotificationFadeCurve.Evaluate(math.abs(t) / duration), progress));
- var rect = new Rect { size = Camera.current.pixelRect.size / EditorGUIUtility.pixelsPerPoint };
- using (new GUILayout.AreaScope(rect))
- using (new GUILayout.HorizontalScope())
- {
- GUILayout.FlexibleSpace();
- using (new GUILayout.VerticalScope())
- {
- GUILayout.Space(rect.height * 0.75f);
- GUILayout.FlexibleSpace();
- var maxWidth = rect.width * 0.5f;
- GUILayout.Box(s_StatusMessage, Styles.SceneViewStatusMessage, GUILayout.MaxWidth(maxWidth));
- if (s_GetProgress != null)
- {
- rect = GUILayoutUtility.GetLastRect();
- rect = Styles.SceneViewStatusMessage.padding.Remove(rect);
- rect.y = rect.yMax - Styles.ProgressBarTrack.fixedHeight;
- rect.height = Styles.ProgressBarTrack.fixedHeight;
- var c = GUI.color;
- GUI.color *= Color.black;
- GUI.Box(rect, GUIContent.none, Styles.ProgressBarTrack);
- GUI.color = c;
- if (progress >= 0f && progress <= 1f)
- {
- rect.width *= progress;
- }
- else
- {
- var w = rect.width;
- rect.xMin = rect.xMin + w * k_IndeterminateProgressCurveLeftMargin.Evaluate(t);
- rect.xMax = rect.xMax - w * k_IndeterminateProgressCurveRightMargin.Evaluate(t);
- }
- GUI.Box(rect, GUIContent.none, Styles.ProgressBarIndicator);
- }
- GUILayout.FlexibleSpace();
- }
- GUILayout.FlexibleSpace();
- }
- GUI.color = color;
- Handles.EndGUI();
- }
-
- SceneView.RepaintAll();
- }
-
- public static void ClearNotificationInSceneView() => SceneView.duringSceneGui -= ToolNotificationCallback;
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs.meta
deleted file mode 100644
index c54b09dc..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/SceneViewUtility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b7c9bbfa7889d6e4faa42c14d33bebb7
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs
deleted file mode 100644
index ca682cc4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using Unity.Physics.Authoring;
-using UnityEditor;
-using UnityEngine;
-
-namespace Unity.Physics.Editor
-{
- static class StatusMessageUtility
- {
- public static MessageType GetHierarchyStatusMessage(IReadOnlyList targets, out string statusMessage)
- {
- statusMessage = string.Empty;
- if (targets.Count == 0)
- return MessageType.None;
-
- var numChildTargets = 0;
- foreach (Component c in targets)
- {
- // hierarchy roots and leaf shapes do not emit a message
- if (
- c == null
- || c.transform.parent == null
- || PhysicsShapeExtensions.GetPrimaryBody(c.gameObject) != c.gameObject
- )
- continue;
-
- var targetType = c.GetType();
- // only bodies (both explicit and implicit static bodies) will emit a message
- if (
- targetType == typeof(PhysicsBodyAuthoring)
- || targetType == typeof(Rigidbody)
- || c.GetComponent() == null
- && c.GetComponent() == null
- )
- ++numChildTargets;
- }
-
- switch (numChildTargets)
- {
- case 0:
- return MessageType.None;
- case 1:
- statusMessage =
- L10n.Tr("Target will be un-parented during the conversion process in order to take part in physics simulation.");
- return MessageType.Warning;
- default:
- statusMessage =
- L10n.Tr("One or more targets will be un-parented during the conversion process in order to take part in physics simulation.");
- return MessageType.Warning;
- }
- }
-
- public static MessageType GetMatrixStatusMessage(
- IReadOnlyList matrixStates, out string statusMessage
- )
- {
- statusMessage = string.Empty;
- if (matrixStates.Contains(MatrixState.NotValidTRS))
- {
- statusMessage = L10n.Tr(
- matrixStates.Count == 1
- ? "Target's local-to-world matrix is not a valid transformation."
- : "One or more targets' local-to-world matrices are not valid transformations."
- );
- return MessageType.Error;
- }
-
- if (matrixStates.Contains(MatrixState.ZeroScale))
- {
- statusMessage =
- L10n.Tr(matrixStates.Count == 1 ? "Target has zero scale." : "One or more targets has zero scale.");
- return MessageType.Warning;
- }
-
- if (matrixStates.Contains(MatrixState.NonUniformScale))
- {
- statusMessage = L10n.Tr(
- matrixStates.Count == 1
- ? "Target has non-uniform scale. Shape data will be transformed during conversion in order to bake scale into the run-time format."
- : "One or more targets has non-uniform scale. Shape data will be transformed during conversion in order to bake scale into the run-time format."
- );
- return MessageType.Warning;
- }
-
- return MessageType.None;
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs.meta
deleted file mode 100644
index 81ba94de..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.Editor/Utilities/StatusMessageUtility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 73b942099bb387a48abd183643304f85
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.meta
deleted file mode 100644
index 9399b2bb..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 447d6d85fbacd7b4ea06884cf28f875e
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs
deleted file mode 100644
index ba76fe27..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs
+++ /dev/null
@@ -1,4 +0,0 @@
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Unity.Physics.Custom.Editor")]
-[assembly: InternalsVisibleTo("Unity.Physics.Custom.EditModeTests")]
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs.meta
deleted file mode 100644
index 0b09dc44..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/AssemblyInfo.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 79534194088d466faf51dedb0dbb3012
-timeCreated: 1680051514
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs
deleted file mode 100644
index 92dcec87..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [RequireComponent(typeof(PhysicsBodyAuthoring))]
- public abstract class BaseBodyPairConnector : MonoBehaviour
- {
- public PhysicsBodyAuthoring LocalBody => GetComponent();
- public PhysicsBodyAuthoring ConnectedBody;
-
- public RigidTransform worldFromA => LocalBody == null
- ? RigidTransform.identity
- : Math.DecomposeRigidBodyTransform(LocalBody.transform.localToWorldMatrix);
-
- public RigidTransform worldFromB => ConnectedBody == null
- ? RigidTransform.identity
- : Math.DecomposeRigidBodyTransform(ConnectedBody.transform.localToWorldMatrix);
-
-
- public Entity EntityA { get; set; }
-
- public Entity EntityB { get; set; }
-
-
- void OnEnable()
- {
- // included so tick box appears in Editor
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs.meta
deleted file mode 100644
index da86e74a..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/BaseBodyPairConnector.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 239c8ffb2d0d90043a794cea1df207f7
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies.meta
deleted file mode 100644
index 84e6c879..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 67021bc32b354a27adca79ce72cc0632
-timeCreated: 1678114562
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems.meta
deleted file mode 100644
index de36531f..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: debd1c7da217451682429a0a443b3fb4
-timeCreated: 1678225532
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs
deleted file mode 100644
index de33a831..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-using System.Collections.Generic;
-using Unity.Entities;
-using Unity.Mathematics;
-using Unity.Physics.GraphicsIntegration;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [TemporaryBakingType]
- public struct PhysicsBodyAuthoringData : IComponentData
- {
- public bool IsDynamic;
- public float Mass;
- public bool OverrideDefaultMassDistribution;
- public MassDistribution CustomMassDistribution;
- }
-
- class PhysicsBodyAuthoringBaker : BasePhysicsBaker
- {
- internal List colliderComponents = new List();
- internal List physicsShapeComponents = new List();
-
- public override void Bake(PhysicsBodyAuthoring authoring)
- {
- // Priority is to Legacy Components. Ignore if baked by Legacy.
- if (GetComponent() || GetComponent())
- {
- return;
- }
-
- var entity = GetEntity(TransformUsageFlags.Dynamic);
- // To process later in the Baking System
- AddComponent(entity, new PhysicsBodyAuthoringData
- {
- IsDynamic = (authoring.MotionType == BodyMotionType.Dynamic),
- Mass = authoring.Mass,
- OverrideDefaultMassDistribution = authoring.OverrideDefaultMassDistribution,
- CustomMassDistribution = authoring.CustomMassDistribution
- });
-
- AddSharedComponent(entity, new PhysicsWorldIndex(authoring.WorldIndex));
-
- var bodyTransform = GetComponent();
-
- var motionType = authoring.MotionType;
- var hasSmoothing = authoring.Smoothing != BodySmoothing.None;
-
- PostProcessTransform(bodyTransform, motionType);
-
- var customTags = authoring.CustomTags;
- if (!customTags.Equals(CustomPhysicsBodyTags.Nothing))
- AddComponent(entity, new PhysicsCustomTags { Value = customTags.Value });
-
- // Check that there is at least one collider in the hierarchy to add these three
- GetComponentsInChildren(colliderComponents);
- GetComponentsInChildren(physicsShapeComponents);
- if (colliderComponents.Count > 0 || physicsShapeComponents.Count > 0)
- {
- AddComponent(entity, new PhysicsCompoundData()
- {
- AssociateBlobToBody = false,
- ConvertedBodyInstanceID = authoring.GetInstanceID(),
- Hash = default,
- });
- AddComponent(entity);
- AddComponent(entity);
- }
-
- if (authoring.MotionType == BodyMotionType.Static || IsStatic())
- return;
-
- var massProperties = MassProperties.UnitSphere;
-
- AddComponent(entity, authoring.MotionType == BodyMotionType.Dynamic ?
- PhysicsMass.CreateDynamic(massProperties, authoring.Mass) :
- PhysicsMass.CreateKinematic(massProperties));
-
- var physicsVelocity = new PhysicsVelocity
- {
- Linear = authoring.InitialLinearVelocity,
- Angular = authoring.InitialAngularVelocity
- };
- AddComponent(entity, physicsVelocity);
-
- if (authoring.MotionType == BodyMotionType.Dynamic)
- {
- // TODO make these optional in editor?
- AddComponent(entity, new PhysicsDamping
- {
- Linear = authoring.LinearDamping,
- Angular = authoring.AngularDamping
- });
- if (authoring.GravityFactor != 1)
- {
- AddComponent(entity, new PhysicsGravityFactor
- {
- Value = authoring.GravityFactor
- });
- }
- }
- else if (authoring.MotionType == BodyMotionType.Kinematic)
- {
- AddComponent(entity, new PhysicsGravityFactor
- {
- Value = 0
- });
- }
-
- if (hasSmoothing)
- {
- AddComponent(entity, new PhysicsGraphicalSmoothing());
- if (authoring.Smoothing == BodySmoothing.Interpolation)
- {
- AddComponent(entity, new PhysicsGraphicalInterpolationBuffer
- {
- PreviousTransform = Math.DecomposeRigidBodyTransform(bodyTransform.localToWorldMatrix),
- PreviousVelocity = physicsVelocity,
- });
- }
- }
- }
- }
-
- [RequireMatchingQueriesForUpdate]
- [UpdateAfter(typeof(EndColliderBakingSystem))]
- [WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)]
- public partial class PhysicsBodyBakingSystem : SystemBase
- {
- protected override void OnUpdate()
- {
- // Fill in the MassProperties based on the potential calculated value by BuildCompoundColliderBakingSystem
- foreach (var(physicsMass, bodyData, collider) in
- SystemAPI.Query, RefRO, RefRO>().WithOptions(EntityQueryOptions.IncludePrefab | EntityQueryOptions.IncludeDisabledEntities))
- {
- // Build mass component
- var massProperties = collider.ValueRO.MassProperties;
- if (bodyData.ValueRO.OverrideDefaultMassDistribution)
- {
- massProperties.MassDistribution = bodyData.ValueRO.CustomMassDistribution;
- // Increase the angular expansion factor to account for the shift in center of mass
- massProperties.AngularExpansionFactor += math.length(massProperties.MassDistribution.Transform.pos - bodyData.ValueRO.CustomMassDistribution.Transform.pos);
- }
-
- physicsMass.ValueRW = bodyData.ValueRO.IsDynamic ?
- PhysicsMass.CreateDynamic(massProperties, bodyData.ValueRO.Mass) :
- PhysicsMass.CreateKinematic(massProperties);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs.meta
deleted file mode 100644
index 13c41888..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsBodyBakingSystem.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 922a37a81b1c6cc4da69a1148c8d2988
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs
deleted file mode 100644
index 152aada8..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs
+++ /dev/null
@@ -1,385 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-using UnityEngine.Profiling;
-
-namespace Unity.Physics.Authoring
-{
- class PhysicsShapeBaker : BaseColliderBaker
- {
- public static List physicsShapeComponents = new List();
- public static List colliderComponents = new List();
-
- bool ShouldConvertShape(PhysicsShapeAuthoring authoring)
- {
- return authoring.enabled;
- }
-
- private GameObject GetPrimaryBody(GameObject shape, out bool hasBodyComponent, out bool isStaticBody)
- {
- var pb = FindFirstEnabledAncestor(shape, PhysicsShapeExtensions_NonBursted.s_PhysicsBodiesBuffer);
- var rb = FindFirstEnabledAncestor(shape, PhysicsShapeExtensions_NonBursted.s_RigidbodiesBuffer);
- hasBodyComponent = (pb != null || rb != null);
- isStaticBody = false;
-
- if (pb != null)
- {
- return rb == null ? pb.gameObject :
- pb.transform.IsChildOf(rb.transform) ? pb.gameObject : rb.gameObject;
- }
-
- if (rb != null)
- return rb.gameObject;
-
- // for implicit static shape, first see if it is part of static optimized hierarchy
- isStaticBody = FindTopmostStaticEnabledAncestor(shape, out var topStatic);
- if (topStatic != null)
- return topStatic;
-
- // otherwise, find topmost enabled Collider or PhysicsShapeAuthoring
- var topCollider = FindTopmostEnabledAncestor(shape, PhysicsShapeExtensions_NonBursted.s_CollidersBuffer);
- var topShape = FindTopmostEnabledAncestor(shape, PhysicsShapeExtensions_NonBursted.s_ShapesBuffer);
-
- return topCollider == null
- ? topShape == null ? shape.gameObject : topShape
- : topShape == null
- ? topCollider
- : topShape.transform.IsChildOf(topCollider.transform)
- ? topCollider
- : topShape;
- }
-
- ShapeComputationDataBaking GetInputDataFromAuthoringComponent(PhysicsShapeAuthoring shape, Entity colliderEntity)
- {
- GameObject shapeGameObject = shape.gameObject;
- var body = GetPrimaryBody(shapeGameObject, out bool hasBodyComponent, out bool isStaticBody);
- var child = shapeGameObject;
- var shapeInstanceID = shape.GetInstanceID();
-
- var bodyEntity = GetEntity(body, TransformUsageFlags.Dynamic);
-
- // prepare the static root
- if (isStaticBody)
- {
- var staticRootMarker = CreateAdditionalEntity(TransformUsageFlags.Dynamic, true, "StaticRootBakeMarker");
- AddComponent(staticRootMarker, new BakeStaticRoot() { Body = bodyEntity, ConvertedBodyInstanceID = body.transform.GetInstanceID() });
- }
-
- // Track dependencies to the transforms
- Transform shapeTransform = GetComponent(shape);
- Transform bodyTransform = GetComponent(body);
- var instance = new ColliderInstanceBaking
- {
- AuthoringComponentId = shapeInstanceID,
- BodyEntity = bodyEntity,
- ShapeEntity = GetEntity(shapeGameObject, TransformUsageFlags.Dynamic),
- ChildEntity = GetEntity(child, TransformUsageFlags.Dynamic),
- BodyFromShape = ColliderInstanceBaking.GetCompoundFromChild(shapeTransform, bodyTransform),
- };
-
- var data = GenerateComputationData(shape, instance, colliderEntity);
-
- data.Instance.ConvertedAuthoringInstanceID = shapeInstanceID;
- data.Instance.ConvertedBodyInstanceID = bodyTransform.GetInstanceID();
-
- var rb = FindFirstEnabledAncestor(shapeGameObject, PhysicsShapeExtensions_NonBursted.s_RigidbodiesBuffer);
- var pb = FindFirstEnabledAncestor(shapeGameObject, PhysicsShapeExtensions_NonBursted.s_PhysicsBodiesBuffer);
- // The Rigidbody cannot know about the Physics Shape Component. We need to take responsibility of baking the collider.
- if (rb || (!rb && !pb) && body == shapeGameObject)
- {
- GetComponents(physicsShapeComponents);
- GetComponents(colliderComponents);
- // We need to check that there are no other colliders in the same object, if so, only the first one should do this, otherwise there will be 2 bakers adding this to the entity
- // This will be needed to trigger BuildCompoundColliderBakingSystem
- // If they are legacy Colliders and PhysicsShapeAuthoring in the same object, the PhysicsShapeAuthoring will add this
- if (colliderComponents.Count == 0 && physicsShapeComponents.Count > 0 && physicsShapeComponents[0].GetInstanceID() == shapeInstanceID)
- {
- var entity = GetEntity(TransformUsageFlags.Dynamic);
-
- // // Rigid Body bakes always add the PhysicsWorldIndex component and process transform
- if (!hasBodyComponent)
- {
- AddSharedComponent(entity, new PhysicsWorldIndex());
- PostProcessTransform(bodyTransform);
- }
-
- AddComponent(entity, new PhysicsCompoundData()
- {
- AssociateBlobToBody = false,
- ConvertedBodyInstanceID = shapeInstanceID,
- Hash = default,
- });
- AddComponent(entity);
- AddComponent(entity);
- }
- }
-
- return data;
- }
-
- Material ProduceMaterial(PhysicsShapeAuthoring shape)
- {
- var materialTemplate = shape.MaterialTemplate;
- if (materialTemplate != null)
- DependsOn(materialTemplate);
- return shape.GetMaterial();
- }
-
- CollisionFilter ProduceCollisionFilter(PhysicsShapeAuthoring shape)
- {
- return shape.GetFilter();
- }
-
- UnityEngine.Mesh GetMesh(PhysicsShapeAuthoring shape, out float4x4 childToShape)
- {
- var mesh = shape.CustomMesh;
- childToShape = float4x4.identity;
-
- if (mesh == null)
- {
- // Try to get a mesh in the children
- var filter = GetComponentInChildren();
- if (filter != null && filter.sharedMesh != null)
- {
- mesh = filter.sharedMesh;
- var childTransform = GetComponent(filter);
- childToShape = math.mul(shape.transform.worldToLocalMatrix, childTransform.localToWorldMatrix);;
- }
- }
-
- if (mesh == null)
- {
- throw new InvalidOperationException(
- $"No {nameof(PhysicsShapeAuthoring.CustomMesh)} assigned on {shape.name}."
- );
- }
- DependsOn(mesh);
- return mesh;
- }
-
- bool GetMeshes(PhysicsShapeAuthoring shape, out List meshes, out List childrenToShape)
- {
- meshes = new List();
- childrenToShape = new List();
-
- if (shape.CustomMesh != null)
- {
- meshes.Add(shape.CustomMesh);
- childrenToShape.Add(float4x4.identity);
- }
-
- // Try to get all the meshes in the children
- var meshFilters = GetComponentsInChildren();
-
- foreach (var meshFilter in meshFilters)
- {
- if (meshFilter != null && meshFilter.sharedMesh != null)
- {
- var shapeAuthoring = GetComponent(meshFilter);
- if (shapeAuthoring != null && shapeAuthoring != shape)
- {
- // Skip this case, since it will be treated independently
- continue;
- }
-
- meshes.Add(meshFilter.sharedMesh);
-
- // Don't calculate the children to shape if not needed, to avoid approximation that could prevent collider to be shared
- if (shape.transform.localToWorldMatrix.Equals(meshFilter.transform.localToWorldMatrix))
- childrenToShape.Add(float4x4.identity);
- else
- {
- var transform = math.mul(shape.transform.worldToLocalMatrix, meshFilter.transform.localToWorldMatrix);
- childrenToShape.Add(transform);
- }
-
- DependsOn(meshes.Last());
- }
- }
-
- return meshes.Count > 0;
- }
-
- UnityEngine.Mesh CombineMeshes(PhysicsShapeAuthoring shape, List meshes, List childrenToShape)
- {
- var instances = new List();
- var numVertices = 0;
- for (var i = 0; i < meshes.Count; ++i)
- {
- var currentMesh = meshes[i];
- var currentChildToShape = childrenToShape[i];
- if (!currentMesh.IsValidForConversion(shape.gameObject))
- {
- throw new InvalidOperationException(
- $"Mesh '{currentMesh}' assigned on {shape.name} is not readable. Ensure that you have enabled Read/Write on its import settings."
- );
- }
-
- // Combine submeshes manually
- numVertices += meshes[i].vertexCount;
- var combinedSubmeshes = new UnityEngine.Mesh();
- combinedSubmeshes.vertices = currentMesh.vertices;
-
- var combinedIndices = new List();
- for (int indexSubMesh = 0; indexSubMesh < meshes[i].subMeshCount; ++indexSubMesh)
- {
- combinedIndices.AddRange(currentMesh.GetIndices(indexSubMesh));
- }
-
- combinedSubmeshes.SetIndices(combinedIndices, MeshTopology.Triangles, 0);
- combinedSubmeshes.RecalculateNormals();
- var instance = new CombineInstance
- {
- mesh = combinedSubmeshes,
- transform = currentChildToShape,
- };
- instances.Add(instance);
- }
-
- var mesh = new UnityEngine.Mesh();
- mesh.indexFormat = numVertices > UInt16.MaxValue ? UnityEngine.Rendering.IndexFormat.UInt32 : UnityEngine.Rendering.IndexFormat.UInt16;
- mesh.CombineMeshes(instances.ToArray());
- mesh.RecalculateBounds();
-
- return mesh;
- }
-
- private ShapeComputationDataBaking GenerateComputationData(PhysicsShapeAuthoring shape, ColliderInstanceBaking colliderInstance, Entity colliderEntity)
- {
- var res = new ShapeComputationDataBaking
- {
- Instance = colliderInstance,
- Material = ProduceMaterial(shape),
- CollisionFilter = ProduceCollisionFilter(shape),
- ForceUniqueIdentifier = shape.ForceUnique ? (uint)shape.GetInstanceID() : 0u
- };
-
- var transform = shape.transform;
- var localToWorld = transform.localToWorldMatrix;
- var shapeToWorld = shape.GetShapeToWorldMatrix();
- EulerAngles orientation;
-
- res.ShapeType = shape.ShapeType;
- switch (shape.ShapeType)
- {
- case ShapeType.Box:
- {
- res.BoxProperties = shape.GetBoxProperties(out orientation)
- .BakeToBodySpace(localToWorld, shapeToWorld, orientation);
- break;
- }
- case ShapeType.Capsule:
- {
- res.CapsuleProperties = shape.GetCapsuleProperties()
- .BakeToBodySpace(localToWorld, shapeToWorld)
- .ToRuntime();
- break;
- }
- case ShapeType.Sphere:
- {
- res.SphereProperties = shape.GetSphereProperties(out orientation)
- .BakeToBodySpace(localToWorld, shapeToWorld, ref orientation);
- break;
- }
- case ShapeType.Cylinder:
- {
- res.CylinderProperties = shape.GetCylinderProperties(out orientation)
- .BakeToBodySpace(localToWorld, shapeToWorld, orientation);
- break;
- }
- case ShapeType.Plane:
- {
- shape.GetPlaneProperties(out var center, out var size, out orientation);
- PhysicsShapeExtensions.BakeToBodySpace(
- center, size, orientation, localToWorld, shapeToWorld,
- out res.PlaneVertices.c0, out res.PlaneVertices.c1, out res.PlaneVertices.c2, out res.PlaneVertices.c3
- );
- break;
- }
- case ShapeType.ConvexHull:
- {
- res.ConvexHullProperties.Filter = res.CollisionFilter;
- res.ConvexHullProperties.Material = res.Material;
- res.ConvexHullProperties.GenerationParameters = shape.ConvexHullGenerationParameters.ToRunTime();
-
- CreateMeshAuthoringData(shape, colliderEntity);
- break;
- }
- case ShapeType.Mesh:
- {
- res.MeshProperties.Filter = res.CollisionFilter;
- res.MeshProperties.Material = res.Material;
-
- CreateMeshAuthoringData(shape, colliderEntity);
- break;
- }
- }
-
- return res;
- }
-
- private void CreateMeshAuthoringData(PhysicsShapeAuthoring shape, Entity colliderEntity)
- {
- if (GetMeshes(shape, out var meshes, out var childrenToShape))
- {
- // Combine all detected meshes into a single one
- var mesh = CombineMeshes(shape, meshes, childrenToShape);
- if (!mesh.IsValidForConversion(shape.gameObject))
- {
- throw new InvalidOperationException(
- $"Mesh '{mesh}' assigned on {shape.name} is not readable. Ensure that you have enabled Read/Write on its import settings."
- );
- }
-
- var bakeFromShape = shape.GetLocalToShapeMatrix();
- var meshBakingData = new PhysicsMeshAuthoringData()
- {
- Convex = shape.ShapeType == ShapeType.ConvexHull,
- Mesh = mesh,
- BakeFromShape = bakeFromShape,
- MeshBounds = mesh.bounds,
- ChildToShape = float4x4.identity
- };
- AddComponent(colliderEntity, meshBakingData);
- }
- else
- {
- throw new InvalidOperationException(
- $"No {nameof(PhysicsShapeAuthoring.CustomMesh)} or {nameof(MeshFilter.sharedMesh)} assigned on {shape.name}."
- );
- }
- }
-
- public override void Bake(PhysicsShapeAuthoring authoring)
- {
- var shapeBakingData = new PhysicsColliderAuthoringData();
-
- // First pass
- Profiler.BeginSample("Collect Inputs from Authoring Components");
-
- if (ShouldConvertShape(authoring))
- {
- // We can have multiple Colliders of the same type on the same game object, so instead of adding the components to the baking entity
- // we add the components to an additional entity. These new entities will be processed by the baking system
- var colliderEntity = CreateAdditionalEntity(TransformUsageFlags.None, true);
- shapeBakingData.ShapeComputationalData = GetInputDataFromAuthoringComponent(authoring, colliderEntity);
- AddComponent(colliderEntity, shapeBakingData);
-
- // The data will be filled in by the BaseShapeBakingSystem, but we add it here so it gets reverted from the entity if the collider component is deleted
- AddComponent(colliderEntity, new PhysicsColliderBakedData()
- {
- BodyEntity = shapeBakingData.ShapeComputationalData.Instance.BodyEntity,
- BodyFromShape = shapeBakingData.ShapeComputationalData.Instance.BodyFromShape,
- ChildEntity = shapeBakingData.ShapeComputationalData.Instance.ChildEntity,
- // It is a leaf if the Shape Entity equals Body Entity
- IsLeafEntityBody = (shapeBakingData.ShapeComputationalData.Instance.ShapeEntity.Equals(shapeBakingData.ShapeComputationalData.Instance.BodyEntity))
- });
- }
-
- Profiler.EndSample();
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs.meta
deleted file mode 100644
index 705a3c25..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/BakingSystems/PhysicsShapeBakingSystem.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c7b2bb3849ee2c24ea6f8416bc3c8ee0
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs
deleted file mode 100644
index 48eff9ff..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- /// The physics body authoring. This class cannot be inherited.
-#if UNITY_2021_2_OR_NEWER
- [Icon(k_IconPath)]
-#endif
- [AddComponentMenu("Entities/Physics/Physics Body")]
- [DisallowMultipleComponent]
- public sealed class PhysicsBodyAuthoring : MonoBehaviour
- {
- const string k_IconPath = "Packages/com.unity.physics/Unity.Physics.Editor/Editor Default Resources/Icons/d_Rigidbody@64.png";
-
- PhysicsBodyAuthoring() {}
-
- public BodyMotionType MotionType { get => m_MotionType; set => m_MotionType = value; }
- [SerializeField]
- [Tooltip("Specifies whether the body should be fully physically simulated, moved directly, or fixed in place.")]
- BodyMotionType m_MotionType;
-
- public BodySmoothing Smoothing { get => m_Smoothing; set => m_Smoothing = value; }
- [SerializeField]
- [Tooltip("Specifies how this body's motion in its graphics representation should be smoothed when the rendering framerate is greater than the fixed step rate used by physics.")]
- BodySmoothing m_Smoothing = BodySmoothing.None;
-
- const float k_MinimumMass = 0.001f;
-
- public float Mass
- {
- get => m_MotionType == BodyMotionType.Dynamic ? m_Mass : float.PositiveInfinity;
- set => m_Mass = math.max(k_MinimumMass, value);
- }
- [SerializeField]
- float m_Mass = 1.0f;
-
- public float LinearDamping { get => m_LinearDamping; set => m_LinearDamping = math.max(0f, value); }
- [SerializeField]
- [Tooltip("This is applied to a body's linear velocity reducing it over time.")]
- float m_LinearDamping = 0.01f;
-
- public float AngularDamping { get => m_AngularDamping; set => m_AngularDamping = math.max(0f, value); }
- [SerializeField]
- [Tooltip("This is applied to a body's angular velocity reducing it over time.")]
- float m_AngularDamping = 0.05f;
-
- public float3 InitialLinearVelocity { get => m_InitialLinearVelocity; set => m_InitialLinearVelocity = value; }
- [SerializeField]
- [Tooltip("The initial linear velocity of the body in world space")]
- float3 m_InitialLinearVelocity = float3.zero;
-
- public float3 InitialAngularVelocity { get => m_InitialAngularVelocity; set => m_InitialAngularVelocity = value; }
- [SerializeField]
- [Tooltip("This represents the initial rotation speed around each axis in the local motion space of the body i.e. around the center of mass")]
- float3 m_InitialAngularVelocity = float3.zero;
-
- public float GravityFactor
- {
- get => m_MotionType == BodyMotionType.Dynamic ? m_GravityFactor : 0f;
- set => m_GravityFactor = value;
- }
- [SerializeField]
- [Tooltip("Scales the amount of gravity to apply to this body.")]
- float m_GravityFactor = 1f;
-
- public bool OverrideDefaultMassDistribution
- {
-#pragma warning disable 618
- get => m_OverrideDefaultMassDistribution;
- set => m_OverrideDefaultMassDistribution = value;
-#pragma warning restore 618
- }
- [SerializeField]
- [Tooltip("Default mass distribution is based on the shapes associated with this body.")]
- bool m_OverrideDefaultMassDistribution;
-
- public MassDistribution CustomMassDistribution
- {
- get => new MassDistribution
- {
- Transform = new RigidTransform(m_Orientation, m_CenterOfMass),
- InertiaTensor =
- m_MotionType == BodyMotionType.Dynamic ? m_InertiaTensor : new float3(float.PositiveInfinity)
- };
- set
- {
- m_CenterOfMass = value.Transform.pos;
- m_Orientation.SetValue(value.Transform.rot);
- m_InertiaTensor = value.InertiaTensor;
-#pragma warning disable 618
- m_OverrideDefaultMassDistribution = true;
-#pragma warning restore 618
- }
- }
-
- [SerializeField]
- float3 m_CenterOfMass;
-
- [SerializeField]
- EulerAngles m_Orientation = EulerAngles.Default;
-
- [SerializeField]
- // Default value to solid unit sphere : https://en.wikipedia.org/wiki/List_of_moments_of_inertia
- float3 m_InertiaTensor = new float3(2f / 5f);
-
- public uint WorldIndex { get => m_WorldIndex; set => m_WorldIndex = value; }
- [SerializeField]
- [Tooltip("The index of the physics world this body belongs to. Default physics world has index 0.")]
- uint m_WorldIndex = 0;
-
- public CustomPhysicsBodyTags CustomTags { get => m_CustomTags; set => m_CustomTags = value; }
- [SerializeField]
- CustomPhysicsBodyTags m_CustomTags = CustomPhysicsBodyTags.Nothing;
-
- void OnEnable()
- {
- // included so tick box appears in Editor
- }
-
- void OnValidate()
- {
- m_Mass = math.max(k_MinimumMass, m_Mass);
- m_LinearDamping = math.max(m_LinearDamping, 0f);
- m_AngularDamping = math.max(m_AngularDamping, 0f);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs.meta
deleted file mode 100644
index 57fdef82..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsBodyAuthoring.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ccea9ea98e38942e0b0938c27ed1903e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs
deleted file mode 100644
index 5a98df46..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs
+++ /dev/null
@@ -1,929 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using Unity.Burst;
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using Unity.Jobs;
-using Unity.Mathematics;
-using UnityEngine;
-using UnityEngine.Rendering;
-
-namespace Unity.Physics.Authoring
-{
- public sealed class UnimplementedShapeException : NotImplementedException
- {
- public UnimplementedShapeException(ShapeType shapeType)
- : base($"Unknown shape type {shapeType} requires explicit implementation") {}
- }
-
-#if UNITY_2021_2_OR_NEWER
- [Icon(k_IconPath)]
-#endif
- [AddComponentMenu("Entities/Physics/Physics Shape")]
- public sealed class PhysicsShapeAuthoring : MonoBehaviour, IInheritPhysicsMaterialProperties, ISerializationCallbackReceiver
- {
- const string k_IconPath = "Packages/com.unity.physics/Unity.Physics.Editor/Editor Default Resources/Icons/d_BoxCollider@64.png";
-
- PhysicsShapeAuthoring() {}
-
- [Serializable]
- struct CylindricalProperties
- {
- public float Height;
- public float Radius;
- [HideInInspector]
- public int Axis;
- }
-
- static readonly int[] k_NextAxis = { 1, 2, 0 };
-
- public ShapeType ShapeType => m_ShapeType;
- [SerializeField]
- ShapeType m_ShapeType = ShapeType.Box;
-
- [SerializeField]
- float3 m_PrimitiveCenter;
-
- [SerializeField]
- float3 m_PrimitiveSize = new float3(1f, 1f, 1f);
-
- [SerializeField]
- EulerAngles m_PrimitiveOrientation = EulerAngles.Default;
-
- [SerializeField]
- [ExpandChildren]
- CylindricalProperties m_Capsule = new CylindricalProperties { Height = 1f, Radius = 0.5f, Axis = 2 };
-
- [SerializeField]
- [ExpandChildren]
- CylindricalProperties m_Cylinder = new CylindricalProperties { Height = 1f, Radius = 0.5f, Axis = 2 };
-
- [SerializeField]
- [Tooltip("How many sides the convex cylinder shape should have.")]
- [Range(CylinderGeometry.MinSideCount, CylinderGeometry.MaxSideCount)]
- int m_CylinderSideCount = 20;
-
- [SerializeField]
- float m_SphereRadius = 0.5f;
-
- public ConvexHullGenerationParameters ConvexHullGenerationParameters => m_ConvexHullGenerationParameters;
-
- [SerializeField]
- [Tooltip(
- "Specifies the minimum weight of a skinned vertex assigned to this shape and/or its transform children required for it to be included for automatic detection. " +
- "A value of 0 will include all points with any weight assigned to this shape's hierarchy."
- )]
- [Range(0f, 1f)]
- float m_MinimumSkinnedVertexWeight = 0.1f;
-
- [SerializeField]
- [ExpandChildren]
- ConvexHullGenerationParameters m_ConvexHullGenerationParameters = ConvexHullGenerationParameters.Default.ToAuthoring();
-
- // TODO: remove this accessor in favor of GetRawVertices() when blob data is serializable
- internal UnityEngine.Mesh CustomMesh => m_CustomMesh;
- [SerializeField]
- [Tooltip("If no custom mesh is specified, then one will be generated using this body's rendered meshes.")]
- UnityEngine.Mesh m_CustomMesh;
-
- public bool ForceUnique { get => m_ForceUnique; set => m_ForceUnique = value; }
- [SerializeField]
- bool m_ForceUnique;
-
- public PhysicsMaterialTemplate MaterialTemplate { get => m_Material.Template; set => m_Material.Template = value; }
- PhysicsMaterialTemplate IInheritPhysicsMaterialProperties.Template
- {
- get => m_Material.Template;
- set => m_Material.Template = value;
- }
-
- public bool OverrideCollisionResponse { get => m_Material.OverrideCollisionResponse; set => m_Material.OverrideCollisionResponse = value; }
-
- public CollisionResponsePolicy CollisionResponse { get => m_Material.CollisionResponse; set => m_Material.CollisionResponse = value; }
-
- public bool OverrideFriction { get => m_Material.OverrideFriction; set => m_Material.OverrideFriction = value; }
-
- public PhysicsMaterialCoefficient Friction { get => m_Material.Friction; set => m_Material.Friction = value; }
-
- public bool OverrideRestitution
- {
- get => m_Material.OverrideRestitution;
- set => m_Material.OverrideRestitution = value;
- }
-
- public PhysicsMaterialCoefficient Restitution
- {
- get => m_Material.Restitution;
- set => m_Material.Restitution = value;
- }
-
- public bool OverrideBelongsTo
- {
- get => m_Material.OverrideBelongsTo;
- set => m_Material.OverrideBelongsTo = value;
- }
-
- public PhysicsCategoryTags BelongsTo
- {
- get => m_Material.BelongsTo;
- set => m_Material.BelongsTo = value;
- }
-
- public bool OverrideCollidesWith
- {
- get => m_Material.OverrideCollidesWith;
- set => m_Material.OverrideCollidesWith = value;
- }
-
- public PhysicsCategoryTags CollidesWith
- {
- get => m_Material.CollidesWith;
- set => m_Material.CollidesWith = value;
- }
-
- public bool OverrideCustomTags
- {
- get => m_Material.OverrideCustomTags;
- set => m_Material.OverrideCustomTags = value;
- }
-
- public CustomPhysicsMaterialTags CustomTags { get => m_Material.CustomTags; set => m_Material.CustomTags = value; }
-
- [SerializeField]
- PhysicsMaterialProperties m_Material = new PhysicsMaterialProperties(true);
-
- public BoxGeometry GetBoxProperties() => GetBoxProperties(out _);
-
- internal BoxGeometry GetBoxProperties(out EulerAngles orientation)
- {
- orientation = m_PrimitiveOrientation;
- return new BoxGeometry
- {
- Center = m_PrimitiveCenter,
- Size = m_PrimitiveSize,
- Orientation = m_PrimitiveOrientation,
- BevelRadius = m_ConvexHullGenerationParameters.BevelRadius
- };
- }
-
- void GetCylindricalProperties(
- CylindricalProperties props,
- out float3 center, out float height, out float radius, out EulerAngles orientation,
- bool rebuildOrientation
- )
- {
- center = m_PrimitiveCenter;
- var lookVector = math.mul(m_PrimitiveOrientation, new float3 { [props.Axis] = 1f });
- // use previous axis so forward will prefer up
- var upVector = math.mul(m_PrimitiveOrientation, new float3 { [k_NextAxis[k_NextAxis[props.Axis]]] = 1f });
- orientation = m_PrimitiveOrientation;
- if (rebuildOrientation && props.Axis != 2)
- orientation.SetValue(quaternion.LookRotation(lookVector, upVector));
- radius = props.Radius;
- height = props.Height;
- }
-
- public CapsuleGeometryAuthoring GetCapsuleProperties()
- {
- GetCylindricalProperties(
- m_Capsule, out var center, out var height, out var radius, out var orientationEuler, m_ShapeType != ShapeType.Capsule
- );
- return new CapsuleGeometryAuthoring
- {
- OrientationEuler = orientationEuler,
- Center = center,
- Height = height,
- Radius = radius
- };
- }
-
- public CylinderGeometry GetCylinderProperties() => GetCylinderProperties(out _);
-
- internal CylinderGeometry GetCylinderProperties(out EulerAngles orientation)
- {
- GetCylindricalProperties(
- m_Cylinder, out var center, out var height, out var radius, out orientation, m_ShapeType != ShapeType.Cylinder
- );
- return new CylinderGeometry
- {
- Center = center,
- Height = height,
- Radius = radius,
- Orientation = orientation,
- BevelRadius = m_ConvexHullGenerationParameters.BevelRadius,
- SideCount = m_CylinderSideCount
- };
- }
-
- public SphereGeometry GetSphereProperties(out quaternion orientation)
- {
- var result = GetSphereProperties(out EulerAngles euler);
- orientation = euler;
- return result;
- }
-
- internal SphereGeometry GetSphereProperties(out EulerAngles orientation)
- {
- orientation = m_PrimitiveOrientation;
- return new SphereGeometry
- {
- Center = m_PrimitiveCenter,
- Radius = m_SphereRadius
- };
- }
-
- public void GetPlaneProperties(out float3 center, out float2 size, out quaternion orientation)
- {
- GetPlaneProperties(out center, out size, out EulerAngles euler);
- orientation = euler;
- }
-
- internal void GetPlaneProperties(out float3 center, out float2 size, out EulerAngles orientation)
- {
- center = m_PrimitiveCenter;
- orientation = m_PrimitiveOrientation;
-
- if (m_ShapeType == ShapeType.Plane)
- {
- size = m_PrimitiveSize.xz;
- return;
- }
-
- UpdateCapsuleAxis();
- var look = m_Capsule.Axis;
- var nextAx = k_NextAxis[look];
- var prevAx = k_NextAxis[k_NextAxis[look]];
- var ax2 = m_PrimitiveSize[nextAx] > m_PrimitiveSize[prevAx] ? nextAx : prevAx;
- size = new float2(m_PrimitiveSize[ax2], m_PrimitiveSize[look]);
-
- var up = k_NextAxis[ax2] == look ? k_NextAxis[look] : k_NextAxis[ax2];
- var offset = quaternion.LookRotation(new float3 { [look] = 1f }, new float3 { [up] = 1f });
-
- orientation.SetValue(math.mul(m_PrimitiveOrientation, offset));
- }
-
- static readonly HashSet s_BoneIDs = new HashSet();
- static readonly HashSet s_BonesInHierarchy = new HashSet();
- static readonly List s_Vertices = new List(65535);
- static readonly List s_Indices = new List(65535);
-
- static UnityEngine.Mesh ReusableBakeMesh =>
- s_ReusableBakeMesh ??
- (s_ReusableBakeMesh = new UnityEngine.Mesh { hideFlags = HideFlags.HideAndDontSave });
- static UnityEngine.Mesh s_ReusableBakeMesh;
-
- public void GetConvexHullProperties(NativeList pointCloud) =>
- GetConvexHullProperties(pointCloud, true, default, default, default, default);
-
- internal void GetConvexHullProperties(
- NativeList pointCloud, bool validate,
- NativeList inputs, NativeList allSkinIndices, NativeList allBlendShapeWeights,
- HashSet meshAssets
- )
- {
- if (pointCloud.IsCreated)
- pointCloud.Clear();
- if (inputs.IsCreated)
- inputs.Clear();
- if (allSkinIndices.IsCreated)
- allSkinIndices.Clear();
- if (allBlendShapeWeights.IsCreated)
- allBlendShapeWeights.Clear();
- meshAssets?.Clear();
-
- if (m_CustomMesh != null)
- {
- if (validate && !m_CustomMesh.IsValidForConversion(gameObject))
- return;
-
- AppendMeshPropertiesToNativeBuffers(
- transform.localToWorldMatrix, m_CustomMesh, pointCloud, default, validate, inputs, meshAssets
- );
- }
- else
- {
- using (var scope = new GetActiveChildrenScope(this, transform))
- {
- foreach (var meshFilter in scope.Buffer)
- {
- if (scope.IsChildActiveAndBelongsToShape(meshFilter, validate))
- {
- AppendMeshPropertiesToNativeBuffers(
- meshFilter.transform.localToWorldMatrix, meshFilter.sharedMesh, pointCloud, default, validate, inputs, meshAssets
- );
- }
- }
- }
-
- using (var skinnedPoints = new NativeList(8192, Allocator.Temp))
- using (var skinnedInputs = new NativeList(8, Allocator.Temp))
- {
- GetAllSkinnedPointsInHierarchyBelongingToShape(
- this, skinnedPoints, validate, skinnedInputs, allSkinIndices, allBlendShapeWeights
- );
- if (pointCloud.IsCreated)
- pointCloud.AddRange(skinnedPoints.AsArray());
- if (inputs.IsCreated)
- inputs.AddRange(skinnedInputs.AsArray());
- }
- }
- }
-
- internal static void GetAllSkinnedPointsInHierarchyBelongingToShape(
- PhysicsShapeAuthoring shape, NativeList pointCloud, bool validate,
- NativeList inputs, NativeList allIncludedIndices, NativeList allBlendShapeWeights
- )
- {
- if (pointCloud.IsCreated)
- pointCloud.Clear();
-
- if (inputs.IsCreated)
- inputs.Clear();
-
- // get all the transforms that belong to this shape
- s_BonesInHierarchy.Clear();
- using (var scope = new GetActiveChildrenScope(shape, shape.transform))
- {
- foreach (var bone in scope.Buffer)
- {
- if (scope.IsChildActiveAndBelongsToShape(bone))
- s_BonesInHierarchy.Add(bone);
- }
- }
-
- // find all skinned mesh renderers in which this shape's transform might be a bone
- using (var scope = new GetActiveChildrenScope(shape, shape.transform.root))
- {
- foreach (var skin in scope.Buffer)
- {
- var mesh = skin.sharedMesh;
- if (
- !skin.enabled
- || mesh == null
- || validate && !mesh.IsValidForConversion(shape.gameObject)
- || !scope.IsChildActiveAndBelongsToShape(skin)
- )
- continue;
-
- // get indices of this shape's transform hierarchy in skinned mesh's bone array
- s_BoneIDs.Clear();
- var bones = skin.bones;
- for (int i = 0, count = bones.Length; i < count; ++i)
- {
- if (s_BonesInHierarchy.Contains(bones[i]))
- s_BoneIDs.Add(i);
- }
-
- if (s_BoneIDs.Count == 0)
- continue;
-
- // sample the vertices
- if (pointCloud.IsCreated)
- {
- skin.BakeMesh(ReusableBakeMesh);
- ReusableBakeMesh.GetVertices(s_Vertices);
- }
-
- // add all vertices weighted to at least one bone in this shape's transform hierarchy
- var bonesPerVertex = mesh.GetBonesPerVertex(); // Allocator.None
- var weights = mesh.GetAllBoneWeights(); // Allocator.None
- var vertexIndex = 0;
- var weightsOffset = 0;
- var shapeFromSkin = math.mul(shape.transform.worldToLocalMatrix, skin.transform.localToWorldMatrix);
- var includedIndices = new NativeList(mesh.vertexCount, Allocator.Temp);
- foreach (var weightCount in bonesPerVertex)
- {
- var totalWeight = 0f;
- for (var i = 0; i < weightCount; ++i)
- {
- var weight = weights[weightsOffset + i];
- if (s_BoneIDs.Contains(weight.boneIndex))
- totalWeight += weight.weight;
- }
-
- if (totalWeight > shape.m_MinimumSkinnedVertexWeight)
- {
- if (pointCloud.IsCreated)
- pointCloud.Add(math.mul(shapeFromSkin, new float4(s_Vertices[vertexIndex], 1f)).xyz);
- includedIndices.Add(vertexIndex);
- }
-
- weightsOffset += weightCount;
- ++vertexIndex;
- }
-
- if (!inputs.IsCreated || !allIncludedIndices.IsCreated || !allBlendShapeWeights.IsCreated)
- continue;
-
- var blendShapeWeights = new NativeArray(mesh.blendShapeCount, Allocator.Temp);
- for (var i = 0; i < blendShapeWeights.Length; ++i)
- blendShapeWeights[i] = skin.GetBlendShapeWeight(i);
-
- var data = HashableShapeInputs.FromSkinnedMesh(
- mesh, shapeFromSkin, includedIndices.AsArray(), allIncludedIndices, blendShapeWeights, allBlendShapeWeights
- );
- inputs.Add(data);
- }
- }
-
- s_BonesInHierarchy.Clear();
- }
-
- public void GetMeshProperties(NativeList vertices, NativeList triangles) =>
- GetMeshProperties(vertices, triangles, true, default);
-
- internal void GetMeshProperties(
- NativeList vertices, NativeList triangles, bool validate, NativeList inputs, HashSet meshAssets = null
- )
- {
- if (vertices.IsCreated)
- vertices.Clear();
- if (triangles.IsCreated)
- triangles.Clear();
- if (inputs.IsCreated)
- inputs.Clear();
- meshAssets?.Clear();
-
- if (m_CustomMesh != null)
- {
- if (validate && !m_CustomMesh.IsValidForConversion(gameObject))
- return;
-
- AppendMeshPropertiesToNativeBuffers(
- transform.localToWorldMatrix, m_CustomMesh, vertices, triangles, validate, inputs, meshAssets
- );
- }
- else
- {
- using (var scope = new GetActiveChildrenScope(this, transform))
- {
- foreach (var meshFilter in scope.Buffer)
- {
- if (scope.IsChildActiveAndBelongsToShape(meshFilter, validate))
- {
- AppendMeshPropertiesToNativeBuffers(
- meshFilter.transform.localToWorldMatrix, meshFilter.sharedMesh, vertices, triangles, validate, inputs, meshAssets
- );
- }
- }
- }
- }
- }
-
- void AppendMeshPropertiesToNativeBuffers(
- float4x4 localToWorld, UnityEngine.Mesh mesh, NativeList vertices, NativeList triangles, bool validate,
- NativeList inputs, HashSet meshAssets
- )
- {
- if (mesh == null || validate && !mesh.IsValidForConversion(gameObject))
- return;
-
- var childToShape = math.mul(transform.worldToLocalMatrix, localToWorld);
-
- AppendMeshPropertiesToNativeBuffers(childToShape, mesh, vertices, triangles, inputs, meshAssets);
- }
-
- internal static void AppendMeshPropertiesToNativeBuffers(
- float4x4 childToShape, UnityEngine.Mesh mesh, NativeList vertices, NativeList triangles,
- NativeList inputs, HashSet meshAssets
- )
- {
- var offset = 0u;
-#if UNITY_EDITOR
- // TODO: when min spec is 2020.1, collect all meshes and their data via single Burst job rather than one at a time
- using (var meshData = UnityEditor.MeshUtility.AcquireReadOnlyMeshData(mesh))
-#else
- using (var meshData = UnityEngine.Mesh.AcquireReadOnlyMeshData(mesh))
-#endif
- {
- if (vertices.IsCreated)
- {
- offset = (uint)vertices.Length;
- var tmpVertices = new NativeArray(meshData[0].vertexCount, Allocator.Temp);
- meshData[0].GetVertices(tmpVertices);
- if (vertices.Capacity < vertices.Length + tmpVertices.Length)
- vertices.Capacity = vertices.Length + tmpVertices.Length;
- foreach (var v in tmpVertices)
- vertices.Add(math.mul(childToShape, new float4(v, 1f)).xyz);
- }
-
- if (triangles.IsCreated)
- {
- switch (meshData[0].indexFormat)
- {
- case IndexFormat.UInt16:
- var indices16 = meshData[0].GetIndexData();
- var numTriangles = indices16.Length / 3;
- if (triangles.Capacity < triangles.Length + numTriangles)
- triangles.Capacity = triangles.Length + numTriangles;
- for (var sm = 0; sm < meshData[0].subMeshCount; ++sm)
- {
- var subMesh = meshData[0].GetSubMesh(sm);
- for (int i = subMesh.indexStart, count = 0; count < subMesh.indexCount; i += 3, count += 3)
- triangles.Add((int3) new uint3(offset + indices16[i], offset + indices16[i + 1], offset + indices16[i + 2]));
- }
- break;
- case IndexFormat.UInt32:
- var indices32 = meshData[0].GetIndexData();
- numTriangles = indices32.Length / 3;
- if (triangles.Capacity < triangles.Length + numTriangles)
- triangles.Capacity = triangles.Length + numTriangles;
- for (var sm = 0; sm < meshData[0].subMeshCount; ++sm)
- {
- var subMesh = meshData[0].GetSubMesh(sm);
- for (int i = subMesh.indexStart, count = 0; count < subMesh.indexCount; i += 3, count += 3)
- triangles.Add((int3) new uint3(offset + indices32[i], offset + indices32[i + 1], offset + indices32[i + 2]));
- }
- break;
- }
- }
- }
-
- if (inputs.IsCreated)
- inputs.Add(HashableShapeInputs.FromMesh(mesh, childToShape));
-
- meshAssets?.Add(mesh);
- }
-
- void UpdateCapsuleAxis()
- {
- var cmax = math.cmax(m_PrimitiveSize);
- var cmin = math.cmin(m_PrimitiveSize);
- if (cmin == cmax)
- return;
- m_Capsule.Axis = m_PrimitiveSize.GetMaxAxis();
- }
-
- void UpdateCylinderAxis() => m_Cylinder.Axis = m_PrimitiveSize.GetDeviantAxis();
-
- void Sync(ref CylindricalProperties props)
- {
- props.Height = m_PrimitiveSize[props.Axis];
- props.Radius = 0.5f * math.max(
- m_PrimitiveSize[k_NextAxis[props.Axis]],
- m_PrimitiveSize[k_NextAxis[k_NextAxis[props.Axis]]]
- );
- }
-
- void SyncCapsuleProperties()
- {
- if (m_ShapeType == ShapeType.Box || m_ShapeType == ShapeType.Plane)
- UpdateCapsuleAxis();
- else
- m_Capsule.Axis = 2;
- Sync(ref m_Capsule);
- }
-
- void SyncCylinderProperties()
- {
- if (m_ShapeType == ShapeType.Box || m_ShapeType == ShapeType.Plane)
- UpdateCylinderAxis();
- else
- m_Cylinder.Axis = 2;
- Sync(ref m_Cylinder);
- }
-
- void SyncSphereProperties()
- {
- m_SphereRadius = 0.5f * math.cmax(m_PrimitiveSize);
- }
-
- public void SetBox(BoxGeometry geometry)
- {
- var euler = m_PrimitiveOrientation;
- euler.SetValue(geometry.Orientation);
- SetBox(geometry, euler);
- }
-
- internal void SetBox(BoxGeometry geometry, EulerAngles orientation)
- {
- m_ShapeType = ShapeType.Box;
- m_PrimitiveCenter = geometry.Center;
- m_PrimitiveSize = math.max(geometry.Size, new float3());
- m_PrimitiveOrientation = orientation;
- m_ConvexHullGenerationParameters.BevelRadius = geometry.BevelRadius;
-
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- public void SetCapsule(CapsuleGeometryAuthoring geometry)
- {
- m_ShapeType = ShapeType.Capsule;
- m_PrimitiveCenter = geometry.Center;
- m_PrimitiveOrientation = geometry.OrientationEuler;
-
- var radius = math.max(0f, geometry.Radius);
- var height = math.max(0f, geometry.Height);
- m_PrimitiveSize = new float3(radius * 2f, radius * 2f, height);
-
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- public void SetCylinder(CylinderGeometry geometry)
- {
- var euler = m_PrimitiveOrientation;
- euler.SetValue(geometry.Orientation);
- SetCylinder(geometry, euler);
- }
-
- internal void SetCylinder(CylinderGeometry geometry, EulerAngles orientation)
- {
- m_ShapeType = ShapeType.Cylinder;
- m_PrimitiveCenter = geometry.Center;
- m_PrimitiveOrientation = orientation;
-
- geometry.Radius = math.max(0f, geometry.Radius);
- geometry.Height = math.max(0f, geometry.Height);
- m_PrimitiveSize = new float3(geometry.Radius * 2f, geometry.Radius * 2f, geometry.Height);
-
- m_ConvexHullGenerationParameters.BevelRadius = geometry.BevelRadius;
-
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- public void SetSphere(SphereGeometry geometry, quaternion orientation)
- {
- var euler = m_PrimitiveOrientation;
- euler.SetValue(orientation);
- SetSphere(geometry, euler);
- }
-
- internal void SetSphere(SphereGeometry geometry)
- {
- SetSphere(geometry, m_PrimitiveOrientation);
- }
-
- internal void SetSphere(SphereGeometry geometry, EulerAngles orientation)
- {
- m_ShapeType = ShapeType.Sphere;
- m_PrimitiveCenter = geometry.Center;
-
- var radius = math.max(0f, geometry.Radius);
- m_PrimitiveSize = new float3(2f * radius, 2f * radius, 2f * radius);
-
- m_PrimitiveOrientation = orientation;
-
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- public void SetPlane(float3 center, float2 size, quaternion orientation)
- {
- var euler = m_PrimitiveOrientation;
- euler.SetValue(orientation);
- SetPlane(center, size, euler);
- }
-
- internal void SetPlane(float3 center, float2 size, EulerAngles orientation)
- {
- m_ShapeType = ShapeType.Plane;
- m_PrimitiveCenter = center;
- m_PrimitiveOrientation = orientation;
- m_PrimitiveSize = new float3(size.x, 0f, size.y);
-
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- public void SetConvexHull(
- ConvexHullGenerationParameters hullGenerationParameters, float minimumSkinnedVertexWeight
- )
- {
- m_MinimumSkinnedVertexWeight = minimumSkinnedVertexWeight;
- SetConvexHull(hullGenerationParameters);
- }
-
- public void SetConvexHull(ConvexHullGenerationParameters hullGenerationParameters, UnityEngine.Mesh customMesh = null)
- {
- m_ShapeType = ShapeType.ConvexHull;
- m_CustomMesh = customMesh;
- hullGenerationParameters.OnValidate();
- m_ConvexHullGenerationParameters = hullGenerationParameters;
- }
-
- public void SetMesh(UnityEngine.Mesh mesh = null)
- {
- m_ShapeType = ShapeType.Mesh;
- m_CustomMesh = mesh;
- }
-
- void OnEnable()
- {
- // included so tick box appears in Editor
- }
-
- const int k_LatestVersion = 1;
-
- [SerializeField]
- int m_SerializedVersion = 0;
-
- void ISerializationCallbackReceiver.OnBeforeSerialize() {}
-
- void ISerializationCallbackReceiver.OnAfterDeserialize() => UpgradeVersionIfNecessary();
-
-#pragma warning disable 618
- void UpgradeVersionIfNecessary()
- {
- if (m_SerializedVersion < k_LatestVersion)
- {
- // old data from version < 1 have been removed
- if (m_SerializedVersion < 1)
- m_SerializedVersion = 1;
- }
- }
-
-#pragma warning restore 618
-
- static void Validate(ref CylindricalProperties props)
- {
- props.Height = math.max(0f, props.Height);
- props.Radius = math.max(0f, props.Radius);
- }
-
- void OnValidate()
- {
- UpgradeVersionIfNecessary();
-
- m_PrimitiveSize = math.max(m_PrimitiveSize, new float3());
- Validate(ref m_Capsule);
- Validate(ref m_Cylinder);
- switch (m_ShapeType)
- {
- case ShapeType.Box:
- SetBox(GetBoxProperties(out var orientation), orientation);
- break;
- case ShapeType.Capsule:
- SetCapsule(GetCapsuleProperties());
- break;
- case ShapeType.Cylinder:
- SetCylinder(GetCylinderProperties(out orientation), orientation);
- break;
- case ShapeType.Sphere:
- SetSphere(GetSphereProperties(out orientation), orientation);
- break;
- case ShapeType.Plane:
- GetPlaneProperties(out var center, out var size2D, out orientation);
- SetPlane(center, size2D, orientation);
- break;
- case ShapeType.ConvexHull:
- case ShapeType.Mesh:
- break;
- default:
- throw new UnimplementedShapeException(m_ShapeType);
- }
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- m_CylinderSideCount =
- math.clamp(m_CylinderSideCount, CylinderGeometry.MinSideCount, CylinderGeometry.MaxSideCount);
- m_ConvexHullGenerationParameters.OnValidate();
-
- PhysicsMaterialProperties.OnValidate(ref m_Material, true);
- }
-
- // matrix to transform point from shape space into world space
- public float4x4 GetShapeToWorldMatrix() =>
- new float4x4(Math.DecomposeRigidBodyTransform(transform.localToWorldMatrix));
-
- // matrix to transform point from object's local transform matrix into shape space
- internal float4x4 GetLocalToShapeMatrix() =>
- math.mul(math.inverse(GetShapeToWorldMatrix()), transform.localToWorldMatrix);
-
- internal unsafe void BakePoints(NativeArray points)
- {
- var localToShapeQuantized = GetLocalToShapeMatrix();
- using (var aabb = new NativeArray(1, Allocator.TempJob))
- {
- new PhysicsShapeExtensions.GetAabbJob { Points = points, Aabb = aabb }.Run();
- HashableShapeInputs.GetQuantizedTransformations(localToShapeQuantized, aabb[0], out localToShapeQuantized);
- }
- using (var bakedPoints = new NativeArray(points.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory))
- {
- new BakePointsJob
- {
- Points = points,
- LocalToShape = localToShapeQuantized,
- Output = bakedPoints
- }.Schedule(points.Length, 16).Complete();
-
- UnsafeUtility.MemCpy(points.GetUnsafePtr(), bakedPoints.GetUnsafePtr(), points.Length * UnsafeUtility.SizeOf());
- }
- }
-
- [BurstCompile]
- struct BakePointsJob : IJobParallelFor
- {
- [Collections.ReadOnly]
- public NativeArray Points;
- public float4x4 LocalToShape;
- public NativeArray Output;
-
- public void Execute(int index) => Output[index] = math.mul(LocalToShape, new float4(Points[index], 1f)).xyz;
- }
-
- ///
- /// Fit this shape to render geometry in its GameObject hierarchy. Children in the hierarchy will
- /// influence the result if they have enabled MeshRenderer components or have vertices bound to
- /// them on a SkinnedMeshRenderer. Children will only count as influences if this shape is the
- /// first ancestor shape in their hierarchy. As such, you should add shape components to all
- /// GameObjects that should have them before you call this method on any of them.
- ///
- ///
- /// Thrown when an Unimplemented Shape error
- /// condition occurs.
- ///
- /// (Optional)
- /// The minimum total weight that a vertex in a skinned mesh must have assigned to this object
- /// and/or any of its influencing children.
-
- public void FitToEnabledRenderMeshes(float minimumSkinnedVertexWeight = 0f)
- {
- var shapeType = m_ShapeType;
- m_MinimumSkinnedVertexWeight = minimumSkinnedVertexWeight;
-
- using (var points = new NativeList(65535, Allocator.Persistent))
- {
- // temporarily un-assign custom mesh and assume this shape is a convex hull
- var customMesh = m_CustomMesh;
- m_CustomMesh = null;
- GetConvexHullProperties(points, Application.isPlaying, default, default, default, default);
- m_CustomMesh = customMesh;
- if (points.Length == 0)
- return;
-
- // TODO: find best rotation, particularly if any points came from skinned mesh
- var orientation = quaternion.identity;
- var bounds = new Bounds(points[0], float3.zero);
- for (int i = 1, count = points.Length; i < count; ++i)
- bounds.Encapsulate(points[i]);
-
- SetBox(
- new BoxGeometry
- {
- Center = bounds.center,
- Size = bounds.size,
- Orientation = orientation,
- BevelRadius = m_ConvexHullGenerationParameters.BevelRadius
- }
- );
- }
-
- switch (shapeType)
- {
- case ShapeType.Capsule:
- SetCapsule(GetCapsuleProperties());
- break;
- case ShapeType.Cylinder:
- SetCylinder(GetCylinderProperties(out var orientation), orientation);
- break;
- case ShapeType.Sphere:
- SetSphere(GetSphereProperties(out orientation), orientation);
- break;
- case ShapeType.Plane:
- // force recalculation of plane orientation by making it think shape type is out of date
- m_ShapeType = ShapeType.Box;
- GetPlaneProperties(out var center, out var size2D, out orientation);
- SetPlane(center, size2D, orientation);
- break;
- case ShapeType.Box:
- case ShapeType.ConvexHull:
- case ShapeType.Mesh:
- m_ShapeType = shapeType;
- break;
- default:
- throw new UnimplementedShapeException(shapeType);
- }
- SyncCapsuleProperties();
- SyncCylinderProperties();
- SyncSphereProperties();
- }
-
- [Conditional("UNITY_EDITOR")]
- void Reset()
- {
-#if UNITY_EDITOR
- InitializeConvexHullGenerationParameters();
- FitToEnabledRenderMeshes(m_MinimumSkinnedVertexWeight);
- // TODO: also pick best primitive shape
- UnityEditor.SceneView.RepaintAll();
-#endif
- }
-
- public void InitializeConvexHullGenerationParameters()
- {
- var pointCloud = new NativeList(65535, Allocator.Temp);
- GetConvexHullProperties(pointCloud, false, default, default, default, default);
- m_ConvexHullGenerationParameters.InitializeToRecommendedAuthoringValues(pointCloud.AsArray());
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs.meta
deleted file mode 100644
index a78fe586..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Bodies/PhysicsShapeAuthoring.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b275e5f92732148048d7b77e264ac30e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs
deleted file mode 100644
index 16db5ef3..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-using UnityEngine.Serialization;
-
-namespace Unity.Physics.Authoring
-{
- [CreateAssetMenu(menuName = "Unity Physics/Custom Physics Material Tag Names", fileName = "Custom Material Tag Names", order = 506)]
- public sealed partial class CustomPhysicsMaterialTagNames : ScriptableObject, ITagNames
- {
- CustomPhysicsMaterialTagNames() {}
-
- public IReadOnlyList TagNames => m_TagNames;
- [SerializeField]
- [FormerlySerializedAs("m_FlagNames")]
- string[] m_TagNames = Enumerable.Range(0, 8).Select(i => string.Empty).ToArray();
-
- void OnValidate()
- {
- if (m_TagNames.Length != 8)
- Array.Resize(ref m_TagNames, 8);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs.meta
deleted file mode 100644
index 4c5aa63d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTagNames.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 7c8956dd10f66427faa4a4067c5dd97d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {fileID: 2800000, guid: 7c7a0159cb0d5433b90c970978f6cf5c, type: 3}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs
deleted file mode 100644
index c15b768b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-using Unity.Mathematics;
-
-namespace Unity.Physics.Authoring
-{
- [Serializable]
- public struct CustomPhysicsMaterialTags : IEquatable
- {
- public static CustomPhysicsMaterialTags Everything => new CustomPhysicsMaterialTags { Value = unchecked((byte)~0) };
- public static CustomPhysicsMaterialTags Nothing => new CustomPhysicsMaterialTags { Value = 0 };
-
- public bool Tag00;
- public bool Tag01;
- public bool Tag02;
- public bool Tag03;
- public bool Tag04;
- public bool Tag05;
- public bool Tag06;
- public bool Tag07;
-
- internal bool this[int i]
- {
- get
- {
- SafetyChecks.CheckInRangeAndThrow(i, new int2(0, 7), nameof(i));
- switch (i)
- {
- case 0: return Tag00;
- case 1: return Tag01;
- case 2: return Tag02;
- case 3: return Tag03;
- case 4: return Tag04;
- case 5: return Tag05;
- case 6: return Tag06;
- case 7: return Tag07;
- default: return default;
- }
- }
- set
- {
- SafetyChecks.CheckInRangeAndThrow(i, new int2(0, 7), nameof(i));
- switch (i)
- {
- case 0: Tag00 = value; break;
- case 1: Tag01 = value; break;
- case 2: Tag02 = value; break;
- case 3: Tag03 = value; break;
- case 4: Tag04 = value; break;
- case 5: Tag05 = value; break;
- case 6: Tag06 = value; break;
- case 7: Tag07 = value; break;
- }
- }
- }
-
- public byte Value
- {
- get
- {
- var result = 0;
- result |= (Tag00 ? 1 : 0) << 0;
- result |= (Tag01 ? 1 : 0) << 1;
- result |= (Tag02 ? 1 : 0) << 2;
- result |= (Tag03 ? 1 : 0) << 3;
- result |= (Tag04 ? 1 : 0) << 4;
- result |= (Tag05 ? 1 : 0) << 5;
- result |= (Tag06 ? 1 : 0) << 6;
- result |= (Tag07 ? 1 : 0) << 7;
- return (byte)result;
- }
- set
- {
- Tag00 = (value & (1 << 0)) != 0;
- Tag01 = (value & (1 << 1)) != 0;
- Tag02 = (value & (1 << 2)) != 0;
- Tag03 = (value & (1 << 3)) != 0;
- Tag04 = (value & (1 << 4)) != 0;
- Tag05 = (value & (1 << 5)) != 0;
- Tag06 = (value & (1 << 6)) != 0;
- Tag07 = (value & (1 << 7)) != 0;
- }
- }
-
- public bool Equals(CustomPhysicsMaterialTags other) => Value == other.Value;
-
- public override bool Equals(object obj) => obj is CustomPhysicsMaterialTags other && Equals(other);
-
- public override int GetHashCode() => Value;
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs.meta
deleted file mode 100644
index e0dc19e1..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/CustomPhysicsMaterialTags.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 05cffa1394b6f481ca7e686dfc6404b9
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs
deleted file mode 100644
index e13c6f8a..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-#if UNITY_EDITOR
-using System.Linq;
-using UnityEditor;
-
-namespace Unity.Physics.Authoring
-{
- [InitializeOnLoad]
- class EditorInitialization
- {
- static readonly string k_CustomDefine = "UNITY_PHYSICS_CUSTOM";
-
- static EditorInitialization()
- {
- var definesStr = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
- var defines = definesStr.Split(';').ToList();
- var found = defines.Find(define => define.Equals(k_CustomDefine));
- if (found == null)
- {
- defines.Add(k_CustomDefine);
- PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup,
- string.Join(";", defines.ToArray()));
- }
- }
- }
-}
-#endif
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs.meta
deleted file mode 100644
index 6a104208..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/EditorInitialization.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 23f03a5c38aa4a6e81448a178cc0a09f
-timeCreated: 1680128866
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints.meta
deleted file mode 100644
index 0c6f9121..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 7f26f023234dd844797f8158565ecb4f
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs
deleted file mode 100644
index c2baa559..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-using System;
-using Unity.Collections;
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [BakingType]
- public struct JointEntityBaking : IComponentData
- {
- public Entity Entity;
- }
-
- public class BallAndSocketJoint : BaseJoint
- {
- // Editor only settings
- [HideInInspector]
- public bool EditPivots;
-
- [Tooltip("If checked, PositionLocal will snap to match PositionInConnectedEntity")]
- public bool AutoSetConnected = true;
-
- public float3 PositionLocal;
- public float3 PositionInConnectedEntity;
-
- public virtual void UpdateAuto()
- {
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- PositionInConnectedEntity = math.transform(bFromA, PositionLocal);
- }
- }
- }
-
- public abstract class JointBaker : Baker where T : BaseJoint
- {
- protected PhysicsConstrainedBodyPair GetConstrainedBodyPair(BaseJoint authoring)
- {
- return new PhysicsConstrainedBodyPair(
- GetEntity(TransformUsageFlags.Dynamic),
- authoring.ConnectedBody == null ? Entity.Null : GetEntity(authoring.ConnectedBody, TransformUsageFlags.Dynamic),
- authoring.EnableCollision
- );
- }
-
- public Entity CreateJointEntity(uint worldIndex, PhysicsConstrainedBodyPair constrainedBodyPair, PhysicsJoint joint)
- {
- using (var joints = new NativeArray(1, Allocator.Temp) { [0] = joint })
- using (var jointEntities = new NativeList(1, Allocator.Temp))
- {
- CreateJointEntities(worldIndex, constrainedBodyPair, joints, jointEntities);
- return jointEntities[0];
- }
- }
-
- public uint GetWorldIndex(Component c)
- {
- uint worldIndex = 0;
- if (c)
- {
- var physicsBody = GetComponent(c);
- if (physicsBody != null)
- {
- worldIndex = physicsBody.WorldIndex;
- }
- }
- return worldIndex;
- }
-
- public uint GetWorldIndexFromBaseJoint(BaseJoint authoring)
- {
- var physicsBody = GetComponent(authoring);
- uint worldIndex = physicsBody.WorldIndex;
- if (authoring.ConnectedBody == null)
- {
- return worldIndex;
- }
-
- var connectedBody = GetComponent(authoring.ConnectedBody);
- if (connectedBody != null)
- {
- Assertions.Assert.AreEqual(worldIndex, connectedBody.WorldIndex);
- }
-
- return worldIndex;
- }
-
- public void CreateJointEntities(uint worldIndex, PhysicsConstrainedBodyPair constrainedBodyPair, NativeArray joints, NativeList newJointEntities)
- {
- if (!joints.IsCreated || joints.Length == 0)
- return;
-
- if (newJointEntities.IsCreated)
- newJointEntities.Clear();
- else
- newJointEntities = new NativeList(joints.Length, Allocator.Temp);
-
- // create all new joints
- var multipleJoints = joints.Length > 1;
-
- var entity = GetEntity(TransformUsageFlags.Dynamic);
- for (var i = 0; i < joints.Length; ++i)
- {
- var jointEntity = CreateAdditionalEntity(TransformUsageFlags.Dynamic);
- AddSharedComponent(jointEntity, new PhysicsWorldIndex(worldIndex));
-
- AddComponent(jointEntity, constrainedBodyPair);
- AddComponent(jointEntity, joints[i]);
-
- newJointEntities.Add(jointEntity);
-
- if (GetComponent() != null)
- {
- AddComponent(jointEntity, new JointEntityBaking()
- {
- Entity = entity
- });
- AddSharedComponentManaged(jointEntity, new ModifyJointLimits());
- }
- }
-
- if (multipleJoints)
- {
- // set companion buffers for new joints
- for (var i = 0; i < joints.Length; ++i)
- {
- var companions = AddBuffer(newJointEntities[i]);
- for (var j = 0; j < joints.Length; ++j)
- {
- if (i == j)
- continue;
- companions.Add(new PhysicsJointCompanion {JointEntity = newJointEntities[j]});
- }
- }
- }
- }
- }
-
- class BallAndSocketJointBaker : JointBaker
- {
- public override void Bake(BallAndSocketJoint authoring)
- {
- authoring.UpdateAuto();
- var physicsJoint = PhysicsJoint.CreateBallAndSocket(authoring.PositionLocal, authoring.PositionInConnectedEntity);
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs.meta
deleted file mode 100644
index af6cb167..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BallAndSocketJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 28a669fa0e32f734c9d34661ccdfd58d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs
deleted file mode 100644
index 808d3de0..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using Unity.Mathematics;
-
-namespace Unity.Physics.Authoring
-{
- public abstract class BaseJoint : BaseBodyPairConnector
- {
- public bool EnableCollision;
- public float3 MaxImpulse = float.PositiveInfinity;
-
- void OnEnable()
- {
- // included so tick box appears in Editor
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs.meta
deleted file mode 100644
index fe6324f1..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/BaseJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 02bf6429cb18f3147ae5f7d8e3fd5f07
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs
deleted file mode 100644
index 422a3341..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- public class FreeHingeJoint : BallAndSocketJoint
- {
- // Editor only settings
- [HideInInspector]
- public bool EditAxes;
-
- public float3 HingeAxisLocal;
- public float3 HingeAxisInConnectedEntity;
-
- public override void UpdateAuto()
- {
- base.UpdateAuto();
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- HingeAxisInConnectedEntity = math.mul(bFromA.rot, HingeAxisLocal);
- }
- }
- }
-
- class FreeHingeJointBaker : JointBaker
- {
- public override void Bake(FreeHingeJoint authoring)
- {
- authoring.UpdateAuto();
-
- Math.CalculatePerpendicularNormalized(authoring.HingeAxisLocal, out var perpendicularLocal, out _);
- Math.CalculatePerpendicularNormalized(authoring.HingeAxisInConnectedEntity, out var perpendicularConnected, out _);
-
- var physicsJoint = PhysicsJoint.CreateHinge(
- new BodyFrame {Axis = authoring.HingeAxisLocal, Position = authoring.PositionLocal, PerpendicularAxis = perpendicularLocal},
- new BodyFrame {Axis = authoring.HingeAxisInConnectedEntity, Position = authoring.PositionInConnectedEntity, PerpendicularAxis = perpendicularConnected }
- );
-
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs.meta
deleted file mode 100644
index 12ade728..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/FreeHingeJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: e5dc8c079bffa454ca607aac63ea7e7a
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs
deleted file mode 100644
index 440e302b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using Unity.Collections;
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- // This Joint allows you to lock one or more of the 6 degrees of freedom of a constrained body.
- // This is achieved by combining the appropriate lower level 'constraint atoms' to form the higher level Joint.
- // In this case Linear and Angular constraint atoms are combined.
- // One use-case for this Joint could be to restrict a 3d simulation to a 2d plane.
- public class LimitDOFJoint : BaseJoint
- {
- public bool3 LockLinearAxes;
- public bool3 LockAngularAxes;
-
- public PhysicsJoint CreateLimitDOFJoint(RigidTransform offset)
- {
- var constraints = new FixedList512Bytes();
- if (math.any(LockLinearAxes))
- {
- constraints.Add(new Constraint
- {
- ConstrainedAxes = LockLinearAxes,
- Type = ConstraintType.Linear,
- Min = 0,
- Max = 0,
- SpringFrequency = Constraint.DefaultSpringFrequency,
- SpringDamping = Constraint.DefaultSpringDamping,
- MaxImpulse = MaxImpulse,
- });
- }
- if (math.any(LockAngularAxes))
- {
- constraints.Add(new Constraint
- {
- ConstrainedAxes = LockAngularAxes,
- Type = ConstraintType.Angular,
- Min = 0,
- Max = 0,
- SpringFrequency = Constraint.DefaultSpringFrequency,
- SpringDamping = Constraint.DefaultSpringDamping,
- MaxImpulse = MaxImpulse,
- });
- }
-
- var joint = new PhysicsJoint
- {
- BodyAFromJoint = BodyFrame.Identity,
- BodyBFromJoint = offset
- };
- joint.SetConstraints(constraints);
- return joint;
- }
- }
-
- class LimitDOFJointBaker : Baker
- {
- public Entity CreateJointEntity(uint worldIndex, PhysicsConstrainedBodyPair constrainedBodyPair, PhysicsJoint joint)
- {
- using (var joints = new NativeArray(1, Allocator.Temp) { [0] = joint })
- using (var jointEntities = new NativeList(1, Allocator.Temp))
- {
- CreateJointEntities(worldIndex, constrainedBodyPair, joints, jointEntities);
- return jointEntities[0];
- }
- }
-
- public void CreateJointEntities(uint worldIndex, PhysicsConstrainedBodyPair constrainedBodyPair, NativeArray joints, NativeList newJointEntities = default)
- {
- if (!joints.IsCreated || joints.Length == 0)
- return;
-
- if (newJointEntities.IsCreated)
- newJointEntities.Clear();
- else
- newJointEntities = new NativeList(joints.Length, Allocator.Temp);
-
- // create all new joints
- var multipleJoints = joints.Length > 1;
-
- for (var i = 0; i < joints.Length; ++i)
- {
- var jointEntity = CreateAdditionalEntity(TransformUsageFlags.Dynamic);
- AddSharedComponent(jointEntity, new PhysicsWorldIndex(worldIndex));
-
- AddComponent(jointEntity, constrainedBodyPair);
- AddComponent(jointEntity, joints[i]);
-
- newJointEntities.Add(jointEntity);
- }
-
- if (multipleJoints)
- {
- // set companion buffers for new joints
- for (var i = 0; i < joints.Length; ++i)
- {
- var companions = AddBuffer(newJointEntities[i]);
- for (var j = 0; j < joints.Length; ++j)
- {
- if (i == j)
- continue;
- companions.Add(new PhysicsJointCompanion {JointEntity = newJointEntities[j]});
- }
- }
- }
- }
-
- protected PhysicsConstrainedBodyPair GetConstrainedBodyPair(LimitDOFJoint authoring)
- {
- return new PhysicsConstrainedBodyPair(
- GetEntity(TransformUsageFlags.Dynamic),
- authoring.ConnectedBody == null ? Entity.Null : GetEntity(authoring.ConnectedBody, TransformUsageFlags.Dynamic),
- authoring.EnableCollision
- );
- }
-
- public uint GetWorldIndex(Component c)
- {
- uint worldIndex = 0;
- var physicsBody = GetComponent(c);
- if (physicsBody != null)
- {
- worldIndex = physicsBody.WorldIndex;
- }
- return worldIndex;
- }
-
- public override void Bake(LimitDOFJoint authoring)
- {
- if (!math.any(authoring.LockLinearAxes) && !math.any(authoring.LockAngularAxes))
- return;
-
- RigidTransform bFromA = math.mul(math.inverse(authoring.worldFromB), authoring.worldFromA);
- PhysicsJoint physicsJoint = authoring.CreateLimitDOFJoint(bFromA);
-
- var worldIndex = GetWorldIndex(authoring);
- CreateJointEntity(
- worldIndex,
- GetConstrainedBodyPair(authoring),
- physicsJoint
- );
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs.meta
deleted file mode 100644
index cb378ae4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitDOFJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9457d04025dadec4b85ae39dad2e1822
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs
deleted file mode 100644
index a6245a98..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Unity.Entities;
-using static Unity.Physics.Math;
-
-namespace Unity.Physics.Authoring
-{
- public class LimitedDistanceJoint : BallAndSocketJoint
- {
- public float MinDistance;
- public float MaxDistance;
- }
-
- class LimitedDistanceJointBaker : JointBaker
- {
- public override void Bake(LimitedDistanceJoint authoring)
- {
- authoring.UpdateAuto();
-
- var physicsJoint = PhysicsJoint.CreateLimitedDistance(authoring.PositionLocal, authoring.PositionInConnectedEntity, new FloatRange(authoring.MinDistance, authoring.MaxDistance));
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs.meta
deleted file mode 100644
index 368e65dc..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedDistanceJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d79d98418b67aa44db932451943018a8
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs
deleted file mode 100644
index e042bd01..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-using static Unity.Physics.Math;
-
-namespace Unity.Physics.Authoring
-{
- public class LimitedHingeJoint : FreeHingeJoint
- {
- // Editor only settings
- [HideInInspector]
- public bool EditLimits;
-
- public float3 PerpendicularAxisLocal;
- public float3 PerpendicularAxisInConnectedEntity;
- public float MinAngle;
- public float MaxAngle;
-
- public override void UpdateAuto()
- {
- base.UpdateAuto();
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- HingeAxisInConnectedEntity = math.mul(bFromA.rot, HingeAxisLocal);
- PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, PerpendicularAxisLocal);
- }
- }
- }
-
- class LimitedHingeJointBaker : JointBaker
- {
- public override void Bake(LimitedHingeJoint authoring)
- {
- authoring.UpdateAuto();
-
- var physicsJoint = PhysicsJoint.CreateLimitedHinge(
- new BodyFrame
- {
- Axis = math.normalize(authoring.HingeAxisLocal),
- PerpendicularAxis = math.normalize(authoring.PerpendicularAxisLocal),
- Position = authoring.PositionLocal
- },
- new BodyFrame
- {
- Axis = math.normalize(authoring.HingeAxisInConnectedEntity),
- PerpendicularAxis = math.normalize(authoring.PerpendicularAxisInConnectedEntity),
- Position = authoring.PositionInConnectedEntity
- },
- math.radians(new FloatRange(authoring.MinAngle, authoring.MaxAngle))
- );
-
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs.meta
deleted file mode 100644
index 724ca68e..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/LimitedHingeJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: cbaf9813ee7af2f41a5fd776598ab5b5
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs
deleted file mode 100644
index 09e89ca8..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Unity.Collections;
-using Unity.Entities;
-using Unity.Jobs;
-using Unity.Mathematics;
-using Unity.Physics;
-using Unity.Physics.Authoring;
-using Unity.Physics.Extensions;
-using Unity.Physics.Systems;
-using UnityEngine;
-using FloatRange = Unity.Physics.Math.FloatRange;
-
-namespace Unity.Physics.Authoring
-{
- // stores an initial value and a pair of scalar curves to apply to relevant constraints on the joint
- struct ModifyJointLimits : ISharedComponentData, IEquatable
- {
- public PhysicsJoint InitialValue;
- public ParticleSystem.MinMaxCurve AngularRangeScalar;
- public ParticleSystem.MinMaxCurve LinearRangeScalar;
-
- public bool Equals(ModifyJointLimits other) =>
- AngularRangeScalar.Equals(other.AngularRangeScalar) && LinearRangeScalar.Equals(other.LinearRangeScalar);
-
- public override bool Equals(object obj) => obj is ModifyJointLimits other && Equals(other);
-
- public override int GetHashCode() =>
- unchecked((AngularRangeScalar.GetHashCode() * 397) ^ LinearRangeScalar.GetHashCode());
- }
-
- // an authoring component to add to a GameObject with one or more Joint
- public class ModifyJointLimitsAuthoring : MonoBehaviour
- {
- public ParticleSystem.MinMaxCurve AngularRangeScalar = new ParticleSystem.MinMaxCurve(
- 1f,
- min: new AnimationCurve(
- new Keyframe(0f, 0f, 0f, 0f),
- new Keyframe(2f, -2f, 0f, 0f),
- new Keyframe(4f, 0f, 0f, 0f)
- )
- {
- preWrapMode = WrapMode.Loop,
- postWrapMode = WrapMode.Loop
- },
- max: new AnimationCurve(
- new Keyframe(0f, 1f, 0f, 0f),
- new Keyframe(2f, -1f, 0f, 0f),
- new Keyframe(4f, 1f, 0f, 0f)
- )
- {
- preWrapMode = WrapMode.Loop,
- postWrapMode = WrapMode.Loop
- }
- );
-
- public ParticleSystem.MinMaxCurve LinearRangeScalar = new ParticleSystem.MinMaxCurve(
- 1f,
- min: new AnimationCurve(
- new Keyframe(0f, 1f, 0f, 0f),
- new Keyframe(2f, 0.5f, 0f, 0f),
- new Keyframe(4f, 1f, 0f, 0f)
- )
- {
- preWrapMode = WrapMode.Loop,
- postWrapMode = WrapMode.Loop
- },
- max: new AnimationCurve(
- new Keyframe(0f, 0.5f, 0f, 0f),
- new Keyframe(2f, 0f, 0f, 0f),
- new Keyframe(4f, 0.5f, 0f, 0f)
- )
- {
- preWrapMode = WrapMode.Loop,
- postWrapMode = WrapMode.Loop
- }
- );
- }
-
- [BakingType]
- public class ModifyJointLimitsBakingData : IComponentData
- {
- public ParticleSystem.MinMaxCurve AngularRangeScalar;
- public ParticleSystem.MinMaxCurve LinearRangeScalar;
- }
-
- class ModifyJointLimitsBaker : Baker
- {
- public override void Bake(ModifyJointLimitsAuthoring authoring)
- {
- var entity = GetEntity(TransformUsageFlags.Dynamic);
- AddComponentObject(entity, new ModifyJointLimitsBakingData
- {
- AngularRangeScalar = authoring.AngularRangeScalar,
- LinearRangeScalar = authoring.LinearRangeScalar
- });
- }
- }
-
- // after joints have been converted, find the entities they produced and add ModifyJointLimits to them
- [UpdateAfter(typeof(EndJointBakingSystem))]
- [WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)]
- partial struct ModifyJointLimitsBakingSystem : ISystem
- {
- private EntityQuery _ModifyJointLimitsBakingDataQuery;
- private EntityQuery _JointEntityBakingQuery;
-
- public void OnCreate(ref SystemState state)
- {
- _ModifyJointLimitsBakingDataQuery = state.GetEntityQuery(new EntityQueryDesc
- {
- All = new[] {ComponentType.ReadOnly()},
- Options = EntityQueryOptions.IncludeDisabledEntities | EntityQueryOptions.IncludePrefab
- });
-
- _JointEntityBakingQuery = state.GetEntityQuery(new EntityQueryDesc
- {
- All = new[] {ComponentType.ReadOnly()}
- });
-
- _ModifyJointLimitsBakingDataQuery.AddChangedVersionFilter(typeof(ModifyJointLimitsBakingData));
- _JointEntityBakingQuery.AddChangedVersionFilter(typeof(JointEntityBaking));
- }
-
- public void OnUpdate(ref SystemState state)
- {
- if (_ModifyJointLimitsBakingDataQuery.IsEmpty && _JointEntityBakingQuery.IsEmpty)
- {
- return;
- }
-
- // Collect all the joints
- NativeParallelMultiHashMap jointsLookUp =
- new NativeParallelMultiHashMap(10, Allocator.TempJob);
-
- foreach (var(jointEntity, physicsJoint, entity) in SystemAPI
- .Query, RefRO>().WithEntityAccess()
- .WithOptions(EntityQueryOptions.IncludeDisabledEntities | EntityQueryOptions.IncludePrefab))
- {
- jointsLookUp.Add(jointEntity.ValueRO.Entity, (entity, physicsJoint.ValueRO));
- }
-
- foreach (var(modifyJointLimits, entity) in SystemAPI.Query()
- .WithEntityAccess().WithOptions(EntityQueryOptions.IncludeDisabledEntities |
- EntityQueryOptions.IncludePrefab))
- {
- var angularModification = new ParticleSystem.MinMaxCurve(
- multiplier: math.radians(modifyJointLimits.AngularRangeScalar.curveMultiplier),
- min: modifyJointLimits.AngularRangeScalar.curveMin,
- max: modifyJointLimits.AngularRangeScalar.curveMax
- );
-
- foreach (var joint in jointsLookUp.GetValuesForKey(entity))
- {
- state.EntityManager.SetSharedComponentManaged(joint.Item1, new ModifyJointLimits
- {
- InitialValue = joint.Item2,
- AngularRangeScalar = angularModification,
- LinearRangeScalar = modifyJointLimits.LinearRangeScalar
- });
- }
- }
-
- jointsLookUp.Dispose();
- }
- }
-
- // apply an animated effect to the limits on supported types of joints
- [RequireMatchingQueriesForUpdate]
- [UpdateInGroup(typeof(PhysicsSystemGroup), OrderLast = true)]
- partial struct ModifyJointLimitsSystem : ISystem
- {
- public void OnUpdate(ref SystemState state)
- {
- var time = (float)SystemAPI.Time.ElapsedTime;
-
- foreach (var(joint, modification) in SystemAPI.Query, ModifyJointLimits>())
- {
- var animatedAngularScalar = new FloatRange(
- modification.AngularRangeScalar.curveMin.Evaluate(time),
- modification.AngularRangeScalar.curveMax.Evaluate(time)
- );
- var animatedLinearScalar = new FloatRange(
- modification.LinearRangeScalar.curveMin.Evaluate(time),
- modification.LinearRangeScalar.curveMax.Evaluate(time)
- );
-
- // in each case, get relevant properties from the initial value based on joint type, and apply scalar
- switch (joint.ValueRW.JointType)
- {
- // Custom type could be anything, so this demo just applies changes to all constraints
- case JointType.Custom:
- var constraints = modification.InitialValue.GetConstraints();
- for (var i = 0; i < constraints.Length; i++)
- {
- var constraint = constraints[i];
- var isAngular = constraint.Type == ConstraintType.Angular;
- var scalar = math.select(animatedLinearScalar, animatedAngularScalar, isAngular);
- var constraintRange = (FloatRange)(new float2(constraint.Min, constraint.Max) * scalar);
- constraint.Min = constraintRange.Min;
- constraint.Max = constraintRange.Max;
- constraints[i] = constraint;
- }
-
- joint.ValueRW.SetConstraints(constraints);
- break;
- // other types have corresponding getters/setters to retrieve more meaningful data
- case JointType.LimitedDistance:
- var distanceRange = modification.InitialValue.GetLimitedDistanceRange();
- joint.ValueRW.SetLimitedDistanceRange(distanceRange * (float2)animatedLinearScalar);
- break;
- case JointType.LimitedHinge:
- var angularRange = modification.InitialValue.GetLimitedHingeRange();
- joint.ValueRW.SetLimitedHingeRange(angularRange * (float2)animatedAngularScalar);
- break;
- case JointType.Prismatic:
- var distanceOnAxis = modification.InitialValue.GetPrismaticRange();
- joint.ValueRW.SetPrismaticRange(distanceOnAxis * (float2)animatedLinearScalar);
- break;
- // ragdoll joints are composed of two separate joints with different meanings
- case JointType.RagdollPrimaryCone:
- modification.InitialValue.GetRagdollPrimaryConeAndTwistRange(
- out var maxConeAngle,
- out var angularTwistRange
- );
- joint.ValueRW.SetRagdollPrimaryConeAndTwistRange(
- maxConeAngle * animatedAngularScalar.Max,
- angularTwistRange * (float2)animatedAngularScalar
- );
- break;
- case JointType.RagdollPerpendicularCone:
- var angularPlaneRange = modification.InitialValue.GetRagdollPerpendicularConeRange();
- joint.ValueRW.SetRagdollPerpendicularConeRange(angularPlaneRange *
- (float2)animatedAngularScalar);
- break;
- // remaining types have no limits on their Constraint atoms to meaningfully modify
- case JointType.BallAndSocket:
- case JointType.Fixed:
- case JointType.Hinge:
- break;
- }
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs.meta
deleted file mode 100644
index 643b52f4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/ModifyJointLimitsAuthoring.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 09435b2483c7b48409764517bbfff081
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs
deleted file mode 100644
index 1592fd48..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using static Unity.Physics.Math;
-
-namespace Unity.Physics.Authoring
-{
- public class PrismaticJoint : BallAndSocketJoint
- {
- public float3 AxisLocal;
- public float3 AxisInConnectedEntity;
- public float3 PerpendicularAxisLocal;
- public float3 PerpendicularAxisInConnectedEntity;
- public float MinDistanceOnAxis;
- public float MaxDistanceOnAxis;
-
- public override void UpdateAuto()
- {
- base.UpdateAuto();
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- AxisInConnectedEntity = math.mul(bFromA.rot, AxisLocal);
- PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, PerpendicularAxisLocal);
- }
- }
- }
-
- class PrismaticJointBaker : JointBaker
- {
- public override void Bake(PrismaticJoint authoring)
- {
- authoring.UpdateAuto();
-
- var physicsJoint = PhysicsJoint.CreatePrismatic(
- new BodyFrame
- {
- Axis = authoring.AxisLocal,
- PerpendicularAxis = authoring.PerpendicularAxisLocal,
- Position = authoring.PositionLocal
- },
- new BodyFrame
- {
- Axis = authoring.AxisInConnectedEntity,
- PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity,
- Position = authoring.PositionInConnectedEntity
- },
- new FloatRange(authoring.MinDistanceOnAxis, authoring.MaxDistanceOnAxis)
- );
-
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs.meta
deleted file mode 100644
index 03f1484d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/PrismaticJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b226e7ae02ee34c458747d6c2ee8456c
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs
deleted file mode 100644
index 83f0b081..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using Unity.Collections;
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-using static Unity.Physics.Math;
-
-namespace Unity.Physics.Authoring
-{
- public class RagdollJoint : BallAndSocketJoint
- {
- const int k_LatestVersion = 1;
-
- // Editor only settings
- [HideInInspector]
- public bool EditAxes;
- [HideInInspector]
- public bool EditLimits;
-
- [SerializeField]
- int m_Version;
-
- public float3 TwistAxisLocal;
- public float3 TwistAxisInConnectedEntity;
- public float3 PerpendicularAxisLocal;
- public float3 PerpendicularAxisInConnectedEntity;
- public float MaxConeAngle;
- public float MinPerpendicularAngle;
- public float MaxPerpendicularAngle;
- public float MinTwistAngle;
- public float MaxTwistAngle;
-
- internal void UpgradeVersionIfNecessary()
- {
- if (m_Version >= k_LatestVersion)
- return;
-
- MinPerpendicularAngle -= 90f;
- MaxPerpendicularAngle -= 90f;
- m_Version = k_LatestVersion;
- }
-
- void OnValidate()
- {
- UpgradeVersionIfNecessary();
-
- MaxConeAngle = math.clamp(MaxConeAngle, 0f, 180f);
-
- MaxPerpendicularAngle = math.clamp(MaxPerpendicularAngle, -90f, 90f);
- MinPerpendicularAngle = math.clamp(MinPerpendicularAngle, -90f, 90f);
- if (MaxPerpendicularAngle < MinPerpendicularAngle)
- {
- var swap = new FloatRange(MinPerpendicularAngle, MaxPerpendicularAngle).Sorted();
- MinPerpendicularAngle = swap.Min;
- MaxPerpendicularAngle = swap.Max;
- }
-
- MinTwistAngle = math.clamp(MinTwistAngle, -180f, 180f);
- MaxTwistAngle = math.clamp(MaxTwistAngle, -180f, 180f);
- if (MaxTwistAngle < MinTwistAngle)
- {
- var swap = new FloatRange(MinTwistAngle, MaxTwistAngle).Sorted();
- MinTwistAngle = swap.Min;
- MaxTwistAngle = swap.Max;
- }
- }
-
- public override void UpdateAuto()
- {
- base.UpdateAuto();
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- TwistAxisInConnectedEntity = math.mul(bFromA.rot, TwistAxisLocal);
- PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, PerpendicularAxisLocal);
- }
- }
- }
-
- class RagdollJointBaker : JointBaker
- {
- public override void Bake(RagdollJoint authoring)
- {
- authoring.UpdateAuto();
- authoring.UpgradeVersionIfNecessary();
-
- PhysicsJoint.CreateRagdoll(
- new BodyFrame { Axis = authoring.TwistAxisLocal, PerpendicularAxis = authoring.PerpendicularAxisLocal, Position = authoring.PositionLocal },
- new BodyFrame { Axis = authoring.TwistAxisInConnectedEntity, PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity, Position = authoring.PositionInConnectedEntity },
- math.radians(authoring.MaxConeAngle),
- math.radians(new FloatRange(authoring.MinPerpendicularAngle, authoring.MaxPerpendicularAngle)),
- math.radians(new FloatRange(authoring.MinTwistAngle, authoring.MaxTwistAngle)),
- out var primaryCone,
- out var perpendicularCone
- );
-
- primaryCone.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
- perpendicularCone.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- using NativeList entities = new NativeList(1, Allocator.TempJob);
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntities(worldIndex,
- constraintBodyPair,
- new NativeArray(2, Allocator.Temp) { [0] = primaryCone, [1] = perpendicularCone }, entities);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs.meta
deleted file mode 100644
index cabe2bf9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RagdollJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: de6dfad1dfcc06c42be6f68e1413c3c4
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs
deleted file mode 100644
index d36ab798..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-
-namespace Unity.Physics.Authoring
-{
- public class RigidJoint : BallAndSocketJoint
- {
- public quaternion OrientationLocal = quaternion.identity;
- public quaternion OrientationInConnectedEntity = quaternion.identity;
-
- public override void UpdateAuto()
- {
- base.UpdateAuto();
- if (AutoSetConnected)
- {
- RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
- OrientationInConnectedEntity = math.mul(bFromA.rot, OrientationLocal);
- }
- {
- OrientationLocal = math.normalize(OrientationLocal);
- OrientationInConnectedEntity = math.normalize(OrientationInConnectedEntity);
- }
- }
- }
-
- class RigidJointBaker : JointBaker
- {
- public override void Bake(RigidJoint authoring)
- {
- authoring.UpdateAuto();
-
- var physicsJoint = PhysicsJoint.CreateFixed(
- new RigidTransform(authoring.OrientationLocal, authoring.PositionLocal),
- new RigidTransform(authoring.OrientationInConnectedEntity, authoring.PositionInConnectedEntity)
- );
-
- physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs.meta
deleted file mode 100644
index 84de04ae..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Joints/RigidJoint.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 994345d4b32d91b45a04e9ec5a6c2b46
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors.meta
deleted file mode 100644
index efbedeb1..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 0e3f6133a3c24774a35e94fc4d799eb3
-timeCreated: 1647466700
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs
deleted file mode 100644
index aba49818..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- public class AngularVelocityMotor : BaseJoint
- {
- [Tooltip("An offset from center of entity with motor. Representing the anchor/pivot point of rotation")]
- public float3 PivotPosition;
- [Tooltip("The axis of rotation of the motor. Value will be normalized")]
- public float3 AxisOfRotation;
- [Tooltip("Target speed for the motor to maintain, in degrees/s")]
- public float TargetSpeed;
- [Tooltip("The magnitude of the maximum impulse the motor can exert in a single step. Applies only to the motor constraint.")]
- public float MaxImpulseAppliedByMotor = math.INFINITY;
-
- private float3 PerpendicularAxisLocal;
- private float3 PositionInConnectedEntity;
- private float3 HingeAxisInConnectedEntity;
- private float3 PerpendicularAxisInConnectedEntity;
-
- class AngularVelocityMotorBaker : JointBaker
- {
- public override void Bake(AngularVelocityMotor authoring)
- {
- float3 axisInA = math.normalize(authoring.AxisOfRotation);
-
- RigidTransform bFromA = math.mul(math.inverse(authoring.worldFromB), authoring.worldFromA);
- authoring.PositionInConnectedEntity = math.transform(bFromA, authoring.PivotPosition); //position of motored body pivot relative to Connected Entity in world space
- authoring.HingeAxisInConnectedEntity = math.mul(bFromA.rot, axisInA); //motor axis in Connected Entity space
-
- // Always calculate the perpendicular axes
- Math.CalculatePerpendicularNormalized(axisInA, out var perpendicularLocal, out _);
- authoring.PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, perpendicularLocal); //perp motor axis in Connected Entity space
-
- var joint = PhysicsJoint.CreateAngularVelocityMotor(
- new BodyFrame
- {
- Axis = axisInA,
- PerpendicularAxis = perpendicularLocal,
- Position = authoring.PivotPosition
- },
- new BodyFrame
- {
- Axis = authoring.HingeAxisInConnectedEntity,
- PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity,
- Position = authoring.PositionInConnectedEntity
- },
- math.radians(authoring.TargetSpeed),
- authoring.MaxImpulseAppliedByMotor
- );
-
- joint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, joint);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs.meta
deleted file mode 100644
index c61a78db..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/AngularVelocityMotor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 778b7bc40bf3f455a8432365763322fe
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs
deleted file mode 100644
index 71f1c521..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- public class LinearVelocityMotor : BaseJoint
- {
- [Tooltip("An offset from the center of the body with the motor (bodyA), representing the anchor point of translation.")]
- public float3 AnchorPosition;
- [Tooltip("The direction of the motor, relative to the orientation of the Connected Body (bodyB). Value will be normalized")]
- public float3 DirectionOfMovement;
- [Tooltip("Motor will drive at this speed from the initial position of bodyA, along the Direction of Movement, in m/s.")]
- public float TargetSpeed;
- [Tooltip("The magnitude of the maximum impulse the motor can exert in a single step. Applies only to the motor constraint.")]
- public float MaxImpulseAppliedByMotor = math.INFINITY;
-
- private float3 PerpendicularAxisLocal;
- private float3 PositionInConnectedEntity;
- private float3 AxisInConnectedEntity;
- private float3 PerpendicularAxisInConnectedEntity;
-
- class LinearVelocityMotorBaker : JointBaker
- {
- public override void Bake(LinearVelocityMotor authoring)
- {
- float3 axisInB = math.normalize(authoring.DirectionOfMovement);
-
- RigidTransform aFromB = math.mul(math.inverse(authoring.worldFromA), authoring.worldFromB);
- float3 axisInA = math.mul(aFromB.rot, axisInB); //motor axis relative to bodyA
-
- RigidTransform bFromA = math.mul(math.inverse(authoring.worldFromB), authoring.worldFromA);
- authoring.PositionInConnectedEntity = math.transform(bFromA, authoring.AnchorPosition); //position of motored body relative to Connected Entity in world space
- authoring.AxisInConnectedEntity = axisInB; //motor axis in Connected Entity space
-
- // Always calculate the perpendicular axes
- Math.CalculatePerpendicularNormalized(axisInA, out var perpendicularAxisLocal, out _);
- authoring.PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, perpendicularAxisLocal); //perp motor axis in Connected Entity space
-
- var joint = PhysicsJoint.CreateLinearVelocityMotor(
- new BodyFrame
- {
- Axis = axisInA,
- PerpendicularAxis = perpendicularAxisLocal,
- Position = authoring.AnchorPosition
- },
- new BodyFrame
- {
- Axis = authoring.AxisInConnectedEntity,
- PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity,
- Position = authoring.PositionInConnectedEntity
- },
- authoring.TargetSpeed,
- authoring.MaxImpulseAppliedByMotor
- );
-
- joint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, joint);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs.meta
deleted file mode 100644
index e72ed48b..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/LinearVelocityMotor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 8ecb5a9d99c1e4324be6771b9b83142f
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs
deleted file mode 100644
index 4c48d16a..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- public class PositionMotor : BaseJoint
- {
- [Tooltip("An offset from the center of the body with the motor, representing the anchor point of translation.")]
- public float3 AnchorPosition;
- [Tooltip("The direction of the motor, relative to the orientation of the Connected Body (bodyB). Value will be normalized")]
- public float3 DirectionOfMovement;
- [Tooltip("Motor will drive this length away from the anchor position of bodyA.")]
- public float TargetDistance;
- [Tooltip("The magnitude of the maximum impulse the motor can exert in a single step. Applies only to the motor constraint.")]
- public float MaxImpulseAppliedByMotor = math.INFINITY;
-
- private float3 PerpendicularAxisLocal;
- private float3 PositionInConnectedEntity;
- private float3 AxisInConnectedEntity;
- private float3 PerpendicularAxisInConnectedEntity;
-
- class PositionMotorBaker : JointBaker
- {
- public override void Bake(PositionMotor authoring)
- {
- float3 axisInB = math.normalize(authoring.DirectionOfMovement);
-
- RigidTransform aFromB = math.mul(math.inverse(authoring.worldFromA), authoring.worldFromB);
- float3 axisInA = math.mul(aFromB.rot, axisInB); //motor axis relative to bodyA
-
- RigidTransform bFromA = math.mul(math.inverse(authoring.worldFromB), authoring.worldFromA);
- authoring.PositionInConnectedEntity = math.transform(bFromA, authoring.AnchorPosition); //position of motored body relative to Connected Entity in world space
- authoring.AxisInConnectedEntity = axisInB; //motor axis in Connected Entity space
-
- // Always calculate the perpendicular axes
- Math.CalculatePerpendicularNormalized(axisInA, out var perpendicularLocal, out _);
- authoring.PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, perpendicularLocal); //perp motor axis in Connected Entity space
-
- var joint = PhysicsJoint.CreatePositionMotor(
- new BodyFrame
- {
- Axis = axisInA,
- PerpendicularAxis = perpendicularLocal,
- Position = authoring.AnchorPosition
- },
- new BodyFrame
- {
- Axis = authoring.AxisInConnectedEntity,
- PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity,
- Position = authoring.PositionInConnectedEntity
- },
- authoring.TargetDistance,
- authoring.MaxImpulseAppliedByMotor
- );
-
- joint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
-
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, joint);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs.meta
deleted file mode 100644
index 4c0f1aae..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/PositionMotor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 43a90fd2b152c41f2b0659c2f2feccfb
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs
deleted file mode 100644
index 28acb817..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using Unity.Entities;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- public class RotationalMotor : BaseJoint
- {
- [Tooltip("An offset from center of entity with motor. Representing the anchor/pivot point of rotation")]
- public float3 PivotPosition;
- [Tooltip("The axis of rotation of the motor. Value will be normalized")]
- public float3 AxisOfRotation;
- [Tooltip("Motor will maintain this target angle around the AxisOfRotation, in degrees")]
- public float TargetAngle;
- [Tooltip("The magnitude of the maximum impulse the motor can exert in one step. Applies only to the motor constraint.")]
- public float MaxImpulseAppliedByMotor = math.INFINITY;
-
- private float3 PerpendicularAxisLocal;
- private float3 PositionInConnectedEntity;
- private float3 HingeAxisInConnectedEntity;
- private float3 PerpendicularAxisInConnectedEntity;
-
- class RotationalMotorBaker : JointBaker
- {
- public override void Bake(RotationalMotor authoring)
- {
- float3 axisInA = math.normalize(authoring.AxisOfRotation);
-
- RigidTransform bFromA = math.mul(math.inverse(authoring.worldFromB), authoring.worldFromA);
- authoring.PositionInConnectedEntity = math.transform(bFromA, authoring.PivotPosition); //position of motored body pivot relative to Connected Entity in world space
- authoring.HingeAxisInConnectedEntity = math.mul(bFromA.rot, axisInA); //motor axis in Connected Entity space
-
- // Always calculate the perpendicular axes
- Math.CalculatePerpendicularNormalized(axisInA, out var perpendicularLocal, out _);
- authoring.PerpendicularAxisInConnectedEntity = math.mul(bFromA.rot, perpendicularLocal); //perp motor axis in Connected Entity space
-
- var joint = PhysicsJoint.CreateRotationalMotor(
- new BodyFrame
- {
- Axis = axisInA,
- PerpendicularAxis = perpendicularLocal,
- Position = authoring.PivotPosition
- },
- new BodyFrame
- {
- Axis = authoring.HingeAxisInConnectedEntity,
- PerpendicularAxis = authoring.PerpendicularAxisInConnectedEntity,
- Position = authoring.PositionInConnectedEntity
- },
- math.radians(authoring.TargetAngle),
- authoring.MaxImpulseAppliedByMotor
- );
-
- joint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
- var constraintBodyPair = GetConstrainedBodyPair(authoring);
-
- uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
- CreateJointEntity(worldIndex, constraintBodyPair, joint);
- }
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs.meta
deleted file mode 100644
index a994baa9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Motors/RotationalMotor.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ed690d210e6de4de5898e09e2bf1f336
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs
deleted file mode 100644
index bee71768..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [CreateAssetMenu(menuName = "Unity Physics/Physics Category Names", fileName = "Physics Category Names", order = 507)]
- public sealed class PhysicsCategoryNames : ScriptableObject, ITagNames
- {
- PhysicsCategoryNames() {}
-
- IReadOnlyList ITagNames.TagNames => CategoryNames;
-
- public IReadOnlyList CategoryNames => m_CategoryNames;
- [SerializeField]
- string[] m_CategoryNames = Enumerable.Range(0, 32).Select(i => string.Empty).ToArray();
-
- void OnValidate()
- {
- if (m_CategoryNames.Length != 32)
- Array.Resize(ref m_CategoryNames, 32);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs.meta
deleted file mode 100644
index 94da74c2..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryNames.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: cea4b49c4d6784a3291bea84d8086c8e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {fileID: 2800000, guid: 269c31d3570d84742a0d8739b06d5a18, type: 3}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs
deleted file mode 100644
index a4fb55d9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-using System;
-using Unity.Mathematics;
-
-namespace Unity.Physics.Authoring
-{
- [Serializable]
- public struct PhysicsCategoryTags : IEquatable
- {
- public static PhysicsCategoryTags Everything => new PhysicsCategoryTags { Value = unchecked((uint)~0) };
- public static PhysicsCategoryTags Nothing => new PhysicsCategoryTags { Value = 0 };
-
- public bool Category00;
- public bool Category01;
- public bool Category02;
- public bool Category03;
- public bool Category04;
- public bool Category05;
- public bool Category06;
- public bool Category07;
- public bool Category08;
- public bool Category09;
- public bool Category10;
- public bool Category11;
- public bool Category12;
- public bool Category13;
- public bool Category14;
- public bool Category15;
- public bool Category16;
- public bool Category17;
- public bool Category18;
- public bool Category19;
- public bool Category20;
- public bool Category21;
- public bool Category22;
- public bool Category23;
- public bool Category24;
- public bool Category25;
- public bool Category26;
- public bool Category27;
- public bool Category28;
- public bool Category29;
- public bool Category30;
- public bool Category31;
-
- internal bool this[int i]
- {
- get
- {
- SafetyChecks.CheckInRangeAndThrow(i, new int2(0, 31), nameof(i));
- switch (i)
- {
- case 0: return Category00;
- case 1: return Category01;
- case 2: return Category02;
- case 3: return Category03;
- case 4: return Category04;
- case 5: return Category05;
- case 6: return Category06;
- case 7: return Category07;
- case 8: return Category08;
- case 9: return Category09;
- case 10: return Category10;
- case 11: return Category11;
- case 12: return Category12;
- case 13: return Category13;
- case 14: return Category14;
- case 15: return Category15;
- case 16: return Category16;
- case 17: return Category17;
- case 18: return Category18;
- case 19: return Category19;
- case 20: return Category20;
- case 21: return Category21;
- case 22: return Category22;
- case 23: return Category23;
- case 24: return Category24;
- case 25: return Category25;
- case 26: return Category26;
- case 27: return Category27;
- case 28: return Category28;
- case 29: return Category29;
- case 30: return Category30;
- case 31: return Category31;
- default: return default;
- }
- }
- set
- {
- SafetyChecks.CheckInRangeAndThrow(i, new int2(0, 31), nameof(i));
- switch (i)
- {
- case 0: Category00 = value; break;
- case 1: Category01 = value; break;
- case 2: Category02 = value; break;
- case 3: Category03 = value; break;
- case 4: Category04 = value; break;
- case 5: Category05 = value; break;
- case 6: Category06 = value; break;
- case 7: Category07 = value; break;
- case 8: Category08 = value; break;
- case 9: Category09 = value; break;
- case 10: Category10 = value; break;
- case 11: Category11 = value; break;
- case 12: Category12 = value; break;
- case 13: Category13 = value; break;
- case 14: Category14 = value; break;
- case 15: Category15 = value; break;
- case 16: Category16 = value; break;
- case 17: Category17 = value; break;
- case 18: Category18 = value; break;
- case 19: Category19 = value; break;
- case 20: Category20 = value; break;
- case 21: Category21 = value; break;
- case 22: Category22 = value; break;
- case 23: Category23 = value; break;
- case 24: Category24 = value; break;
- case 25: Category25 = value; break;
- case 26: Category26 = value; break;
- case 27: Category27 = value; break;
- case 28: Category28 = value; break;
- case 29: Category29 = value; break;
- case 30: Category30 = value; break;
- case 31: Category31 = value; break;
- }
- }
- }
-
- public uint Value
- {
- get
- {
- var result = 0;
- result |= (Category00 ? 1 : 0) << 0;
- result |= (Category01 ? 1 : 0) << 1;
- result |= (Category02 ? 1 : 0) << 2;
- result |= (Category03 ? 1 : 0) << 3;
- result |= (Category04 ? 1 : 0) << 4;
- result |= (Category05 ? 1 : 0) << 5;
- result |= (Category06 ? 1 : 0) << 6;
- result |= (Category07 ? 1 : 0) << 7;
- result |= (Category08 ? 1 : 0) << 8;
- result |= (Category09 ? 1 : 0) << 9;
- result |= (Category10 ? 1 : 0) << 10;
- result |= (Category11 ? 1 : 0) << 11;
- result |= (Category12 ? 1 : 0) << 12;
- result |= (Category13 ? 1 : 0) << 13;
- result |= (Category14 ? 1 : 0) << 14;
- result |= (Category15 ? 1 : 0) << 15;
- result |= (Category16 ? 1 : 0) << 16;
- result |= (Category17 ? 1 : 0) << 17;
- result |= (Category18 ? 1 : 0) << 18;
- result |= (Category19 ? 1 : 0) << 19;
- result |= (Category20 ? 1 : 0) << 20;
- result |= (Category21 ? 1 : 0) << 21;
- result |= (Category22 ? 1 : 0) << 22;
- result |= (Category23 ? 1 : 0) << 23;
- result |= (Category24 ? 1 : 0) << 24;
- result |= (Category25 ? 1 : 0) << 25;
- result |= (Category26 ? 1 : 0) << 26;
- result |= (Category27 ? 1 : 0) << 27;
- result |= (Category28 ? 1 : 0) << 28;
- result |= (Category29 ? 1 : 0) << 29;
- result |= (Category30 ? 1 : 0) << 30;
- result |= (Category31 ? 1 : 0) << 31;
- return unchecked((uint)result);
- }
- set
- {
- Category00 = (value & (1 << 0)) != 0;
- Category01 = (value & (1 << 1)) != 0;
- Category02 = (value & (1 << 2)) != 0;
- Category03 = (value & (1 << 3)) != 0;
- Category04 = (value & (1 << 4)) != 0;
- Category05 = (value & (1 << 5)) != 0;
- Category06 = (value & (1 << 6)) != 0;
- Category07 = (value & (1 << 7)) != 0;
- Category08 = (value & (1 << 8)) != 0;
- Category09 = (value & (1 << 9)) != 0;
- Category10 = (value & (1 << 10)) != 0;
- Category11 = (value & (1 << 11)) != 0;
- Category12 = (value & (1 << 12)) != 0;
- Category13 = (value & (1 << 13)) != 0;
- Category14 = (value & (1 << 14)) != 0;
- Category15 = (value & (1 << 15)) != 0;
- Category16 = (value & (1 << 16)) != 0;
- Category17 = (value & (1 << 17)) != 0;
- Category18 = (value & (1 << 18)) != 0;
- Category19 = (value & (1 << 19)) != 0;
- Category20 = (value & (1 << 20)) != 0;
- Category21 = (value & (1 << 21)) != 0;
- Category22 = (value & (1 << 22)) != 0;
- Category23 = (value & (1 << 23)) != 0;
- Category24 = (value & (1 << 24)) != 0;
- Category25 = (value & (1 << 25)) != 0;
- Category26 = (value & (1 << 26)) != 0;
- Category27 = (value & (1 << 27)) != 0;
- Category28 = (value & (1 << 28)) != 0;
- Category29 = (value & (1 << 29)) != 0;
- Category30 = (value & (1 << 30)) != 0;
- Category31 = (value & (1 << 31)) != 0;
- }
- }
-
- public bool Equals(PhysicsCategoryTags other) => Value == other.Value;
-
- public override bool Equals(object obj) => obj is PhysicsCategoryTags other && Equals(other);
-
- public override int GetHashCode() => unchecked((int)Value);
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs.meta
deleted file mode 100644
index fbebf142..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsCategoryTags.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: eddb92a6422c54928b2fb196e49c81d6
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs
deleted file mode 100644
index ab415411..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs
+++ /dev/null
@@ -1,213 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- interface IPhysicsMaterialProperties
- {
- CollisionResponsePolicy CollisionResponse { get; set; }
-
- PhysicsMaterialCoefficient Friction { get; set; }
-
- PhysicsMaterialCoefficient Restitution { get; set; }
-
- PhysicsCategoryTags BelongsTo { get; set; }
-
- PhysicsCategoryTags CollidesWith { get; set; }
-
- // TODO: Enable Mass Factors?
- // TODO: Surface Velocity?
-
- CustomPhysicsMaterialTags CustomTags { get; set; }
- }
-
- interface IInheritPhysicsMaterialProperties : IPhysicsMaterialProperties
- {
- PhysicsMaterialTemplate Template { get; set; }
- bool OverrideCollisionResponse { get; set; }
- bool OverrideFriction { get; set; }
- bool OverrideRestitution { get; set; }
- bool OverrideBelongsTo { get; set; }
- bool OverrideCollidesWith { get; set; }
- bool OverrideCustomTags { get; set; }
- }
-
- [Serializable]
- public struct PhysicsMaterialCoefficient
- {
- [SoftRange(0f, 1f, TextFieldMax = float.MaxValue)]
- public float Value;
-
- public Material.CombinePolicy CombineMode;
- }
-
- abstract class OverridableValue where T : struct
- {
- public bool Override { get => m_Override; set => m_Override = value; }
- [SerializeField]
- bool m_Override;
-
- public T Value
- {
- get => m_Value;
- set
- {
- m_Value = value;
- Override = true;
- }
- }
- [SerializeField]
- T m_Value;
-
- public void OnValidate() => OnValidate(ref m_Value);
- protected virtual void OnValidate(ref T value) {}
- }
-
- [Serializable]
- class OverridableCollisionResponse : OverridableValue {}
-
- [Serializable]
- class OverridableMaterialCoefficient : OverridableValue
- {
- protected override void OnValidate(ref PhysicsMaterialCoefficient value) =>
- value.Value = math.max(0f, value.Value);
- }
-
- [Serializable]
- class OverridableCategoryTags : OverridableValue {}
-
- [Serializable]
- class OverridableCustomMaterialTags : OverridableValue {}
-
- [Serializable]
- class PhysicsMaterialProperties : IInheritPhysicsMaterialProperties, ISerializationCallbackReceiver
- {
- public PhysicsMaterialProperties(bool supportsTemplate) => m_SupportsTemplate = supportsTemplate;
-
- [SerializeField, HideInInspector]
- bool m_SupportsTemplate;
-
- public PhysicsMaterialTemplate Template
- {
- get => m_Template;
- set => m_Template = m_SupportsTemplate ? value : null;
- }
- [SerializeField]
- [Tooltip("Assign a template to use its values.")]
- PhysicsMaterialTemplate m_Template;
-
- static T Get(OverridableValue value, T? templateValue) where T : struct =>
- value.Override || templateValue == null ? value.Value : templateValue.Value;
-
- public bool OverrideCollisionResponse { get => m_CollisionResponse.Override; set => m_CollisionResponse.Override = value; }
-
- public CollisionResponsePolicy CollisionResponse
- {
- get => Get(m_CollisionResponse, m_Template == null ? null : m_Template?.CollisionResponse);
- set => m_CollisionResponse.Value = value;
- }
- [SerializeField]
- OverridableCollisionResponse m_CollisionResponse = new OverridableCollisionResponse
- {
- Value = CollisionResponsePolicy.Collide,
- Override = false
- };
-
- public bool OverrideFriction { get => m_Friction.Override; set => m_Friction.Override = value; }
- public PhysicsMaterialCoefficient Friction
- {
- get => Get(m_Friction, m_Template == null ? null : m_Template?.Friction);
- set => m_Friction.Value = value;
- }
- [SerializeField]
- OverridableMaterialCoefficient m_Friction = new OverridableMaterialCoefficient
- {
- Value = new PhysicsMaterialCoefficient { Value = 0.5f, CombineMode = Material.CombinePolicy.GeometricMean },
- Override = false
- };
-
- public bool OverrideRestitution { get => m_Restitution.Override; set => m_Restitution.Override = value; }
- public PhysicsMaterialCoefficient Restitution
- {
- get => Get(m_Restitution, m_Template == null ? null : m_Template?.Restitution);
- set => m_Restitution.Value = value;
- }
- [SerializeField]
- OverridableMaterialCoefficient m_Restitution = new OverridableMaterialCoefficient
- {
- Value = new PhysicsMaterialCoefficient { Value = 0f, CombineMode = Material.CombinePolicy.Maximum },
- Override = false
- };
-
- public bool OverrideBelongsTo { get => m_BelongsToCategories.Override; set => m_BelongsToCategories.Override = value; }
- public PhysicsCategoryTags BelongsTo
- {
- get => Get(m_BelongsToCategories, m_Template == null ? null : m_Template?.BelongsTo);
- set => m_BelongsToCategories.Value = value;
- }
- [SerializeField]
- OverridableCategoryTags m_BelongsToCategories =
- new OverridableCategoryTags { Value = PhysicsCategoryTags.Everything, Override = false };
-
- public bool OverrideCollidesWith { get => m_CollidesWithCategories.Override; set => m_CollidesWithCategories.Override = value; }
- public PhysicsCategoryTags CollidesWith
- {
- get => Get(m_CollidesWithCategories, m_Template == null ? null : m_Template?.CollidesWith);
- set => m_CollidesWithCategories.Value = value;
- }
- [SerializeField]
- OverridableCategoryTags m_CollidesWithCategories =
- new OverridableCategoryTags { Value = PhysicsCategoryTags.Everything, Override = false };
-
- public bool OverrideCustomTags { get => m_CustomMaterialTags.Override; set => m_CustomMaterialTags.Override = value; }
- public CustomPhysicsMaterialTags CustomTags
- {
- get => Get(m_CustomMaterialTags, m_Template == null ? null : m_Template?.CustomTags);
- set => m_CustomMaterialTags.Value = value;
- }
- [SerializeField]
- OverridableCustomMaterialTags m_CustomMaterialTags =
- new OverridableCustomMaterialTags { Value = default, Override = false };
-
- internal static void OnValidate(ref PhysicsMaterialProperties material, bool supportsTemplate)
- {
- material.UpgradeVersionIfNecessary();
-
- material.m_SupportsTemplate = supportsTemplate;
- if (!supportsTemplate)
- {
- material.m_Template = null;
- material.m_CollisionResponse.Override = true;
- material.m_Friction.Override = true;
- material.m_Restitution.Override = true;
- }
- material.m_Friction.OnValidate();
- material.m_Restitution.OnValidate();
- }
-
- const int k_LatestVersion = 1;
-
- [SerializeField]
- int m_SerializedVersion = 0;
-
- void ISerializationCallbackReceiver.OnBeforeSerialize() {}
-
- void ISerializationCallbackReceiver.OnAfterDeserialize() => UpgradeVersionIfNecessary();
-
- internal static bool s_SuppressUpgradeWarnings;
-
-#pragma warning disable 618
- void UpgradeVersionIfNecessary()
- {
- if (m_SerializedVersion < k_LatestVersion)
- {
- // old data from version < 1 have been removed
- if (m_SerializedVersion < 1)
- m_SerializedVersion = 1;
- }
- }
-
-#pragma warning restore 618
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs.meta
deleted file mode 100644
index b503b9c9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialProperties.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c1e08ac6ebe62466ea40565d8591ae9e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs
deleted file mode 100644
index 67118b2c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [CreateAssetMenu(menuName = "Unity Physics/Physics Material Template", fileName = "Physics Material Template", order = 508)]
- public sealed class PhysicsMaterialTemplate : ScriptableObject, IPhysicsMaterialProperties
- {
- PhysicsMaterialTemplate() {}
-
- public CollisionResponsePolicy CollisionResponse { get => m_Value.CollisionResponse; set => m_Value.CollisionResponse = value; }
-
- public PhysicsMaterialCoefficient Friction { get => m_Value.Friction; set => m_Value.Friction = value; }
-
- public PhysicsMaterialCoefficient Restitution { get => m_Value.Restitution; set => m_Value.Restitution = value; }
-
- public PhysicsCategoryTags BelongsTo { get => m_Value.BelongsTo; set => m_Value.BelongsTo = value; }
-
- public PhysicsCategoryTags CollidesWith { get => m_Value.CollidesWith; set => m_Value.CollidesWith = value; }
-
- public CustomPhysicsMaterialTags CustomTags { get => m_Value.CustomTags; set => m_Value.CustomTags = value; }
-
- [SerializeField]
- PhysicsMaterialProperties m_Value = new PhysicsMaterialProperties(false);
-
- void Reset() => OnValidate();
-
- void OnValidate() => PhysicsMaterialProperties.OnValidate(ref m_Value, false);
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs.meta
deleted file mode 100644
index 292673a2..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsMaterialTemplate.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 79f877434772c463192af154345455c9
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {fileID: 2800000, guid: dea88969a14a54552b290b80692e0785, type: 3}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs
deleted file mode 100644
index affb788d..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using UnityEngine;
-using Unity.Entities;
-using Unity.Physics.GraphicsIntegration;
-
-namespace Unity.Physics.Authoring
-{
- [AddComponentMenu("Entities/Physics/Physics Render Entity")]
- [DisallowMultipleComponent]
- public sealed class PhysicsRenderEntityAuthoring : MonoBehaviour
- {
- [Tooltip("Specifies an Entity in a different branch of the hierarchy that holds the graphical representation of this PhysicsShape.")]
- public GameObject RenderEntity;
- }
-
- internal class PhysicsRenderEntityBaker : Baker
- {
- public override void Bake(PhysicsRenderEntityAuthoring authoring)
- {
- var renderEntity = new PhysicsRenderEntity { Entity = GetEntity(authoring.RenderEntity, TransformUsageFlags.Dynamic) };
- var entity = GetEntity(TransformUsageFlags.Dynamic);
- AddComponent(entity, renderEntity);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs.meta
deleted file mode 100644
index a2e213dd..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/PhysicsRenderEntityAuthoring.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ea1d7d5be6993bf4c9c0995e13bf813d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef
deleted file mode 100644
index c12bf892..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Unity.Physics.Custom",
- "references": [
- "Unity.Burst",
- "Unity.Collections",
- "Unity.Entities",
- "Unity.Entities.Hybrid",
- "Unity.Mathematics",
- "Unity.Physics",
- "Unity.Physics.Hybrid",
- "Unity.Transforms"
- ],
- "excludePlatforms": [],
- "allowUnsafeCode": true,
- "overrideReferences": false,
- "precompiledReferences": [],
- "autoReferenced": true,
- "defineConstraints": [],
- "versionDefines": []
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef.meta
deleted file mode 100644
index c269dcf4..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Unity.Physics.Custom.asmdef.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 6bfefdf09ee6431fae75a6f5e06a0e89
-timeCreated: 1680024908
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities.meta
deleted file mode 100644
index d2dde7c0..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: d96159b327854bf19d5489084e68fbc3
-timeCreated: 1678117648
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs
deleted file mode 100644
index 2d6eabae..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs
+++ /dev/null
@@ -1,385 +0,0 @@
-using Unity.Burst;
-using Unity.Collections;
-using Unity.Jobs;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- static partial class PhysicsShapeExtensions
- {
- static void MakeZAxisPrimaryBasis(ref int3 basisPriority)
- {
- if (basisPriority[1] == 2)
- basisPriority = basisPriority.yxz;
- else if (basisPriority[2] == 2)
- basisPriority = basisPriority.zxy;
- }
-
- #region Box
- [BurstCompile]
- internal struct BakeBoxJob : IJob
- {
- public NativeArray Box;
-
- // TODO: make members PascalCase after merging static query fixes
- public float4x4 localToWorld;
- public float4x4 shapeToWorld;
- public EulerAngles orientation;
-
- public static float4x4 GetBakeToShape(float4x4 localToWorld, float4x4 shapeToWorld, ref float3 center,
- ref EulerAngles orientation)
- {
- float4x4 bakeToShape;
- float4x4 rotationMatrix = float4x4.identity;
- var basisPriority = k_DefaultAxisPriority;
- var sheared = localToWorld.HasShear();
- if (localToWorld.HasNonUniformScale() || sheared)
- {
- if (sheared)
- {
- var transformScale = localToWorld.DecomposeScale();
- var basisToWorld =
- GetBasisToWorldMatrix(localToWorld, center, orientation, transformScale);
- basisPriority = GetBasisAxisPriority(basisToWorld);
- }
-
- rotationMatrix = new float4x4(
- new float4 { [basisPriority[2]] = 1 },
- new float4 { [basisPriority[1]] = 1 },
- new float4 { [basisPriority[0]] = 1 },
- new float4 { [3] = 1 }
- );
- }
-
- bakeToShape = GetPrimitiveBakeToShapeMatrix(localToWorld, shapeToWorld, ref center,
- ref orientation, 1f, basisPriority);
-
- bakeToShape = math.mul(bakeToShape, rotationMatrix);
- return bakeToShape;
- }
-
- public void Execute()
- {
- var center = Box[0].Center;
- var size = Box[0].Size;
- var bevelRadius = Box[0].BevelRadius;
-
- var bakeToShape = GetBakeToShape(localToWorld, shapeToWorld, ref center, ref orientation);
- bakeToShape = math.mul(bakeToShape, float4x4.Scale(size));
-
- var scale = bakeToShape.DecomposeScale();
-
- size = scale;
-
- Box[0] = new BoxGeometry
- {
- Center = center,
- Orientation = orientation,
- Size = size,
- BevelRadius = math.clamp(bevelRadius, 0f, 0.5f * math.cmin(size))
- };
- }
- }
- #endregion
-
- #region Capsule
- [BurstCompile]
- internal struct BakeCapsuleJob : IJob
- {
- public NativeArray Capsule;
-
- // TODO: make members PascalCase after merging static query fixes
- public float4x4 localToWorld;
- public float4x4 shapeToWorld;
-
- public static float4x4 GetBakeToShape(float4x4 localToWorld, float4x4 shapeToWorld, ref float3 center,
- ref EulerAngles orientation)
- {
- var basisPriority = k_DefaultAxisPriority;
- var sheared = localToWorld.HasShear();
- if (localToWorld.HasNonUniformScale() || sheared)
- {
- if (sheared)
- {
- var transformScale = localToWorld.DecomposeScale();
- var basisToWorld = GetBasisToWorldMatrix(localToWorld, center, orientation, transformScale);
- basisPriority = GetBasisAxisPriority(basisToWorld);
- }
-
- MakeZAxisPrimaryBasis(ref basisPriority);
- }
-
- return GetPrimitiveBakeToShapeMatrix(localToWorld, shapeToWorld, ref center, ref orientation, 1f,
- basisPriority);
- }
-
- public void Execute()
- {
- var radius = Capsule[0].Radius;
- var center = Capsule[0].Center;
- var height = Capsule[0].Height;
- var orientationEuler = Capsule[0].OrientationEuler;
-
- var bakeToShape = GetBakeToShape(localToWorld, shapeToWorld, ref center, ref orientationEuler);
- var scale = bakeToShape.DecomposeScale();
-
- radius *= math.cmax(scale.xy);
- height = math.max(0, height * scale.z);
-
- Capsule[0] = new CapsuleGeometryAuthoring
- {
- OrientationEuler = orientationEuler,
- Center = center,
- Height = height,
- Radius = radius
- };
- }
- }
-
- #endregion
-
- #region Cylinder
- [BurstCompile]
- internal struct BakeCylinderJob : IJob
- {
- public NativeArray Cylinder;
-
- // TODO: make members PascalCase after merging static query fixes
- public float4x4 localToWorld;
- public float4x4 shapeToWorld;
- public EulerAngles orientation;
-
- public static float4x4 GetBakeToShape(float4x4 localToWorld, float4x4 shapeToWorld, ref float3 center,
- ref EulerAngles orientation)
- {
- var basisPriority = k_DefaultAxisPriority;
- var sheared = localToWorld.HasShear();
- if (localToWorld.HasNonUniformScale() || sheared)
- {
- if (sheared)
- {
- var transformScale = localToWorld.DecomposeScale();
- var basisToWorld = GetBasisToWorldMatrix(localToWorld, center, orientation, transformScale);
- basisPriority = GetBasisAxisPriority(basisToWorld);
- }
-
- MakeZAxisPrimaryBasis(ref basisPriority);
- }
-
- return GetPrimitiveBakeToShapeMatrix(localToWorld, shapeToWorld, ref center, ref orientation, 1f,
- basisPriority);
- }
-
- public void Execute()
- {
- var center = Cylinder[0].Center;
- var height = Cylinder[0].Height;
- var radius = Cylinder[0].Radius;
- var bevelRadius = Cylinder[0].BevelRadius;
-
- var bakeToShape = GetBakeToShape(localToWorld, shapeToWorld, ref center, ref orientation);
- var scale = bakeToShape.DecomposeScale();
-
- height *= scale.z;
- radius *= math.cmax(scale.xy);
-
- Cylinder[0] = new CylinderGeometry
- {
- Center = center,
- Orientation = orientation,
- Height = height,
- Radius = radius,
- BevelRadius = math.min(bevelRadius, math.min(height * 0.5f, radius)),
- SideCount = Cylinder[0].SideCount
- };
- }
- }
-
- internal static CylinderGeometry BakeToBodySpace(
- this CylinderGeometry cylinder, float4x4 localToWorld, float4x4 shapeToWorld, EulerAngles orientation
- )
- {
- using (var geometry = new NativeArray(1, Allocator.TempJob) { [0] = cylinder })
- {
- var job = new BakeCylinderJob
- {
- Cylinder = geometry,
- localToWorld = localToWorld,
- shapeToWorld = shapeToWorld,
- orientation = orientation
- };
- job.Run();
- return geometry[0];
- }
- }
-
- #endregion
-
-
- #region Sphere
- [BurstCompile]
- struct BakeSphereJob : IJob
- {
- public NativeArray Sphere;
- public NativeArray Orientation;
- // TODO: make members PascalCase after merging static query fixes
- public float4x4 localToWorld;
- public float4x4 shapeToWorld;
-
- public void Execute()
- {
- var center = Sphere[0].Center;
- var radius = Sphere[0].Radius;
- var orientation = Orientation[0];
-
- var basisToWorld = GetBasisToWorldMatrix(localToWorld, center, orientation, 1f);
- var basisPriority = basisToWorld.HasShear() ? GetBasisAxisPriority(basisToWorld) : k_DefaultAxisPriority;
- var bakeToShape = GetPrimitiveBakeToShapeMatrix(localToWorld, shapeToWorld, ref center, ref orientation, 1f, basisPriority);
-
- radius *= math.cmax(bakeToShape.DecomposeScale());
-
- Sphere[0] = new SphereGeometry
- {
- Center = center,
- Radius = radius
- };
- Orientation[0] = orientation;
- }
- }
-
- internal static SphereGeometry BakeToBodySpace(
- this SphereGeometry sphere, float4x4 localToWorld, float4x4 shapeToWorld, ref EulerAngles orientation
- )
- {
- using (var geometry = new NativeArray(1, Allocator.TempJob) { [0] = sphere })
- using (var outOrientation = new NativeArray(1, Allocator.TempJob) { [0] = orientation })
- {
- var job = new BakeSphereJob
- {
- Sphere = geometry,
- Orientation = outOrientation,
- localToWorld = localToWorld,
- shapeToWorld = shapeToWorld
- };
- job.Run();
- orientation = outOrientation[0];
- return geometry[0];
- }
- }
-
- #endregion
-
- #region Plane
-
- [BurstCompile]
- struct BakePlaneJob : IJob
- {
- public NativeArray Vertices;
- // TODO: make members PascalCase after merging static query fixes
- public float3 center;
- public float2 size;
- public EulerAngles orientation;
- public float4x4 localToWorld;
- public float4x4 shapeToWorld;
-
- public void Execute()
- {
- var v = Vertices[0];
- GetPlanePoints(center, size, orientation, out v.c0, out v.c1, out v.c2, out v.c3);
- var localToShape = math.mul(math.inverse(shapeToWorld), localToWorld);
- v.c0 = math.mul(localToShape, new float4(v.c0, 1f)).xyz;
- v.c1 = math.mul(localToShape, new float4(v.c1, 1f)).xyz;
- v.c2 = math.mul(localToShape, new float4(v.c2, 1f)).xyz;
- v.c3 = math.mul(localToShape, new float4(v.c3, 1f)).xyz;
- Vertices[0] = v;
- }
- }
-
- internal static void BakeToBodySpace(
- float3 center, float2 size, EulerAngles orientation, float4x4 localToWorld, float4x4 shapeToWorld,
- out float3 vertex0, out float3 vertex1, out float3 vertex2, out float3 vertex3
- )
- {
- using (var geometry = new NativeArray(1, Allocator.TempJob))
- {
- var job = new BakePlaneJob
- {
- Vertices = geometry,
- center = center,
- size = size,
- orientation = orientation,
- localToWorld = localToWorld,
- shapeToWorld = shapeToWorld
- };
- job.Run();
- vertex0 = geometry[0].c0;
- vertex1 = geometry[0].c1;
- vertex2 = geometry[0].c2;
- vertex3 = geometry[0].c3;
- }
- }
-
- internal static void GetPlanePoints(
- float3 center, float2 size, EulerAngles orientation,
- out float3 vertex0, out float3 vertex1, out float3 vertex2, out float3 vertex3
- )
- {
- var sizeYUp = math.float3(size.x, 0, size.y);
-
- vertex0 = center + math.mul(orientation, sizeYUp * math.float3(-0.5f, 0, 0.5f));
- vertex1 = center + math.mul(orientation, sizeYUp * math.float3(0.5f, 0, 0.5f));
- vertex2 = center + math.mul(orientation, sizeYUp * math.float3(0.5f, 0, -0.5f));
- vertex3 = center + math.mul(orientation, sizeYUp * math.float3(-0.5f, 0, -0.5f));
- }
-
- #endregion
-
- #region ShapeInputHash
-#if !(UNITY_ANDROID && !UNITY_64) // !Android32
- // Getting memory alignment errors from HashUtility.Hash128 on Android32
- [BurstCompile]
-#endif
- internal struct GetShapeInputsHashJob : IJob
- {
- public NativeArray Result;
-
- public uint ForceUniqueIdentifier;
- public ConvexHullGenerationParameters GenerationParameters;
- public Material Material;
- public CollisionFilter CollisionFilter;
- public float4x4 BakeFromShape;
-
- [ReadOnly] public NativeArray Inputs;
- [ReadOnly] public NativeArray AllSkinIndices;
- [ReadOnly] public NativeArray AllBlendShapeWeights;
-
- public void Execute()
- {
- Result[0] = HashableShapeInputs.GetHash128(
- ForceUniqueIdentifier, GenerationParameters, Material, CollisionFilter, BakeFromShape,
- Inputs, AllSkinIndices, AllBlendShapeWeights
- );
- }
- }
- #endregion
-
-
- #region AABB
- [BurstCompile]
- internal struct GetAabbJob : IJob
- {
- [ReadOnly] public NativeArray Points;
- public NativeArray Aabb;
-
- public void Execute()
- {
- var aabb = new Aabb { Min = float.MaxValue, Max = float.MinValue };
- for (var i = 0; i < Points.Length; ++i)
- aabb.Include(Points[i]);
- Aabb[0] = aabb;
- }
- }
- #endregion
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs.meta
deleted file mode 100644
index de3cea0c..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobs.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: c1d2f87b6ade497cb1e74c86f2831579
-timeCreated: 1678214783
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs
deleted file mode 100644
index 5ce90ef8..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using Unity.Collections;
-using Unity.Jobs;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- static partial class PhysicsShapeExtensions
- {
- public static class BakeBoxJobExtension
- {
- internal static float4x4 GetBakeToShape(PhysicsShapeAuthoring shape, float3 center, EulerAngles orientation)
- {
- var transform = shape.transform;
- var localToWorld = (float4x4)transform.localToWorldMatrix;
- var shapeToWorld = shape.GetShapeToWorldMatrix();
- return BakeBoxJob.GetBakeToShape(localToWorld, shapeToWorld, ref center, ref orientation);
- }
- }
-
- public static class BakeCapsuleJobExtension
- {
- internal static float4x4 GetBakeToShape(PhysicsShapeAuthoring shape, float3 center, EulerAngles orientation)
- {
- var transform = shape.transform;
- var localToWorld = (float4x4)transform.localToWorldMatrix;
- var shapeToWorld = shape.GetShapeToWorldMatrix();
- return BakeCapsuleJob.GetBakeToShape(localToWorld, shapeToWorld, ref center,
- ref orientation);
- }
- }
-
- public static void SetBakedCapsuleSize(this PhysicsShapeAuthoring shape, float height, float radius)
- {
- var capsule = shape.GetCapsuleProperties();
- var center = capsule.Center;
-
- var bakeToShape = BakeCapsuleJobExtension.GetBakeToShape(shape, center, capsule.OrientationEuler);
- var scale = bakeToShape.DecomposeScale();
-
- var newRadius = radius / math.cmax(scale.xy);
- if (math.abs(capsule.Radius - newRadius) > kMinimumChange)
- capsule.Radius = newRadius;
-
- height /= scale.z;
-
- if (math.abs(math.length(capsule.Height - height)) > kMinimumChange)
- capsule.Height = height;
-
- shape.SetCapsule(capsule);
- }
-
- internal static CapsuleGeometryAuthoring BakeToBodySpace(
- this CapsuleGeometryAuthoring capsule, float4x4 localToWorld, float4x4 shapeToWorld
- )
- {
- using (var geometry = new NativeArray(1, Allocator.TempJob) { [0] = capsule })
- {
- var job = new BakeCapsuleJob
- {
- Capsule = geometry,
- localToWorld = localToWorld,
- shapeToWorld = shapeToWorld
- };
- job.Run();
- return geometry[0];
- }
- }
-
- public static class BakeCylinderJobExtension
- {
- internal static float4x4 GetBakeToShape(PhysicsShapeAuthoring shape, float3 center, EulerAngles orientation)
- {
- var transform = shape.transform;
- var localToWorld = (float4x4)transform.localToWorldMatrix;
- var shapeToWorld = shape.GetShapeToWorldMatrix();
- return BakeCylinderJob.GetBakeToShape(localToWorld, shapeToWorld, ref center,
- ref orientation);
- }
- }
-
- public static CylinderGeometry GetBakedCylinderProperties(this PhysicsShapeAuthoring shape)
- {
- var cylinder = shape.GetCylinderProperties(out var orientation);
- return cylinder.BakeToBodySpace(shape.transform.localToWorldMatrix, shape.GetShapeToWorldMatrix(),
- orientation);
- }
-
- public static void SetBakedSphereRadius(this PhysicsShapeAuthoring shape, float radius)
- {
- var sphere = shape.GetSphereProperties(out EulerAngles eulerAngles);
- var center = sphere.Center;
- radius = math.abs(radius);
-
- var basisToWorld = GetBasisToWorldMatrix(shape.transform.localToWorldMatrix, center, eulerAngles, 1f);
- var basisPriority = basisToWorld.HasShear() ? GetBasisAxisPriority(basisToWorld) : k_DefaultAxisPriority;
- var bakeToShape = GetPrimitiveBakeToShapeMatrix(shape.transform.localToWorldMatrix, shape.GetShapeToWorldMatrix(), ref center, ref eulerAngles, 1f, basisPriority);
-
- var scale = math.cmax(bakeToShape.DecomposeScale());
-
- var newRadius = radius / scale;
- sphere.Radius = newRadius;
- shape.SetSphere(sphere);
- }
-
- public static void SetBakedPlaneSize(this PhysicsShapeAuthoring shape, float2 size)
- {
- shape.GetPlaneProperties(out var center, out var planeSize, out EulerAngles orientation);
-
- var prevSize = math.abs(planeSize);
- size = math.abs(size);
-
- if (math.abs(size[0] - prevSize[0]) < kMinimumChange) size[0] = prevSize[0];
- if (math.abs(size[1] - prevSize[1]) < kMinimumChange) size[1] = prevSize[1];
-
- planeSize = size;
-
- shape.SetPlane(center, planeSize, orientation);
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs.meta
deleted file mode 100644
index 910cbef9..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/BakeGeometryJobsExtensions.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 20e0be4d61f647dfaa267fda69e86818
-timeCreated: 1678218998
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs
deleted file mode 100644
index 7aab53f7..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- ///
- /// A structure for storing authoring data for a capsule shape. In contrast to the
- /// CapsuleGeometry struct in the run-time, this structure permits storing stable orientation
- /// values, as well as height values that can be retained when the source data are defined with
- /// respect to a non-uniformly scaled object.
- ///
- [Serializable]
- public struct CapsuleGeometryAuthoring : IEquatable
- {
- ///
- /// The local orientation of the capsule. It is aligned with the forward axis (z) when it is
- /// identity.
- ///
- public quaternion Orientation { get => m_OrientationEuler; set => m_OrientationEuler.SetValue(value); }
- internal EulerAngles OrientationEuler { get => m_OrientationEuler; set => m_OrientationEuler = value; }
- [SerializeField]
- EulerAngles m_OrientationEuler;
-
- /// The local position offset of the capsule.
- public float3 Center { get => m_Center; set => m_Center = value; }
- [SerializeField]
- float3 m_Center;
-
- ///
- /// The height of the capsule. It may store any value, but will ultimately always be converted
- /// into a value that is at least twice the radius.
- ///
- public float Height { get => m_Height; set => m_Height = value; }
- [SerializeField]
- float m_Height;
-
- /// The radius of the capsule.
- ///
- /// The radius.
- public float Radius { get => m_Radius; set => m_Radius = value; }
- [SerializeField]
- float m_Radius;
-
- public bool Equals(CapsuleGeometryAuthoring other)
- {
- return m_Height.Equals(other.m_Height)
- && m_Center.Equals(other.m_Center)
- && m_Radius.Equals(other.m_Radius)
- && m_OrientationEuler.Equals(other.m_OrientationEuler);
- }
-
- public override int GetHashCode()
- {
- return unchecked((int)math.hash(
- new float3x3(
- Center,
- m_OrientationEuler.Value,
- new float3((float)m_OrientationEuler.RotationOrder, m_Height, m_Radius)
- )
- ));
- }
- }
-
- public static class CapsuleGeometryAuthoringExtensions
- {
- ///
- /// Construct a CapsuleGeometryAuthoring instance from a run-time CapsuleGeometry instance.
- ///
- public static CapsuleGeometryAuthoring ToAuthoring(this CapsuleGeometry input)
- {
- var orientationEuler = EulerAngles.Default;
- orientationEuler.SetValue(quaternion.LookRotationSafe(input.Vertex1 - input.Vertex0, math.up()));
- return new CapsuleGeometryAuthoring
- {
- Height = input.GetHeight(),
- OrientationEuler = orientationEuler,
- Center = input.GetCenter(),
- Radius = input.Radius
- };
- }
-
- ///
- /// Construct a run-time CapsuleGeometry instance from a CapsuleGeometryAuthoring instance.
- ///
- public static CapsuleGeometry ToRuntime(this CapsuleGeometryAuthoring input)
- {
- var halfHeight = 0.5f * input.Height;
- var halfDistance = halfHeight - input.Radius;
- var axis = math.normalize(math.mul(input.Orientation, new float3 { z = 1f }));
- var halfAxis = axis * halfDistance;
- var vertex0 = input.Center + halfAxis;
- var vertex1 = input.Center - halfAxis;
- return new CapsuleGeometry
- {
- Vertex0 = vertex0,
- Vertex1 = vertex1,
- Radius = input.Radius
- };
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs.meta
deleted file mode 100644
index 60288cd2..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/CapsuleGeometryAuthoring.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4df9a1d1ba0ee8a45acfdc75585997fd
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs
deleted file mode 100644
index d2df4816..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using Unity.Collections;
-using Unity.Mathematics;
-
-namespace Unity.Physics.Authoring
-{
- public static class ConvexHullGenerationParametersExtensions
- {
- // recommended simplification tolerance is at least 1 centimeter
- internal const float k_MinRecommendedSimplificationTolerance = 0.01f;
-
- internal static void InitializeToRecommendedAuthoringValues(
- ref this ConvexHullGenerationParameters generationParameters, NativeArray points
- )
- {
- generationParameters = ConvexHullGenerationParameters.Default.ToAuthoring();
-
- if (points.Length <= 1)
- return;
-
- var bounds = new Aabb { Min = points[0], Max = points[0] };
- for (var i = 1; i < points.Length; ++i)
- bounds.Include(points[i]);
- generationParameters.SimplificationTolerance = math.max(
- k_MinRecommendedSimplificationTolerance,
- ConvexHullGenerationParameters.Default.SimplificationTolerance * math.cmax(bounds.Extents)
- );
- // TODO: initialize other properties based on input points?
- }
-
- internal static void OnValidate(ref this ConvexHullGenerationParameters generationParameters, float maxAngle = 180f)
- {
- generationParameters.SimplificationTolerance = math.max(0f, generationParameters.SimplificationTolerance);
- generationParameters.BevelRadius = math.max(0f, generationParameters.BevelRadius);
- generationParameters.MinimumAngle = math.clamp(generationParameters.MinimumAngle, 0f, maxAngle);
- }
-
- public static ConvexHullGenerationParameters ToAuthoring(this ConvexHullGenerationParameters generationParameters)
- {
- generationParameters.MinimumAngle = math.degrees(generationParameters.MinimumAngle);
- return generationParameters;
- }
-
- public static ConvexHullGenerationParameters ToRunTime(this ConvexHullGenerationParameters generationParameters)
- {
- generationParameters.MinimumAngle = math.radians(generationParameters.MinimumAngle);
- return generationParameters;
- }
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs.meta
deleted file mode 100644
index 0985d900..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParametersExtensions.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 604da30f59bed4d458c29f4c359d7f1c
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs
deleted file mode 100644
index a3103c33..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using Unity.Mathematics;
-using UnityEngine;
-
-namespace Unity.Physics.Authoring
-{
- [Serializable]
- internal struct EulerAngles : IEquatable
- {
- public static EulerAngles Default => new EulerAngles { RotationOrder = math.RotationOrder.ZXY };
-
- public float3 Value;
- [HideInInspector]
- public math.RotationOrder RotationOrder;
-
- internal void SetValue(quaternion value) => Value = math.degrees(Math.ToEulerAngles(value, RotationOrder));
-
- public static implicit operator quaternion(EulerAngles euler) =>
- math.normalize(quaternion.Euler(math.radians(euler.Value), euler.RotationOrder));
-
- public bool Equals(EulerAngles other) => Value.Equals(other.Value) && RotationOrder == other.RotationOrder;
-
- public override bool Equals(object obj) => obj is EulerAngles other && Equals(other);
-
- public override int GetHashCode() => unchecked((int)math.hash(new float4(Value, (float)RotationOrder)));
- }
-}
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs.meta b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs.meta
deleted file mode 100644
index ba41e79f..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/EulerAngles.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 140e4ed2e13547ac8c8eb623bd5fc90a
-timeCreated: 1581282000
\ No newline at end of file
diff --git a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/GetActiveChildrenScope.cs b/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/GetActiveChildrenScope.cs
deleted file mode 100644
index cb452709..00000000
--- a/JNFrame/Assets/Samples/Unity Physics/1.0.16/Custom Physics Authoring/Unity.Physics.Custom/Utilities/GetActiveChildrenScope.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityComponent = UnityEngine.Component;
-
-namespace Unity.Physics.Authoring
-{
- public struct GetActiveChildrenScope : IDisposable where T : UnityComponent
- {
- static readonly List s_PhysicsShapes = new List