private static void RegisterStudioControls() { CurrentStateCategoryToggle CreateToggle(string name, int textureCount, Action <SkinEffectsController, int> set, Func <SkinEffectsController, int> get) { var tgl = new CurrentStateCategoryToggle(name, Mathf.Min(4, textureCount + 1), c => RescaleStudioLevel(get(c.charInfo.GetComponent <SkinEffectsController>()), textureCount, 3)); tgl.SelectedIndex.Subscribe(Observer.Create((int x) => { var controller = GetSelectedStudioController(); if (controller != null) { set(controller, RescaleStudioLevel(x, tgl.ToggleCount - 1, textureCount)); } })); return(tgl); } var sweatTgl = CreateToggle("Sweat", TextureLoader.WetTexturesFaceCount, (controller, i) => controller.SweatLevel = i, controller => controller.SweatLevel); var tearsTgl = CreateToggle("Tears", TextureLoader.TearTexturesCount, (controller, i) => controller.TearLevel = i, controller => controller.TearLevel); var droolTgl = CreateToggle("Drool", TextureLoader.DroolTexturesCount, (controller, i) => controller.DroolLevel = i, controller => controller.DroolLevel); var cumTgl = CreateToggle("Bukkake", TextureLoader.CumTexturesCount, (controller, i) => controller.BukkakeLevel = i, controller => controller.BukkakeLevel); var bldTgl = CreateToggle("Virgin blood", TextureLoader.BldTexturesCount, (controller, i) => controller.BloodLevel = i, controller => controller.BloodLevel); StudioAPI.CreateCurrentStateCategory(new CurrentStateCategory("Additional skin effects", new[] { sweatTgl, tearsTgl, droolTgl, cumTgl, bldTgl })); }