Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.79 KB | None | 0 0
  1. using System.Linq;
  2. using UnityEngine;
  3. using Verdun.UI;
  4.  
  5. class CreateSettingIfNonExist : System.Attribute
  6. {
  7.     public string PrefName;
  8.     public object DefaultValue;
  9.     public bool DifferentForController;
  10.     public object ControllerDefaultValue;
  11.  
  12.     public CreateSettingIfNonExist(string pref, object def, bool differentForController = false, object controllerDefaultValue=null)
  13.     {
  14.         PrefName = pref;
  15.         DefaultValue = def;
  16.         DifferentForController = differentForController;
  17.         ControllerDefaultValue = controllerDefaultValue;
  18.     }
  19. }
  20.  
  21. [CreateAssetMenu(menuName = "Verdun/GameSettings", fileName = DEFAULT_RESOURCE_NAME)]
  22. class GameSettingsData : ScriptableObject
  23. {
  24.    
  25.     private const string DEFAULT_RESOURCE_NAME = "GameSettingsData";
  26.  
  27.     #region Settings Variables
  28.  
  29.  
  30.  
  31.     [CreateSettingIfNonExist("setting_gametips", 2)]
  32.     public CachedInt showGameTips;
  33.     [CreateSettingIfNonExist("ui_scale_factor", 0f)]
  34.     public CachedFloat uiScaleFactor;
  35.     [CreateSettingIfNonExist("options_networktraffic", 0)]
  36.     public CachedInt networkQuality;
  37.    
  38.    
  39.    
  40.    
  41.     [CreateSettingIfNonExist("setting_showfps", false)]
  42.     public CachedBool showFps;
  43.     [CreateSettingIfNonExist("setting_gaswarning", true)]
  44.     public CachedBool showGasWarning;
  45.     [CreateSettingIfNonExist("setting_minimap_rotate", true)]
  46.     public CachedBool rotateMiniMap;
  47.     [CreateSettingIfNonExist("setting_enlarge_ui_text", false)]
  48.     public CachedBool enlargeUiText;
  49.     [CreateSettingIfNonExist("setting_controllerVibrate", true)]
  50.     public CachedBool controllerVibrate;
  51.     [CreateSettingIfNonExist("TUTORIALS_ENABLED", true)]
  52.     public CachedBool tutorialsEnabled;
  53.    
  54.     [CreateSettingIfNonExist("settings_ui_inventory_visibility", UIVisibilitySetting.Toggle)]
  55.     public CachedVisibility inventoryVisibility;
  56.     [CreateSettingIfNonExist("settings_ui_crosshair_visibility", UIVisibilitySetting.Always_Off)]
  57.     public CachedVisibility crosshairVisibility;
  58.     [CreateSettingIfNonExist("settings_ui_hitmarker_visibility", UIVisibilitySetting.Always_On)]
  59.     public CachedVisibility hitmarkerVisibility;
  60.     [CreateSettingIfNonExist("settings_ui_stanceicon_visibility", UIVisibilitySetting.Dynamic)]
  61.     public CachedVisibility stanceIconVisibility;
  62.     [CreateSettingIfNonExist("settings_ui_staminabar_visibility", UIVisibilitySetting.Dynamic)]
  63.     public CachedVisibility staminaBarVisibility;
  64.     [CreateSettingIfNonExist("settings_ui_abilities_visibility", UIVisibilitySetting.Toggle)]
  65.     public CachedVisibility abilitiesVisibility;
  66.     [CreateSettingIfNonExist("settings_ui_tags_visibility", UIVisibilitySetting.Toggle)]
  67.     public CachedVisibility tagsVisibility;
  68.     [CreateSettingIfNonExist("settings_ui_capturestatus_visibility", UIVisibilitySetting.Toggle)]
  69.     public CachedVisibility captureStatusVisiblity;
  70.     [CreateSettingIfNonExist("settings_ui_scorebar_visibility", UIVisibilitySetting.Toggle)]
  71.     public CachedVisibility scoreBarVisibility;
  72.     [CreateSettingIfNonExist("settings_ui_scoregain_visibility", UIVisibilitySetting.Always_On)]
  73.     public CachedVisibility scoreGainVisibility;
  74.     [CreateSettingIfNonExist("settings_ui_personalkillfeed_visibility", UIVisibilitySetting.Always_On)]
  75.     public CachedVisibility personalKillFeedVisibility;
  76.     [CreateSettingIfNonExist("settings_ui_killfeed_visibility", UIVisibilitySetting.Always_Off)]
  77.     public CachedVisibility killFeedVisibility;
  78.     [CreateSettingIfNonExist("settings_ui_squadstatus_visibility", UIVisibilitySetting.Toggle)]
  79.     public CachedVisibility squadStatusVisibility;
  80.     [CreateSettingIfNonExist("settings_ui_reinforcementcountdown_visibility", UIVisibilitySetting.Toggle)]
  81.     public CachedVisibility ReinforcementCountdownVisibility;
  82.     [CreateSettingIfNonExist("settings_ui_activitylog_visibility", UIVisibilitySetting.Toggle)]
  83.     public CachedVisibility activityLogVisibility;
  84.     [CreateSettingIfNonExist("settings_ui_minimap_visibility", UIVisibilitySetting.Toggle)]
  85.     public CachedVisibility minimapVisibility;
  86.     [CreateSettingIfNonExist("settings_ui_netperformance_visibility", UIVisibilitySetting.Toggle)]
  87.     public CachedVisibility netPerformanceVisibility;
  88.     [CreateSettingIfNonExist("settings_ui_chat_visibility", UIVisibilitySetting.Toggle)]
  89.     public CachedVisibility chatVisibility;
  90.    
  91.     [CreateSettingIfNonExist("setting_mouse", 0.7f, true, 0.3f)]
  92.     public CachedFloat mouseSensitivity;
  93.     [CreateSettingIfNonExist("setting_mouse_sight", 0.7f, true, 0.3f)]
  94.     public CachedFloat mouseSight;
  95.     [CreateSettingIfNonExist("setting_horizontal_sensitivity", 1f, true, 1f)]
  96.     public CachedFloat horizontalSensitivity;
  97.     [CreateSettingIfNonExist("setting_vertical_sensitivity", 1f, true, 1f)]
  98.     public CachedFloat verticalSensitivity;
  99.    
  100.     [CreateSettingIfNonExist("setting_mouseInverted", false)]
  101.     public CachedBool invertMouse;
  102.     [CreateSettingIfNonExist("setting_mouseAcceleration", false, true, true)]
  103.     public CachedBool mouseAcceleration;
  104.     [CreateSettingIfNonExist("setting_mouseSmooth", false)]
  105.     public CachedBool mouseSmoothing;
  106.     [CreateSettingIfNonExist("setting_manualbolt", false)]
  107.     public CachedBool manualBolt;
  108.     [CreateSettingIfNonExist("setting_manualreload", false)]
  109.     public CachedBool manualReload;
  110.     [CreateSettingIfNonExist("setting_toggleADS", false)]
  111.     public CachedBool toggleADS;
  112.     [CreateSettingIfNonExist("setting_toggleSprint", false, true, true)]
  113.     public CachedBool toggleSprint;
  114.     [CreateSettingIfNonExist("setting_abilityMenu", false, true, true)]
  115.     public CachedBool toggleAbilityMenu;
  116.     [CreateSettingIfNonExist("setting_auto_sprint", false, true, false)]
  117.     public CachedBool toggleAutoSprint;
  118.     [CreateSettingIfNonExist("TOGGLEHOLDBREATH", false, true, true)]
  119.     public CachedBool toggleHoldBreath;
  120.     [CreateSettingIfNonExist("setting_switch_to_previous_stance", false, true, false)]
  121.     public CachedBool switchToPreviousStance;
  122.     [CreateSettingIfNonExist("setting_toggle_overview_map", false, true, true)]
  123.     public CachedBool toggleOverviewMap;
  124.     [CreateSettingIfNonExist("setting_voice_command_menu", false, true, true)]
  125.     public CachedBool toggleVoiceCommandMenu;
  126.    
  127.    
  128.     [CreateSettingIfNonExist("settings_ui_togglebehavior", 2)]
  129.     public CachedInt toggleModBehaviour;
  130.     [CreateSettingIfNonExist("setting_fov", 60f)]
  131.     public CachedFloat fieldOfView;
  132.     [CreateSettingIfNonExist("settings_resolution_scale", 1f)]
  133.     public CachedFloat resolutionScale;
  134.     [CreateSettingIfNonExist("setting_brightness2",0f)]
  135.     public CachedFloat brightness;
  136.     [CreateSettingIfNonExist("setting_contrast2",0f)]
  137.     public CachedFloat contrast;
  138.     [CreateSettingIfNonExist("setting_gamma2",1.0f)]
  139.     public CachedFloat gamma;
  140.  
  141.     [CreateSettingIfNonExist("setting_volume", 1f)]
  142.     public CachedFloat masterVolume;
  143.     [CreateSettingIfNonExist("setting_musicvolume", 1f)]
  144.     public CachedFloat musicVolume;
  145.     [CreateSettingIfNonExist("setting_effectvolume", 1f)]
  146.     public CachedFloat effectVolume;
  147.    
  148.     #endregion
  149.  
  150.     public Transform menuOptions;
  151.    
  152.    
  153.     public static GameSettingsData Current
  154.     {
  155.         get
  156.         {
  157.             if (mCurrent != null) return mCurrent;
  158.             mCurrent = ResourceManager.LoadResourceImmediate<GameSettingsData>(DEFAULT_RESOURCE_NAME, ResourceType.global);
  159.             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.");
  160.             return mCurrent;
  161.         }
  162.     }
  163.     private static GameSettingsData mCurrent;    
  164.    
  165.  
  166.     public void Setup()
  167.     {
  168. #if UNITY_EDITOR
  169.         foreach (var f in GetType().GetFields())
  170.         {
  171.             var x = f.GetCustomAttributes(true);
  172.             if (x.Length == 0) continue;
  173.             var attr = f.GetCustomAttributes(true)[0] as CreateSettingIfNonExist;
  174.             if (attr == null) continue;
  175.             if (GetSettingByName(attr.PrefName) != null)
  176.             {
  177.                 Debug.LogError($"Option with name {attr.PrefName} already exists!");
  178.                 continue;
  179.             }
  180.             var so = CreateInstance(f.FieldType);
  181.             so.name = attr.PrefName;
  182.             var s = new UnityEditor.SerializedObject(so);
  183.            
  184.            
  185.             s.FindProperty("serializedPlayerPrefKey").stringValue = attr.PrefName;
  186.             s.FindProperty("hasDifferentValueForController").boolValue = attr.DifferentForController;
  187.            
  188.             var defaultValue = s.FindProperty("defaultValue");
  189.             var defaultValueForController = s.FindProperty("defaultValueForController");
  190.            
  191.  
  192.             if (f.FieldType == typeof(CachedInt))
  193.             {
  194.                 defaultValue.intValue = (int) attr.DefaultValue;
  195.                 if (attr.DifferentForController)
  196.                     defaultValueForController.intValue = (int) attr.ControllerDefaultValue;
  197.                 s.FindProperty("currentValue").intValue = defaultValue.intValue;
  198.                 s.FindProperty("currentValueController").intValue = defaultValueForController.intValue;
  199.             }
  200.             else if (f.FieldType == typeof(CachedBool))
  201.             {
  202.                 defaultValue.boolValue = (bool) attr.DefaultValue;
  203.                 if(attr.DifferentForController)
  204.                     defaultValueForController.boolValue = (bool) attr.ControllerDefaultValue;
  205.                 s.FindProperty("currentValue").boolValue = defaultValue.boolValue;
  206.                 s.FindProperty("currentValueController").boolValue = defaultValueForController.boolValue;
  207.             }
  208.             else if (f.FieldType == typeof(CachedFloat))
  209.             {
  210.                 defaultValue.floatValue = (float) attr.DefaultValue;
  211.                 if(attr.DifferentForController)
  212.                     defaultValueForController.floatValue = (float) attr.ControllerDefaultValue;
  213.                 s.FindProperty("currentValue").floatValue = defaultValue.floatValue;
  214.                 s.FindProperty("currentValueController").floatValue = defaultValueForController.floatValue;
  215.  
  216.             }
  217.             else if (f.FieldType == typeof(CachedVisibility))
  218.             {
  219.                 defaultValue.enumValueIndex = (int)(UIVisibilitySetting) attr.DefaultValue;
  220.                 if(attr.DifferentForController)
  221.                     defaultValueForController.enumValueIndex = (int)(UIVisibilitySetting) attr.DefaultValue;
  222.                 s.FindProperty("currentValue").enumValueIndex = (int)(UIVisibilitySetting) defaultValue.enumValueIndex;
  223.                 s.FindProperty("currentValueController").enumValueIndex = (int)(UIVisibilitySetting) defaultValueForController.enumValueIndex;
  224.             }
  225.             else
  226.             {
  227.                 Debug.LogError($"You haven't added a case for {f.FieldType}");
  228.             }
  229.            
  230.             s.ApplyModifiedProperties();
  231.            
  232.             UnityEditor.AssetDatabase.AddObjectToAsset(so, this);
  233.             f.SetValue(this, so);
  234.            
  235.         }
  236.         AssignFieldsToMenuOptions();
  237.         UnityEditor.AssetDatabase.Refresh();
  238. #endif
  239.     }
  240.  
  241.     public void DeleteAllAssets(bool saveAssets=true)
  242.     {
  243.         #if UNITY_EDITOR
  244.         foreach (var f in GetType().GetFields())
  245.         {
  246.             var field = f.GetValue(this) as CachedSetting;
  247.             if(field != null) UnityEditor.AssetDatabase.RemoveObjectFromAsset(field);
  248.         }
  249.         if(saveAssets)
  250.             UnityEditor.AssetDatabase.SaveAssets();
  251.  
  252.         #endif
  253.     }
  254.  
  255.  
  256.     public CachedSetting GetSettingByName(string name)
  257.     {
  258.         return GetType().GetFields().Select(f => f.GetValue(this))
  259.             .OfType<CachedSetting>().FirstOrDefault(field => field.serializedPlayerPrefKey == name);
  260.     }
  261.  
  262.     public void AssignFieldsToMenuOptions()
  263.     {
  264.         #if UNITY_EDITOR
  265.         foreach (var f in GetType().GetFields())
  266.         {
  267.             var field = f.GetValue(this) as CachedSetting;
  268.             if (field != null)
  269.             {
  270.                 if (field is CachedBool b)
  271.                 {
  272.                     var toggle = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Toggle>(true).FirstOrDefault(x => x.OptionKey == b.name);
  273.                     if (toggle == null)
  274.                     {
  275.                         Debug.LogError($"Field  {b.name}   Doesn't exist as toggle in options, maybe you've mistyped something?");
  276.                         continue;
  277.                     }
  278.                     SetReferenceToScriptableObject(toggle, field);
  279.                 }
  280.  
  281.                 if (field is CachedInt i)
  282.                 {
  283.                     var index = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Array>(true).FirstOrDefault(x => x.OptionKey == i.name);
  284.                     if (index == null)
  285.                     {
  286.                         Debug.LogError($"Field  {i.name} Doesn't exist as OptionsRow_Array, maybe you've mistyped something?");
  287.                         continue;
  288.                     }
  289.                     SetReferenceToScriptableObject(index, field);
  290.                 }
  291.                 if (field is CachedVisibility v)
  292.                 {
  293.                     var visibility = menuOptions.GetComponentsInChildren<GUI_OptionsRow_UIVisibility>(true).FirstOrDefault(x =>
  294.                         StringFactory.GetFormattedEnum(x.Setting, "settings_{0}", StringFactory.Options.ToLower) == v.name);
  295.                     if (visibility == null)
  296.                     {
  297.                         Debug.LogError($"Field  {v.name} Doesn't exist as a visibility setting, maybe you've mistyped something?");
  298.                         continue;
  299.                     }
  300.                     SetReferenceToScriptableObject(visibility, field);
  301.                 }
  302.                
  303.                 if (field is CachedFloat cf)
  304.                 {
  305.                     var values = menuOptions.GetComponentsInChildren<GUI_OptionsRow_Range>(true).Where(x => x.OptionKey == cf.name).ToList();
  306.                     if (values.Count == 0)
  307.                     {
  308.                         Debug.LogError($"Field  {cf.name} Doesn't exist as OptionsRow_Array, maybe you've mistyped something?");
  309.                         continue;
  310.                     }
  311.  
  312.                     foreach (var value in values)
  313.                         SetReferenceToScriptableObject(value, field);
  314.                 }
  315.             }
  316.         }
  317.         UnityEditor.AssetDatabase.SaveAssets();
  318.  
  319.         #endif
  320.     }
  321.  
  322.     private static void SetReferenceToScriptableObject(GUI_OptionsRow toggle, CachedSetting scriptableObject, string fieldName="cachedValue")
  323.     {
  324.         var s = new UnityEditor.SerializedObject(toggle);
  325.         s.FindProperty(fieldName).objectReferenceInstanceIDValue = scriptableObject.GetInstanceID();
  326.         s.ApplyModifiedProperties();
  327.     }
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement