Exemplo n.º 1
0
 // Token: 0x060056F0 RID: 22256 RVA: 0x001DED30 File Offset: 0x001DD130
 public override void PerformCalibration(Animator avatarAnim, bool includeHip, bool includeFeet)
 {
     if (avatarAnim == null)
     {
         return;
     }
     if (!avatarAnim.isHuman)
     {
         return;
     }
     if (includeHip)
     {
         this.hip = this.ActivateClosestTracker(avatarAnim, HumanBodyBones.Hips);
     }
     if (includeFeet)
     {
         this.leftFoot  = this.ActivateClosestTracker(avatarAnim, HumanBodyBones.LeftFoot);
         this.rightFoot = this.ActivateClosestTracker(avatarAnim, HumanBodyBones.RightFoot);
     }
     if (avatarAnim.transform.parent != null)
     {
         VRCAvatarManager component = avatarAnim.transform.parent.GetComponent <VRCAvatarManager>();
         if (component != null)
         {
             this.calibratedAvatarId = component.CurrentAvatar.id;
         }
     }
 }
Exemplo n.º 2
0
        public void NoClip()
        {
            VRC.Player       cplayer          = VRC.PlayerManager.GetCurrentPlayer();
            VRCPlayer        vrcPlayer        = cplayer.vrcPlayer;
            ApiAvatar        apiAvatar        = cplayer.GetApiAvatar();
            APIUser          apiuser          = cplayer.GetAPIUser();
            VRCAvatarManager vrcavatarManager = vrcPlayer.GetVRCAvatarManager();
            Collider         col;

            if (collisiont)
            {
                Console.WriteLine("collision off ");

                col = PlayerManager.GetCurrentPlayer().gameObject.GetComponent <Collider>();



                col.gameObject.SetActive(false);
            }
            else
            {
                Console.WriteLine("collision on ");

                col = PlayerManager.GetCurrentPlayer().gameObject.GetComponent <Collider>();



                col.gameObject.SetActive(true);
            }
        }
Exemplo n.º 3
0
    // Token: 0x06005AB9 RID: 23225 RVA: 0x001F9F8C File Offset: 0x001F838C
    public void ApplySeatedAnimation(VRC.Player player)
    {
        RuntimeAnimatorController runtimeAnimatorController = this.animatorController;
        VRCAvatarManager          componentInChildren       = player.GetComponentInChildren <VRCAvatarManager>();

        if (runtimeAnimatorController != null)
        {
            if (runtimeAnimatorController.name == "SitStation")
            {
                runtimeAnimatorController = componentInChildren.GetSitAnimController();
            }
            if (runtimeAnimatorController == null)
            {
                Debug.LogError("SitAnimController on " + player.name + " is not available.", this);
            }
            else
            {
                this.AttachAnimatorControllerTo(player, runtimeAnimatorController);
            }
        }
        else
        {
            runtimeAnimatorController = componentInChildren.GetSitAnimController();
            if (runtimeAnimatorController == null)
            {
                Debug.LogError("SitAnimController on " + player.name + " is not available.", this);
            }
            else
            {
                this.AttachAnimatorControllerTo(player, runtimeAnimatorController);
            }
        }
    }
Exemplo n.º 4
0
    // Token: 0x060058D9 RID: 22745 RVA: 0x001EC620 File Offset: 0x001EAA20
    private void Start()
    {
        VRC_EventHandler componentInParent = base.GetComponentInParent <VRC_EventHandler>();

        if (componentInParent != null)
        {
            for (int i = 0; i < componentInParent.Events.Count; i++)
            {
                if (componentInParent.Events[i].Name == "Use" && componentInParent.Events[i].ParameterObject == null)
                {
                    componentInParent.Events[i].ParameterObject = base.gameObject;
                }
            }
        }
        this.calibrator = base.GetComponentInParent <VRC_AvatarCalibrator>();
        this.switcher   = base.GetComponent <VRCAvatarManager>();
        VRCAvatarManager vrcavatarManager = this.switcher;

        vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarCreated));
        this.vrikCalib = base.GetComponent <VRCVrIkCalibrator>();
        if (!string.IsNullOrEmpty(this.calibrator.blueprintId))
        {
            ApiAvatar.Fetch(this.calibrator.blueprintId, delegate(ApiAvatar bp)
            {
                this.avatar = bp;
                this.switcher.SwitchAvatar(this.avatar, this.calibrator.scale, null);
                Tools.SetLayerRecursively(base.gameObject, base.transform.parent.gameObject.layer, -1);
            }, delegate(string message)
            {
                this.switcher.SwitchToErrorAvatar(1f);
            });
        }
    }
Exemplo n.º 5
0
 public static void OnAvatarInstantiated(VRCAvatarManager player, ApiAvatar avatar, GameObject gameObject)
 {
     foreach (EntryBase entry in playerEntries)
     {
         entry.OnAvatarInstantiated(player, avatar, gameObject);
     }
     localPlayerEntry?.OnAvatarInstantiated(player, avatar, gameObject);
 }
