Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Linq;
- using UnityEngine;
- using Verdun.UI;
- class CreateSettingIfNonExist : System.Attribute
- {
- public string PrefName;
- public object DefaultValue;
- public bool DifferentForController;
- public object ControllerDefaultValue;
- public CreateSettingIfNonExist(string pref, object def, bool differentForController = false, object controllerDefaultValue=null)
- {
- PrefName = pref;
- DefaultValue = def;
- DifferentForController = differentForController;
- ControllerDefaultValue = controllerDefaultValue;
- }
- }
- [CreateAssetMenu(menuName = "Verdun/GameSettings", fileName = DEFAULT_RESOURCE_NAME)]
- class GameSettingsData : ScriptableObject
- {
- private const string DEFAULT_RESOURCE_NAME = "GameSettingsData";
- #region Settings Variables
- [CreateSettingIfNonExist("setting_gametips", 2)]
- public CachedInt showGameTips;
- [CreateSettingIfNonExist("ui_scale_factor", 0f)]
- public CachedFloat uiScaleFactor;
- [CreateSettingIfNonExist("options_networktraffic", 0)]
- public CachedInt networkQuality;
- [CreateSettingIfNonExist("setting_showfps", false)]
- public CachedBool showFps;
- [CreateSettingIfNonExist("setting_gaswarning", true)]
- public CachedBool showGasWarning;
- [CreateSettingIfNonExist("setting_minimap_rotate", true)]
- public CachedBool rotateMiniMap;
- [CreateSettingIfNonExist("setting_enlarge_ui_text", false)]
- public CachedBool enlargeUiText;
- [CreateSettingIfNonExist("setting_controllerVibrate", true)]
- public CachedBool controllerVibrate;
- [CreateSettingIfNonExist("TUTORIALS_ENABLED", true)]
- public CachedBool tutorialsEnabled;
- [CreateSettingIfNonExist("settings_ui_inventory_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility inventoryVisibility;
- [CreateSettingIfNonExist("settings_ui_crosshair_visibility", UIVisibilitySetting.Always_Off)]
- public CachedVisibility crosshairVisibility;
- [CreateSettingIfNonExist("settings_ui_hitmarker_visibility", UIVisibilitySetting.Always_On)]
- public CachedVisibility hitmarkerVisibility;
- [CreateSettingIfNonExist("settings_ui_stanceicon_visibility", UIVisibilitySetting.Dynamic)]
- public CachedVisibility stanceIconVisibility;
- [CreateSettingIfNonExist("settings_ui_staminabar_visibility", UIVisibilitySetting.Dynamic)]
- public CachedVisibility staminaBarVisibility;
- [CreateSettingIfNonExist("settings_ui_abilities_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility abilitiesVisibility;
- [CreateSettingIfNonExist("settings_ui_tags_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility tagsVisibility;
- [CreateSettingIfNonExist("settings_ui_capturestatus_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility captureStatusVisiblity;
- [CreateSettingIfNonExist("settings_ui_scorebar_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility scoreBarVisibility;
- [CreateSettingIfNonExist("settings_ui_scoregain_visibility", UIVisibilitySetting.Always_On)]
- public CachedVisibility scoreGainVisibility;
- [CreateSettingIfNonExist("settings_ui_personalkillfeed_visibility", UIVisibilitySetting.Always_On)]
- public CachedVisibility personalKillFeedVisibility;
- [CreateSettingIfNonExist("settings_ui_killfeed_visibility", UIVisibilitySetting.Always_Off)]
- public CachedVisibility killFeedVisibility;
- [CreateSettingIfNonExist("settings_ui_squadstatus_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility squadStatusVisibility;
- [CreateSettingIfNonExist("settings_ui_reinforcementcountdown_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility ReinforcementCountdownVisibility;
- [CreateSettingIfNonExist("settings_ui_activitylog_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility activityLogVisibility;
- [CreateSettingIfNonExist("settings_ui_minimap_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility minimapVisibility;
- [CreateSettingIfNonExist("settings_ui_netperformance_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility netPerformanceVisibility;
- [CreateSettingIfNonExist("settings_ui_chat_visibility", UIVisibilitySetting.Toggle)]
- public CachedVisibility chatVisibility;
- [CreateSettingIfNonExist("setting_mouse", 0.7f, true, 0.3f)]
- public CachedFloat mouseSensitivity;
- [CreateSettingIfNonExist("setting_mouse_sight", 0.7f, true, 0.3f)]
- public CachedFloat mouseSight;
- [CreateSettingIfNonExist("setting_horizontal_sensitivity", 1f, true, 1f)]
- public CachedFloat horizontalSensitivity;
- [CreateSettingIfNonExist("setting_vertical_sensitivity", 1f, true, 1f)]
- public CachedFloat verticalSensitivity;
- [CreateSettingIfNonExist("setting_mouseInverted", false)]
- public CachedBool invertMouse;
- [CreateSettingIfNonExist("setting_mouseAcceleration", false, true, true)]
- public CachedBool mouseAcceleration;
- [CreateSettingIfNonExist("setting_mouseSmooth", false)]
- public CachedBool mouseSmoothing;
- [CreateSettingIfNonExist("setting_manualbolt", false)]
- public CachedBool manualBolt;
- [CreateSettingIfNonExist("setting_manualreload", false)]
- public CachedBool manualReload;
- [CreateSettingIfNonExist("setting_toggleADS", false)]
- public CachedBool toggleADS;
- [CreateSettingIfNonExist("setting_toggleSprint", false, true, true)]
- public CachedBool toggleSprint;
- [CreateSettingIfNonExist("setting_abilityMenu", false, true, true)]
- public CachedBool toggleAbilityMenu;
- [CreateSettingIfNonExist("setting_auto_sprint", false, true, false)]
- public CachedBool toggleAutoSprint;
- [CreateSettingIfNonExist("TOGGLEHOLDBREATH", false, true, true)]
- public CachedBool toggleHoldBreath;
- [CreateSettingIfNonExist("setting_switch_to_previous_stance", false, true, false)]
- public CachedBool switchToPreviousStance;
- [CreateSettingIfNonExist("setting_toggle_overview_map", false, true, true)]
- public CachedBool toggleOverviewMap;
- [CreateSettingIfNonExist("setting_voice_command_menu", false, true, true)]
- public CachedBool toggleVoiceCommandMenu;
- [CreateSettingIfNonExist("settings_ui_togglebehavior", 2)]
- public CachedInt toggleModBehaviour;
- [CreateSettingIfNonExist("setting_fov", 60f)]
- public CachedFloat fieldOfView;
- [CreateSettingIfNonExist("settings_resolution_scale", 1f)]
- public CachedFloat resolutionScale;
- [CreateSettingIfNonExist("setting_brightness2",0f)]
- public CachedFloat brightness;
- [CreateSettingIfNonExist("setting_contrast2",0f)]
- public CachedFloat contrast;
- [CreateSettingIfNonExist("setting_gamma2",1.0f)]
- public CachedFloat gamma;
- [CreateSettingIfNonExist("setting_volume", 1f)]
- public CachedFloat masterVolume;
- [CreateSettingIfNonExist("setting_musicvolume", 1f)]
- public CachedFloat musicVolume;
- [CreateSettingIfNonExist("setting_effectvolume", 1f)]
- public CachedFloat effectVolume;
- #endregion
- public Transform menuOptions;
- public static GameSettingsData Current
- {
- get
- {
- if (mCurrent != null) return mCurrent;
- mCurrent = ResourceManager.LoadResourceImmediate<GameSettingsData>(DEFAULT_RESOURCE_NAME, ResourceType.global);
- Debug.Assert(Current, "Could not find the default Setings asset. Please make sure there is a settings asset with the name '" + DEFAULT_RESOURCE_NAME + "' in a Resources folder.");
- return mCurrent;
- }
- }
- private static GameSettingsData mCurrent;
- public void Setup()
- {
- #if UNITY_EDITOR
- foreach (var f in GetType().GetFields())
- {
- var x = f.GetCustomAttributes(true);
- if (x.Length == 0) continue;
- var attr = f.GetCustomAttributes(true)[0] as CreateSettingIfNonExist;
- if (attr == null) continue;
- if (GetSettingByName(attr.PrefName) != null)
- {
- Debug.LogError($"Option with name {attr.PrefName} already exists!");
- continue;
- }
- var so = CreateInstance(f.FieldType);
- so.name = attr.PrefName;
- var s = new UnityEditor.SerializedObject(so);
- s.FindProperty("serializedPlayerPrefKey").stringValue = attr.PrefName;
- s.FindProperty("hasDifferentValueForController").boolValue = attr.DifferentForController;
- var defaultValue = s.FindProperty("defaultValue");
- var defaultValueForController = s.FindProperty("defaultValueForController");
- if (f.FieldType == typeof(CachedInt))
- {
- defaultValue.intValue = (int) attr.DefaultValue;
- if (attr.DifferentForController)
- defaultValueForController.intValue = (int) attr.ControllerDefaultValue;
- s.FindProperty("currentValue").intValue = defaultValue.intValue;
- s.FindProperty("currentValueController").intValue = defaultValueForController.intValue;
- }
- else if (f.FieldType == typeof(CachedBool))
- {
- defaultValue.boolValue = (bool) attr.DefaultValue;
- if(attr.DifferentForController)
- defaultValueForController.boolValue = (bool) attr.ControllerDefaultValue;
- s.FindProperty("currentValue").boolValue = defaultValue.boolValue;
- s.FindProperty("currentValueController").boolValue = defaultValueForController.boolValue;
- }
- else if (f.FieldType == typeof(CachedFloat))
- {
- defaultValue.floatValue = (float) attr.DefaultValue;
- if(attr.DifferentForController)
- defaultValueForController.floatValue = (float) attr.ControllerDefaultValue;
- s.FindProperty("currentValue").floatValue = defaultValue.floatValue;
- s.FindProperty("currentValueController").floatValue = defaultValueForController.floatValue;
- }
- else if (f.FieldType == typeof(CachedVisibility))
- {
- defaultValue.enumValueIndex = (int)(UIVisibilitySetting) attr.DefaultValue;
- if(attr.DifferentForController)
- defaultValueForController.enumValueIndex = (int)(UIVisibilitySetting) attr.DefaultValue;
- s.FindProperty("currentValue").enumValueIndex = (int)(UIVisibilitySetting) defaultValue.enumValueIndex;
- s.FindProperty("currentValueController").enumValueIndex = (int)(UIVisibilitySetting) defaultValueForController.enumValueIndex;
- }
- else
- {
- Debug.LogError($"You haven't added a case for {f.FieldType}");
- }
- s.ApplyModifiedProperties();
- UnityEditor.AssetDatabase.AddObjectToAsset(so, this);
- f.SetValue(this, so);
- }
- AssignFieldsToMenuOptions();
- UnityEditor.AssetDatabase.Refresh();
- #endif
- }
- public void DeleteAllAssets(bool saveAssets=true)
- {
- #if UNITY_EDITOR
- foreach (var f in GetType().GetFields())
- {
- var field = f.GetValue(this) as CachedSetting;
- if(field != null) UnityEditor.AssetDatabase.RemoveObjectFromAsset(field);
- }
- if(saveAssets)
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- public CachedSetting GetSettingByName(string name)
- {
- return GetType().GetFields().Select(f => f.GetValue(this))
- .OfType<CachedSetting>().FirstOrDefault(field => field.serializedPlayerPrefKey == name);
- }
- public void AssignFieldsToMenuOptions()
- {
- #if UNITY_EDITOR
- foreach (var f in GetType().GetFields())
- {
- var field = f.GetValue(this) as CachedSetting;
- if (field != null)
- {
- if (field is CachedBool b)
- {
- var toggle = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Toggle>(true).FirstOrDefault(x => x.OptionKey == b.name);
- if (toggle == null)
- {
- Debug.LogError($"Field {b.name} Doesn't exist as toggle in options, maybe you've mistyped something?");
- continue;
- }
- SetReferenceToScriptableObject(toggle, field);
- }
- if (field is CachedInt i)
- {
- var index = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Array>(true).FirstOrDefault(x => x.OptionKey == i.name);
- if (index == null)
- {
- Debug.LogError($"Field {i.name} Doesn't exist as OptionsRow_Array, maybe you've mistyped something?");
- continue;
- }
- SetReferenceToScriptableObject(index, field);
- }
- if (field is CachedVisibility v)
- {
- var visibility = menuOptions.GetComponentsInChildren<GUI_OptionsRow_UIVisibility>(true).FirstOrDefault(x =>
- StringFactory.GetFormattedEnum(x.Setting, "settings_{0}", StringFactory.Options.ToLower) == v.name);
- if (visibility == null)
- {
- Debug.LogError($"Field {v.name} Doesn't exist as a visibility setting, maybe you've mistyped something?");
- continue;
- }
- SetReferenceToScriptableObject(visibility, field);
- }
- if (field is CachedFloat cf)
- {
- var values = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Range>(true).Where(x => x.OptionKey == cf.name).ToList();
- if (values.Count == 0)
- {
- Debug.LogError($"Field {cf.name} Doesn't exist as OptionsRow_Array, maybe you've mistyped something?");
- continue;
- }
- foreach (var value in values)
- SetReferenceToScriptableObject(value, field);
- }
- }
- }
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- private static void SetReferenceToScriptableObject(GUI_OptionsRow toggle, CachedSetting scriptableObject, string fieldName="cachedValue")
- {
- var s = new UnityEditor.SerializedObject(toggle);
- s.FindProperty(fieldName).objectReferenceInstanceIDValue = scriptableObject.GetInstanceID();
- s.ApplyModifiedProperties();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement