Skip to content

Commit

Permalink
1.36.2 fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
rcelyte committed May 7, 2024
1 parent 7035998 commit 94a4a08
Show file tree
Hide file tree
Showing 19 changed files with 98 additions and 74 deletions.
2 changes: 1 addition & 1 deletion BeatUpClient/BeatUpClient.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<LocalRefsDir Condition="Exists('..\Refs')">..\Refs</LocalRefsDir>
<BeatSaberDir>$(LocalRefsDir)</BeatSaberDir>
<DebugType>full</DebugType>
<ModVersion>0.9.0</ModVersion>
<ModVersion>0.10.0</ModVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Cecil">
Expand Down
13 changes: 10 additions & 3 deletions BeatUpClient/MakeThingsPublic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"DropdownSettingsController::_idx",
"EditColorSchemeController::_closeButton",
"EnterPlayerGuestNameViewController::_nameInputFieldView",
"GameplayCoreSceneSetupData::_performancePreset",
"GameplayCoreSceneSetupData::gameplayModifiers",
"GameServerPlayerTableCell::_localPlayerBackgroundImage",
"GameSongController::_beatmapCallbacksController",
Expand All @@ -95,17 +96,19 @@
"MainFlowCoordinator::HandleMainMenuViewControllerDidFinish",
"MainFlowCoordinator::HandleMultiplayerModeSelectionFlowCoordinatorDidFinish",
"MainFlowCoordinator::PresentMultiplayerModeSelectionFlowCoordinatorWithDisclaimerAndAvatarCreator",
"MainSettingsAsyncLoader::_mainSettingsHandler",
"MainSettingsAsyncLoader::_networkConfig",
"MainSystemInit::_mainSettingsModel",
"MainSystemInit::_networkConfig",
"MenuTransitionsHelper::_gameScenesManager",
"MenuTransitionsHelper::_multiplayerLevelScenesTransitionSetupData",
"MultiplayerConnectedPlayerInstaller::_connectedPlayer",
"MultiplayerConnectedPlayerInstaller::_sceneSetupData",
"MultiplayerController::_playersManager",
"MultiplayerController::_songStartSyncController",
"MultiplayerController::GetCurrentSongTime",
"MultiplayerController::GetSongStartSyncTime",
"MultiplayerLevelLoader::_getBeatmapCancellationTokenSource",
"MultiplayerLevelLoader::_loaderState",
// "MultiplayerLevelLoader/MultiplayerBeatmapLoaderState",
"MultiplayerLocalActivePlayerFacade::_gameSongController",
"MultiplayerLocalActivePlayerInGameMenuViewController::_levelBar",
"MultiplayerLocalActivePlayerInGameMenuViewController::_localPlayerInGameMenuInitData",
Expand Down Expand Up @@ -157,11 +160,14 @@
("Libs", "System.IO.Compression.dll", null),
("Plugins", "SongCore.dll", null),
(managed, "BeatmapCore.dll", null),
(managed, "BeatSaber.GameSettings.dll", null),
(managed, "BeatSaber.Init.dll", null),
(managed, "BeatSaber.PerformancePresets.dll", null),
(managed, "BGLib.AppFlow.dll", new[] {
"SceneInfo::_sceneName",
}),
(managed, "BGLib.DotnetExtension.dll", null),
(managed, "BGLib.SaveDataCore.dll", null),
(managed, "BGLib.UnityExtension.dll", null),
(managed, "Colors.dll", null),
(managed, "GameplayCore.dll", null),
Expand Down Expand Up @@ -213,7 +219,8 @@
(managed, "MediaLoader.dll", null),
(managed, "DataModels.dll", new[] {
"BeatmapKey::beatmapCharacteristic",
"BeatmapLevelsModel::_loadedBeatmapLevels",
"BeatmapLevelsModel::_allLoadedBeatmapLevelsRepository",
"BeatmapLevelsRepository::_idToBeatmapLevel",
"FileDifficultyBeatmap::_beatmapPath",
"FileDifficultyBeatmap::_lightshowPath",
"FileSystemBeatmapLevelData::_audioDataPath",
Expand Down
2 changes: 1 addition & 1 deletion BeatUpClient/cs/Migration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ static class BeatUpClient_Migration {
continue;
BeatUpClient_Config.Instance.Servers.TryAdd(graphUrl, statusUrl);
BeatUpClient_Config.Instance.Servers.Remove(hostname);
if(hostname == BeatUpClient.customServerHostName.value)
if(hostname == BeatUpClient.customServerSettings.customServerHostName)
newHostname = (graphUrl, statusUrl);
}
BeatUpClient_Config.Instance.Changed();
Expand Down
25 changes: 16 additions & 9 deletions BeatUpClient/cs/Patches/1_MainSystemInit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,32 @@ static partial class BeatUpClient {
[Detour(typeof(MainSystemInit), nameof(MainSystemInit.InstallBindings))]
static void MainSystemInit_InstallBindings(MainSystemInit self, Zenject.DiContainer container, bool isRunningFromTests) {
Base(self, container, isRunningFromTests);
customServerHostName = self._mainSettingsModel.customServerHostName;
string hostname = customServerHostName.value.ToLower();

MultiplayerSessionManager? multiplayerSessionManager = Injected<MultiplayerSessionManager>.Resolve<IMultiplayerSessionManager>(container);
IMenuRpcManager menuRpcManager = Injected<IMenuRpcManager>.Resolve(container)!;
Injected<AudioClipAsyncLoader>.Resolve(container);
Injected<BeatmapDataLoader>.Resolve(container);
multiplayerSessionManager?.SetLocalPlayerState("modded", true);
Net.Setup(menuRpcManager, multiplayerSessionManager);
}

[Detour(typeof(MainSettingsAsyncLoader), nameof(MainSettingsAsyncLoader.InstallBindings))]
static void MainSettingsAsyncLoader_InstallBindings(MainSettingsAsyncLoader self) {
Base(self);

customServerSettings = self._mainSettingsHandler.instance.customServerSettings;
string hostname = customServerSettings.customServerHostName.ToLower();
int port = self._networkConfig.masterServerEndPoint.port;
if(hostname.Contains(":")) {
int.TryParse(hostname.Split(':')[1], out port);
hostname = hostname.Split(':')[0];
}
Zenject.DiContainer container = self.Container;
container.Rebind<INetworkConfig>().FromInstance(new CustomNetworkConfig(self._networkConfig, hostname, port, true)).AsSingle();

NetworkConfigSetup(self._networkConfig);
Injected<CustomNetworkConfig>.Resolve<INetworkConfig>(container);
Injected<IMultiplayerStatusModel>.Resolve(container);
Injected<IQuickPlaySetupModel>.Resolve(container);
MultiplayerSessionManager? multiplayerSessionManager = Injected<MultiplayerSessionManager>.Resolve<IMultiplayerSessionManager>(container);
IMenuRpcManager menuRpcManager = Injected<IMenuRpcManager>.Resolve(container)!;
Injected<AudioClipAsyncLoader>.Resolve(container);
Injected<BeatmapDataLoader>.Resolve(container);
multiplayerSessionManager?.SetLocalPlayerState("modded", true);
Net.Setup(menuRpcManager, multiplayerSessionManager);
}

[Detour(typeof(BeatmapCharacteristicInstaller), nameof(BeatmapCharacteristicInstaller.InstallBindings))]
Expand Down
84 changes: 43 additions & 41 deletions BeatUpClient/cs/Patches/9_Gameplay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,57 @@ static partial class BeatUpClient {
[Patch(PatchType.Postfix, typeof(MultiplayerLocalActivePlayerInGameMenuViewController), nameof(MultiplayerLocalActivePlayerInGameMenuViewController.Start))]
public static void MultiplayerLocalActivePlayerInGameMenuViewController_Start(MultiplayerLocalActivePlayerInGameMenuViewController __instance) {
MultiplayerPlayersManager multiplayerPlayersManager = UnityEngine.Resources.FindObjectsOfTypeAll<MultiplayerPlayersManager>()[0];
if(connectInfo.perPlayerDifficulty && multiplayerPlayersManager.localPlayerStartSeekSongController is MultiplayerLocalActivePlayerFacade) {
MenuTransitionsHelper menuTransitionsHelper = UnityEngine.Resources.FindObjectsOfTypeAll<MenuTransitionsHelper>()[0];
MultiplayerConnectedPlayerSongTimeSyncController audioTimeSyncController = UnityEngine.Resources.FindObjectsOfTypeAll<MultiplayerConnectedPlayerSongTimeSyncController>()[0];
BeatmapKey selectedKey = new(__instance._localPlayerInGameMenuInitData.beatmapLevel.levelID, __instance._localPlayerInGameMenuInitData.beatmapCharacteristic, __instance._localPlayerInGameMenuInitData.beatmapDifficulty);
UnityEngine.RectTransform switchButton = UI.CreateButtonFrom(__instance._resumeButton.gameObject, __instance._resumeButton.transform.parent, "SwitchDifficulty", () => {
MultiplayerLevelScenesTransitionSetupDataSO setupData = menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData;
setupData.Init(setupData.gameMode, in selectedKey, setupData.beatmapLevel, setupData.beatmapLevelData,
setupData.colorScheme, setupData.gameplayCoreSceneSetupData.gameplayModifiers,
setupData.gameplayCoreSceneSetupData.playerSpecificSettings, setupData.gameplayCoreSceneSetupData.practiceSettings,
Resolve<AudioClipAsyncLoader>(), Resolve<BeatmapDataLoader>(),
setupData.gameplayCoreSceneSetupData.useTestNoteCutSoundEffects);
menuTransitionsHelper._gameScenesManager.ReplaceScenes(menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData, null,
.35f, null, (Zenject.DiContainer container) => {
MultiplayerController multiplayerController = container.Resolve<MultiplayerController>();
if(!(connectInfo.perPlayerDifficulty && multiplayerPlayersManager.localPlayerStartSeekSongController is MultiplayerLocalActivePlayerFacade))
return;
MenuTransitionsHelper menuTransitionsHelper = UnityEngine.Resources.FindObjectsOfTypeAll<MenuTransitionsHelper>()[0];
BeatmapLevel beatmapLevel = menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData.beatmapLevel;
MultiplayerConnectedPlayerSongTimeSyncController audioTimeSyncController = UnityEngine.Resources.FindObjectsOfTypeAll<MultiplayerConnectedPlayerSongTimeSyncController>()[0];
BeatmapKey selectedKey = __instance._localPlayerInGameMenuInitData.beatmapKey;
UnityEngine.RectTransform switchButton = UI.CreateButtonFrom(__instance._resumeButton.gameObject, __instance._resumeButton.transform.parent, "SwitchDifficulty", () => {
MultiplayerLevelScenesTransitionSetupDataSO setupData = menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData;
setupData.Init(setupData.gameMode, in selectedKey, beatmapLevel, setupData.beatmapLevelData,
setupData.colorScheme, setupData.gameplayCoreSceneSetupData.gameplayModifiers,
setupData.gameplayCoreSceneSetupData.playerSpecificSettings, setupData.gameplayCoreSceneSetupData.practiceSettings,
Resolve<AudioClipAsyncLoader>(), setupData.gameplayCoreSceneSetupData._performancePreset, Resolve<BeatmapDataLoader>(),
setupData.gameplayCoreSceneSetupData.useTestNoteCutSoundEffects);
menuTransitionsHelper._gameScenesManager.ReplaceScenes(menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData, null,
.35f, null, (Zenject.DiContainer container) => {
MultiplayerController multiplayerController = container.Resolve<MultiplayerController>();
multiplayerController._songStartSyncController.syncStartSuccessEvent -= OnSongStart;
multiplayerController._songStartSyncController.syncStartSuccessEvent += OnSongStart;
void OnSongStart(long introAnimationStartSyncTime) {
multiplayerController._songStartSyncController.syncStartSuccessEvent -= OnSongStart;
multiplayerController._songStartSyncController.syncStartSuccessEvent += OnSongStart;
void OnSongStart(long introAnimationStartSyncTime) {
multiplayerController._songStartSyncController.syncStartSuccessEvent -= OnSongStart;
multiplayerController._playersManager.activeLocalPlayerFacade._gameSongController._beatmapCallbacksController._startFilterTime = multiplayerController.GetCurrentSongTime(multiplayerController.GetSongStartSyncTime(introAnimationStartSyncTime)) * menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData.gameplayCoreSceneSetupData.gameplayModifiers.songSpeedMul + 1;
}
});
multiplayerController._playersManager.activeLocalPlayerFacade._gameSongController._beatmapCallbacksController._startFilterTime = multiplayerController.GetCurrentSongTime(multiplayerController.GetSongStartSyncTime(introAnimationStartSyncTime)) * menuTransitionsHelper._multiplayerLevelScenesTransitionSetupData.gameplayCoreSceneSetupData.gameplayModifiers.songSpeedMul + 1;
}
});
switchButton.GetComponentInChildren<BGLib.Polyglot.LocalizedTextMeshProUGUI>().Key = "BEATUP_SWITCH";
switchButton.gameObject.SetActive(false);
DifficultyPanel panel = new DifficultyPanel(__instance._mainBar.transform, 1, -2, __instance._levelBar.transform.Find("BG").GetComponent<HMUI.ImageView>(), true);
__instance._levelBar.transform.localPosition = new UnityEngine.Vector3(0, 13.25f, 0);
panel.beatmapCharacteristic.localPosition = new UnityEngine.Vector3(-1, -1.5f, 0);
panel.beatmapDifficulty.localPosition = new UnityEngine.Vector3(-1, -8.25f, 0);
void OnSelect(BeatmapCharacteristicSO newCharacteristic, BeatmapDifficulty newDifficulty) {
selectedKey = new(selectedKey.levelId, newCharacteristic, newDifficulty);
bool original = (newDifficulty == selectedKey.difficulty &&
newCharacteristic.SerializedName() == selectedKey.beatmapCharacteristic.SerializedName());
__instance._resumeButton.gameObject.SetActive(original);
switchButton.gameObject.SetActive(!original);
panel.Update(__instance._localPlayerInGameMenuInitData.beatmapLevel, selectedKey.beatmapCharacteristic, selectedKey.difficulty, OnSelect);
}
panel.Update(__instance._localPlayerInGameMenuInitData.beatmapLevel, selectedKey.beatmapCharacteristic, selectedKey.difficulty, OnSelect);
});
switchButton.GetComponentInChildren<BGLib.Polyglot.LocalizedTextMeshProUGUI>().Key = "BEATUP_SWITCH";
switchButton.gameObject.SetActive(false);
DifficultyPanel panel = new DifficultyPanel(__instance._mainBar.transform, 1, -2, __instance._levelBar.transform.Find("BG").GetComponent<HMUI.ImageView>(), true);
__instance._levelBar.transform.localPosition = new UnityEngine.Vector3(0, 13.25f, 0);
panel.beatmapCharacteristic.localPosition = new UnityEngine.Vector3(-1, -1.5f, 0);
panel.beatmapDifficulty.localPosition = new UnityEngine.Vector3(-1, -8.25f, 0);
void OnSelect(BeatmapCharacteristicSO newCharacteristic, BeatmapDifficulty newDifficulty) {
selectedKey = new(selectedKey.levelId, newCharacteristic, newDifficulty);
bool original = (newDifficulty == selectedKey.difficulty &&
newCharacteristic.SerializedName() == selectedKey.beatmapCharacteristic.SerializedName());
__instance._resumeButton.gameObject.SetActive(original);
switchButton.gameObject.SetActive(!original);
panel.Update(beatmapLevel, selectedKey.beatmapCharacteristic, selectedKey.difficulty, OnSelect);
}
panel.Update(beatmapLevel, selectedKey.beatmapCharacteristic, selectedKey.difficulty, OnSelect);
}

[Patch(PatchType.Prefix, typeof(MultiplayerConnectedPlayerInstaller), nameof(MultiplayerConnectedPlayerInstaller.InstallBindings))]
public static void MultiplayerConnectedPlayerInstaller_InstallBindings(GameplayCoreSceneSetupData ____sceneSetupData, IConnectedPlayer ____connectedPlayer) {
bool zenMode = ____sceneSetupData.gameplayModifiers.zenMode || (BeatUpClient_Config.Instance.HideOtherLevels && !haveMpEx);
[Detour(typeof(MultiplayerConnectedPlayerInstaller), nameof(MultiplayerConnectedPlayerInstaller.InstallBindings))]
static void MultiplayerConnectedPlayerInstaller_InstallBindings(MultiplayerConnectedPlayerInstaller self) {
bool zenMode = self._sceneSetupData.gameplayModifiers.zenMode || (BeatUpClient_Config.Instance.HideOtherLevels && !haveMpEx);
if(connectInfo.perPlayerModifiers) {
PlayerData.ModifiersWeCareAbout mods = playerData.lockedModifiers[PlayerIndex(____connectedPlayer)];
____sceneSetupData.gameplayModifiers = ____sceneSetupData.gameplayModifiers.CopyWith(disappearingArrows: mods.disappearingArrows, ghostNotes: mods.ghostNotes, zenMode: zenMode, smallCubes: mods.smallCubes);
PlayerData.ModifiersWeCareAbout mods = playerData.lockedModifiers[PlayerIndex(self._connectedPlayer)];
self._sceneSetupData.gameplayModifiers = self._sceneSetupData.gameplayModifiers.CopyWith(disappearingArrows: mods.disappearingArrows, ghostNotes: mods.ghostNotes, zenMode: zenMode, smallCubes: mods.smallCubes);
} else {
____sceneSetupData.gameplayModifiers = ____sceneSetupData.gameplayModifiers.CopyWith(zenMode: zenMode);
self._sceneSetupData.gameplayModifiers = self._sceneSetupData.gameplayModifiers.CopyWith(zenMode: zenMode);
}
Base(self);
}

// Hopefully we can get these patches into MultiplayerCore soon for large (~16 or more player) lobbies
Expand Down
4 changes: 2 additions & 2 deletions BeatUpClient/cs/Selector/0_Selector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ static partial class BeatUpClient {
foreach(UnityEngine.Transform tr in serverDropdown)
tr.localPosition = new UnityEngine.Vector3(0, 0, 0);

BeatUpClient_Config.Instance.Servers.TryGetValue(customServerHostName.value, out string? statusUrl);
UpdateNetworkConfig(customServerHostName, statusUrl ?? string.Empty);
BeatUpClient_Config.Instance.Servers.TryGetValue(customServerSettings.customServerHostName, out string? statusUrl);
UpdateNetworkConfig(customServerSettings.customServerHostName, statusUrl ?? string.Empty);
}
}
4 changes: 2 additions & 2 deletions BeatUpClient/cs/Selector/Dropdown.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ServerDropdown : DropdownSettingsController {
_dropdown = GetComponent<HMUI.SimpleTextDropdown>();
_dropdown._modalView._dismissPanelAnimation._duration = 0; // Animations will break the UI if the player clicks too fast
flowCoordinator = UnityEngine.Resources.FindObjectsOfTypeAll<MultiplayerModeSelectionFlowCoordinator>()[0];
ephemeralEntry = new Entry(customServerHostName.value, "");
ephemeralEntry = new Entry(customServerSettings.customServerHostName, "");

UnityEngine.GameObject colorSchemeButton = UnityEngine.Resources.FindObjectsOfTypeAll<ColorsOverrideSettingsPanelController>()[0]._editColorSchemeButton.gameObject;
UnityEngine.GameObject okButton = UnityEngine.Resources.FindObjectsOfTypeAll<EditColorSchemeController>()[0]._closeButton.gameObject;
Expand Down Expand Up @@ -73,7 +73,7 @@ class ServerDropdown : DropdownSettingsController {

idx = 0;
for(int i = 0, count = options.Length; i < count; ++i) {
if(options[i].name != customServerHostName.value)
if(options[i].name != customServerSettings.customServerHostName)
continue;
idx = i;
break;
Expand Down
4 changes: 2 additions & 2 deletions BeatUpClient/cs/Selector/EditServerViewController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ public class EditServerViewController : HMUI.ViewController {
if(firstActivation)
base.buttonBinder.AddBinding(cancelButton, () => Dismiss());
string? status = null;
if(edit && BeatUpClient_Config.Instance.Servers.TryGetValue(customServerHostName, out status))
activeKey = customServerHostName;
if(edit && BeatUpClient_Config.Instance.Servers.TryGetValue(customServerSettings.customServerHostName, out status))
activeKey = customServerSettings.customServerHostName;
else
activeKey = null;
editHostnameTextbox.SetText(activeKey ?? string.Empty);
Expand Down
2 changes: 1 addition & 1 deletion BeatUpClient/cs/Selector/NetworkConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ struct VanillaConfig : INetworkConfig {
}

static bool SetNetworkConfig(string hostname, string statusUrl) {
customServerHostName.value = hostname;
customServerSettings.customServerHostName = hostname;
CustomNetworkConfig? customNetworkConfig = Resolve<CustomNetworkConfig>();
if(customNetworkConfig == null)
return false;
Expand Down
6 changes: 3 additions & 3 deletions BeatUpClient/cs/Sharing/Tracker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class DownloadPreview : BeatmapLevel {
trackedLevels.RemoveAll(level => {
level.variants.RemoveAll(filter);
if(level.variants.Count == 0)
Resolve<BeatmapLevelsModel>()!._loadedBeatmapLevels.Remove(level.levelID);
Resolve<BeatmapLevelsModel>()!._allLoadedBeatmapLevelsRepository._idToBeatmapLevel.Remove(level.levelID);
return level.variants.Count == 0;
});
}
Expand All @@ -38,7 +38,7 @@ public class DownloadPreview : BeatmapLevel {
}
if(info.id.usage != ShareableType.BeatmapSet || info.id.mimeType != "application/json" || info.meta.byteLength < 1)
return false;
if(Resolve<BeatmapLevelsModel>()!._loadedBeatmapLevels.TryGetValue(info.id.name, out BeatmapLevel preview)) {
if(Resolve<BeatmapLevelsModel>()!._allLoadedBeatmapLevelsRepository._idToBeatmapLevel.TryGetValue(info.id.name, out BeatmapLevel preview)) {
DownloadPreview? share = preview as DownloadPreview;
if(share == null)
return false;
Expand All @@ -49,7 +49,7 @@ public class DownloadPreview : BeatmapLevel {
source.Add(connectedPlayer, info.offset);
} else {
DownloadPreview share = new DownloadPreview(info, connectedPlayer);
Resolve<BeatmapLevelsModel>()!._loadedBeatmapLevels[info.id.name] = share;
Resolve<BeatmapLevelsModel>()!._allLoadedBeatmapLevelsRepository._idToBeatmapLevel[info.id.name] = share;
trackedLevels.Add(share);
}
return true;
Expand Down
1 change: 0 additions & 1 deletion BeatUpClient/cs/UI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public class ValuePickerSetting : ListSettingsController {
public static UnityEngine.RectTransform CreateToggle(UnityEngine.Transform parent, string name, string headerKey, IValue<bool> value) {
UnityEngine.GameObject toggleTemplate = UnityEngine.Resources.FindObjectsOfTypeAll<UnityEngine.UI.Toggle>().Select(x => x.transform.parent.gameObject).First(p => p.name == "Fullscreen");
UnityEngine.GameObject gameObject = CreateElementWithText(toggleTemplate, parent, name, headerKey);
UnityEngine.Object.Destroy(gameObject.GetComponent<BoolSettingsController>());
ToggleSetting toggleSetting = gameObject.AddComponent<ToggleSetting>();
toggleSetting.setting = value;
gameObject.SetActive(true);
Expand Down
Loading

0 comments on commit 94a4a08

Please sign in to comment.