Exemplo n.º 6
0
 internal void Start()
 {
     this.player = base.GetComponent <VRC.Player>();
     if (this.player == null)
     {
         return;
     }
     VRCAvatarManager vrcavatarManager = this.player.vrcPlayer.HOIHOKEHFGC;
 }
Exemplo n.º 7
0
        internal static void OnAvatarInstantiated(VRCAvatarManager manager, ApiAvatar avatar, GameObject gameObject)
        {
            if (!manager.field_Private_VRCPlayer_0.prop_Player_0.prop_APIUser_0.IsSelf)
            {
                return;
            }

            OnAvatarInstantiated(avatar);
        }
Exemplo n.º 8
0
        private static void OnAvatarInstantiate(VRCAvatarManager manager, ApiAvatar apiAvatar, GameObject avatar)
        {
            if (manager == null || apiAvatar == null || avatar == null)
            {
                return;
            }

            OnAvatarInstantiated.DelegateSafeInvoke(manager, apiAvatar, avatar);
        }
Exemplo n.º 9
0
 public static bool HasCustomExpressions(this VRCAvatarManager manager)
 {
     return(manager &&
            manager.field_Private_AvatarPlayableController_0 != null &&
            manager.prop_VRCAvatarDescriptor_0 != null &&
            manager.prop_VRCAvatarDescriptor_0.customExpressions &&
            /* F**k you */
            manager.prop_VRCAvatarDescriptor_0.expressionParameters != null &&
            manager.prop_VRCAvatarDescriptor_0.expressionsMenu != null &&
            /* This isn't funny */
            manager.prop_VRCAvatarDescriptor_0.expressionsMenu.controls != null &&
            manager.prop_VRCAvatarDescriptor_0.expressionsMenu.controls.Count > 0);
 }
Exemplo n.º 10
0
        // Token: 0x060053AD RID: 21421 RVA: 0x001CDD00 File Offset: 0x001CC100
        private void ApplyHide(bool hidden)
        {
            VRCAvatarManager componentInChildren = base.GetComponentInChildren <VRCAvatarManager>();

            if (hidden)
            {
                componentInChildren.SwitchToInvisibleAvatar(1f);
            }
            else
            {
                componentInChildren.SwitchToLastAvatar(1f);
            }
        }
Exemplo n.º 11
0
        public static IEnumerable <AvatarParameter> GetAllAvatarParameters(this VRCAvatarManager manager)
        {
            var parameters = manager.field_Private_AvatarPlayableController_0?
                             .field_Private_Dictionary_2_Int32_AvatarParameter_0;

            if (parameters == null)
            {
                yield break;
            }

            foreach (var param in parameters)
            {
                yield return(param.value);
            }
        }
Exemplo n.º 12
0
 public void RefreshAvatar(VRC.Player sender)
 {
     if (this.switcher != null && VRC.Network.IsOwner(sender, this.switcher.gameObject))
     {
         if (this.switcher.profile != null)
         {
             this.switcher.profile.transform.position = base.transform.position + new Vector3(0f, 2f, 0f);
         }
         VRCAvatarManager vrcavatarManager = this.switcher;
         vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarCreated));
         Debug.Log("Refreshing avatar w/ scale: " + this.pedestal.scale);
         this.switcher.SwitchAvatar(this.avatar, this.pedestal.scale, null);
         Tools.SetLayerRecursively(base.gameObject, base.transform.parent.gameObject.layer, -1);
     }
 }
Exemplo n.º 13
0
    // Token: 0x06005A7F RID: 23167 RVA: 0x001F8380 File Offset: 0x001F6780
    private void Awake()
    {
        this.animationController = base.GetComponentInChildren <VRC_AnimationController>();
        this.animControlManager  = base.GetComponentInChildren <AnimatorControllerManager>();
        this.namePlateColor      = this.defaultNamePlateColor;
        this.namePlateEnable     = true;
        this.avatarSwitcher      = base.GetComponentInChildren <VRCAvatarManager>();
        VRCAvatarManager vrcavatarManager = this.avatarSwitcher;

        vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarIsReady));
        this.cameraMount = base.transform.Find("CameraMount");
        this.speakSrc    = this.cameraMount.GetComponentInChildren <AudioSource>();
        this.lipSync     = this.cameraMount.GetComponentInChildren <OVRLipSyncContext>();
        this.emojiGen    = this.cameraMount.GetComponentInChildren <EmojiGenerator>();
        base.gameObject.AddComponent <VRC_NpcApi>();
    }
Exemplo n.º 14
0
        public static void ApplyParameters(VRCAvatarManager manager)
        {
            var api_avatar = manager?.prop_ApiAvatar_0;

            if (api_avatar == null)
            {
                return;
            }

            /* Look up store */
            var key = api_avatar.id;

            if (!settings.ContainsKey(key))
            {
                return;
            }
            var config = settings[key];

            /* Check version */
            if (config.version != api_avatar.version)
            {
                MelonLogger.Msg($"Avatar {api_avatar.name} version missmatch ({config.version} != {api_avatar.version}). Removing");
                settings.Remove(key);
                return;
            }

            MelonLogger.Msg($"Applying avatar state to {api_avatar.name}");

            /* Apply parameters */
            if (config.parameters != null)
            {
                foreach (var parameter in manager.GetAvatarParameters())
                {
                    config.parameters[parameter.field_Private_String_0].Apply(parameter);
                }
            }

            /* Apply Meshes */
            if (config.renderers != null)
            {
                foreach (var element in Enumerable.Zip(config.renderers, manager.GetAvatarRenderers(), (state, renderer) => new { state, renderer }))
                {
                    element.renderer.gameObject.active = element.renderer.enabled = element.state;
                }
            }
        }
