This repository has been archived by the owner on Mar 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AvatarHider.cs
143 lines (128 loc) · 6.28 KB
/
AvatarHider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using MelonLoader;
using System;
using System.Collections;
using System.Linq;
using UnityEngine;
using ABI_RC.Core;
using ABI_RC.Core.Player;
using ABI_RC.Core.Networking;
using ABI_RC.Core.Networking.IO.Social;
using System.Collections.Generic;
using DarkRift;
namespace CVRAvatarHider
{
public class AvatarHider : MelonMod
{
private bool m_HideAvatars;
private bool m_IgnoreFriends;
//private bool m_ExcludeShownAvatars;
//private bool m_DisableSpawnSound;
private float m_Distance;
//private float m_Avatars;
public override void OnApplicationStart()
{
MelonPreferences.CreateCategory("CVR-AvatarHider", "CVR Avatar Hider");
MelonPreferences.CreateEntry("CVR-AvatarHider", "HideAvatars", false, "Hide Avatars");
MelonPreferences.CreateEntry("CVR-AvatarHider", "IgnoreFriends", true, "Ignore Friends");
//MelonPreferences.CreateEntry("CVR-AvatarHider", "ExcludeShownAvatars", true, "Exclude Shown Avatars");
//MelonPreferences.CreateEntry("CVR-AvatarHider", "DisableSpawnSound", false, "Disable Spawn Sounds");
MelonPreferences.CreateEntry("CVR-AvatarHider", "HideDistance", 10.0f, "Distance (meters)");
//MelonPreferences.CreateEntry("CVR-AvatarHider", "Avatars", 0, "Max Amount Of Shown Avatars Near Me");
OnPreferencesSaved();
MelonCoroutines.Start(AvatarHiderProcess());
}
public override void OnPreferencesSaved()
{
m_HideAvatars = MelonPreferences.GetEntryValue<bool>("AvatarHider", "HideAvatars");
m_IgnoreFriends = MelonPreferences.GetEntryValue<bool>("AvatarHider", "IgnoreFriends");
//m_ExcludeShownAvatars = MelonPreferences.GetEntryValue<bool>("AvatarHider", "ExcludeShownAvatars");
//m_DisableSpawnSound = MelonPreferences.GetEntryValue<bool>("AvatarHider", "DisableSpawnSound");
m_Distance = MelonPreferences.GetEntryValue<float>("AvatarHider", "HideDistance");
UnHideAllAvatars();
}
//public static List<CVRPlayerEntity> networkPlayersCVR = CVRPlayerManager.Instance.NetworkPlayers;
private IEnumerator AvatarHiderProcess()
{
while (true)
{
try
{
if (m_HideAvatars)
{
//find your avatar game object and id
GameObject myLocalPlayer = GameObject.Find("_PLAYERLOCAL");
string myOwnerID = myLocalPlayer.GetComponent<PlayerDescriptor>().ownerId;
if (myLocalPlayer != null)
{
//check connection
if (NetworkManager.Instance.GameNetwork.ConnectionState == ConnectionState.Connected)
{
//check each player in instance for show/hide status
foreach (var player in CVRPlayerManager.Instance.NetworkPlayers)
{
//does not affect your own avatar
if (player.PlayerDescriptor.ownerId != myOwnerID)
{
var avatar = player.PlayerObject.transform.Find("[PlayerAvatar]");
var distance = Vector3.Distance(myLocalPlayer.transform.position, player.PuppetMaster.avatarRootPosition);
if (
avatar != null
&& !(m_IgnoreFriends && Friends.FriendsWith(player.Uuid))
)
//&& !(m_ExcludeShownAvatars && player.IsShowingAvatar())
{
//hide avatars far away
if (distance > m_Distance && avatar.gameObject.activeSelf)
{
avatar.gameObject.SetActive(false);
}
//show close avatar if hidden
else if (distance <= m_Distance && !avatar.gameObject.activeSelf)
{
avatar.gameObject.SetActive(true);
}
}
}
}
}
}
}
}
catch (Exception e)
{
MelonLogger.Msg(ConsoleColor.Red, $"Failed to unhide avatar {e}");
}
yield return new WaitForSeconds(1f);
}
}
private void UnHideAllAvatars()
{
try
{
if (m_HideAvatars)
{
GameObject myLocalPlayer = GameObject.Find("_PLAYERLOCAL");
string myOwnerID = myLocalPlayer.GetComponent<PlayerDescriptor>().ownerId;
if (myLocalPlayer != null)
{
if (NetworkManager.Instance.GameNetwork.ConnectionState == ConnectionState.Connected)
{
foreach (var player in CVRPlayerManager.Instance.NetworkPlayers)
{
if (player.PlayerDescriptor.ownerId != myOwnerID)
{
var avatar = player.PlayerObject.transform.Find("[PlayerAvatar]");
if (avatar != null && !avatar.gameObject.activeSelf) avatar.gameObject.SetActive(true);
}
}
}
}
}
}
catch (Exception e)
{
MelonLogger.Msg(ConsoleColor.Red, $"Failed to unhide avatar {e}");
}
}
}
}