using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace ABI.CCK.Scripts { public static class CVRCommon { private const string BaseVersion = "3.10"; private const int BuildNumber = 132; private const string ReleaseType = "Release"; // Preview, Release ? public static string CCK_VERSION => $"{BaseVersion} {BuildNumber}"; public static string CCK_VERSION_NUMBER => BaseVersion; public static int CCK_BUILD_NUMBER => BuildNumber; public static string CCK_VERSION_FULL => $"{BaseVersion} {ReleaseType} (Build {BuildNumber})"; public static string CCK_PREVIEW_UNITYPACKAGE => $"CCK_{BaseVersion}_Preview_{BuildNumber}.unitypackage"; public const string LOCAL_PARAMETER_PREFIX = "#"; public const string LOCOMOTION_EMOTES_LAYER_NAME = "Locomotion/Emotes"; public const string HAND_LEFT_LAYER_NAME = "LeftHand"; public const string HAND_RIGHT_LAYER_NAME = "RightHand"; public const string TOGGLES_LAYER_NAME = "Toggles"; public const float AVATAR_BIT_LIMIT = 3200f; public const float SPAWNABLE_BIT_LIMIT = 40f; // None string (checked for by a bunch of systems) public const string NONE_OR_EMPTY = "-none-"; // Core parameters used by Avatars public static readonly string[] CoreParameters = { "MovementX", "MovementY", "Grounded", "Emote", "GestureLeft", "GestureRight", "Toggle", "Sitting", "Crouching", "CancelEmote", "Prone", "Flying", "Swimming" }; // Default pointer types used by the Pointers & Triggers system public static readonly string[] DefaultPointerTypes = { "mouth", "index", "grab" // generic is no type, but cant display *nothing* in the advdropdown }; // -1f to 6f, 0-1f is Fist weight public enum GestureIndex { HandOpen, Neutral, Fist, ThumbsUp, HandGun, Fingerpoint, Victory, RockNRoll } #if UNITY_EDITOR // This is all jank :> public static bool NonCoreFilter(AnimatorControllerParameter param) { return !CoreParameters.Contains(param.name); } public static bool NonNullFilter(AnimatorControllerParameter param) { return !string.IsNullOrWhiteSpace(param.name); } public static bool NonLocalFilter(AnimatorControllerParameter param) { return !param.name.StartsWith(LOCAL_PARAMETER_PREFIX); } private static IEnumerable FilterParameters(AnimatorControllerParameter[] parameters, Func selector, params Predicate[] filters) { return parameters.Where(p => { if (!NonNullFilter(p)) return false; foreach (var filter in filters) if (filter != null && !filter(p)) return false; return true; }) .Select(selector); } public static List GetParametersFromController( RuntimeAnimatorController controller, params Predicate[] filters) { UnityEditor.Animations.AnimatorController animatorController; if (controller is AnimatorOverrideController overrideController) animatorController = overrideController.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; else animatorController = controller as UnityEditor.Animations.AnimatorController; return animatorController == null ? new List() : FilterParameters(animatorController.parameters, p => p, filters).ToList(); } public static List GetParametersFromControllerAsString(RuntimeAnimatorController controller, params Predicate[] filters) { UnityEditor.Animations.AnimatorController animatorController; if (controller is AnimatorOverrideController overrideController) animatorController = overrideController.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; else animatorController = controller as UnityEditor.Animations.AnimatorController; return animatorController == null ? new List() : FilterParameters(animatorController.parameters, p => p.name, filters).ToList(); } public static List GetParametersFromAnimator(Animator animator, params Predicate[] filters) { if (animator == null || animator.runtimeAnimatorController == null) return new List(); UnityEditor.Animations.AnimatorController animatorController = animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; if (animator.runtimeAnimatorController is AnimatorOverrideController overrideController) animatorController = overrideController.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; return animatorController == null ? new List() : FilterParameters(animatorController.parameters, p => p, filters).ToList(); } public static List GetParametersFromAnimatorAsString(Animator animator, params Predicate[] filters) { if (animator == null || animator.runtimeAnimatorController == null) return new List(); UnityEditor.Animations.AnimatorController animatorController = animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; if (animator.runtimeAnimatorController is AnimatorOverrideController overrideController) animatorController = overrideController.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; return animatorController == null ? new List() : FilterParameters(animatorController.parameters, p => p.name, filters).ToList(); } #endif } }