Exemplo n.º 15
0
        private static void OnAvatarChanged(VRCAvatarManager manager, GameObject gameObject)
        {
            int photonId = manager.field_Private_VRCPlayer_0.prop_PlayerNet_0.prop_PhotonView_0.field_Private_Int32_0;

            if (!players.ContainsKey(photonId))
            {
                return;
            }

            players[photonId].SetAvatar(gameObject);
            if (filteredPlayers.ContainsKey(photonId))
            {
                RefreshManager.RefreshPlayer(players[photonId], Player.prop_Player_0.transform.position);
            }
            else
            if (Config.IncludeHiddenAvatars.Value && players[photonId].isHidden)
            {
                players[photonId].SetInActive();
            }
        }
Exemplo n.º 16
0
    // Token: 0x060058E0 RID: 22752 RVA: 0x001EC8BC File Offset: 0x001EACBC
    private void Start()
    {
        VRC_EventHandler componentInParent = base.GetComponentInParent <VRC_EventHandler>();

        if (componentInParent != null)
        {
            for (int i = 0; i < componentInParent.Events.Count; i++)
            {
                if (componentInParent.Events[i].Name == "Use" && componentInParent.Events[i].ParameterObject == null)
                {
                    componentInParent.Events[i].ParameterObject = base.gameObject;
                }
            }
        }
        this.pedestal = base.GetComponentInParent <VRC_AvatarPedestal>();
        this.switcher = base.GetComponent <VRCAvatarManager>();
        VRCAvatarManager vrcavatarManager = this.switcher;

        vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarCreated));
        this.refreshId();
    }
Exemplo n.º 17
0
        public override void OnAvatarInstantiated(VRCAvatarManager manager, ApiAvatar avatar, GameObject gameObject)
        {
            apiUser = player.prop_APIUser_0;
            userId  = apiUser.id;
            if (manager.field_Private_VRCPlayer_0.prop_Player_0.prop_APIUser_0?.id != userId)
            {
                return;
            }

            perf       = manager.prop_AvatarPerformanceStats_0.field_Private_ArrayOf_PerformanceRating_0[(int)AvatarPerformanceCategory.Overall];
            perfString = "<color=#" + ColorUtility.ToHtmlStringRGB(VRCUiAvatarStatsPanel.Method_Private_Static_Color_AvatarPerformanceCategory_PerformanceRating_0(AvatarPerformanceCategory.Overall, perf)) + ">" + PlayerUtils.ParsePerformanceText(perf) + "</color>";

            if (player.prop_PlayerNet_0 != null)
            {
                UpdateEntry(player.prop_PlayerNet_0, this, true);
            }

            if (EntrySortManager.IsSortTypeInUse(EntrySortManager.SortType.AvatarPerf))
            {
                EntrySortManager.SortPlayer(playerLeftPairEntry);
            }
        }
Exemplo n.º 18
0
        private static void AwakePatch(VRCAvatarManager __instance)
        {
            VRCPlayer vrcPlayer = VRCPlayer.field_Internal_Static_VRCPlayer_0;

            if (vrcPlayer == null)
            {
                return;
            }
            VRCAvatarManager vrcAvatarManager = vrcPlayer.prop_VRCAvatarManager_0;

            if ((vrcAvatarManager == null) || (vrcAvatarManager != __instance))
            {
                return;
            }
            __instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_0 = (
                (__instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_0 == null)
                                ? new Action <GameObject, VRC.SDKBase.VRC_AvatarDescriptor, bool>(OnAvatarInstantiated)
                                : Il2CppSystem.Delegate.Combine(__instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_0, (VRCAvatarManager.MulticastDelegateNPublicSealedVoGaVRBoUnique) new Action <GameObject, VRC.SDKBase.VRC_AvatarDescriptor, bool>(OnAvatarInstantiated)).Cast <VRCAvatarManager.MulticastDelegateNPublicSealedVoGaVRBoUnique>());
            __instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_1 = (
                (__instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_1 == null)
                                ? new Action <GameObject, VRC.SDKBase.VRC_AvatarDescriptor, bool>(OnAvatarInstantiated)
                                : Il2CppSystem.Delegate.Combine(__instance.field_Internal_MulticastDelegateNPublicSealedVoGaVRBoUnique_1, (VRCAvatarManager.MulticastDelegateNPublicSealedVoGaVRBoUnique) new Action <GameObject, VRC.SDKBase.VRC_AvatarDescriptor, bool>(OnAvatarInstantiated)).Cast <VRCAvatarManager.MulticastDelegateNPublicSealedVoGaVRBoUnique>());
        }
