diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 00000000..6ed1e309 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "tktco.udonsharplinter": { + "version": "0.3.1", + "commands": [ + "udonsharp-lint" + ] + } + } +} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 00000000..3df7e08d --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,39 @@ +name: Check + +on: + push: + pull_request: + +jobs: + static-checks: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: "22" + - uses: reviewdog/action-actionlint@v1 + with: + fail_level: error + - name: Run static checks + run: bash scripts/run-static-checks.sh + + udonsharp-lint: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.x + 6.0.x + - name: Restore dotnet tools + run: dotnet tool restore + - name: Run UdonSharp Linter + run: dotnet tool run udonsharp-lint Packages diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..02bcda74 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,23 @@ +name: UdonSharp Lint + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + env: + DOTNET_ROLL_FORWARD: LatestMajor + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: "8.x" + - name: Install UdonSharp Linter + run: dotnet tool restore + - name: Run UdonSharp Linter + run: dotnet tool run udonsharp-lint Packages diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 54d0c8e4..9141cda7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,10 +4,10 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: lts/* + node-version: 22.14.0 - run: npm ci - run: npx semantic-release env: diff --git a/.releaserc.yml b/.releaserc.yml index bdb2ff5f..a843c0b4 100644 --- a/.releaserc.yml +++ b/.releaserc.yml @@ -1,3 +1,9 @@ +branches: + - master + - main + - name: alpha + prerelease: true + plugins: - semantic-release-gitmoji - "@semantic-release/npm" diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/SFEXT_UdonChips.cs b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/SFEXT_UdonChips.cs index 37bd8180..fb59d14b 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/SFEXT_UdonChips.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/SFEXT_UdonChips.cs @@ -67,7 +67,7 @@ public void SFEXT_O_Explode() public void SFEXT_G_Explode() { - if (!EntityControl.LastAttacker || !EntityControl.LastAttacker.Using || Time.time - airVehicle.LastHitTime >= 5) return; + if (!EntityControl.LastAttacker || !EntityControl.LastAttacker.Using || Time.time - EntityControl.PilotExitTime >= 5) return; if (onKilled <= 0 || !airVehicle.Taxiing && (airVehicle.Occupied || Time.time - EntityControl.PilotExitTime < 5)) { diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/com.nekometer.esnya.esnya-sf-addons-ucs.asmdef b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/com.nekometer.esnya.esnya-sf-addons-ucs.asmdef index 48f5db41..7e25fb46 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/com.nekometer.esnya.esnya-sf-addons-ucs.asmdef +++ b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/Scripts/com.nekometer.esnya.esnya-sf-addons-ucs.asmdef @@ -2,12 +2,12 @@ "name": "com.nekometer.esnya.esnya-sf-addons-ucs", "references": [ "GUID:99835874ee819da44948776e0df4ff1d", - "GUID:823e7b1dbeb8b2a4c9d5014bf2a39093", - "GUID:30028048dda6a584cacbcdacfa19980d", - "GUID:5733a420a738f014796e614c37f22eca", - "GUID:c06a60146d220a445a50a3e2fdd223a6", - "GUID:80a8b162ac804404bae7b5fdc3041428", - "GUID:3c1bc1267eab5884ebe7f232c09ee0d9" + "SaccFlightAndVehicles.Runtime", + "InariUdonRuntime", + "UdonChips-fork", + "EsnyaSFAddons.Runtime", + "UdonSharp.Runtime", + "VRC.Udon" ], "includePlatforms": [], "excludePlatforms": [], @@ -15,9 +15,7 @@ "overrideReferences": false, "precompiledReferences": [], "autoReferenced": false, - "defineConstraints": [ - "UDON" - ], + "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/package.json b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/package.json index 42e3421d..1c0c9be8 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/package.json +++ b/Packages/com.nekometer.esnya.esnya-sf-addons-ucs/package.json @@ -13,13 +13,16 @@ "name": "esnya" }, "dependencies": { - "com.nekometer.esnya.esnya-sf-addons": "5.0.0", - "com.nekometer.esnya.inari-udon": "9.1.0", - "com.nekometer.esnya.udonchips-fork": "3.0.0", - "sh.orels.udontoolkit": "1.1.2" + "com.nekometer.esnya.esnya-sf-addons": "5.0.0-beta.49", + "com.nekometer.esnya.inari-udon": "https://github.com/esnya/InariUdon.git?path=/Packages/com.nekometer.esnya.inari-udon#alpha", + "com.nekometer.esnya.udonchips-fork": "3.0.0" }, "unity": "2022.3", "vpmDependencies": { - "com.vrchat.worlds": "3.7.0" + "com.vrchat.worlds": "3.10.2", + "com.nekometer.esnya.inari-udon": ">=10.0.0-alpha", + "com.nekometer.esnya.esnya-sf-addons": ">=5.0.0-beta.49", + "com.nekometer.esnya.udonchips-fork": ">=1.0.2", + "io.github.sacchan-vrc.sacc-flight-and-vehicles": ">=1.8.1" } } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFADebugTools.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFADebugTools.cs index 8c46e1b1..723eb8c9 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFADebugTools.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFADebugTools.cs @@ -75,7 +75,7 @@ private void OnGUI() if (GUILayout.Button("Respawn")) { - foreach (var airVehicle in entity.GetComponentsInChildren(true)) UdonSharpEditorUtility.GetBackingUdonBehaviour(airVehicle).SendCustomEvent(nameof(SaccAirVehicle.SFEXT_O_RespawnButton)); + entity.SendEventToExtensions("SFEXT_O_RespawnButton"); } } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs new file mode 100644 index 00000000..f5f1fa86 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs @@ -0,0 +1,102 @@ +#if UNITY_EDITOR +using System.Linq; +using UdonSharp; +using UnityEditor; +using UnityEngine; +using UnityEngine.SceneManagement; +using SaccFlightAndVehicles; +using VRC.SDKBase.Editor.BuildPipeline; + +namespace EsnyaSFAddons +{ + public static class ESFASceneSetupEditorUtility + { + public static void SetupAll() + { + foreach (var setup in SceneManager.GetActiveScene().GetRootGameObjects() + .SelectMany(o => o.GetComponentsInChildren(true))) + { + Setup(setup); + } + } + + public static void Setup(ESFASceneSetup setup) + { + if (!setup) return; + + var rootObjects = setup.gameObject.scene.GetRootGameObjects(); + var killsBoard = rootObjects.SelectMany(o => o.GetComponentsInChildren(true)).FirstOrDefault(); + + foreach (var entity in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) + { + var airVehicle = entity.ExtensionUdonBehaviours.FirstOrDefault(e => e is SaccAirVehicle); + var extensions = setup.injectExtentions.Select(template => + { + var obj = Object.Instantiate(template.gameObject, entity.transform); + var extension = obj.GetComponent(template.GetType()) as UdonSharpBehaviour; + obj.name = template.gameObject.name; + + extension.SetProgramVariable("EntityControl", entity); + extension.SetProgramVariable("AirVehicle", airVehicle); + + EditorUtility.SetDirty(extension); + + return extension; + }); + + if (killsBoard) + { + var killTracker = entity.GetExtention(UdonSharpBehaviour.GetUdonTypeName()) as SAV_KillTracker; + if (killTracker) + { + killTracker.KillsBoard = killsBoard; + EditorUtility.SetDirty(killTracker); + } + + var killPenalty = entity.GetExtention(UdonSharpBehaviour.GetUdonTypeName()) as SFEXT_KillPenalty; + if (killPenalty) + { + killPenalty.KillsBoard = killsBoard; + EditorUtility.SetDirty(killPenalty); + } + } + + if (setup.injectExtentions.Length > 0) + { + entity.ExtensionUdonBehaviours = entity.ExtensionUdonBehaviours.Concat(extensions).ToArray(); + } + + EditorUtility.SetDirty(entity); + } + + foreach (var airVehicle in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) + { + airVehicle.SeaLevel = setup.seaLevel; + airVehicle.RepeatingWorld = setup.repeatingWorld; + airVehicle.RepeatingWorldDistance = setup.repeatingWorldDistance; + EditorUtility.SetDirty(airVehicle); + } + + var windchanger = rootObjects.Select(o => o.GetComponentInChildren()).FirstOrDefault(c => c); + foreach (var windsock in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) + { + windsock.windChanger = windchanger; + EditorUtility.SetDirty(windsock); + } + + Object.DestroyImmediate(setup, true); + } + } + + public class ESFASceneSetupBuildCallback : IVRCSDKBuildRequestedCallback + { + public int callbackOrder => 11; + + public bool OnBuildRequested(VRCSDKRequestedBuildType requestedBuildType) + { + ESFASceneSetupEditorUtility.SetupAll(); + return true; + } + } +} +#endif diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs.meta new file mode 100644 index 00000000..32bb90df --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFASceneSetup.Editor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17727cdf6a3fc494d88eba18d1dfb72c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFAUI.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFAUI.cs index 7480cb77..8a9ed494 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFAUI.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/ESFAUI.cs @@ -1,3 +1,5 @@ +using System; +using System.Linq; using UnityEditor; using UnityEngine; using SaccFlightAndVehicles; @@ -6,6 +8,53 @@ namespace EsnyaSFAddons.Editor { public static class ESFAUI { + /// + /// Draws a dropdown popup when is non-empty, otherwise falls back to a plain text field. + /// Handles the case where the current serialized value is not present in by + /// prepending a read-only placeholder entry so the existing value is not silently overwritten. + /// + public static void StringPopupOrField(SerializedProperty property, GUIContent label, string[] options) + { + if (options == null || options.Length == 0) + { + EditorGUILayout.PropertyField(property, label); + return; + } + + var current = property.stringValue ?? string.Empty; + var idx = Array.IndexOf(options, current); + + string[] displayOptions; + int displayIdx; + if (idx >= 0) + { + displayOptions = options; + displayIdx = idx; + } + else + { + var placeholder = string.IsNullOrEmpty(current) ? "(none)" : $"(current) {current}"; + displayOptions = new[] { placeholder }.Concat(options).ToArray(); + displayIdx = 0; + } + + EditorGUI.BeginChangeCheck(); + var newIdx = EditorGUILayout.Popup(label, displayIdx, displayOptions.Select(s => new GUIContent(s)).ToArray()); + if (EditorGUI.EndChangeCheck() && newIdx != displayIdx) + { + if (idx >= 0) + { + property.stringValue = options[newIdx]; + } + else if (newIdx > 0) + { + // User selected an actual option (skip placeholder at index 0) + property.stringValue = options[newIdx - 1]; + } + } + } + + public static bool MiniButton(string label) { return GUILayout.Button(label, EditorStyles.miniButton, GUILayout.ExpandWidth(false)); diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/EsnyaSFAddons.Editor.asmdef b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/EsnyaSFAddons.Editor.asmdef index 332c7228..d1759496 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/EsnyaSFAddons.Editor.asmdef +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/EsnyaSFAddons.Editor.asmdef @@ -1,15 +1,15 @@ { "name": "EsnyaSFAddons.Editor", "references": [ - "GUID:3c1bc1267eab5884ebe7f232c09ee0d9", - "GUID:823e7b1dbeb8b2a4c9d5014bf2a39093", - "GUID:99835874ee819da44948776e0df4ff1d", - "GUID:30028048dda6a584cacbcdacfa19980d", - "GUID:80a8b162ac804404bae7b5fdc3041428", - "GUID:84265b35cca3905448e623ef3903f0ff", - "GUID:627c4d5cd580ddf41bd320e784fe8b9d", - "GUID:f253815156df439380cb4780773d184b", - "GUID:c06a60146d220a445a50a3e2fdd223a6" + "UdonSharp.Editor", + "UdonSharp.Runtime", + "VRC.Udon", + "VRC.Udon.Editor", + "VRC.SDKBase", + "VRC.SDKBase.Editor.BuildPipeline", + "InariUdonRuntime", + "SaccFlightAndVehicles.Runtime", + "EsnyaSFAddons.Runtime" ], "includePlatforms": [ "Editor" @@ -19,7 +19,7 @@ "overrideReferences": false, "precompiledReferences": [], "autoReferenced": false, - "defineConstraints": ["UDONSHARP"], + "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs new file mode 100644 index 00000000..9e710ab2 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs @@ -0,0 +1,72 @@ +using System; +using System.Linq; +using EsnyaSFAddons.DFUNC; +using UdonSharp; +using UdonSharpEditor; +using UnityEditor; +using UnityEngine; + +namespace EsnyaSFAddons.Editor.Inspector +{ + [CustomEditor(typeof(DFUNC_SendCustomEvent))] + public class DFUNC_SendCustomEventEditor : UnityEditor.Editor + { + private static string[] GetEventNames(UdonSharpBehaviour behaviour) + { + if (behaviour == null) return Array.Empty(); + return SFEditorUtility.ListCustomEvents(behaviour.GetType()) + .Select(m => m.Name) + .ToArray(); + } + + public override void OnInspectorGUI() + { + if (UdonSharpGUI.DrawDefaultUdonSharpBehaviourHeader(target)) return; + + serializedObject.Update(); + + var targetProp = serializedObject.FindProperty("target"); + EditorGUILayout.PropertyField(targetProp); + var targetBehaviour = targetProp.objectReferenceValue as UdonSharpBehaviour; + var eventNames = GetEventNames(targetBehaviour); + + var networkedProp = serializedObject.FindProperty("networked"); + EditorGUILayout.PropertyField(networkedProp); + if (networkedProp.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("networkEventTarget")); + EditorGUI.indentLevel--; + } + + var sendOnTriggerPressProp = serializedObject.FindProperty("sendOnTriggerPress"); + EditorGUILayout.PropertyField(sendOnTriggerPressProp); + if (sendOnTriggerPressProp.boolValue) + { + EditorGUI.indentLevel++; + ESFAUI.StringPopupOrField(serializedObject.FindProperty("onTriggerPress"), new GUIContent("On Trigger Press"), eventNames); + EditorGUI.indentLevel--; + } + + var sendOnTriggerReleaseProp = serializedObject.FindProperty("sendOnTriggerRelease"); + EditorGUILayout.PropertyField(sendOnTriggerReleaseProp); + if (sendOnTriggerReleaseProp.boolValue) + { + EditorGUI.indentLevel++; + ESFAUI.StringPopupOrField(serializedObject.FindProperty("onTriggerRelease"), new GUIContent("On Trigger Release"), eventNames); + EditorGUI.indentLevel--; + } + + var sendOnKeyboardInputProp = serializedObject.FindProperty("sendOnKeyboardInput"); + EditorGUILayout.PropertyField(sendOnKeyboardInputProp); + if (sendOnKeyboardInputProp.boolValue) + { + EditorGUI.indentLevel++; + ESFAUI.StringPopupOrField(serializedObject.FindProperty("onKeyboardInput"), new GUIContent("On Keyboard Input"), eventNames); + EditorGUI.indentLevel--; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs.meta new file mode 100644 index 00000000..e57ec6a9 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SendCustomEventEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ef851702d7e4754acba0e7d8bbf5b29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs new file mode 100644 index 00000000..361a39fb --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs @@ -0,0 +1,121 @@ +using System; +using System.Linq; +using EsnyaSFAddons.DFUNC; +using UdonSharp; +using UdonSharpEditor; +using UnityEditor; +using UnityEditor.Animations; +using UnityEngine; + +namespace EsnyaSFAddons.Editor.Inspector +{ + [CustomEditor(typeof(DFUNC_Slider))] + public class DFUNC_SliderEditor : UnityEditor.Editor + { + private static string[] GetFloatVariableNames(UdonSharpBehaviour behaviour) + { + if (behaviour == null) return Array.Empty(); + return SFEditorUtility.ListPublicVariables(behaviour.GetType()) + .Where(f => f.FieldType == typeof(float)) + .Select(f => f.Name) + .ToArray(); + } + + private static string[] GetAnimatorFloatParameterNames(Animator animator) + { + if (animator == null) return Array.Empty(); + var controller = animator.runtimeAnimatorController as AnimatorController; + if (controller == null) return Array.Empty(); + return controller.parameters + .Where(p => p.type == AnimatorControllerParameterType.Float) + .Select(p => p.name) + .ToArray(); + } + + public override void OnInspectorGUI() + { + if (UdonSharpGUI.DrawDefaultUdonSharpBehaviourHeader(target)) return; + + serializedObject.Update(); + + EditorGUILayout.PropertyField(serializedObject.FindProperty("defaultValue")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("resetOnPilotExit")); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("VR Input", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(serializedObject.FindProperty("vrSensitivity")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("vrAxis")); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Desktop Input", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(serializedObject.FindProperty("desktopStep")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("desktopIncrease")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("desktopDecrease")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("desktopLoop")); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Public Variable", EditorStyles.boldLabel); + var writePublicVariableProp = serializedObject.FindProperty("writePublicVariable"); + EditorGUILayout.PropertyField(writePublicVariableProp); + if (writePublicVariableProp.boolValue) + { + EditorGUI.indentLevel++; + var targetBehaviourProp = serializedObject.FindProperty("targetBehaviour"); + EditorGUILayout.PropertyField(targetBehaviourProp); + var targetBehaviour = targetBehaviourProp.objectReferenceValue as UdonSharpBehaviour; + var floatVars = GetFloatVariableNames(targetBehaviour); + ESFAUI.StringPopupOrField(serializedObject.FindProperty("targetVariableName"), new GUIContent("Target Variable Name"), floatVars); + EditorGUILayout.PropertyField(serializedObject.FindProperty("targetVariableMin")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("targetVariableMax")); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Animator", EditorStyles.boldLabel); + var writeAnimatorParameterProp = serializedObject.FindProperty("writeAnimatorParameter"); + EditorGUILayout.PropertyField(writeAnimatorParameterProp); + if (writeAnimatorParameterProp.boolValue) + { + EditorGUI.indentLevel++; + var targetAnimatorProp = serializedObject.FindProperty("targetAnimator"); + EditorGUILayout.PropertyField(targetAnimatorProp); + var targetAnimator = targetAnimatorProp.objectReferenceValue as Animator; + var floatParams = GetAnimatorFloatParameterNames(targetAnimator); + ESFAUI.StringPopupOrField(serializedObject.FindProperty("targetAnimatorParameterName"), new GUIContent("Target Animator Parameter Name"), floatParams); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Send Events", EditorStyles.boldLabel); + + var sendOnChangeProp = serializedObject.FindProperty("sendOnChange"); + EditorGUILayout.PropertyField(sendOnChangeProp); + if (sendOnChangeProp.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("onChange")); + EditorGUI.indentLevel--; + } + + var sendOnMinProp = serializedObject.FindProperty("sendOnMin"); + EditorGUILayout.PropertyField(sendOnMinProp); + if (sendOnMinProp.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("onMin")); + EditorGUI.indentLevel--; + } + + var sendOnMaxProp = serializedObject.FindProperty("sendOnMax"); + EditorGUILayout.PropertyField(sendOnMaxProp); + if (sendOnMaxProp.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serializedObject.FindProperty("onMax")); + EditorGUI.indentLevel--; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs.meta new file mode 100644 index 00000000..3621f23b --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/DFUNC_SliderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dab7105a3e94bb1bf05c315971cd72c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/SaccEntityEditor.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/SaccEntityEditor.cs index 8ad13dab..53db42f7 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/SaccEntityEditor.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Editor/Inspector/SaccEntityEditor.cs @@ -74,12 +74,6 @@ private static void ValidationGUI(SaccEntity entity) airVehicle.VehicleMesh.gameObject.layer = LayerMask.NameToLayer("Walkthrough"); } - if (entity.InVehicleOnly != null && entity.InVehicleOnly.activeSelf && ESFAUI.HelpBoxWithAutoFix($"InVehicleOnly should be deactivated.", MessageType.Warning)) - { - Undo.RecordObject(entity.InVehicleOnly, "Auto Fix"); - entity.InVehicleOnly.SetActive(false); - } - var animatorController = animator.runtimeAnimatorController as AnimatorController; if (animatorController) { @@ -97,19 +91,6 @@ private static void ValidationGUI(SaccEntity entity) } } - if (entity.InVehicleOnly) - { - if (fixAll || ESFAUI.HelpBoxWithAutoFix($"InVehicleOnly is deprecated. Use EnableInVehicle", MessageType.Warning)) - { - Undo.RecordObjects(new Object[] { entity.InVehicleOnly, entity }, "Auto Fix"); - entity.InVehicleOnly.name = "EnableInVehicle"; - entity.InVehicleOnly.tag = "EnableInVehicle"; - EditorUtility.SetDirty(entity); - entity.EnableInVehicle = (entity.EnableInVehicle ?? Enumerable.Empty()).Append(entity.InVehicleOnly).Where(o => o != null).ToArray(); - entity.InVehicleOnly = null; - EditorUtility.SetDirty(entity); - } - } } private void OnDisable() @@ -162,8 +143,6 @@ public override void OnInspectorGUI() { using (new EditorGUILayout.HorizontalScope()) { - if (property.name == nameof(SaccEntity.InVehicleOnly) && !property.objectReferenceValue) continue; - EditorGUILayout.PropertyField(property, true); if (property.name == nameof(SaccEntity.ExtensionUdonBehaviours)) { @@ -179,12 +158,6 @@ public override void OnInspectorGUI() if (ESFAUI.MiniButton("Find")) SFEditorUtility.SetObjectArrayProperty(property, SFEditorUtility.FindDFUNCs(entity, "DialFunctions_R").Concat(SFEditorUtility.FindDFUNCs(entity, "L"))); if (ESFAUI.MiniButton("Align")) SFEditorUtility.AlignMFDFunctions(entity, VRC_Pickup.PickupHand.Right); } - else if (property.name == nameof(SaccEntity.InVehicleOnly)) - { - if (ESFAUI.MiniButton("Preview")) SetPreview(property, true); - if (ESFAUI.MiniButton("Find by Name")) property.objectReferenceValue = entity.transform.FindByName(property.name); - if (ESFAUI.MiniButton("Find by Tag")) property.objectReferenceValue = entity.transform.FindByTag(property.name); - } else if (property.name == nameof(SaccEntity.CenterOfMass) || property.name == nameof(SaccEntity.LStickDisplayHighlighter) || property.name == nameof(SaccEntity.RStickDisplayHighlighter)) { if (ESFAUI.MiniButton("Find by Name")) property.objectReferenceValue = entity.transform.FindByName(property.name)?.transform; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/CatapultController.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/CatapultController.cs index fc6dc137..c82a19a1 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/CatapultController.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/CatapultController.cs @@ -175,7 +175,7 @@ public void PreLaunch() } dfunc.Launching = true; - dfunc.PreLaunchCatapult(); + dfunc.SendCustomEvent(nameof(DFUNC_Catapult.LaunchCatapult)); } /// diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/GroundWindIndicator.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/GroundWindIndicator.cs index bf5c0fd9..62dfbc73 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/GroundWindIndicator.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Accesories/GroundWindIndicator.cs @@ -34,10 +34,22 @@ public class GroundWindIndicator : UdonSharpBehaviour private Vector3 wind; private float gust; + private float GetWindChangerFloat(string name) + { + var value = windChanger.GetProgramVariable(name); + return value is float floatValue ? floatValue : 0.0f; + } + + private Vector3 GetWindChangerVector3(string name) + { + var value = windChanger.GetProgramVariable(name); + return value is Vector3 vectorValue ? vectorValue : Vector3.zero; + } + private Vector3 GetFinalWind() { - var t = Time.time * windChanger.WindGustiness; - var turbulanceScale = windChanger.WindTurbulanceScale; + var t = Time.time * GetWindChangerFloat("WindGustiness"); + var turbulanceScale = GetWindChangerFloat("WindTurbulanceScale"); var gustx = t + transform.position.x * turbulanceScale; var gustz = t + transform.position.z * turbulanceScale; return wind + Vector3.Normalize(new Vector3(Mathf.PerlinNoise(gustx + 9000, gustz) - .5f, 0, Mathf.PerlinNoise(gustx, gustz + 9999) - .5f)) * gust; @@ -60,8 +72,8 @@ public void Update() switch (updateStep) { case UPDATE_STEP_UPDATE: - wind = windChanger.WindStrenth_3 * 1.944f; - gust = windChanger.WindGustStrength * 1.944f; + wind = GetWindChangerVector3("WindStrenth_3") * 1.944f; + gust = GetWindChangerFloat("WindGustStrength") * 1.944f; break; case UPDATE_STEP_DIRECTION: if (directionIndicator) diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Annotations/UdonSharpComponentInjectAttribute.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Annotations/UdonSharpComponentInjectAttribute.cs index 965ad613..a53ae736 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Annotations/UdonSharpComponentInjectAttribute.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Annotations/UdonSharpComponentInjectAttribute.cs @@ -3,7 +3,6 @@ using UnityEngine.SceneManagement; using UnityEngine; using System.Reflection; -using UdonToolkit; using UdonSharp; #if UNITY_EDITOR @@ -15,26 +14,12 @@ namespace EsnyaSFAddons.Annotations { [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] #if UNITY_EDITOR - public class UdonSharpComponentInjectAttribute : UTPropertyAttribute + public class UdonSharpComponentInjectAttribute : PropertyAttribute #else public class UdonSharpComponentInjectAttribute : System.Attribute #endif { #if !COMPILER_UDONSHARP && UNITY_EDITOR - public override void BeforeGUI(SerializedProperty property) - { - if (!property.isArray) EditorGUILayout.BeginHorizontal(); - } - public override void AfterGUI(SerializedProperty property) - { - if (GUILayout.Button("Force Update", GUILayout.ExpandWidth(false))) - { - AutoSetup((property.serializedObject.targetObject as Component).gameObject.scene); - } - if (!property.isArray) EditorGUILayout.EndHorizontal(); - EditorGUILayout.HelpBox("Auto injected by script.", MessageType.Info); - } - public static void AutoSetup(Scene scene) { var rootGameObjects = scene.GetRootGameObjects(); @@ -61,8 +46,8 @@ public static void AutoSetup(Scene scene) var components = isComponent ? rootGameObjects.SelectMany(o => o.GetComponentsInChildren(valueType)).ToArray() : rootGameObjects.SelectMany(o => o.GetComponentsInChildren(valueType)).ToArray(); - var value = field.FieldType.GetConstructor(new[] { typeof(int) }).Invoke(new object[] { components.Length }); - Array.Copy(components, value as Array, components.Length); + var value = Array.CreateInstance(valueType, components.Length); + Array.Copy(components, value, components.Length); field.SetValue(component, value); } else @@ -94,6 +79,57 @@ public bool OnBuildRequested(VRCSDKRequestedBuildType requestedBuildType) return true; } } + + [CustomPropertyDrawer(typeof(UdonSharpComponentInjectAttribute))] + public class Drawer : PropertyDrawer + { + private const float ButtonWidth = 90f; + private const float HelpBoxHeight = 38f; + private const float Padding = 2f; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + var propertyHeight = EditorGUI.GetPropertyHeight(property, label, true); + var isArray = property.isArray; + var buttonHeight = isArray ? EditorGUIUtility.singleLineHeight + Padding : 0f; + return propertyHeight + buttonHeight + HelpBoxHeight + Padding; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var propertyHeight = EditorGUI.GetPropertyHeight(property, label, true); + var isArray = property.isArray; + + var fieldRect = isArray + ? new Rect(position.x, position.y, position.width, propertyHeight) + : new Rect(position.x, position.y, position.width - ButtonWidth - Padding, propertyHeight); + + EditorGUI.PropertyField(fieldRect, property, label, true); + + float afterFieldY = position.y + propertyHeight + Padding; + + if (isArray) + { + var buttonRect = new Rect(position.x, afterFieldY, ButtonWidth, EditorGUIUtility.singleLineHeight); + if (GUI.Button(buttonRect, "Force Update")) + { + AutoSetup((property.serializedObject.targetObject as Component).gameObject.scene); + } + afterFieldY += EditorGUIUtility.singleLineHeight + Padding; + } + else + { + var buttonRect = new Rect(position.x + position.width - ButtonWidth, position.y, ButtonWidth, EditorGUIUtility.singleLineHeight); + if (GUI.Button(buttonRect, "Force Update")) + { + AutoSetup((property.serializedObject.targetObject as Component).gameObject.scene); + } + } + + var helpRect = new Rect(position.x, afterFieldY, position.width, HelpBoxHeight); + EditorGUI.HelpBox(helpRect, "Auto injected by script.", MessageType.Info); + } + } #endif } } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common.meta new file mode 100644 index 00000000..1b2809d0 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44729507ba4bbbc49a86dd1b870bb490 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs new file mode 100644 index 00000000..c30c8d6b --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using SaccFlightAndVehicles; +using VRC.SDKBase; + +namespace EsnyaSFAddons +{ + public class PlayerStrike + { + public static bool CheckPlayerStrike(Transform origin, SaccEntity saccEntity, float normalizedRpm, float minHazardRange, float maxHazardRange, float thrust) + { + var striked = false; + var localPlayer = Networking.LocalPlayer; + + if (!Utilities.IsValid(localPlayer) || !saccEntity || saccEntity.InVehicle || Mathf.Approximately(normalizedRpm, 0)) return striked; + + var playerPosition = localPlayer.GetPosition(); + + var relative = origin.InverseTransformPoint(playerPosition); + var distance = relative.magnitude; + + if (distance > maxHazardRange) return striked; + + var hazardRange = Mathf.Lerp(minHazardRange, maxHazardRange, normalizedRpm); + + if (distance > hazardRange) return striked; + + var forceScale = 1 - distance / hazardRange; + + if (relative.z >= 0) + { + striked = true; + AddPlayerForce(localPlayer, forceScale * thrust * (origin.position - playerPosition).normalized); + } + else + { + AddPlayerForce(localPlayer, - forceScale * thrust * origin.forward); + } + + return striked; + } + + private static void AddPlayerForce(VRCPlayerApi player, Vector3 force) + { + player.SetVelocity(player.GetVelocity() + (force + (player.IsPlayerGrounded() ? Vector3.up * 0.5f : Vector3.zero)) * Time.deltaTime); + } + } +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs.meta new file mode 100644 index 00000000..69caab24 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Common/PlayerStrike.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f936d8df1c834d14f9bd9e24801497ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNCP_IHaveControl.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNCP_IHaveControl.cs index 4cea7ed6..bad37365 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNCP_IHaveControl.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNCP_IHaveControl.cs @@ -228,6 +228,24 @@ private void SetSeatChildTransforms(SaccVehicleSeat seat, Vector3[] targetPositi } private Vector2 seatAdjustedPos; + private Vector2 GetAdjustedPos(SaccVehicleSeat seat) + { + var value = seat.GetProgramVariable("SeatAdjustedPosXY"); + if (value is Vector3 vectorValue) + { + return new Vector2(vectorValue.y, vectorValue.z); + } + + return Vector2.zero; + } + + private void SetAdjustedPos(SaccVehicleSeat seat, Vector2 value) + { + var current = seat.GetProgramVariable("SeatAdjustedPosXY"); + var currentVector = current is Vector3 vectorValue ? vectorValue : seat.transform.localPosition; + seat.SetProgramVariable("SeatAdjustedPosXY", new Vector3(currentVector.x, value.x, value.y)); + } + private void SwapPlayers() { enterAsPilot = isUser; @@ -244,7 +262,7 @@ private void SwapPlayers() private void SaveAdjustedPos(SaccVehicleSeat seat) { - seatAdjustedPos = seat.AdjustedPos; + seatAdjustedPos = GetAdjustedPos(seat); pilotSeat.AdjustSeatPosition = false; passengerSeat.AdjustSeatPosition = false; @@ -253,7 +271,7 @@ private void SaveAdjustedPos(SaccVehicleSeat seat) private void LoadAdjustedPos(SaccVehicleSeat seat) { - seat.AdjustedPos = seatAdjustedPos; + SetAdjustedPos(seat, seatAdjustedPos); seat.RequestSerialization(); pilotSeat.AdjustSeatPosition = pilotSeatAdjust; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_AdvancedWaterRudder.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_AdvancedWaterRudder.cs index 6b8c9337..bf4d5777 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_AdvancedWaterRudder.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_AdvancedWaterRudder.cs @@ -3,8 +3,7 @@ using UnityEngine; using VRC.SDKBase; using SaccFlightAndVehicles; -#if !COMPILER_UDONSHARP && UNITY_EDITOR -using UdonSharpEditor; +#if ESNYA_SFADDONS_EDITOR_TOOLS && UNITY_EDITOR #endif namespace EsnyaSFAddons.DFUNC @@ -161,7 +160,7 @@ public void Toggle() RequestSerialization(); } -#if !COMPILER_UDONSHARP && UNITY_EDITOR +#if ESNYA_SFADDONS_EDITOR_TOOLS && UNITY_EDITOR private void OnDrawGizmosSelected() { if (!(Extracted && vehicleRigidbody)) return; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SeatAdjuster.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SeatAdjuster.cs index 62b842d5..f2231ca2 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SeatAdjuster.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SeatAdjuster.cs @@ -57,6 +57,24 @@ public void SFEXT_L_EntityStart() private Vector3 sliderOrigin; private Vector2 adjustedOrigin; + private Vector2 GetAdjustedPos() + { + var value = seat.GetProgramVariable("SeatAdjustedPosXY"); + if (value is Vector3 vectorValue) + { + return new Vector2(vectorValue.y, vectorValue.z); + } + + return Vector2.zero; + } + + private void SetAdjustedPos(Vector2 value) + { + var current = seat.GetProgramVariable("SeatAdjustedPosXY"); + var currentVector = current is Vector3 vectorValue ? vectorValue : seat.transform.localPosition; + seat.SetProgramVariable("SeatAdjustedPosXY", new Vector3(currentVector.x, value.x, value.y)); + } + public override void PostLateUpdate() { if (!seat) return; @@ -70,11 +88,11 @@ public override void PostLateUpdate() if (!prevTriggered) { sliderOrigin = trackingPosition; - adjustedOrigin = seat.AdjustedPos; + adjustedOrigin = GetAdjustedPos(); } else { - seat.AdjustedPos = adjustedOrigin - XYZtoYZ(trackingPosition - sliderOrigin); + SetAdjustedPos(adjustedOrigin - XYZtoYZ(trackingPosition - sliderOrigin)); } } else @@ -84,12 +102,12 @@ public override void PostLateUpdate() var forward = Input.GetKeyDown(desktopForward); var back = Input.GetKeyDown(desktopBack); var keyDown = up || down || forward || back; - seat.AdjustedPos += ( + SetAdjustedPos(GetAdjustedPos() + ( (up ? Vector2.right : Vector2.zero) + (down ? Vector2.left : Vector2.zero) + (forward ? Vector2.up : Vector2.zero) + (back ? Vector2.down : Vector2.zero) - ) * desktopStep; + ) * desktopStep); if (prevTriggered || keyDown) seat.RequestSerialization(); } } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SendCustomEvent.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SendCustomEvent.cs index 41cb7e4c..d139a67f 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SendCustomEvent.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_SendCustomEvent.cs @@ -1,6 +1,5 @@  using UdonSharp; -using UdonToolkit; using VRC.Udon.Common.Interfaces; namespace EsnyaSFAddons.DFUNC @@ -10,13 +9,13 @@ public class DFUNC_SendCustomEvent : DFUNC_Base { public UdonSharpBehaviour target; public bool networked; - [HideIf("@!networked")] public NetworkEventTarget networkEventTarget; + public NetworkEventTarget networkEventTarget; public bool sendOnTriggerPress; - [HideIf("@!sendOnTriggerPress")][Popup("behaviour", "@target")] public string onTriggerPress; + public string onTriggerPress; public bool sendOnTriggerRelease; - [HideIf("@!sendOnTriggerRelease")][Popup("behaviour", "@target")] public string onTriggerRelease; + public string onTriggerRelease; public bool sendOnKeyboardInput; - [HideIf("@!sendOnKeyboardInput")][Popup("behaviour", "@target")] public string onKeyboardInput; + public string onKeyboardInput; public override void DFUNC_TriggerPressed() { @@ -33,7 +32,7 @@ public void KeyboardInput() public void _SendEvent(string eventName) { - if (!target) return; + if (!target || string.IsNullOrEmpty(eventName)) return; if (networked) target.SendCustomNetworkEvent(networkEventTarget, eventName); else target.SendCustomEvent(eventName); diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.asset b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.asset index 9938e8bd..27d08692 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.asset +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.asset @@ -41,7 +41,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 30 + Data: 32 - Name: Entry: 7 Data: @@ -617,10 +617,106 @@ MonoBehaviour: Data: - Name: $k Entry: 1 - Data: writeAnimatorParameter + Data: targetVariableMin - Name: $v Entry: 7 Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: targetVariableMin + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: targetVariableMax + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: targetVariableMax + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: writeAnimatorParameter + - Name: $v + Entry: 7 + Data: 35|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: writeAnimatorParameter @@ -644,7 +740,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 32|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 36|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -668,13 +764,13 @@ MonoBehaviour: Data: targetAnimator - Name: $v Entry: 7 - Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 37|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: targetAnimator - Name: k__BackingField Entry: 7 - Data: 34|System.RuntimeType, mscorlib + Data: 38|System.RuntimeType, mscorlib - Name: Entry: 1 Data: UnityEngine.Animator, UnityEngine.AnimationModule @@ -683,7 +779,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 34 + Data: 38 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -698,7 +794,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -722,7 +818,7 @@ MonoBehaviour: Data: targetAnimatorParameterName - Name: $v Entry: 7 - Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: targetAnimatorParameterName @@ -746,7 +842,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 37|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -770,7 +866,7 @@ MonoBehaviour: Data: sendOnChange - Name: $v Entry: 7 - Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: sendOnChange @@ -794,7 +890,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 43|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -818,7 +914,7 @@ MonoBehaviour: Data: onChange - Name: $v Entry: 7 - Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 44|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: onChange @@ -842,7 +938,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -866,7 +962,7 @@ MonoBehaviour: Data: sendOnMin - Name: $v Entry: 7 - Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: sendOnMin @@ -890,7 +986,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 43|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 47|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -914,7 +1010,7 @@ MonoBehaviour: Data: onMin - Name: $v Entry: 7 - Data: 44|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: onMin @@ -938,7 +1034,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -962,7 +1058,7 @@ MonoBehaviour: Data: sendOnMax - Name: $v Entry: 7 - Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 50|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: sendOnMax @@ -986,7 +1082,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 47|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 51|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1010,7 +1106,7 @@ MonoBehaviour: Data: onMax - Name: $v Entry: 7 - Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 52|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: onMax @@ -1034,7 +1130,7 @@ MonoBehaviour: Data: true - Name: _fieldAttributes Entry: 7 - Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 53|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1058,7 +1154,7 @@ MonoBehaviour: Data: triggerAxis - Name: $v Entry: 7 - Data: 50|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 54|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: triggerAxis @@ -1082,7 +1178,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 51|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 55|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1106,7 +1202,7 @@ MonoBehaviour: Data: prevTrigger - Name: $v Entry: 7 - Data: 52|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 56|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: prevTrigger @@ -1130,7 +1226,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 53|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 57|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1154,7 +1250,7 @@ MonoBehaviour: Data: isSelected - Name: $v Entry: 7 - Data: 54|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 58|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: isSelected @@ -1178,7 +1274,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 55|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 59|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1202,7 +1298,7 @@ MonoBehaviour: Data: originValue - Name: $v Entry: 7 - Data: 56|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 60|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: originValue @@ -1226,7 +1322,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 57|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 61|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1250,7 +1346,7 @@ MonoBehaviour: Data: originPosition - Name: $v Entry: 7 - Data: 58|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 62|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: originPosition @@ -1274,7 +1370,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 59|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 63|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1298,13 +1394,13 @@ MonoBehaviour: Data: controlsRoot - Name: $v Entry: 7 - Data: 60|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 64|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: controlsRoot - Name: k__BackingField Entry: 7 - Data: 61|System.RuntimeType, mscorlib + Data: 65|System.RuntimeType, mscorlib - Name: Entry: 1 Data: UnityEngine.Transform, UnityEngine.CoreModule @@ -1313,7 +1409,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 61 + Data: 65 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1328,7 +1424,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 62|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 66|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1352,13 +1448,13 @@ MonoBehaviour: Data: trackingHand - Name: $v Entry: 7 - Data: 63|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 67|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: trackingHand - Name: k__BackingField Entry: 7 - Data: 64|System.RuntimeType, mscorlib + Data: 68|System.RuntimeType, mscorlib - Name: Entry: 1 Data: VRC.SDKBase.VRCPlayerApi+TrackingDataType, VRCSDKBase @@ -1367,7 +1463,7 @@ MonoBehaviour: Data: - Name: k__BackingField Entry: 9 - Data: 64 + Data: 68 - Name: k__BackingField Entry: 7 Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib @@ -1382,7 +1478,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 65|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 69|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1406,7 +1502,7 @@ MonoBehaviour: Data: _value - Name: $v Entry: 7 - Data: 66|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 70|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: _value @@ -1430,19 +1526,19 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 67|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 71|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 2 - Name: Entry: 7 - Data: 68|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + Data: 72|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime - Name: Entry: 8 Data: - Name: Entry: 7 - Data: 69|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime + Data: 73|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime - Name: Entry: 8 Data: @@ -1466,7 +1562,7 @@ MonoBehaviour: Data: isPilot - Name: $v Entry: 7 - Data: 70|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 74|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: isPilot @@ -1490,7 +1586,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 71|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 75|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 @@ -1514,13 +1610,13 @@ MonoBehaviour: Data: entity - Name: $v Entry: 7 - Data: 72|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + Data: 76|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - Name: k__BackingField Entry: 1 Data: entity - Name: k__BackingField Entry: 7 - Data: 73|System.RuntimeType, mscorlib + Data: 77|System.RuntimeType, mscorlib - Name: Entry: 1 Data: SaccFlightAndVehicles.SaccEntity, SaccFlightAndVehicles.Runtime @@ -1544,7 +1640,7 @@ MonoBehaviour: Data: false - Name: _fieldAttributes Entry: 7 - Data: 74|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + Data: 78|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - Name: Entry: 12 Data: 0 diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.cs index 288b27fa..d85aa5f4 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/DFUNC/DFUNC_Slider.cs @@ -1,7 +1,6 @@  using SaccFlightAndVehicles; using UdonSharp; -using UdonToolkit; using UnityEngine; using VRC.SDKBase; @@ -13,33 +12,34 @@ public class DFUNC_Slider : UdonSharpBehaviour public float defaultValue = 0.0f; public bool resetOnPilotExit = false; - [SectionHeader("VR Input")] + [Header("VR Input")] public float vrSensitivity = 5f; public Vector3 vrAxis = Vector3.forward; - [SectionHeader("Desktop Input")] + [Header("Desktop Input")] public float desktopStep = 0.2f; public KeyCode desktopIncrease, desktopDecrease; public bool desktopLoop; - [SectionHeader("Public Variable")] + [Header("Public Variable")] public bool writePublicVariable; - [HideIf("@!writePublicVariable")] public UdonSharpBehaviour targetBehaviour; - [HideIf("@!writePublicVariable")][Popup("programVariable", "@targetBehaviour", "float")] public string targetVariableName; + public UdonSharpBehaviour targetBehaviour; + public string targetVariableName; + public float targetVariableMin = 0.0f; + public float targetVariableMax = 1.0f; - [SectionHeader("Animator")] + [Header("Animator")] public bool writeAnimatorParameter; - [HideIf("@!writeAnimatorParameter")] public Animator targetAnimator; - [HideIf("@!writeAnimatorParameter")][Popup("animatorFloat", "@targetAnimator")] public string targetAnimatorParameterName; + public string targetAnimatorParameterName; - [SectionHeader("Send Events")] + [Header("Send Events")] public bool sendOnChange; - [HideIf("@!sendOnChange")] public string onChange = "SFEXT_G_SliderValueCange"; + public string onChange = "SFEXT_G_SliderValueChange"; public bool sendOnMin; - [HideIf("@!sendOnMin")] public string onMin = "SFEXT_G_SliderMin"; + public string onMin = "SFEXT_G_SliderMin"; public bool sendOnMax; - [HideIf("@!sendOnMax")] public string onMax = "SFEXT_G_SliderMax"; + public string onMax = "SFEXT_G_SliderMax"; private string triggerAxis; private bool prevTrigger; @@ -58,13 +58,13 @@ private float Value set { var clampedValue = Mathf.Clamp01(value); - if (writePublicVariable && targetBehaviour) targetBehaviour.SetProgramVariable(targetVariableName, clampedValue); - if (writeAnimatorParameter && targetAnimator) targetAnimator.SetFloat(targetAnimatorParameterName, clampedValue); + if (writePublicVariable && targetBehaviour && !string.IsNullOrEmpty(targetVariableName)) targetBehaviour.SetProgramVariable(targetVariableName, clampedValue * (targetVariableMax - targetVariableMin) + targetVariableMin); + if (writeAnimatorParameter && targetAnimator && !string.IsNullOrEmpty(targetAnimatorParameterName)) targetAnimator.SetFloat(targetAnimatorParameterName, clampedValue); if (clampedValue != _value && entity) { - if (sendOnChange) entity.SendEventToExtensions(onChange); - if (sendOnMin && Mathf.Approximately(clampedValue, 0)) entity.SendEventToExtensions(onMin); - if (sendOnMax && Mathf.Approximately(clampedValue, 1)) entity.SendEventToExtensions(onMax); + if (sendOnChange && !string.IsNullOrEmpty(onChange)) entity.SendEventToExtensions(onChange); + if (sendOnMin && Mathf.Approximately(clampedValue, 0) && !string.IsNullOrEmpty(onMin)) entity.SendEventToExtensions(onMin); + if (sendOnMax && Mathf.Approximately(clampedValue, 1) && !string.IsNullOrEmpty(onMax)) entity.SendEventToExtensions(onMax); } _value = clampedValue; } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/ESFASceneSetup.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/ESFASceneSetup.cs index 15fe6115..95a3bebd 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/ESFASceneSetup.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/ESFASceneSetup.cs @@ -2,19 +2,11 @@ using UdonSharp; using UnityEngine; using SaccFlightAndVehicles; -using UnityEditor; - -#if UNITY_EDITOR -using UnityEngine.SceneManagement; -using System.Linq; -using UdonSharpEditor; -using VRC.SDKBase.Editor.BuildPipeline; -#endif namespace EsnyaSFAddons { [DefaultExecutionOrder(-20)] - public class ESFASceneSetup : MonoBehaviour + public partial class ESFASceneSetup : MonoBehaviour { [Header("World Configuration")] public float seaLevel = -10; @@ -23,95 +15,5 @@ public class ESFASceneSetup : MonoBehaviour [Header("Inject Extentions")] public UdonSharpBehaviour[] injectExtentions = { }; - -#if UNITY_EDITOR - private void Awake() - { - Setup(); - } - - public static void SetupAll() - { - foreach (var setup in SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(o => o.GetComponentsInChildren())) - { - setup.Setup(); - } - } - - public void Setup() - { - var rootObjects = gameObject.scene.GetRootGameObjects(); - - var killsBoard = rootObjects.SelectMany(o => o.GetComponentsInChildren(true)).FirstOrDefault(); - - foreach (var entity in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) - { - var airVehicle = entity.ExtensionUdonBehaviours.FirstOrDefault(e => e is SaccAirVehicle); - var extensions = injectExtentions.Select(template => - { - var obj = Instantiate(template.gameObject, entity.transform); - var extension = obj.GetComponent(template.GetType()) as UdonSharpBehaviour; - obj.name = template.gameObject.name; - - extension.SetProgramVariable("EntityControl", entity); - extension.SetProgramVariable("AirVehicle", airVehicle); - - EditorUtility.SetDirty(extension); - - return extension; - }); - - if (killsBoard) - { - var killTracker = entity.GetExtention(UdonSharpBehaviour.GetUdonTypeName()) as SAV_KillTracker; - if (killTracker) - { - killTracker.KillsBoard = killsBoard; - EditorUtility.SetDirty(killTracker); - } - - var killPenalty = entity.GetExtention(UdonSharpBehaviour.GetUdonTypeName()) as SFEXT_KillPenalty; - if (killPenalty) - { - killPenalty.KillsBoard = killsBoard; - EditorUtility.SetDirty(killPenalty); - } - } - - if (injectExtentions.Length > 0) entity.ExtensionUdonBehaviours = entity.ExtensionUdonBehaviours.Concat(extensions).ToArray(); - EditorUtility.SetDirty(entity); - } - - foreach (var airVehicle in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) - { - airVehicle.SeaLevel = seaLevel; - - airVehicle.RepeatingWorld = repeatingWorld; - airVehicle.RepeatingWorldDistance = repeatingWorldDistance; - - EditorUtility.SetDirty(airVehicle); - } - - var windchanger = rootObjects.Select(o => o.GetComponentInChildren()).Where(c => c).FirstOrDefault(); - foreach (var windsock in rootObjects.SelectMany(o => o.GetComponentsInChildren(true))) - { - windsock.windChanger = windchanger; - EditorUtility.SetDirty(windsock); - } - - Destroy(this); - } - - public class BuildCallback : IVRCSDKBuildRequestedCallback - { - public int callbackOrder => 11; - - public bool OnBuildRequested(VRCSDKRequestedBuildType requestedBuildType) - { - SetupAll(); - return true; - } - } -#endif } } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/EsnyaSFAddons.Runtime.asmdef b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/EsnyaSFAddons.Runtime.asmdef index bb566b2b..d197b7ee 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/EsnyaSFAddons.Runtime.asmdef +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/EsnyaSFAddons.Runtime.asmdef @@ -1,13 +1,13 @@ { "name": "EsnyaSFAddons.Runtime", "references": [ - "GUID:3c1bc1267eab5884ebe7f232c09ee0d9", - "GUID:823e7b1dbeb8b2a4c9d5014bf2a39093", + "VRC.Udon", + "SaccFlightAndVehicles.Runtime", "GUID:99835874ee819da44948776e0df4ff1d", - "GUID:30028048dda6a584cacbcdacfa19980d", - "GUID:80a8b162ac804404bae7b5fdc3041428", + "InariUdonRuntime", + "UdonSharp.Runtime", "GUID:84265b35cca3905448e623ef3903f0ff", - "GUID:6055be8ebefd69e48b49212b09b47b2f" + "Unity.TextMeshPro" ], "includePlatforms": [], "excludePlatforms": [], @@ -15,7 +15,7 @@ "overrideReferences": false, "precompiledReferences": [], "autoReferenced": false, - "defineConstraints": ["UDONSHARP"], + "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AbstractVehicle.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AbstractVehicle.cs index ec2c95fd..074b656b 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AbstractVehicle.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AbstractVehicle.cs @@ -103,6 +103,13 @@ public class SFEXT_AbstractVehicle : UdonSharpBehaviour public bool EngineOnOnEnter = true; [Tooltip("Set Engine Off when entering the vehicle?")] public bool EngineOffOnExit = true; + + private float GetLastHitBulletDamageMulti() + { + var value = EntityControl.GetProgramVariable("LastHitBulletDamageMulti"); + return value is float floatValue ? floatValue : 1.0f; + } + [FieldChangeCallback(nameof(EngineOn))] public bool _EngineOn = false; public bool EngineOn { @@ -1113,7 +1120,7 @@ public void SFEXT_L_BulletHit() { if (Time.time - LastHitTime > 2) { - PredictedHealth = Health - (BulletDamageTaken * EntityControl.LastHitBulletDamageMulti); + PredictedHealth = Health - (BulletDamageTaken * GetLastHitBulletDamageMulti()); if (PredictedHealth <= 0) { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, nameof(Explode)); @@ -1121,7 +1128,7 @@ public void SFEXT_L_BulletHit() } else { - PredictedHealth -= BulletDamageTaken * EntityControl.LastHitBulletDamageMulti; + PredictedHealth -= BulletDamageTaken * GetLastHitBulletDamageMulti(); if (PredictedHealth <= 0) { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, nameof(Explode)); @@ -1137,7 +1144,7 @@ public void SFEXT_G_BulletHit() LastHitTime = Time.time; if (IsOwner) { - Health -= BulletDamageTaken * EntityControl.LastHitBulletDamageMulti; + Health -= BulletDamageTaken * GetLastHitBulletDamageMulti(); if (PredictDamage && Health <= 0)//the attacker calls the explode function in this case { Health = 0.0911f; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedGear.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedGear.cs index cfedee71..d65f7b9e 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedGear.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedGear.cs @@ -280,7 +280,7 @@ private float GetTargetBrakeStrength(float groundSpeed) if (airVehicle.Taxiing && rudderBrake > 0.0f && groundSpeed < brakeMaxGroundSpeed) { var yawInput = airVehicle.RotationInputs.y; - return Mathf.Clamp01(yawInput /rudderBrake - 1 / Mathf.Abs(rudderBrake) + 1) * brakeInput; + return Mathf.Max(Mathf.Clamp01(Mathf.Abs(yawInput) / rudderBrake / 2 - 1 / Mathf.Abs(rudderBrake) + 1), brakeInput); } return brakeInput; } diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedPropellerThrust.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedPropellerThrust.cs index fdb323a2..fa7a276a 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedPropellerThrust.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_AdvancedPropellerThrust.cs @@ -234,7 +234,7 @@ public void SFEXT_L_EntityStart() var ts = Mathf.Pow(2.0f * airDensity * Mathf.PI * Mathf.Pow(diameter / 2.0f, 2.0f) * Mathf.Pow(power * 735.499f, 2.0f), 1.0f / 3.0f); seaLevelThrustScale = ts / t0; - SFEXT_G_Reappear(); + SFEXT_G_ReAppear(); isOwner = airVehicle.IsOwner; } @@ -267,7 +267,8 @@ public void SFEXT_G_EngineOff() mixtureCutOffTimer = 0.0f; } - public void SFEXT_G_Reappear() + public void SFEXT_G_RespawnButton() => SFEXT_G_ReAppear(); + public void SFEXT_G_ReAppear() { engineOn = false; broken = false; @@ -368,38 +369,15 @@ private void EngineOff() private void PostLateUpdate() { - var localPlayer = Networking.LocalPlayer; - - if (!Utilities.IsValid(localPlayer) || !hazardEnabled || !saccEntity || saccEntity.InVehicle || Mathf.Approximately(RPM, 0)) return; - - var playerPosition = localPlayer.GetPosition(); - - var relative = transform.InverseTransformPoint(playerPosition); - var distance = relative.magnitude; - - if (distance > maxHazardRange) return; - - var normalizedRpm = RPM / maxRPMCurve.Evaluate(0.0f); - var hazardRange = Mathf.Lerp(minHazardRange, maxHazardRange, normalizedRpm); - - if (distance > hazardRange) return; - - var forceScale = 1 - distance / hazardRange; - - if (relative.z >= 0) + if (hazardEnabled && PlayerStrike.CheckPlayerStrike(transform, saccEntity, RPM / maxRPMCurve.Evaluate(0), minHazardRange, maxHazardRange, thrust)) { PlayStrikeSound(); - SendCustomNetworkEvent(NetworkEventTarget.Owner, nameof(PlayerStrike)); + SendCustomNetworkEvent(NetworkEventTarget.Owner, nameof(PlayerStriked)); SendCustomEventDelayedSeconds(nameof(_KillPlayer), hazardKillDelay); - AddPlayerForce(localPlayer, forceScale * thrust * (transform.position - playerPosition).normalized); - } - else - { - AddPlayerForce(localPlayer, - forceScale * thrust * transform.forward); } } - public void PlayerStrike() + public void PlayerStriked() { if (!broken) { @@ -413,11 +391,6 @@ public void PlayStrikeSound() if (strikedSound && !strikedSound.isPlaying) strikedSound.Play(); } - private void AddPlayerForce(VRCPlayerApi player, Vector3 force) - { - player.SetVelocity(player.GetVelocity() + (force + (player.IsPlayerGrounded() ? Vector3.up * 0.5f : Vector3.zero)) * Time.deltaTime); - } - public void _KillPlayer() { Networking.LocalPlayer.TeleportTo(killedPlayerPosition, Quaternion.identity); diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_BoardingCollider.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_BoardingCollider.cs index 49d6f79d..7aa587bf 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_BoardingCollider.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_BoardingCollider.cs @@ -4,8 +4,7 @@ using VRC.SDKBase; using SaccFlightAndVehicles; -#if !COMPILER_UDONSHARP && UNITY_EDITOR -using UdonSharpEditor; +#if ESNYA_SFADDONS_EDITOR_TOOLS && UNITY_EDITOR #endif namespace EsnyaSFAddons.SFEXT @@ -191,7 +190,7 @@ public void _PlayerExit() PlayerEnterCount--; } -#if !COMPILER_UDONSHARP && UNITY_EDITOR +#if ESNYA_SFADDONS_EDITOR_TOOLS && UNITY_EDITOR private void OnDrawGizmosSelected() { if (PlayerEnterCount > 0) diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset new file mode 100644 index 00000000..1790c6c4 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset @@ -0,0 +1,2441 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: SFEXT_ConstantSpeedPropeller + m_EditorClassIdentifier: + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: a3ed637beacccd546a5ae5bdcb5c79ec, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 3 + hasInteractEvent: 0 + scriptID: -6170090411502464225 + serializationData: + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 45 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: diameter + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: diameter + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Single, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 5|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: kt0 + - Name: $v + Entry: 7 + Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: kt0 + - Name: k__BackingField + Entry: 7 + Data: 7|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Vector2, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 8|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: kt1 + - Name: $v + Entry: 7 + Data: 9|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: kt1 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: kq0 + - Name: $v + Entry: 7 + Data: 11|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: kq0 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 12|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: kq1 + - Name: $v + Entry: 7 + Data: 13|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: kq1 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 14|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: momentOfInertia + - Name: $v + Entry: 7 + Data: 15|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: momentOfInertia + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 16|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 17|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: gearRatio + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: gearRatio + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 20|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: governorResponse + - Name: $v + Entry: 7 + Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: governorResponse + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 22|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 23|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: engineMinRpm + - Name: $v + Entry: 7 + Data: 24|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: engineMinRpm + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 25|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 26|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: engineStarterRpm + - Name: $v + Entry: 7 + Data: 27|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: engineStarterRpm + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 29|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: enginePower + - Name: $v + Entry: 7 + Data: 30|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: enginePower + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: engineIdlePower + - Name: $v + Entry: 7 + Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: engineIdlePower + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 34|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: enginePowerCurve + - Name: $v + Entry: 7 + Data: 35|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: enginePowerCurve + - Name: k__BackingField + Entry: 7 + Data: 36|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.AnimationCurve, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 36 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 37|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: efficiency + - Name: $v + Entry: 7 + Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: efficiency + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: referenceRpm + - Name: $v + Entry: 7 + Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: referenceRpm + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 42|UnityEngine.MinAttribute, UnityEngine.CoreModule + - Name: min + Entry: 4 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: propellerVisual + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: propellerVisual + - Name: k__BackingField + Entry: 7 + Data: 44|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Transform, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 44 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 45|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: propellerVisualAxis + - Name: $v + Entry: 7 + Data: 46|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: propellerVisualAxis + - Name: k__BackingField + Entry: 7 + Data: 47|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Vector3, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 47 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 48|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: targetRpm + - Name: $v + Entry: 7 + Data: 49|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: targetRpm + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 50|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: enableElectricPropellerRpmControl + - Name: $v + Entry: 7 + Data: 51|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: enableElectricPropellerRpmControl + - Name: k__BackingField + Entry: 7 + Data: 52|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 53|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: targetRpmCurve + - Name: $v + Entry: 7 + Data: 54|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: targetRpmCurve + - Name: k__BackingField + Entry: 9 + Data: 36 + - Name: k__BackingField + Entry: 9 + Data: 36 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 55|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: animatorPropellerRpmParameterName + - Name: $v + Entry: 7 + Data: 56|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: animatorPropellerRpmParameterName + - Name: k__BackingField + Entry: 7 + Data: 57|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.String, mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 57 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 58|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 59|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: Animation + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: animatorMaxPropellerRpm + - Name: $v + Entry: 7 + Data: 60|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: animatorMaxPropellerRpm + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 61|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: failures + - Name: $v + Entry: 7 + Data: 62|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: failures + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 63|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 64|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: Failures + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: mtbf + - Name: $v + Entry: 7 + Data: 65|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: mtbf + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 66|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: rpmLimits + - Name: $v + Entry: 7 + Data: 67|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: rpmLimits + - Name: k__BackingField + Entry: 7 + Data: 68|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Single[], mscorlib + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 69|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: rpmLimitDurations + - Name: $v + Entry: 7 + Data: 70|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: rpmLimitDurations + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 71|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: loadLimits + - Name: $v + Entry: 7 + Data: 72|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: loadLimits + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 73|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: loadLimitDurations + - Name: $v + Entry: 7 + Data: 74|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: loadLimitDurations + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 9 + Data: 68 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 75|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: brokenEffects + - Name: $v + Entry: 7 + Data: 76|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: brokenEffects + - Name: k__BackingField + Entry: 7 + Data: 77|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.GameObject, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 77 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 78|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: _broken + - Name: $v + Entry: 7 + Data: 79|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: _broken + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 3 + Data: 1 + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 80|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 81|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 82|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: n + - Name: $v + Entry: 7 + Data: 83|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: n + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 3 + Data: 3 + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 84|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 85|System.NonSerializedAttribute, mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 86|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: brakeTorque + - Name: $v + Entry: 7 + Data: 87|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: brakeTorque + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 88|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 89|System.NonSerializedAttribute, mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: load + - Name: $v + Entry: 7 + Data: 90|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: load + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 3 + Data: 3 + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 91|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: 92|System.NonSerializedAttribute, mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: 93|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: bladePitch + - Name: $v + Entry: 7 + Data: 94|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: bladePitch + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 95|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: j + - Name: $v + Entry: 7 + Data: 96|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: j + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 97|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: thrust + - Name: $v + Entry: 7 + Data: 98|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: thrust + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 9 + Data: 3 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 99|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: EntityControl + - Name: $v + Entry: 7 + Data: 100|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: EntityControl + - Name: k__BackingField + Entry: 7 + Data: 101|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: SaccFlightAndVehicles.SaccEntity, SaccFlightAndVehicles.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 102|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 103|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 104|System.NonSerializedAttribute, mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: vehicleAnimator + - Name: $v + Entry: 7 + Data: 105|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: vehicleAnimator + - Name: k__BackingField + Entry: 7 + Data: 106|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Animator, UnityEngine.AnimationModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 106 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 107|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: vehicleRigidbody + - Name: $v + Entry: 7 + Data: 108|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: vehicleRigidbody + - Name: k__BackingField + Entry: 7 + Data: 109|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Rigidbody, UnityEngine.PhysicsModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 109 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 110|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: airVehicle + - Name: $v + Entry: 7 + Data: 111|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: airVehicle + - Name: k__BackingField + Entry: 7 + Data: 112|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: SaccFlightAndVehicles.SaccAirVehicle, SaccFlightAndVehicles.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 102 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 113|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: starter + - Name: $v + Entry: 7 + Data: 114|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: starter + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 115|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: hasPilot + - Name: $v + Entry: 7 + Data: 116|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: hasPilot + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 117|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: isPiloting + - Name: $v + Entry: 7 + Data: 118|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: isPiloting + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 119|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: isOwner + - Name: $v + Entry: 7 + Data: 120|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: isOwner + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 121|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: engineOn + - Name: $v + Entry: 7 + Data: 122|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: engineOn + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 9 + Data: 52 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: false + - Name: _fieldAttributes + Entry: 7 + Data: 123|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], + mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset.meta new file mode 100644 index 00000000..76c6ca33 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8eeb0e4f69ae45b4a8a1433006e13ca7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs new file mode 100644 index 00000000..22ee5722 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs @@ -0,0 +1,456 @@ +using System; +using JetBrains.Annotations; +using UnityEngine; +using UdonSharp; +using SaccFlightAndVehicles; +using VRC.SDKBase; +using VRC.Udon.Common.Interfaces; +using VRC.Udon; + +namespace EsnyaSFAddons +{ + [UdonBehaviourSyncMode(BehaviourSyncMode.Continuous)] + [DefaultExecutionOrder(10)] // After SaccAirVehicle + public class SFEXT_ConstantSpeedPropeller : UdonSharpBehaviour + { + /// + /// Diameter of the propeller in meters. + /// + [Min(0)] public float diameter = 1.9f; + + // /// + // /// Number of blades. + // /// + // [Min(1)] public int blades = 2; + + /// + /// Interception points of the kt curve at minimum blade pitch. + /// + public Vector2 kt0 = new Vector2(1.8f, 0.13f); + + /// + /// Interception points of the kt curve at maximum blade pitch. + /// + public Vector2 kt1 = new Vector2(2.6f, 0.24f); + + /// + /// Interception points of the kq curve at minimum blade pitch. + /// + public Vector2 kq0 = new Vector2(2.0f, 0.02f); + + /// + /// Interception points of the kq curve at maximum blade pitch. + /// + public Vector2 kq1 = new Vector2(2.8f, 0.04f); + + /// + /// Moment of inertia of power train and propeller in kgm^2. + /// + [Min(0)] public float momentOfInertia = 15f; + + /// + /// Gear ratio between propeller and power train. + /// + [Min(0)] public float gearRatio = 1.0f; + + /// + /// Response of governor. + /// + [Min(0)] public float governorResponse = 0.01f; + + /// + /// Minimum rpm of the power train. If revolution is lower than this value, the propeller will not rotate. + /// + [Min(0)] public float engineMinRpm = 500f; + + /// + /// Starter rpm of the power train. + /// + [Min(0)] public float engineStarterRpm = 1000f; + + /// + /// Maximum engine power in [W]. + /// + public float enginePower = 123.5f * 1000; + + /// + /// Idling engine power in [W]. + /// + [Min(0)] public float engineIdlePower = 10f * 1000; + + /// + /// Normalized engine power curve. + /// + public AnimationCurve enginePowerCurve; + + /// + /// Total efficiency of the power train and propeller. + /// + public float efficiency = 0.8f; + + /// + /// Reference rpm to normalize egine output. + /// + [Min(0)] public float referenceRpm = 2300f; + + /// + /// Visual transform of the propeller. + /// + public Transform propellerVisual; + + /// + /// Visual rotation axis of the propeller. Use backward to counter clockwise rotation. + /// + public Vector3 propellerVisualAxis = Vector3.forward; + + /// + /// Input for target propeller RPM. + /// + public float targetRpm = 1800; + + /// + /// Enable or disable electric propeller RPM control. + /// + public bool enableElectricPropellerRpmControl = true; + + /// + /// Propeller RPM target vs throttle input curve. + /// + public AnimationCurve targetRpmCurve; + + + /// + /// Animator parameter name for propeller RPM. + /// + [Header("Animation")] + public string animatorPropellerRpmParameterName = "propellerrpm"; + + /// + /// Max propeller RPM to normalize animator parameter. + /// + public float animatorMaxPropellerRpm = 3000; + + /// + /// Enable or disable failures. + /// + [Header("Failures")] + public bool failures = true; + + /// + /// Mean time between failures in hours. + /// + public float mtbf = 1000; + + /// + /// RPM limitations. + /// + public float[] rpmLimits = new float[] { 2300, 2500 }; + + /// + /// Limit duration in seconds. + /// + public float[] rpmLimitDurations = new float[] { 5 * 60 , 20 }; + + /// + /// Load factor limitations. + /// + public float[] loadLimits = new float[] { 1.0f }; + + /// + /// Limit duration in seconds. + /// + public float[] loadLimitDurations = new float[] { 5 * 60 }; + + /// + /// Effects to enabled when the propeller is broken. Such as smoke or fire, sound, etc. + /// + public GameObject brokenEffects; + + [Header("Hazard")] + /// + /// Enable hazard area. + /// + public bool hazardEnabled = true; + + /// + /// Hazard range in min RPM in meters. + /// + public float minHazardRange = 1.5f; + + /// + /// Hazard range in max RPM in meters. + /// + public float maxHazardRange = 3.0f; + + /// + /// Delay in seconds to kill player. + /// + public float hazardKillDelay = 1.0f; + + /// + /// Position to teleport killed player. + /// + public Vector3 killedPlayerPosition = new Vector3(0.0f, -10000.0f, 0.0f); + + [UdonSynced][FieldChangeCallback(nameof(Broken))] private bool _broken; + public bool Broken + { + get => _broken; + set + { + if (_broken != value) + { + if (brokenEffects) brokenEffects.SetActive(value); + + if (value && Networking.IsOwner(gameObject) && airVehicle) + { + airVehicle.EngineOn = false; + } + } + + + _broken = value; + } + } + +#if ESFA_DEBUG + [Header("For Debug")] + [UdonSynced(UdonSyncMode.Smooth)] public float n = 0; + public float brakeTorque; + [UdonSynced(UdonSyncMode.Smooth)] public float load; + public float bladePitch = 0; + public float j; + public float thrust; +#else + [NonSerialized][UdonSynced(UdonSyncMode.Smooth)] public float n = 0; + [NonSerialized]public float brakeTorque; + [NonSerialized][UdonSynced(UdonSyncMode.Smooth)] public float load; + private float bladePitch = 0; + private float j; + private float thrust; +#endif + + [NonSerialized] public SaccEntity EntityControl; + private Animator vehicleAnimator; + private Rigidbody vehicleRigidbody; + private SaccAirVehicle airVehicle; + private bool starter = false; + + + public void SFEXT_L_EntityStart() + { + Debug.Log(EntityControl, this); + vehicleRigidbody = EntityControl.GetComponent(); + airVehicle = (SaccAirVehicle)EntityControl.GetExtention(GetUdonTypeName()); + airVehicle.ThrottleStrength = 0; + vehicleAnimator = airVehicle.VehicleAnimator; + } + + private bool hasPilot; + public void SFEXT_G_PilotEnter() + { + hasPilot = true; + gameObject.SetActive(true); + } + public void SFEXT_G_PilotExit() => hasPilot = false; + + private bool isPiloting = false, isOwner = false; + public void SFEXT_O_PilotEnter() => isPiloting = isOwner = true; + public void SFEXT_O_PilotExit() => isPiloting = false; + public override void OnOwnershipTransferred(VRCPlayerApi player) => isOwner = Networking.IsOwner(gameObject); + + private bool engineOn = false; + public void SFEXT_G_EngineStartup() => starter = engineOn = true; + public void SFEXT_G_EngineStartupCancel() => starter = engineOn = false; + public void SFEXT_G_EngineOn() + { + starter = false; + engineOn = true; + } + public void SFEXT_G_EngineOff() => engineOn = false; + + public void SFEXT_G_ReAppear() => SFEXT_O_RespawnButton(); + public void SFEXT_G_RespawnButton() => SFEXT_O_RespawnButton(); + public void SFEXT_O_RespawnButton() => ReAppear(); + public void ReAppear() + { + Broken = false; + n = thrust = load = brakeTorque = bladePitch = 0; + } + + private void OnEnable() + { + thrust = 0; + } + + public void Deactivate() + { + gameObject.SetActive(false); + } + + private void FixedUpdate() + { + if (!isOwner || Mathf.Approximately(thrust, 0)) return; + + vehicleRigidbody.AddForceAtPosition(transform.forward * thrust, transform.position, ForceMode.Force); + } + + private void Update() + { + if (isOwner) PilotUpdate(); + + if (vehicleAnimator) + { + vehicleAnimator.SetFloat(animatorPropellerRpmParameterName, Mathf.Clamp01(n * 60 / animatorMaxPropellerRpm)); + } + + if (propellerVisual) + { + propellerVisual.localRotation = Quaternion.AngleAxis(n * 360 * Time.deltaTime, propellerVisualAxis) * propellerVisual.localRotation; + } + } + + private void PilotUpdate() + { + if (starter) + { + n = engineStarterRpm / 60; + return; + } + + var airVel = airVehicle.AirVel; + var v = Vector3.Dot(airVel, transform.forward); + + var safeGearRatio = Mathf.Max(gearRatio, 0.0001f); + var powerTrainN = n / safeGearRatio; + var powerTrainRpm = powerTrainN * 60; + if (powerTrainRpm < engineMinRpm) + { + n = 0; + if (airVehicle && !starter) airVehicle.EngineOn = false; + if (!hasPilot && !engineOn && !Broken) SendCustomNetworkEvent(NetworkEventTarget.All, nameof(Deactivate)); + return; + } + + var deltaTime = Time.deltaTime; + var safeDiameter = Mathf.Max(diameter, 0.0001f); + var safeMomentOfInertia = Mathf.Max(momentOfInertia, 0.0001f); + var safeReferenceRpm = Mathf.Max(referenceRpm, 0.0001f); + var safePropellerN = Mathf.Max(n, 0.0001f); + + j = v / (safePropellerN * safeDiameter); + var rho = airVehicle.Atmosphere * 1.225f; + var c2 = rho * Mathf.Pow(safePropellerN, 2) * Mathf.Pow(safeDiameter, 4); + thrust = CalculateK(kt0, kt1, bladePitch, j) * c2; + brakeTorque = CalculateK(kq0, kq1, bladePitch, j) * c2 * safeDiameter; + + if (enableElectricPropellerRpmControl) + { + targetRpm = targetRpmCurve.Evaluate(airVehicle.ThrottleInput); + } + + bladePitch = Mathf.Clamp01(bladePitch - (targetRpm - powerTrainRpm * safeGearRatio) * deltaTime * governorResponse); + + var availableTorque = (engineOn && !Broken && powerTrainN > 0.0001f) + ? Mathf.Lerp(engineIdlePower, enginePower, airVehicle.ThrottleInput) * enginePowerCurve.Evaluate(powerTrainRpm) * safeGearRatio * efficiency / (Mathf.PI * 2 * powerTrainN) + : 0.0f; + n += (availableTorque - brakeTorque) * deltaTime / safeMomentOfInertia; + + load = brakeTorque * Mathf.PI * 2 * n * safeGearRatio / (enginePower * efficiency); + + airVehicle.EngineOutput = Mathf.Clamp01(n * 60 / safeReferenceRpm); + + if (failures && CheckForFailure(powerTrainRpm, load, deltaTime)) + { + Broken = true; + } + } + + private void PostLateUpdate() + { + var safeReferenceRpm = Mathf.Max(referenceRpm, 0.0001f); + if (hazardEnabled && PlayerStrike.CheckPlayerStrike(transform, EntityControl, n * 60 / safeReferenceRpm, minHazardRange, maxHazardRange, thrust)) + { + SendCustomNetworkEvent(NetworkEventTarget.Owner, nameof(PlayerStriked)); + SendCustomEventDelayedSeconds(nameof(_KillPlayer), hazardKillDelay); + } + } + + public void PlayerStriked() + { + Broken = true; + } + + public void _KillPlayer() + { + Networking.LocalPlayer.TeleportTo(killedPlayerPosition, Quaternion.identity); + } + + private float CalculateK(Vector2 intercepts0, Vector2 intercepts1, float p, float j) + { + var intercepts = Vector2.Lerp(intercepts0, intercepts1, p); + return (intercepts.y / -intercepts.x) * j + intercepts.y; + } + + public float CalculateRpmFailureProbability(float currentRpm) + { + var mtbf_seconds = mtbf * 3600; + var basicProbability = 1 / mtbf_seconds ; + var rpmPairCount = Mathf.Min(rpmLimits.Length, rpmLimitDurations.Length); + + if (rpmPairCount == 0 || rpmLimits.Length == 0 || Mathf.Approximately(rpmLimits[0], 0f)) + { + return basicProbability; + } + + for (var i = rpmPairCount - 1; i >= 0; i--) + { + if (currentRpm > rpmLimits[i]) + { + return basicProbability * (mtbf_seconds / rpmLimitDurations[i]); + } + } + + return basicProbability * (currentRpm / rpmLimits[0]); + } + + public float CalculateLoadFactorFailureProbability(float currentLoadFactor) + { + var mtbf_seconds = mtbf * 3600; + float basicProbability = 1 / mtbf_seconds; + var loadPairCount = Mathf.Min(loadLimits.Length, loadLimitDurations.Length); + + if (loadPairCount == 0 || loadLimits.Length == 0 || Mathf.Approximately(loadLimits[0], 0f)) + { + return basicProbability; + } + + for (var i = loadPairCount - 1; i >= 0; i--) + { + if (currentLoadFactor > loadLimits[i]) + { + return basicProbability * (mtbf_seconds / loadLimitDurations[i]); + } + } + return basicProbability * (currentLoadFactor / loadLimits[0]); + } + + public bool CheckForFailure(float currentRpm, float currentLoadFactor, float deltaTime) + { + var rpmProbability = CalculateRpmFailureProbability(currentRpm); + var loadFactorProbability = CalculateLoadFactorFailureProbability(currentLoadFactor); + + var combinedProbability = (rpmProbability + loadFactorProbability) / 2; + + return UnityEngine.Random.value < combinedProbability * deltaTime; + } + +#if UNITY_EDITOR && !UDONSHARP_COMPILER + private void Reset() + { + enginePowerCurve = AnimationCurve.Linear(0, 1, 2500, 1); + targetRpmCurve = AnimationCurve.Linear(0, 1800, 1, 2300); + } +#endif + } +} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs.meta new file mode 100644 index 00000000..9861f404 --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_ConstantSpeedPropeller.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3ed637beacccd546a5ae5bdcb5c79ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_InstrumentsAnimationDriver.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_InstrumentsAnimationDriver.cs index 1e608f91..8769003f 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_InstrumentsAnimationDriver.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_InstrumentsAnimationDriver.cs @@ -2,7 +2,6 @@ using JetBrains.Annotations; using SaccFlightAndVehicles; using UdonSharp; -using UdonToolkit; using UnityEngine; using VRC.Udon; @@ -57,19 +56,19 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Is electirc driven. /// - [HideIf("@!hasADI")] public bool adiElectric = false; + public bool adiElectric = false; /// /// Max pitch angle in degrees. /// - [HideIf("@!hasADI")] public float maxPitch = 30; + public float maxPitch = 30; /// /// Name of parameter in animator. /// /// -maxPitch to maxPitch will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasADI")] public string pithFloatParameter = "pitch"; + [NotNull] public string pithFloatParameter = "pitch"; /// @@ -77,7 +76,7 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// -180 to 180 degrees will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasADI")] public string rollFloatParameter = "roll"; + [NotNull] public string rollFloatParameter = "roll"; [Header("HI")] /// @@ -88,14 +87,14 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Is electirc driven. /// - [NotNull][HideIf("@!hasHI")] public bool hiElectric = false; + public bool hiElectric = false; /// /// Name of parameter in animator. /// /// 0 to 360 degrees will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasHI")] public string headingFloatParameter = "heading"; + [NotNull] public string headingFloatParameter = "heading"; [Header("ASI")] /// @@ -106,19 +105,19 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Max indicated airspeed in knots. /// - [HideIf("@!hasASI")] public float maxAirspeed = 180.0f; + public float maxAirspeed = 180.0f; /// /// Response of airspeed indicator. /// - [HideIf("@!hasASI")] public float asiResponse = 0.25f; + public float asiResponse = 0.25f; /// /// Name of parameter in animator. /// /// 0 to maxAirspeed will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasASI")] public string airspeedFloatParameter = "airspeed"; + [NotNull] public string airspeedFloatParameter = "airspeed"; [Header("Altimeter")] /// @@ -128,19 +127,19 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Max indicated altitude in feet. /// - [HideIf("@!hasAltimeter")] public float maxAltitude = 20000; + public float maxAltitude = 20000; /// /// Response of altimeter. /// - [HideIf("@!hasAltimeter")] public float altimeterResponse = 0.25f; + public float altimeterResponse = 0.25f; /// /// Name of parameter in animator. /// /// 0 to maxAltitude will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasAltimeter")] public string altitudeFloatParameter = "altitude"; + [NotNull] public string altitudeFloatParameter = "altitude"; [Header("TC")] /// @@ -151,24 +150,24 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Is turn coordinator electric. /// - [HideIf("@!hasTC")] public bool tcElectric = true; + public bool tcElectric = true; /// /// Max turn rate. /// - [HideIf("@!hasTC")] public float maxTurn = 360.0f / 60.0f * 2.0f; + public float maxTurn = 360.0f / 60.0f * 2.0f; /// /// Response of turn coordinator. /// - [HideIf("@!hasTC")] public float turnResponse = 1.0f; + public float turnResponse = 1.0f; /// /// Name of parameter in animator. /// /// -maxTurn to maxTurn will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasTC")] public string turnRateFloatParameter = "turnrate"; + [NotNull] public string turnRateFloatParameter = "turnrate"; [Header("SI")] /// @@ -179,19 +178,19 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Max slip angle in degrees. /// - [HideIf("@!hasSI")] public float maxSlip = 12.0f; + public float maxSlip = 12.0f; /// /// Response of slip indicator. /// - [HideIf("@!hasSI")] public float slipResponse = 0.2f; + public float slipResponse = 0.2f; /// /// Name of parameter in animator. /// /// -maxSlip to maxSlip will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasSI")] public string slipAngleFloatParameter = "slipangle"; + [NotNull] public string slipAngleFloatParameter = "slipangle"; [Header("VSI")] /// @@ -202,19 +201,19 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Max indicated vertical speed in feet per minute. /// - [HideIf("@!hasVSI")] public float maxVerticalSpeed = 2000; + public float maxVerticalSpeed = 2000; /// /// Response of vertical speed indicator. /// - [HideIf("@!hasVSI")] public float vsiResponse = 0.25f; + public float vsiResponse = 0.25f; /// /// Name of parameter in animator. /// /// -maxVerticalSpeed to maxVerticalSpeed will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasVSI")] public string verticalSpeedFloatParameter = "vs"; + [NotNull] public string verticalSpeedFloatParameter = "vs"; [Header("Magnetic Compass")] /// @@ -225,14 +224,14 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Response of magnetic compass /// - [HideIf("@hasMagneticCompass")] public float compassResponse = 0.5f; + public float compassResponse = 0.5f; /// /// Name of parameter in animator /// /// 0 to 360 degrees will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasMagneticCompass")] public string magneticCompassFloatParameter = "compass"; + [NotNull] public string magneticCompassFloatParameter = "compass"; [Header("Clock")] @@ -244,14 +243,14 @@ public class SFEXT_InstrumentsAnimationDriver : UdonSharpBehaviour /// /// Set true to show local time. /// - [HideIf("@!hasClock")] public bool localTime; + public bool localTime; /// /// Name of parameter for animator. /// /// 00:00:00 to 24:00:00 will be remapped to 0.0 to 1.0. /// - [NotNull][HideIf("@!hasClock")] public string clockTimeParameter = "clocktime"; + [NotNull] public string clockTimeParameter = "clocktime"; private SaccAirVehicle airVehicle; private Rigidbody vehicleRigidbody; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_KillPenalty.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_KillPenalty.cs index e75735c3..57ee1f77 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_KillPenalty.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/SFEXT/SFEXT_KillPenalty.cs @@ -29,7 +29,7 @@ public void SFEXT_G_Explode() if (!KillsBoard || !airVehicle || !EntityControl.LastAttacker || !EntityControl.LastAttacker.Using) return; var time = Time.time; - if (!(airVehicle.Occupied || (time - airVehicle.LastHitTime < 5 && ((time - EntityControl.PilotExitTime) < 5)))) return; + if (!(airVehicle.Occupied || (time - EntityControl.PilotExitTime) < 5)) return; KillsBoard.MyKills = (ushort)Mathf.Clamp(KillsBoard.MyKills - penalty, ushort.MinValue, ushort.MaxValue); if (applyToBestKills) { diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RVR_Controller.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RVR_Controller.cs index fa607bc2..6917b0a4 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RVR_Controller.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RVR_Controller.cs @@ -1,6 +1,5 @@  using UdonSharp; -using UdonToolkit; using UnityEngine; using VRC.SDK3.Components; using VRC.SDKBase; @@ -41,14 +40,14 @@ public class RVR_Controller : UdonSharpBehaviour /// /// Name of material parameter /// - [HideIf("@!controlSkybox")] public string parameterName; + public string parameterName; /// /// Curve of parameter value. /// /// At t = 0 with no fog, at t = 1 with maximum fog. /// - [HideIf("@!controlSkybox")] public AnimationCurve parameterCurve = AnimationCurve.Linear(0, 0, 1, 1); + public AnimationCurve parameterCurve = AnimationCurve.Linear(0, 0, 1, 1); private VRCPickup pickup; private Quaternion localRotation; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RandomWindChanger.cs b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RandomWindChanger.cs index 6b096c2a..a36e38d4 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RandomWindChanger.cs +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Scripts/Weather/RandomWindChanger.cs @@ -32,7 +32,11 @@ public override void Interact() public void _RandomWind() { - if (windChanger.SyncedWind) windChanger.SyncedWind = true; + var syncedWindValue = windChanger.GetProgramVariable("SyncedWind"); + if (syncedWindValue is bool syncedWind && syncedWind) + { + windChanger.SetProgramVariable("SyncedWind", true); + } var windStrength = randomWindCurve.Evaluate(Random.value) * randomWindStrength; var gustStrength = randomGustCurve.Evaluate(Random.value) * randomGustStrength; diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/DFUNC/DFUNC_EX_Slider.prefab b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/DFUNC/DFUNC_EX_Slider.prefab index ad175f1d..e6219ea3 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/DFUNC/DFUNC_EX_Slider.prefab +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/DFUNC/DFUNC_EX_Slider.prefab @@ -68,7 +68,7 @@ MonoBehaviour: targetAnimator: {fileID: 0} targetAnimatorParameterName: sendOnChange: 0 - onChange: SFEXT_G_SliderValueCange + onChange: SFEXT_G_SliderValueChange sendOnMin: 0 onMin: SFEXT_G_SliderMin sendOnMax: 0 diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/KeyboardControls.prefab b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/KeyboardControls.prefab index 43e787c1..a22be61b 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/KeyboardControls.prefab +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/KeyboardControls.prefab @@ -114,6 +114,6 @@ MonoBehaviour: Reliable: 0 _syncMethod: 1 programSource: {fileID: 11400000, guid: 6ea52ced4c4d75349b7c73d892119ce5, type: 2} - serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgIAAAAAAAAAAi8CAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAErAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIASABhAHMARABvAG4AZQBTAGMAZQBuAGUAVQBwAGcAcgBhAGQAZQBfAF8AXwAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAEHBQIvAwAAAAFJAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgADAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEfAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIAVgBlAHIAcwBpAG8AbgBfAF8AXwAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAgAAAAcFBwUHBQ== + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgIAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUCLwMAAAABSwAAAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAC4AVQBkAG8AbgBWAGEAcgBpAGEAYgBsAGUAYAAxAFsAWwBTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAMAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAASsAAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBIAGEAcwBEAG8AbgBlAFMAYwBlAG4AZQBVAHAAZwByAGEAZABlAF8AXwBfACcBBAAAAHQAeQBwAGUAARgAAABTAHkAcwB0AGUAbQAuAEIAbwBvAGwAZQBhAG4ALAAgAG0AcwBjAG8AcgBsAGkAYgArAQUAAABWAGEAbAB1AGUAAQcFBwUHBQ== publicVariablesUnityEngineObjects: [] publicVariablesSerializationDataFormat: 0 diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/StickDisplay.prefab b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/StickDisplay.prefab index 4cab1a78..911f1fb5 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/StickDisplay.prefab +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/Others/StickDisplay.prefab @@ -170,7 +170,7 @@ GameObject: - component: {fileID: 7534418857797710367} m_Layer: 0 m_Name: StickDisplay - m_TagString: Untagged + m_TagString: MFD m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab new file mode 100644 index 00000000..b82b69bd --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab @@ -0,0 +1,427 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1720384979184097374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 727086140390134186} + - component: {fileID: 3954401503801929355} + - component: {fileID: 8651054561437687221} + m_Layer: 17 + m_Name: ConstantSpeedPropeller + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &727086140390134186 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720384979184097374} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7430778234063752112} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3954401503801929355 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720384979184097374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a3ed637beacccd546a5ae5bdcb5c79ec, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 8651054561437687221} + diameter: 1.9 + kt0: {x: 1.8, y: 0.075} + kt1: {x: 2.6, y: 0.15} + kq0: {x: 2, y: 0.005} + kq1: {x: 2.8, y: 0.015} + momentOfInertia: 15 + gearRatio: 1 + governorResponse: 0.01 + engineMinRpm: 500 + engineStarterRpm: 1000 + enginePower: 123500 + engineIdlePower: 1000 + enginePowerCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 2500 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + efficiency: 0.8 + referenceRpm: 2300 + propellerVisual: {fileID: 0} + propellerVisualAxis: {x: 0, y: 1, z: 0} + targetRpm: 1800 + enableElectricPropellerRpmControl: 1 + targetRpmCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2150 + inSlope: -1750 + outSlope: -1750 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2 + value: 1800 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.92 + value: 2100 + inSlope: 1458.3336 + outSlope: 1458.3336 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 2300 + inSlope: 2500.0005 + outSlope: 2500.0005 + tangentMode: 34 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + animatorPropellerRpmParameterName: propellerrpm + animatorMaxPropellerRpm: 3000 + failures: 1 + mtbf: 1000 + rpmLimits: + - 2300 + - 2500 + rpmLimitDurations: + - 300 + - 20 + loadLimits: + - 1 + loadLimitDurations: + - 300 + brokenEffects: {fileID: 7477210090971647497} +--- !u!114 &8651054561437687221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720384979184097374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 2 + programSource: {fileID: 11400000, guid: 8eeb0e4f69ae45b4a8a1433006e13ca7, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 +--- !u!1 &5945886576770916489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6906790741030803285} + - component: {fileID: 2570838062960917132} + m_Layer: 17 + m_Name: AudioSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6906790741030803285 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5945886576770916489} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7430778234063752112} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &2570838062960917132 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5945886576770916489} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: a778a83e783a3d040990aa85ff3141b7, type: 3} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 0 + MinDistance: 1 + MaxDistance: 1000 + Pan2D: 0 + rolloffMode: 2 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -6.1029396 + outSlope: -6.1029396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.14748996 + - serializedVersion: 3 + time: 0.18304119 + value: 0.37816268 + inSlope: -1.5239788 + outSlope: -1.5239788 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.105121635 + outSlope: -0.105121635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.17248464 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &7477210090971647497 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7430778234063752112} + m_Layer: 17 + m_Name: BrokenEffects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7430778234063752112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7477210090971647497} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6906790741030803285} + - {fileID: 817809366301515717} + m_Father: {fileID: 727086140390134186} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &101944735245291307 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 7430778234063752112} + m_Modifications: + - target: {fileID: 735036148080431329, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_Name + value: BurstSmoke + objectReference: {fileID: 0} + - target: {fileID: 735036148080431340, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: playOnAwake + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalPosition.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.75 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 318659200b6992546ac683f4ca349572, type: 3} +--- !u!4 &817809366301515717 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 735036148080431342, guid: 318659200b6992546ac683f4ca349572, + type: 3} + m_PrefabInstance: {fileID: 101944735245291307} + m_PrefabAsset: {fileID: 0} diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab.meta b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab.meta new file mode 100644 index 00000000..c5ffcfdd --- /dev/null +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SFEXT/ConstantSpeedPropeller.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8ca2cac77c95765448a425109e4e73c0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SaccAirVehicle.prefab b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SaccAirVehicle.prefab index a7fc28c7..b3f900de 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SaccAirVehicle.prefab +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/Templates/SaccAirVehicle.prefab @@ -468,6 +468,16 @@ PrefabInstance: propertyPath: SAVControl value: objectReference: {fileID: 8620436127341410616} + - target: {fileID: 3234550905162333664, guid: 6df820a374913e44f9997a6a2d2973bc, + type: 3} + propertyPath: serializedPublicVariablesBytesString + value: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgIAAAAAAAAAAi8CAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgACAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAErAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIASABhAHMARABvAG4AZQBTAGMAZQBuAGUAVQBwAGcAcgBhAGQAZQBfAF8AXwAnAQQAAAB0AHkAcABlAAEYAAAAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAKwEFAAAAVgBhAGwAdQBlAAEHBQIvAwAAAAFJAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgADAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEfAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIAVgBlAHIAcwBpAG8AbgBfAF8AXwAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAgAAAAcFBwUHBQ== + objectReference: {fileID: 0} + - target: {fileID: 3234550905162333664, guid: 6df820a374913e44f9997a6a2d2973bc, + type: 3} + propertyPath: publicVariablesUnityEngineObjects.Array.size + value: 0 + objectReference: {fileID: 0} - target: {fileID: 5409384349306092800, guid: 6df820a374913e44f9997a6a2d2973bc, type: 3} propertyPath: m_RootOrder diff --git a/Packages/com.nekometer.esnya.esnya-sf-addons/package.json b/Packages/com.nekometer.esnya.esnya-sf-addons/package.json index ae3abb7e..3279586f 100644 --- a/Packages/com.nekometer.esnya.esnya-sf-addons/package.json +++ b/Packages/com.nekometer.esnya.esnya-sf-addons/package.json @@ -10,15 +10,16 @@ }, "type": "library", "dependencies": { - "com.nekometer.esnya.inari-udon": "9.1.0", - "com.unity.textmeshpro": "2.1.6", - "sh.orels.udontoolkit": "1.1.2" + "com.nekometer.esnya.inari-udon": "https://github.com/esnya/InariUdon.git?path=/Packages/com.nekometer.esnya.inari-udon#alpha", + "io.github.sacchan-vrc.sacc-flight-and-vehicles": "https://github.com/Sacchan-VRC/SaccFlightAndVehicles.git#master" }, "legacyFolders": { "Assets\\EsnyaSFAddons": "" }, "unity": "2022.3", "vpmDependencies": { - "com.vrchat.worlds": "3.7.0" + "com.vrchat.worlds": "3.10.2", + "com.nekometer.esnya.inari-udon": ">=10.0.0-alpha", + "io.github.sacchan-vrc.sacc-flight-and-vehicles": ">=1.8.1" } -} \ No newline at end of file +} diff --git a/README.md b/README.md index 536b1606..e5aaef1c 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,8 @@ Addons and utilities for [SaccFlightAndVehicles](https://github.com/Sacchan-VRC/ ## Requirements - UdonSharp 1.x via VRChat Creator Companion -- SaccFlightAndVehicles 1.63 -- [UdonToolkit](https://github.com/orels1/UdonToolkit/) -- [InariUdon](https://github.com/esnya/InariUdon/) +- SaccFlightAndVehicles 1.8.1 +- [InariUdon](https://github.com/esnya/InariUdon/) 10.0.1+ ## Installation 1. Install all requirements. diff --git a/package-lock.json b/package-lock.json index 99794272..04ae0529 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "esnya-sf-addons", - "version": "7.0.1", + "version": "7.1.0-alpha.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "esnya-sf-addons", - "version": "7.0.1", + "version": "7.1.0-alpha.1", "license": "MIT", "devDependencies": { "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^8.1.0", - "@semantic-release/npm": "^13.1.4", + "@semantic-release/github": "^12.0.6", + "@semantic-release/npm": "^13.1.5", "foreach-cli": "^1.8.1", "semantic-release": "^25.0.3", "semantic-release-gitmoji": "^1.6.9" @@ -221,206 +221,161 @@ "node": ">=0.10.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 20" } }, "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 20" } }, "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 14" + "node": ">= 20" } }, "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 20" } }, "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "peerDependencies": { - "@octokit/core": ">=4" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-retry": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.1.6.tgz", - "integrity": "sha512-obkYzIgEC75r8+9Pnfiiqy3y/x1bc3QLE5B7qvv9wi9Kj0R5tGQFC6QMBg1154WQ9lAVypuQDGyp3hNpp15gQQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.1.0.tgz", + "integrity": "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": ">=7" } }, "node_modules/@octokit/plugin-throttling": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.2.3.tgz", - "integrity": "sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", + "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "peerDependencies": { - "@octokit/core": "^4.0.0" + "@octokit/core": "^7.0.0" } }, "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", + "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 14" + "node": ">= 20" } }, "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 20" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true, - "license": "MIT" - }, "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "@octokit/openapi-types": "^27.0.0" } }, "node_modules/@pnpm/network.ca-file": { @@ -510,41 +465,120 @@ } }, "node_modules/@semantic-release/github": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.1.0.tgz", - "integrity": "sha512-erR9E5rpdsz0dW1I7785JtndQuMWN/iDcemcptf67tBNOmBUN0b2YNOgcjYUnBpgRpZ5ozfBHrK7Bz+2ets/Dg==", + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.6.tgz", + "integrity": "sha512-aYYFkwHW3c6YtHwQF0t0+lAjlU+87NFOZuH2CvWFD0Ylivc7MwhZMiHOJ0FMpIgPpCVib/VUAcOwvrW0KnxQtA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-retry": "^4.1.3", - "@octokit/plugin-throttling": "^5.2.3", - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^11.0.0", - "globby": "^11.0.0", + "@octokit/core": "^7.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-retry": "^8.0.0", + "@octokit/plugin-throttling": "^11.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash": "^4.17.4", - "mime": "^3.0.0", - "p-filter": "^2.0.0", - "url-join": "^4.0.0" + "issue-parser": "^7.0.0", + "lodash-es": "^4.17.21", + "mime": "^4.0.0", + "p-filter": "^4.0.0", + "tinyglobby": "^0.2.14", + "undici": "^7.0.0", + "url-join": "^5.0.0" }, "engines": { - "node": ">=14.17" + "node": "^22.14.0 || >= 24.10.0" }, "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "semantic-release": ">=24.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/github/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/undici": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.7.tgz", + "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" } }, "node_modules/@semantic-release/npm": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.4.tgz", - "integrity": "sha512-z5Fn9ftK1QQgFxMSuOd3DtYbTl4hWI2trCEvZcEJMQJy1/OBR0WHcxqzfVun455FSkHML8KgvPxJEa9MtZIBsg==", + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.5.tgz", + "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", "dev": true, "license": "MIT", "dependencies": { @@ -556,7 +590,7 @@ "fs-extra": "^11.0.0", "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", + "normalize-url": "^9.0.0", "npm": "^11.6.2", "rc": "^1.2.8", "read-pkg": "^10.0.0", @@ -1030,15 +1064,6 @@ "dev": true, "license": "MIT" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1046,9 +1071,9 @@ "dev": true }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, "license": "Apache-2.0" }, @@ -1056,13 +1081,15 @@ "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1747,13 +1774,6 @@ "node": ">=4.0.0" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, - "license": "ISC" - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2060,31 +2080,6 @@ ], "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", @@ -2454,38 +2449,6 @@ "integrity": "sha512-TRYhqnD36Xs9GHuATVRmo7hzBb+6wXYC0zxBFvLs3nma7N1WQGWW2vPTQ0+3GsGcPwSp0XVGfe3Besn4a6ip5Q==", "dev": true }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -2627,15 +2590,6 @@ "node": ">=10.17.0" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -2770,15 +2724,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", @@ -2801,18 +2746,6 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2845,16 +2778,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -2908,10 +2831,11 @@ "dev": true }, "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -2920,7 +2844,7 @@ "lodash.uniqby": "^4.7.0" }, "engines": { - "node": ">=10.13" + "node": "^18.17 || >=20.6.1" } }, "node_modules/issue-regex": { @@ -2976,9 +2900,9 @@ "license": "MIT" }, "node_modules/json-with-bigint": { - "version": "3.5.7", - "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.7.tgz", - "integrity": "sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.8.tgz", + "integrity": "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==", "dev": true, "license": "MIT" }, @@ -3059,7 +2983,8 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -3071,19 +2996,22 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", @@ -3101,7 +3029,8 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "1.0.2", @@ -3324,22 +3253,14 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3347,15 +3268,19 @@ } }, "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", "bin": { - "mime": "cli.js" + "mime": "bin/cli.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16" } }, "node_modules/mimic-fn": { @@ -3428,27 +3353,6 @@ "lodash": "^4.17.21" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/node-status": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/node-status/-/node-status-0.1.7.tgz", @@ -3478,22 +3382,22 @@ } }, "node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.0.tgz", + "integrity": "sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.11.1.tgz", - "integrity": "sha512-asazCodkFdz1ReQzukyzS/DD77uGCIqUFeRG3gtaT8b9UR0ne1m9QOBuMgT72ij1rt7TRrOox4A1WzntMWIuEg==", + "version": "11.12.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.12.1.tgz", + "integrity": "sha512-zcoUuF1kezGSAo0CqtvoLXX3mkRqzuqYdL6Y5tdo8g69NVV3CkjQ6ZBhBgB4d7vGkPcV6TcvLi3GRKPDFX+xTA==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -3572,8 +3476,8 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.4.1", - "@npmcli/config": "^10.7.1", + "@npmcli/arborist": "^9.4.2", + "@npmcli/config": "^10.8.1", "@npmcli/fs": "^5.0.0", "@npmcli/map-workspaces": "^5.0.3", "@npmcli/metavuln-calculator": "^9.0.3", @@ -3581,10 +3485,10 @@ "@npmcli/promise-spawn": "^9.0.1", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.4", - "@sigstore/tuf": "^4.0.1", + "@sigstore/tuf": "^4.0.2", "abbrev": "^4.0.0", "archy": "~1.0.0", - "cacache": "^20.0.3", + "cacache": "^20.0.4", "chalk": "^5.6.2", "ci-info": "^4.4.0", "fastest-levenshtein": "^1.0.16", @@ -3597,16 +3501,16 @@ "is-cidr": "^6.0.3", "json-parse-even-better-errors": "^5.0.0", "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.4", - "libnpmexec": "^10.2.4", - "libnpmfund": "^7.0.18", + "libnpmdiff": "^8.1.5", + "libnpmexec": "^10.2.5", + "libnpmfund": "^7.0.19", "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.4", + "libnpmpack": "^9.1.5", "libnpmpublish": "^11.1.3", "libnpmsearch": "^9.0.1", "libnpmteam": "^8.0.2", "libnpmversion": "^8.0.3", - "make-fetch-happen": "^15.0.4", + "make-fetch-happen": "^15.0.5", "minimatch": "^10.2.4", "minipass": "^7.1.3", "minipass-pipeline": "^1.2.4", @@ -3658,26 +3562,14 @@ } }, "node_modules/npm/node_modules/@gar/promise-retry": { - "version": "1.0.2", + "version": "1.0.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "retry": "^0.13.1" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/@gar/promise-retry/node_modules/retry": { - "version": "0.13.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/npm/node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "dev": true, @@ -3713,7 +3605,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.4.1", + "version": "9.4.2", "dev": true, "inBundle": true, "license": "ISC", @@ -3761,7 +3653,7 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.7.1", + "version": "10.8.1", "dev": true, "inBundle": true, "license": "ISC", @@ -3955,7 +3847,7 @@ } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.1.0", + "version": "3.2.0", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -3973,24 +3865,24 @@ } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "4.1.0", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { + "@gar/promise-retry": "^1.0.2", "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", + "@sigstore/core": "^3.2.0", "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.3", - "proc-log": "^6.1.0", - "promise-retry": "^2.0.1" + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "4.0.1", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -4118,7 +4010,7 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "20.0.3", + "version": "20.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -4132,8 +4024,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", - "ssri": "^13.0.0", - "unique-filename": "^5.0.0" + "ssri": "^13.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -4249,12 +4140,6 @@ "node": ">=6" } }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.3", "dev": true, @@ -4378,15 +4263,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, "node_modules/npm/node_modules/ini": { "version": "6.0.0", "dev": true, @@ -4496,12 +4372,12 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.4", + "version": "8.1.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.4.1", + "@npmcli/arborist": "^9.4.2", "@npmcli/installed-package-contents": "^4.0.0", "binary-extensions": "^3.0.0", "diff": "^8.0.2", @@ -4515,13 +4391,13 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "10.2.4", + "version": "10.2.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", - "@npmcli/arborist": "^9.4.1", + "@npmcli/arborist": "^9.4.2", "@npmcli/package-json": "^7.0.0", "@npmcli/run-script": "^10.0.0", "ci-info": "^4.0.0", @@ -4538,12 +4414,12 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.18", + "version": "7.0.19", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.4.1" + "@npmcli/arborist": "^9.4.2" }, "engines": { "node": "^20.17.0 || >=22.9.0" @@ -4563,12 +4439,12 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.4", + "version": "9.1.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.4.1", + "@npmcli/arborist": "^9.4.2", "@npmcli/run-script": "^10.0.0", "npm-package-arg": "^13.0.0", "pacote": "^21.0.2" @@ -4638,7 +4514,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "11.2.6", + "version": "11.2.7", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", @@ -4647,13 +4523,14 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.4", + "version": "15.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", @@ -5116,19 +4993,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/npm/node_modules/promzard": { "version": "3.0.1", "dev": true, @@ -5170,15 +5034,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -5407,30 +5262,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/unique-filename": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", "dev": true, @@ -5644,15 +5475,19 @@ } }, "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, + "license": "MIT", "dependencies": { - "p-map": "^2.0.0" + "p-map": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-is-promise": { @@ -5666,12 +5501,16 @@ } }, "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-reduce": { @@ -5965,26 +5804,6 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -6118,39 +5937,6 @@ "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -6237,163 +6023,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/@octokit/auth-token": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", - "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/core": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", - "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/endpoint": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", - "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/graphql": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", - "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/openapi-types": { - "version": "27.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", - "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/semantic-release/node_modules/@octokit/plugin-paginate-rest": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", - "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/semantic-release/node_modules/@octokit/plugin-retry": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.1.0.tgz", - "integrity": "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=7" - } - }, - "node_modules/semantic-release/node_modules/@octokit/plugin-throttling": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", - "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": "^7.0.0" - } - }, - "node_modules/semantic-release/node_modules/@octokit/request": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", - "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", - "json-with-bigint": "^3.5.3", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/request-error": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", - "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/semantic-release/node_modules/@octokit/types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", - "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^27.0.0" - } - }, "node_modules/semantic-release/node_modules/@semantic-release/error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", @@ -6404,38 +6033,6 @@ "node": ">=18" } }, - "node_modules/semantic-release/node_modules/@semantic-release/github": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.6.tgz", - "integrity": "sha512-aYYFkwHW3c6YtHwQF0t0+lAjlU+87NFOZuH2CvWFD0Ylivc7MwhZMiHOJ0FMpIgPpCVib/VUAcOwvrW0KnxQtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^7.0.0", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/plugin-retry": "^8.0.0", - "@octokit/plugin-throttling": "^11.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^5.0.0", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^7.0.0", - "lodash-es": "^4.17.21", - "mime": "^4.0.0", - "p-filter": "^4.0.0", - "tinyglobby": "^0.2.14", - "undici": "^7.0.0", - "url-join": "^5.0.0" - }, - "engines": { - "node": "^22.14.0 || >= 24.10.0" - }, - "peerDependencies": { - "semantic-release": ">=24.1.0" - } - }, "node_modules/semantic-release/node_modules/aggregate-error": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", @@ -6453,13 +6050,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/before-after-hook": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", - "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/semantic-release/node_modules/clean-stack": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", @@ -6569,39 +6159,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/issue-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": "^18.17 || >=20.6.1" - } - }, - "node_modules/semantic-release/node_modules/mime": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", - "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa" - ], - "license": "MIT", - "bin": { - "mime": "bin/cli.js" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/semantic-release/node_modules/npm-run-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", @@ -6619,35 +6176,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", @@ -6699,16 +6227,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/undici": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.1.tgz", - "integrity": "sha512-5xoBibbmnjlcR3jdqtY2Lnx7WbrD/tHlT01TmvqZUFVc9Q1w4+j5hbnapTqbcXITMH1ovjq/W7BkqBilHiVAaA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, "node_modules/semantic-release/node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -6722,23 +6240,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "dev": true, - "license": "ISC" - }, - "node_modules/semantic-release/node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -6831,15 +6332,6 @@ "node": ">=8" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", @@ -7237,13 +6729,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, "node_modules/traverse": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", @@ -7342,9 +6827,9 @@ } }, "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, "license": "ISC" }, @@ -7358,10 +6843,14 @@ } }, "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -7387,24 +6876,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7608,9 +7079,7 @@ "extraneous": true, "license": "MIT", "dependencies": { - "com.nekometer.esnya.inari-udon": "9.1.0", - "com.unity.textmeshpro": "2.1.6", - "sh.orels.udontoolkit": "1.1.2" + "com.nekometer.esnya.inari-udon": "10.0.1" } }, "Packages/com.nekometer.esnya.esnya-sf-addons-ucs": { @@ -7619,9 +7088,8 @@ "license": "MIT", "dependencies": { "com.nekometer.esnya.esnya-sf-addons": "5.0.0", - "com.nekometer.esnya.inari-udon": "9.1.0", - "com.nekometer.esnya.udonchips-fork": "3.0.0", - "sh.orels.udontoolkit": "1.1.2" + "com.nekometer.esnya.inari-udon": "10.0.1", + "com.nekometer.esnya.udonchips-fork": "3.0.0" } } } diff --git a/package.json b/package.json index 4b038114..65e80dee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "esnya-sf-addons", - "version": "7.0.1", + "version": "7.1.0-alpha.1", "private": true, "license": "MIT", "scripts": { @@ -9,8 +9,8 @@ }, "devDependencies": { "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^8.1.0", - "@semantic-release/npm": "^13.1.4", + "@semantic-release/github": "^12.0.6", + "@semantic-release/npm": "^13.1.5", "foreach-cli": "^1.8.1", "semantic-release": "^25.0.3", "semantic-release-gitmoji": "^1.6.9" diff --git a/scripts/run-local-checks.sh b/scripts/run-local-checks.sh new file mode 100644 index 00000000..faad1943 --- /dev/null +++ b/scripts/run-local-checks.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +RUN_UNITY=0 + +while [ "$#" -gt 0 ]; do + case "$1" in + --unity) + RUN_UNITY=1 + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac + shift +done + +export DOTNET_ROOT="${DOTNET_ROOT:-$HOME/.dotnet}" +export PATH="$DOTNET_ROOT:$HOME/.dotnet/tools:$PATH" + +cd "$ROOT_DIR" + +bash scripts/run-static-checks.sh + +dotnet tool restore +dotnet tool run udonsharp-lint Packages + +if [ "$RUN_UNITY" -eq 1 ]; then + : "${UNITY_EXE:?Set UNITY_EXE to your Unity executable path before using --unity.}" + : "${UNITY_PROJECT_PATH:?Set UNITY_PROJECT_PATH to a VRChat Creator Companion host project that includes this repository packages before using --unity.}" + "$UNITY_EXE" \ + -batchmode \ + -quit \ + -nographics \ + -logFile - \ + -projectPath "$UNITY_PROJECT_PATH" +fi diff --git a/scripts/run-static-checks.sh b/scripts/run-static-checks.sh new file mode 100644 index 00000000..6736c220 --- /dev/null +++ b/scripts/run-static-checks.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT_DIR" + +git diff --check + +ruby -e 'if File.exist?(".releaserc.yml"); require "yaml"; YAML.load_file(".releaserc.yml"); end; Dir[".github/workflows/*.yml"].sort.each { |path| require "yaml"; YAML.load_file(path) }' + +node <<'NODE' +const fs = require("fs"); +const path = require("path"); + +const jsonFiles = ["package.json", "package-lock.json"]; +for (const file of jsonFiles) { + const target = path.join(process.cwd(), file); + if (fs.existsSync(target)) JSON.parse(fs.readFileSync(target, "utf8")); +} + +function walk(dir, predicate, out) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + walk(fullPath, predicate, out); + } else if (predicate(fullPath)) { + out.push(fullPath); + } + } +} + +const packageRoot = path.join(process.cwd(), "Packages"); +const packageJsons = []; +const asmdefs = []; +if (fs.existsSync(packageRoot)) { + walk(packageRoot, file => file.endsWith("package.json"), packageJsons); + walk(packageRoot, file => file.endsWith(".asmdef"), asmdefs); +} + +for (const file of [...packageJsons, ...asmdefs]) { + JSON.parse(fs.readFileSync(file, "utf8")); +} + +const editorGuardPattern = /#if\s+(?:!COMPILER_UDONSHARP\s*&&\s*)?UNITY_EDITOR|#if\s+UNITY_EDITOR/; +const forbiddenUsingPattern = /^(using UnityEditor;|using UdonSharpEditor;)$/m; +const errors = []; +const csFiles = []; +if (fs.existsSync(packageRoot)) { + walk(packageRoot, file => file.endsWith('.cs'), csFiles); +} +for (const fullPath of csFiles) { + const relativePath = path.relative(process.cwd(), fullPath).replaceAll(path.sep, "/"); + if (relativePath.includes('/Editor/')) continue; + const source = fs.readFileSync(fullPath, 'utf8'); + if (forbiddenUsingPattern.test(source) && !editorGuardPattern.test(source)) { + errors.push(`${relativePath}: runtime script references editor-only namespaces without an editor preprocessor guard.`); + } +} + +if (errors.length > 0) { + console.error(errors.join("\n")); + process.exit(1); +} +NODE