1
+ public class DSVCConfig extends ScriptableSystem {
2
+
3
+ // General Toggles
4
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
5
+ @runtimeProperty("ModSettings.category", "General Settings")
6
+ @runtimeProperty("ModSettings.category.order", "0")
7
+ @runtimeProperty("ModSettings.displayName", "Enable Dynamic Camera for Cars")
8
+ @runtimeProperty("ModSettings.description", "Toggle to enable the dynamic camera transitions for cars")
9
+ public let EnableDynamicCamera: Bool = true;
10
+
11
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
12
+ @runtimeProperty("ModSettings.category", "General Settings")
13
+ @runtimeProperty("ModSettings.category.order", "0")
14
+ @runtimeProperty("ModSettings.displayName", "Enable Dynamic Camera for Bikes")
15
+ @runtimeProperty("ModSettings.description", "Toggle to enable the dynamic camera transitions for bikes")
16
+ public let EnableDynamicCameraBikes: Bool = true;
17
+
18
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
19
+ @runtimeProperty("ModSettings.category", "General Settings")
20
+ @runtimeProperty("ModSettings.category.order", "0")
21
+ @runtimeProperty("ModSettings.displayName", "Combat Override")
22
+ @runtimeProperty("ModSettings.description", "Toggle to enable camera override during combat state, independent of dynamic transitions. Default: OFF")
23
+ public let CombatOverride: Bool = false;
24
+
25
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
26
+ @runtimeProperty("ModSettings.category", "General Settings")
27
+ @runtimeProperty("ModSettings.category.order", "3")
28
+ @runtimeProperty("ModSettings.displayName", "Default Combat State Camera")
29
+ @runtimeProperty("ModSettings.description", "Select the camera perspective to switch to during combat state, applicable to both cars and bikes. Default: Combat Medium")
30
+ @runtimeProperty("ModSettings.displayValues.FPP", "First Person")
31
+ @runtimeProperty("ModSettings.displayValues.TPPClose", "Third Person Close")
32
+ @runtimeProperty("ModSettings.displayValues.TPPMedium", "Third Person Medium")
33
+ @runtimeProperty("ModSettings.displayValues.TPPFar", "Third Person Far")
34
+ @runtimeProperty("ModSettings.displayValues.DriverCombatClose", "Combat Close")
35
+ @runtimeProperty("ModSettings.displayValues.DriverCombatMedium", "Combat Medium")
36
+ @runtimeProperty("ModSettings.displayValues.DriverCombatFar", "Combat Far")
37
+ @runtimeProperty("ModSettings.dependency", "CombatOverride")
38
+ public let DefaultCombatCamera: vehicleCameraPerspective = vehicleCameraPerspective.DriverCombatMedium;
39
+
40
+ // Delay settings - credits to @gadny for the delay system
41
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
42
+ @runtimeProperty("ModSettings.category", "Transition Settings")
43
+ @runtimeProperty("ModSettings.category.order", "1")
44
+ @runtimeProperty("ModSettings.step", "0.1")
45
+ @runtimeProperty("ModSettings.min", "0.0")
46
+ @runtimeProperty("ModSettings.max", "10.0")
47
+ @runtimeProperty("ModSettings.displayName", "Camera Change Delay")
48
+ @runtimeProperty("ModSettings.description", "Amount of time in seconds before the camera transitions. Default: 2 seconds")
49
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
50
+ public let cameraChangeDelay: Float = 2.0;
51
+
52
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
53
+ @runtimeProperty("ModSettings.category", "Transition Settings")
54
+ @runtimeProperty("ModSettings.category.order", "1")
55
+ @runtimeProperty("ModSettings.displayName", "Time Dilation Effects Delay")
56
+ @runtimeProperty("ModSettings.description", "Enable to allow time dilation like the scanner to affect camera change delay time. Default: OFF")
57
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
58
+ public let timeDilationEffectsDelay: Bool = false;
59
+
60
+ // Reverse mode
61
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
62
+ @runtimeProperty("ModSettings.category", "Transition Settings")
63
+ @runtimeProperty("ModSettings.category.order", "1")
64
+ @runtimeProperty("ModSettings.displayName", "Reverse Mode")
65
+ @runtimeProperty("ModSettings.description", "Toggle to enable reverse transition: camera defaults to Third Person Far at 0 MPH; First Person at Max Speed. Default: OFF.\n If enabled: Breakpoint 1 configures Third Person Far to Medium; Third Person Far exclusion excludes First Person; etc")
66
+ public let ReverseMode: Bool = false;
67
+
68
+ // Car settings
69
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
70
+ @runtimeProperty("ModSettings.category", "Car Settings")
71
+ @runtimeProperty("ModSettings.category.order", "2")
72
+ @runtimeProperty("ModSettings.displayName", "Assumed Max Speed")
73
+ @runtimeProperty("ModSettings.description", "Placeholder value for max MPH. The value will adjust accordingly to your max driving speed. Default: 55 MPH")
74
+ @runtimeProperty("ModSettings.step", "1")
75
+ @runtimeProperty("ModSettings.min", "5")
76
+ @runtimeProperty("ModSettings.max", "300")
77
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
78
+ public let defaultMaxSpeed: Int32 = 55;
79
+
80
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
81
+ @runtimeProperty("ModSettings.category", "Car Settings")
82
+ @runtimeProperty("ModSettings.category.order", "2")
83
+ @runtimeProperty("ModSettings.displayName", "Car Breakpoint 1")
84
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from First Person to Third Person Close. Set the value to 0 to disable First Person. Default: 25%")
85
+ @runtimeProperty("ModSettings.step", "1.0")
86
+ @runtimeProperty("ModSettings.min", "0.0")
87
+ @runtimeProperty("ModSettings.max", "100.0")
88
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
89
+ public let FPPtoTPP: Float = 25.0;
90
+
91
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
92
+ @runtimeProperty("ModSettings.category", "Car Settings")
93
+ @runtimeProperty("ModSettings.category.order", "2")
94
+ @runtimeProperty("ModSettings.displayName", "Car Breakpoint 2")
95
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from Third Person Close to Medium. Default: 50%")
96
+ @runtimeProperty("ModSettings.step", "1.0")
97
+ @runtimeProperty("ModSettings.min", "0.0")
98
+ @runtimeProperty("ModSettings.max", "100.0")
99
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
100
+ public let CloseToMedium: Float = 50.0;
101
+
102
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
103
+ @runtimeProperty("ModSettings.category", "Car Settings")
104
+ @runtimeProperty("ModSettings.category.order", "2")
105
+ @runtimeProperty("ModSettings.displayName", "Car Breakpoint 3")
106
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from Third Person Medium to Far. Default: 75%")
107
+ @runtimeProperty("ModSettings.step", "1.0")
108
+ @runtimeProperty("ModSettings.min", "0.0")
109
+ @runtimeProperty("ModSettings.max", "100.0")
110
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
111
+ public let MediumToFar: Float = 75.0;
112
+
113
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
114
+ @runtimeProperty("ModSettings.category", "Car Settings")
115
+ @runtimeProperty("ModSettings.category.order", "2")
116
+ @runtimeProperty("ModSettings.displayName", "Exclude Third Person Far (Cars)")
117
+ @runtimeProperty("ModSettings.description", "Toggle to exclude Third Person Far for cars; Breakpoint 3 will be ignored. Default: OFF")
118
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCamera")
119
+ public let ExcludeTPPFar: Bool = false;
120
+
121
+ // Bike settings
122
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
123
+ @runtimeProperty("ModSettings.category", "Bike Settings")
124
+ @runtimeProperty("ModSettings.category.order", "3")
125
+ @runtimeProperty("ModSettings.displayName", "Assumed Max Speed")
126
+ @runtimeProperty("ModSettings.description", "Default value for max MPH, the value will adjust accordingly to your max driving speed. Default: 45 MPH")
127
+ @runtimeProperty("ModSettings.step", "1")
128
+ @runtimeProperty("ModSettings.min", "5")
129
+ @runtimeProperty("ModSettings.max", "300")
130
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCameraBikes")
131
+ public let defaultMaxSpeedBikes: Int32 = 45;
132
+
133
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
134
+ @runtimeProperty("ModSettings.category", "Bike Settings")
135
+ @runtimeProperty("ModSettings.category.order", "3")
136
+ @runtimeProperty("ModSettings.displayName", "Bike Breakpoint 1")
137
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from First Person to Third Person Close; set the value to 0 to disable First Person. Default: 25%")
138
+ @runtimeProperty("ModSettings.step", "1.0")
139
+ @runtimeProperty("ModSettings.min", "0.0")
140
+ @runtimeProperty("ModSettings.max", "100.0")
141
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCameraBikes")
142
+ public let FPPtoTPPBike: Float = 25.0;
143
+
144
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
145
+ @runtimeProperty("ModSettings.category", "Bike Settings")
146
+ @runtimeProperty("ModSettings.category.order", "3")
147
+ @runtimeProperty("ModSettings.displayName", "Bike Breakpoint 2")
148
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from Third Person Close to Medium. Default: 50%")
149
+ @runtimeProperty("ModSettings.step", "1.0")
150
+ @runtimeProperty("ModSettings.min", "0.0")
151
+ @runtimeProperty("ModSettings.max", "100.0")
152
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCameraBikes")
153
+ public let CloseToMediumBike: Float = 50.0;
154
+
155
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
156
+ @runtimeProperty("ModSettings.category", "Bike Settings")
157
+ @runtimeProperty("ModSettings.category.order", "3")
158
+ @runtimeProperty("ModSettings.displayName", "Bike Breakpoint 3")
159
+ @runtimeProperty("ModSettings.description", "Percentage of Assumed Max Speed to trigger transition from Third Person Medium to Far. Default: 75%")
160
+ @runtimeProperty("ModSettings.step", "1.0")
161
+ @runtimeProperty("ModSettings.min", "0.0")
162
+ @runtimeProperty("ModSettings.max", "100.0")
163
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCameraBikes")
164
+ public let MediumToFarBike: Float = 75.0;
165
+
166
+ @runtimeProperty("ModSettings.mod", "Dynamic Speed Vehicle Camera")
167
+ @runtimeProperty("ModSettings.category", "Bike Settings")
168
+ @runtimeProperty("ModSettings.category.order", "3")
169
+ @runtimeProperty("ModSettings.displayName", "Exclude Third Person Far (Bikes)")
170
+ @runtimeProperty("ModSettings.description", "Toggle to exclude Third Person Far for bikes; Breakpoint 3 will be ignored. Default: OFF")
171
+ @runtimeProperty("ModSettings.dependency", "EnableDynamicCameraBikes")
172
+ public let ExcludeTPPFarBike: Bool = false;
173
+
174
+ public let activeVehicleMaxSpeedSeen: Int32;
175
+ public let lastActiveVehicle: wref<VehicleObject>;
176
+ public let cachedVehicleType: gamedataVehicleType;
177
+
178
+ public static func Get(gi: GameInstance) -> ref<DSVCConfig> {
179
+ return GameInstance.GetScriptableSystemsContainer(gi).Get(n"DSVCConfig") as DSVCConfig;
180
+ }
181
+
182
+ private func OnAttach() -> Void { dsvcRegisterListener(this); }
183
+ private func OnDetach() -> Void { dsvcUnregisterListener(this); }
184
+ }
185
+
186
+ @if(ModuleExists("ModSettingsModule" ))
187
+ public func dsvcRegisterListener(listener: ref<IScriptable > ) {
188
+ ModSettings.RegisterListenerToClass(listener);
189
+ }
190
+
191
+ @if(ModuleExists("ModSettingsModule" ))
192
+ public func dsvcUnregisterListener(listener: ref<IScriptable > ) {
193
+ ModSettings.UnregisterListenerToClass(listener);
194
+ }
195
+
196
+ @if(!ModuleExists("ModSettingsModule" ))
197
+ public func dsvcRegisterListener(listener: ref<IScriptable > ) { }
198
+
199
+ @if(!ModuleExists("ModSettingsModule" ))
200
+ public func dsvcUnregisterListener(listener: ref<IScriptable > ) { }
0 commit comments