Exemplo n.º 19
0
        public static void OnAvatarInstantiated(VRCAvatarManager player, ApiAvatar avatar, GameObject gameObject)
        {
            var avatarObj = player?.prop_GameObject_0;
            var cam       = avatarObj?.transform?.root?.Find("UserCameraIndicator")?.gameObject;
            var username  = avatarObj?.transform?.root?.GetComponentInChildren <VRC.Player>()?.field_Private_APIUser_0.displayName;

            if (avatarObj is null || cam is null || username is null)
            {
                MelonLogger.Msg($"avatarObj is null: {avatarObj is null}, cam is null: {cam is null}, username is null: {username is null}");
                return;
            }

            //MelonLogger.Msg($"Added Camera Indicator from: {username}");
            if (camList.ContainsKey(username))
            {
                camList[username] = cam;
            }
            else
            {
                camList.Add(username, cam);
            }

            ToggleCam(username);
        }
Exemplo n.º 20
0
        public static void StoreParameters(VRCAvatarManager manager)
        {
            var api_avatar = manager?.prop_ApiAvatar_0;

            if (api_avatar == null)
            {
                return;
            }

            MelonLogger.Msg($"Storing avatar state for {api_avatar.name}");

            var config = new AvatarSettings
            {
                name       = api_avatar.name,
                version    = api_avatar.version,
                parameters = manager.GetAvatarParameters()?.ToDictionary(o => o.field_Private_String_0, o => new Parameter(o)),
                renderers  = manager.GetAvatarRenderers().Select(o => o.gameObject.active && o.enabled).ToList(),
            };

            var key = api_avatar.id;

            if (settings.ContainsKey(key))
            {
                settings[key] = config;
            }
            else
            {
                settings.Add(key, config);
            }

            /* Prevent override of changed parameters */
            foreach (var parameter in manager.GetAvatarParameters())
            {
                parameter.Lock();
            }
        }
Exemplo n.º 21
0
 public AvatarManagerCookie(VRCAvatarManager avatarManager)
 {
     myLastManager  = CurrentManager;
     CurrentManager = avatarManager;
 }
Exemplo n.º 22
0
        private static void CleanAvatar(VRCAvatarManager avatarManager, GameObject go)
        {
            if (!AdvancedSafetySettings.AvatarFilteringEnabled)
            {
                return;
            }

            if (AdvancedSafetySettings.AvatarFilteringOnlyInPublic &&
                RoomManager.field_Internal_Static_ApiWorldInstance_0?.InstanceType != ApiWorldInstance.AccessType.Public)
            {
                return;
            }

            var vrcPlayer = avatarManager.field_Private_VRCPlayer_0;

            if (vrcPlayer == null)
            {
                return;
            }

            var userId = vrcPlayer.prop_Player_0?.prop_APIUser_0?.id ?? "";

            if (!AdvancedSafetySettings.IncludeFriends && APIUser.IsFriendsWith(userId))
            {
                return;
            }

            if (AdvancedSafetySettings.AbideByShowAvatar && IsAvatarExplicitlyShown(userId))
            {
                return;
            }

            var start            = Stopwatch.StartNew();
            var scannedObjects   = 0;
            var destroyedObjects = 0;

            var seenTransforms           = 0;
            var seenPolys                = 0;
            var seenMaterials            = 0;
            var seenAudioSources         = 0;
            var seenConstraints          = 0;
            var seenClothVertices        = 0;
            var seenColliders            = 0;
            var seenRigidbodies          = 0;
            var seenAnimators            = 0;
            var seenLights               = 0;
            var seenComponents           = 0;
            var seenParticles            = 0;
            var seenMeshParticleVertices = 0;

            var animator = go.GetComponent <Animator>();

            var componentList           = new Il2CppSystem.Collections.Generic.List <Component>();
            var audioSourcesList        = new List <AudioSource>();
            var skinnedRendererListList = new List <SkinnedMeshRenderer>();

            void Bfs(GameObjectWithPriorityData objWithPriority)
            {
                var obj = objWithPriority.GameObject;

                if (obj == null)
                {
                    return;
                }
                scannedObjects++;

                if (animator?.IsBoneTransform(obj.transform) != true && seenTransforms++ >= AdvancedSafetySettings.MaxTransforms)
                {
                    Object.DestroyImmediate(obj, true);
                    destroyedObjects++;
                    return;
                }

                if (objWithPriority.Depth >= AdvancedSafetySettings.MaxDepth)
                {
                    Object.DestroyImmediate(obj, true);
                    destroyedObjects++;
                    return;
                }

                if (!AdvancedSafetySettings.AllowUiLayer && (obj.layer == 12 || obj.layer == 5))
                {
                    obj.layer = 9;
                }

                obj.GetComponents(componentList);
                foreach (var component in componentList)
                {
                    if (component == null)
                    {
                        continue;
                    }

                    component.TryCast <AudioSource>()?.VisitAudioSource(ref scannedObjects, ref destroyedObjects, ref seenAudioSources, obj, audioSourcesList, objWithPriority.IsActiveInHierarchy);
                    component.TryCast <IConstraint>()?.VisitConstraint(ref scannedObjects, ref destroyedObjects, ref seenConstraints, obj);
                    component.TryCast <Cloth>()?.VisitCloth(ref scannedObjects, ref destroyedObjects, ref seenClothVertices, obj);
                    component.TryCast <Rigidbody>()?.VisitGeneric(ref scannedObjects, ref destroyedObjects, ref seenRigidbodies, AdvancedSafetySettings.MaxRigidBodies);

                    component.TryCast <Collider>()?.VisitCollider(ref scannedObjects, ref destroyedObjects, ref seenColliders, obj);
                    component.TryCast <Animator>()?.VisitGeneric(ref scannedObjects, ref destroyedObjects, ref seenAnimators, AdvancedSafetySettings.MaxAnimators);
                    component.TryCast <Light>()?.VisitGeneric(ref scannedObjects, ref destroyedObjects, ref seenLights, AdvancedSafetySettings.MaxLights);

                    component.TryCast <Renderer>()?.VisitRenderer(ref scannedObjects, ref destroyedObjects, ref seenPolys, ref seenMaterials, obj, skinnedRendererListList);
                    component.TryCast <ParticleSystem>()?.VisitParticleSystem(component.GetComponent <ParticleSystemRenderer>(), ref scannedObjects, ref destroyedObjects, ref seenParticles, ref seenMeshParticleVertices, obj);

                    if (ReferenceEquals(component.TryCast <Transform>(), null))
                    {
                        component.VisitGeneric(ref scannedObjects, ref destroyedObjects, ref seenComponents, AdvancedSafetySettings.MaxComponents);
                    }
                }

                foreach (var child in obj.transform)
                {
                    ourBfsQueue.Enqueue(new GameObjectWithPriorityData(child.Cast <Transform>().gameObject, objWithPriority.Depth + 1, objWithPriority.IsActiveInHierarchy));
                }
            }

            Bfs(new GameObjectWithPriorityData(go, 0, true, true));
            while (ourBfsQueue.Count > 0)
            {
                Bfs(ourBfsQueue.Dequeue());
            }

            ComponentAdjustment.PostprocessSkinnedRenderers(skinnedRendererListList);

            if (!AdvancedSafetySettings.AllowSpawnSounds)
            {
                MelonCoroutines.Start(CheckSpawnSounds(go, audioSourcesList));
            }

            if (MelonDebug.IsEnabled() || destroyedObjects > 100)
            {
                MelonLogger.Msg($"Cleaned avatar ({avatarManager.prop_ApiAvatar_0?.name}) used by \"{vrcPlayer.prop_VRCPlayerApi_0?.displayName}\" in {start.ElapsedMilliseconds}ms, scanned {scannedObjects} things, destroyed {destroyedObjects} things");
            }
        }
Exemplo n.º 23
0
 private static void OnAvatarChange(VRCAvatarManager __instance)
 {
     OnAvatarChanged?.DelegateSafeInvoke(__instance, __instance.prop_GameObject_0);
 }
Exemplo n.º 24
0
 public static List <AvatarParameter> GetAvatarParameters(this VRCAvatarManager manager)
 => FilterDefaultParameters(manager.GetAllAvatarParameters());
Exemplo n.º 25
0
 public void Dispose()
 {
     ourApiAvatar     = null;
     ourAvatarManager = null;
     ourInSwitch      = false;
 }
Exemplo n.º 26
0
 public static IEnumerable <Renderer> GetAvatarRenderers(this VRCAvatarManager manager)
 {
     return(manager.field_Private_ArrayOf_Renderer_0);
 }
Exemplo n.º 27
0
 public void Dispose()
 {
     CurrentManager = myLastManager;
 }
Exemplo n.º 28
0
        public override void OnUpdate()
        {
            if (m_localPlayer == null)
            {
                VRC.Player player = VRC.Player.prop_Player_0;

                if (player != null) // early init I guess
                {
                    m_localPlayer = player;
                }
            }

            if (m_localPlayer == null)
            {
                return; // wait until player is ready
            }

            var currentInput = VRCInputManager.field_Private_Static_EnumNPublicSealedvaKeMoCoGaViOcViDaWaUnique_0;

            bool controller = currentInput == InputEnum.Controller;
            bool vr         = currentInput == InputEnum.Oculus || currentInput == InputEnum.Vive;
            bool desktop    = (currentInput == InputEnum.Keyboard || currentInput == InputEnum.Mouse);

            bool isActiveController = controller && Input.GetKey(KeyCode.JoystickButton5);
            bool isActiveVr         = vr && Input.GetKey((KeyCode)Oculus.LeftThumbstickPress);
            bool isActiveDesktop    = desktop && (Input.GetKey(KeyCode.Mouse4) || Input.GetKey(KeyCode.RightControl));

            bool swapSpeedsController = controller && Input.GetKey(KeyCode.JoystickButton9);
            bool swapSpeedsVr         = vr && Input.GetKey((KeyCode)Oculus.AButton);
            bool swapSpeedsKeyboard   = desktop && Input.GetKey(KeyCode.LeftShift);

            bool isActive   = isActiveController || isActiveVr || isActiveDesktop;
            bool swapSpeeds = swapSpeedsKeyboard || swapSpeedsController || swapSpeedsVr;

            if (isActive && Time.time - m_lastTime > 1f)
            {
                if (m_airbreakActive)
                {
                    // VRCUiManager.QueueHudMessage equivalent
                    // still same bug as years ago where two messages need to be queued for the first one to be displayed immediately
                    VRCUiManager.prop_VRCUiManager_0.field_Private_List_1_String_0.Add("Noclip OFF");
                    VRCUiManager.prop_VRCUiManager_0.field_Private_List_1_String_0.Add("");
                    DisableAirbreak();
                }
                else
                {
                    VRCUiManager.prop_VRCUiManager_0.field_Private_List_1_String_0.Add("Noclip ON");
                    VRCUiManager.prop_VRCUiManager_0.field_Private_List_1_String_0.Add("");
                    SetupAirbreak();
                }

                m_airbreakActive = !m_airbreakActive;

                m_lastTime = Time.time;
            }

            if (swapSpeeds && m_airbreakActive && Time.time - m_lastTime > 0.2f)
            {
                m_speedIndex += 1;

                if (m_speedIndex > m_speeds.Count() - 1)
                {
                    m_speedIndex = 0;
                }

                m_currentSpeed = m_speeds[m_speedIndex];
                m_lastTime     = Time.time;
            }

            // get default fallback
            Object[] ctrls = Object.FindObjectsOfType(Il2CppType.Of <VRCVrCameraOculus>());

            Transform trans = null;

            if (ctrls.Length > 0)
            {
                trans = ctrls[0].TryCast <VRCVrCameraOculus>().transform;
            }

            // alright so
            // let's start by getting our current vrcPlayer
            VRCPlayer vrcPlayer = m_localPlayer.field_Internal_VRCPlayer_0;

            Animator animator = null;

            if (vrcPlayer == null)
            {
                animator = null;
            }
            else
            {
                // let's get our avatar manager
                VRCAvatarManager vrcAvatarManager = vrcPlayer.prop_VRCAvatarManager_0;

                if (vrcAvatarManager == null)
                {
                    animator = null;
                }
                else
                {
                    // current avatar
                    GameObject currentAvatar = vrcAvatarManager.prop_GameObject_0;
                    animator = ((currentAvatar != null) ? currentAvatar.GetComponent(Il2CppType.Of <Animator>())?.TryCast <Animator>() : null);
                }
            }

            // if the animator is not null at this stage and airbreak is enabled
            if (animator != null)
            {
                // get the head bone
                Transform tempTrans = animator.GetBoneTransform(HumanBodyBones.Head);

                // if we're humanoid
                if (tempTrans != null)
                {
                    // use the head bone's transform instead of oculus camera
                    trans = tempTrans;
                }
            }

            if (trans == null)
            {
                MelonLogger.LogError("not humanoid?");
                return;
            }

            if (Input.GetKey(KeyCode.W))
            {
                m_position += trans.forward * m_currentSpeed * Time.deltaTime;
            }

            if (Input.GetKey(KeyCode.A))
            {
                m_position += (trans.right * -1) * m_currentSpeed * Time.deltaTime;
            }

            if (Input.GetKey(KeyCode.S))
            {
                m_position += (trans.forward * -1) * m_currentSpeed * Time.deltaTime;
            }

            if (Input.GetKey(KeyCode.D))
            {
                m_position += trans.right * m_currentSpeed * Time.deltaTime;
            }

            if (Input.GetKey(KeyCode.E))
            {
                m_position += m_localPlayer.transform.up * m_currentSpeed * Time.deltaTime;
            }

            if (Input.GetKey(KeyCode.Q))
            {
                m_position += (m_localPlayer.transform.up * -1) * m_currentSpeed * Time.deltaTime;
            }

            var a = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick, OVRInput.Controller.LTouch);

            if (a.y != 0.0f)
            {
                m_position += trans.forward * m_currentSpeed * Time.deltaTime * a.y;
            }

            if (a.x != 0.0f)
            {
                m_position += trans.right * m_currentSpeed * Time.deltaTime * a.x;
            }

            if (m_airbreakActive)
            {
                m_localPlayer.transform.position = m_position;
            }
        }
