Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ControllerPresetsSettingsSubMenu.c
Go to the documentation of this file.
2{
3
4 ref array<ref SCR_ControllerPreset> m_aJoystickPresets = {};
5
6 //------------------------------------------------------------------------------------------------
7 override void OnTabHide()
8 {
9 super.OnTabHide();
10
11 SCR_HeadTrackingSettings.SetHeadTrackingSettings();
12 }
13
14 //------------------------------------------------------------------------------------------------
15 override void OnTabCreate(Widget menuRoot, ResourceName buttonsLayout, int index)
16 {
17 super.OnTabCreate(menuRoot, buttonsLayout, index);
18
19 PlatformKind platformKind = GetGame().GetPlatformService().GetLocalPlatformKind();
20 if (platformKind == PlatformKind.XBOX || platformKind == PlatformKind.PSN)
21 {
22 HideMenuItem("Devices");
23 HideMenuItem("JoystickPreset");
24 }
25 else
26 {
27 //joysticks are for now supported only non non-PS
29 }
30
31 m_aSettingsBindings.Clear();
32
33 // HEAD TRACKING
34 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_bHeadTrackingFreelook", "HeadTrackingFreelook"));
35 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_bHeadTrackingADS", "HeadTrackingADS"));
36 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_fHeadTrackingSensitivity", "HeadTrackingSensitivity"));
37 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_fHeadTrackingADSDeadzone", "HeadTrackingADSDeadzone"));
38
39 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_eHeadTrackingLean", "HeadTrackingLean"));
40 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_fHeadTrackingLeanSensitivity", "HeadTrackingLeanSensitivity"));
41 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_fHeadTrackingLeanDeadzone", "HeadTrackingLeanDeadzone"));
42 m_aSettingsBindings.Insert(new SCR_SettingBindingGameplay("SCR_HeadTrackingSettings", "m_fHeadTrackingLeanYawLimit", "HeadTrackingLeanYawLimit"));
43
45
46 // PRESETS
47 array<ref SCR_ControllerPreset> controllerPresets = {};
48 array<ref SCR_ControllerPreset> joystick0Presets = {};
49
51 if (keybindModule)
52 keybindModule.GetControllerPresets(controllerPresets);
53
55 combo = BindControllerPresets("Presets", controllerPresets);
56 if (combo)
57 combo.m_OnChanged.Insert(SelectControllerPreset);
58
59 if (DiagMenu.GetBool(SCR_DebugMenuID.DEBUGUI_UI_SHOW_ALL_SETTINGS, false))
60 return;
61
62 // Show only if there is TrackIR connected
63 if (!GetGame().GetInputManager().IsTrackIRConnected())
64 {
65 HideMenuItem("TitleHeadTracking");
66
67 HideMenuItem("HeadTrackingFreelook");
68 HideMenuItem("HeadTrackingADS");
69 HideMenuItem("HeadTrackingSensitivity");
70 HideMenuItem("HeadTrackingADSDeadzone");
71
72 HideMenuItem("HeadTrackingLean");
73 HideMenuItem("HeadTrackingLeanSensitivity");
74 HideMenuItem("HeadTrackingLeanDeadzone");
75 HideMenuItem("HeadTrackingLeanYawLimit");
76 }
77 }
78
79 //------------------------------------------------------------------------------------------------
83 SCR_ComboBoxComponent BindControllerPresets(string widgetName, notnull array<ref SCR_ControllerPreset> presets)
84 {
85 Widget presetsWidget = m_wRoot.FindAnyWidget(widgetName);
86 if (!presetsWidget)
87 return null;
88
90 if (!keybindModule)
91 return null;
92
93 SCR_ComboBoxComponent comboComp = SCR_ComboBoxComponent.Cast(presetsWidget.FindHandler(SCR_ComboBoxComponent));
94 if (!comboComp)
95 return null;
96
97 foreach (SCR_ControllerPreset preset : presets)
98 {
99 comboComp.AddItem(preset.GetDisplayName());
100 }
101
102 comboComp.SetCurrentItem(keybindModule.GetActivePresetIndex(presets));
103 return comboComp;
104 }
105
106 //------------------------------------------------------------------------------------------------
109 void SelectControllerPreset(SCR_ComboBoxComponent comp, int index)
110 {
112 if (keybindModule)
113 keybindModule.SelectControllerPresets(presetIndex: index);
114
115 //SCR_AnalyticsApplication.GetInstance().ChangeSetting("Presets", "Controller Preset");
116 }
117
118 //------------------------------------------------------------------------------------------------
121 void SelectJoystickPreset(SCR_ComboBoxComponent comp, int index)
122 {
124 if (!keybindModule)
125 return;
126
127 SCR_ControllerPreset preset = m_aJoystickPresets.Get(index);
128 if (!preset)
129 return;
130
131 keybindModule.SelectJoystickPresetPath(preset.GetResourceName());
132 }
133
134 //------------------------------------------------------------------------------------------------
135 protected void HandleJoystickDevices()
136 {
137 InputManager input = GetGame().GetInputManager();
138 Widget parent = m_wRoot.FindAnyWidget("Content");
139 string deviceName;
140 Widget joystickWidget;
141 Widget joystickIDCombo;
142 SCR_ComboBoxComponent component;
143 if (!parent)
144 return;
145
146 Widget joystickPreset = m_wRoot.FindAnyWidget("JoystickPreset");
147 if (!joystickPreset)
148 return;
149
150 component = SCR_ComboBoxComponent.Cast(joystickPreset.FindHandler(SCR_ComboBoxComponent));
151 if (!component)
152 return;
153
154 SetupJoystickPresets(component);
155
156 //for now we support up to 4 devices
157 for (int i = 0; i <= 3 ; i++)
158 {
159 deviceName = input.GetJoystickProductName(i);
160 if (deviceName.IsEmpty())
161 continue;
162
163 //handle joystic combos in here
164 joystickWidget = GetGame().GetWorkspace().CreateWidgets("{D8E57BEFB1599946}UI/layouts/Menus/SettingsMenu/JoystickSettingEntry.layout", parent);
165 joystickIDCombo = joystickWidget.FindAnyWidget("JoystickIDCombo");
166 if (!joystickIDCombo)
167 continue;
168
169 component = SCR_ComboBoxComponent.Cast(joystickIDCombo.FindHandler(SCR_ComboBoxComponent));
170 if (!component)
171 continue;
172
173 component.SetLabel(deviceName);
174 component.SetCurrentItem(i);
175 component.m_OnChanged.Insert(OnIndexChanged);
176
177 }
178 }
179
180 //------------------------------------------------------------------------------------------------
181 protected void OnIndexChanged(SCR_ComboBoxComponent component, int index)
182 {
183 //this is safe to do because we do not translate device names, we use exact strings from the devices so we can rely on it
184 string deviceName = component.GetLabel().GetText();
185 if (deviceName.IsEmpty())
186 return;
187
188 BaseContainer inputDeviceSettings = GetGame().GetEngineUserSettings().GetModule("InputDeviceUserSettings");
189 BaseContainer joystickSetting = inputDeviceSettings.GetObject("JoystickSettings");
190 if (!joystickSetting)
191 return;
192
193 BaseContainerList rules = joystickSetting.SetObjectArray("DeviceOrderRules");
194 if (!rules)
195 return;
196
197 BaseContainer container;
198 for (int i; i < rules.Count(); i++)
199 {
200 BaseContainer foundContainer = rules.Get(i);
201 string name;
202 if (foundContainer.Get("DeviceNameContains", name) && name == deviceName)
203 {
204 container = foundContainer;
205 break;
206 }
207 }
208
209 if (!container)
210 {
211 Resource holder = BaseContainerTools.CreateContainer("JoystickOrderRule");
212 if (holder)
213 container = holder.GetResource().ToBaseContainer();
214
215 rules.Insert(container);
216 }
217
218 container.Set("DeviceNameContains", deviceName);
219 container.Set("DeviceSlotNumber", index);
220
221 GetGame().UserSettingsChanged();
222 GetGame().SaveUserSettings();
223 }
224
225 //------------------------------------------------------------------------------------------------
228 {
230 if (!keybindModule)
231 return;
232
233 m_aJoystickPresets.Clear();
234 keybindModule.GetJoystickPresets(m_aJoystickPresets);
235
236 // load custom configs from profile folder
237 array<string> userConfigs = {};
238 FileIO.FindFiles(userConfigs.Insert, "$profile:.save/settings/customInputConfigs", ".conf");
239 foreach(string config : userConfigs)
240 {
241 bool found = false;
242 foreach (SCR_ControllerPreset preset : m_aJoystickPresets)
243 {
244 if (preset.GetResourceName() == config)
245 {
246 found = true;
247 break;
248 }
249 }
250
251 if (found)
252 continue;
253
254 SCR_ControllerPreset customPreset = new SCR_ControllerPreset();
255 customPreset.SetResourceName(config);
256 customPreset.SetDisplayName(FilePath.StripPath(config));
257 m_aJoystickPresets.Insert(customPreset);
258 }
259
260 foreach (SCR_ControllerPreset preset : m_aJoystickPresets)
261 {
262 component.AddItem(preset.GetDisplayName());
263 }
264
265 component.SetCurrentItem(keybindModule.GetActivePresetIndex(m_aJoystickPresets));
266 component.m_OnChanged.Insert(SelectJoystickPreset);
267 }
268}
SCR_DebugMenuID
This enum contains all IDs for DiagMenu entries added in script.
Definition DebugMenuID.c:4
SCR_SettingsManager GetSettingsManager()
Definition game.c:190
ArmaReforgerScripted GetGame()
Definition game.c:1398
PlatformKind
Definition PlatformKind.c:8
InputManager GetInputManager()
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
void LoadSettings()
ESettingManagerModuleType
Diagnostic and developer menu system.
Definition DiagMenu.c:18
Input management system for user interactions.
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
override bool SetCurrentItem(int i, bool playSound=false, bool animate=false)
override int AddItem(string item, bool last=false, Managed data=null)
Controller preset config class.
void SetResourceName(string preset)
void OnIndexChanged(SCR_ComboBoxComponent component, int index)
void SetupJoystickPresets(SCR_ComboBoxComponent component)
void GetControllerPresets(notnull out array< ref SCR_ControllerPreset > controllerPresets)
int GetActivePresetIndex(notnull array< ref SCR_ControllerPreset > presets)
void GetJoystickPresets(notnull out array< ref SCR_ControllerPreset > joystickPresets)
Get all preset lists defined for joysticks.
ref array< ref SCR_SettingsBindingBase > m_aSettingsBindings
void HideMenuItem(string widgetName)