Exemplo n.º 29
0
 public SwitchAvatarCookie(VRCAvatarManager avatarManager, ApiAvatar apiAvatar)
 {
     ourAvatarManager = avatarManager;
     ourApiAvatar     = apiAvatar;
     ourInSwitch      = true;
 }
Exemplo n.º 30
0
        private void ESP_RenderObject()
        {
            if (m_enabled || m_vrEnabled)
            {
                if (!m_styleSetup)
                {
                    SetupStyle();
                    m_styleSetup = !m_styleSetup;
                }

                foreach (Player p in m_players)
                {
                    VRCPlayer vrcPlayer = p.vrcPlayer;
                    Animator  animator;

                    if (vrcPlayer == null)
                    {
                        animator = null;
                    }
                    else
                    {
                        VRCAvatarManager vrcAvatarManager = vrcPlayer.AvatarManager();
                        if (vrcAvatarManager == null)
                        {
                            animator = null;
                        }
                        else
                        {
                            GameObject currentAvatar = vrcAvatarManager.currentAvatarObject;
                            animator = ((currentAvatar != null) ? currentAvatar.GetComponent <Animator>() : null);
                        }
                    }

                    if (animator != null)
                    {
                        void DrawBoneEsp(HumanBodyBones bone1, HumanBodyBones bone2)
                        {
                            try
                            {
                                GL.Begin(GL.LINES);
                                m_mat.SetPass(0);
                                GL.Color(GetGroupColour(p));
                                GL.Vertex(animator.GetBoneTransform(bone1).position);
                                GL.Vertex(animator.GetBoneTransform(bone2).position /* + new Vector3(0, .5f, 0)*/);
                            }
                            catch { }
                            finally
                            {
                                GL.End();
                            }
                        }

                        /*EspType espType = ConfigFile.Config.Common.EspType;
                         *
                         * if (espType == EspType.Cute)
                         * {
                         *  for (int j = 0; j < 56; j++)
                         *  {
                         *      if (j == 0)
                         *      {
                         *          continue;
                         *      }
                         *
                         *      DrawBoneEsp((HumanBodyBones)j - 1, (HumanBodyBones)j);
                         *  }
                         * }
                         * else if (espType == EspType.Bone)*/
                        {
                            // hips to left toes
                            DrawBoneEsp(HumanBodyBones.Hips, HumanBodyBones.LeftUpperLeg);
                            DrawBoneEsp(HumanBodyBones.LeftUpperLeg, HumanBodyBones.LeftLowerLeg);
                            DrawBoneEsp(HumanBodyBones.LeftLowerLeg, HumanBodyBones.LeftFoot);
                            DrawBoneEsp(HumanBodyBones.LeftFoot, HumanBodyBones.LeftToes);

                            // hips to right toes
                            DrawBoneEsp(HumanBodyBones.Hips, HumanBodyBones.RightUpperLeg);
                            DrawBoneEsp(HumanBodyBones.RightUpperLeg, HumanBodyBones.RightLowerLeg);
                            DrawBoneEsp(HumanBodyBones.RightLowerLeg, HumanBodyBones.RightFoot);
                            DrawBoneEsp(HumanBodyBones.RightFoot, HumanBodyBones.RightToes);

                            // hips to head
                            DrawBoneEsp(HumanBodyBones.Hips, HumanBodyBones.Spine);
                            DrawBoneEsp(HumanBodyBones.Spine, HumanBodyBones.Chest);
                            DrawBoneEsp(HumanBodyBones.Chest, HumanBodyBones.Neck);
                            DrawBoneEsp(HumanBodyBones.Neck, HumanBodyBones.Head);

                            // chest to left hand
                            DrawBoneEsp(HumanBodyBones.Chest, HumanBodyBones.LeftShoulder);
                            DrawBoneEsp(HumanBodyBones.LeftShoulder, HumanBodyBones.LeftUpperArm);
                            DrawBoneEsp(HumanBodyBones.LeftUpperArm, HumanBodyBones.LeftLowerArm);
                            DrawBoneEsp(HumanBodyBones.LeftLowerArm, HumanBodyBones.LeftHand);

                            // chest to right hand
                            DrawBoneEsp(HumanBodyBones.Chest, HumanBodyBones.RightShoulder);
                            DrawBoneEsp(HumanBodyBones.RightShoulder, HumanBodyBones.RightUpperArm);
                            DrawBoneEsp(HumanBodyBones.RightUpperArm, HumanBodyBones.RightLowerArm);
                            DrawBoneEsp(HumanBodyBones.RightLowerArm, HumanBodyBones.RightHand);

                            // right fingers
                            // thumb
                            DrawBoneEsp(HumanBodyBones.RightHand, HumanBodyBones.RightThumbProximal);
                            DrawBoneEsp(HumanBodyBones.RightThumbProximal, HumanBodyBones.RightThumbIntermediate);
                            DrawBoneEsp(HumanBodyBones.RightThumbIntermediate, HumanBodyBones.RightThumbDistal);

                            // index
                            DrawBoneEsp(HumanBodyBones.RightHand, HumanBodyBones.RightIndexProximal);
                            DrawBoneEsp(HumanBodyBones.RightIndexProximal, HumanBodyBones.RightIndexIntermediate);
                            DrawBoneEsp(HumanBodyBones.RightIndexIntermediate, HumanBodyBones.RightIndexDistal);

                            // middle
                            DrawBoneEsp(HumanBodyBones.RightHand, HumanBodyBones.RightMiddleProximal);
                            DrawBoneEsp(HumanBodyBones.RightMiddleProximal, HumanBodyBones.RightMiddleIntermediate);
                            DrawBoneEsp(HumanBodyBones.RightMiddleIntermediate, HumanBodyBones.RightMiddleDistal);

                            // ring
                            DrawBoneEsp(HumanBodyBones.RightHand, HumanBodyBones.RightRingProximal);
                            DrawBoneEsp(HumanBodyBones.RightRingProximal, HumanBodyBones.RightRingIntermediate);
                            DrawBoneEsp(HumanBodyBones.RightRingIntermediate, HumanBodyBones.RightRingDistal);

                            // little
                            DrawBoneEsp(HumanBodyBones.RightHand, HumanBodyBones.RightLittleProximal);
                            DrawBoneEsp(HumanBodyBones.RightLittleProximal, HumanBodyBones.RightLittleIntermediate);
                            DrawBoneEsp(HumanBodyBones.RightLittleIntermediate, HumanBodyBones.RightLittleDistal);

                            // left fingers
                            // thumb
                            DrawBoneEsp(HumanBodyBones.LeftHand, HumanBodyBones.LeftThumbProximal);
                            DrawBoneEsp(HumanBodyBones.LeftThumbProximal, HumanBodyBones.LeftThumbIntermediate);
                            DrawBoneEsp(HumanBodyBones.LeftThumbIntermediate, HumanBodyBones.LeftThumbDistal);

                            // index
                            DrawBoneEsp(HumanBodyBones.LeftHand, HumanBodyBones.LeftIndexProximal);
                            DrawBoneEsp(HumanBodyBones.LeftIndexProximal, HumanBodyBones.LeftIndexIntermediate);
                            DrawBoneEsp(HumanBodyBones.LeftIndexIntermediate, HumanBodyBones.LeftIndexDistal);

                            // middle
                            DrawBoneEsp(HumanBodyBones.LeftHand, HumanBodyBones.LeftMiddleProximal);
                            DrawBoneEsp(HumanBodyBones.LeftMiddleProximal, HumanBodyBones.LeftMiddleIntermediate);
                            DrawBoneEsp(HumanBodyBones.LeftMiddleIntermediate, HumanBodyBones.LeftMiddleDistal);

                            // ring
                            DrawBoneEsp(HumanBodyBones.LeftHand, HumanBodyBones.LeftRingProximal);
                            DrawBoneEsp(HumanBodyBones.LeftRingProximal, HumanBodyBones.LeftRingIntermediate);
                            DrawBoneEsp(HumanBodyBones.LeftRingIntermediate, HumanBodyBones.LeftRingDistal);

                            // little
                            DrawBoneEsp(HumanBodyBones.LeftHand, HumanBodyBones.LeftLittleProximal);
                            DrawBoneEsp(HumanBodyBones.LeftLittleProximal, HumanBodyBones.LeftLittleIntermediate);
                            DrawBoneEsp(HumanBodyBones.LeftLittleIntermediate, HumanBodyBones.LeftLittleDistal);
                        }
                    }
                }
            }

            if (m_vrEnabled)
            {
                foreach (Player p in m_players)
                {
                    if (p == null || p.ApiUser() == null)
                    {
                        continue;
                    }

                    string displayName = p.ApiUser().displayName;

                    // draw player tag
                    if (!m_names.ContainsKey(displayName))
                    {
                        GameObject obj = new GameObject();
                        UnityEngine.Object.DontDestroyOnLoad(obj);
                        Text t = obj.AddComponent <Text>();

                        t.text  = displayName;
                        t.color = GetGroupColour(p);

                        m_names[displayName] = obj;
                    }
                    m_names[displayName].transform.LookAt(VRCVrCamera.GetInstance().screenCamera.transform.position);
                    m_names[displayName].transform.position = p.transform.position;

                    GameObject myAvatar   = PlayerWrappers.GetLocalPlayer().vrcPlayer.AvatarManager().currentAvatarObject;
                    Animator   myAnimator = ((myAvatar != null) ? myAvatar.GetComponent <Animator>() : null);
                    Vector3    myPos      = PlayerWrappers.GetLocalPlayer().transform.position;

                    if (myAnimator != null)
                    {
                        myPos = myAnimator.GetBoneTransform(HumanBodyBones.LeftIndexDistal).position;

                        if (myPos == null)
                        {
                            myPos = myAnimator.GetBoneTransform(HumanBodyBones.LeftIndexIntermediate).position;
                        }

                        if (myPos == null)
                        {
                            myPos = myAnimator.GetBoneTransform(HumanBodyBones.LeftIndexProximal).position;
                        }

                        if (myPos == null)
                        {
                            myPos = myAnimator.GetBoneTransform(HumanBodyBones.LeftHand).position;
                        }
                    }

                    GameObject targetAvatar   = p.vrcPlayer.AvatarManager().currentAvatarObject;
                    Animator   targetAnimator = ((targetAvatar != null) ? targetAvatar.GetComponent <Animator>() : null);
                    Vector3    targetPos      = p.transform.position;

                    if (targetAnimator != null)
                    {
                        targetPos = targetAnimator.GetBoneTransform(HumanBodyBones.Head).position;
                    }

                    GL.Begin(GL.LINES);
                    m_mat.SetPass(0);
                    GL.Color(GetGroupColour(p));
                    GL.Vertex(myPos);
                    GL.Vertex(targetPos);
                    GL.End();
                }
            }
        }