Skip to content

Commit b0f3a79

Browse files
authored
Update 2.2, moved repo, merged gadny's
Change log (script updated 23 Jan 2025): Added Reverse Mode. In this mode at 0 MPH the camera defaults to Third Person Far; while at top speed the camera is set to First Person. See stickied comment for more details. Added delay mechanics and configuration in Mod Settings. Script credits to gadny. Camera perspective is now switchable with the default switch camera button (Q with keyboard) Code cleanup Github log: Moved to its own repo.
1 parent 757a0bb commit b0f3a79

File tree

2 files changed

+395
-0
lines changed

2 files changed

+395
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
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

Comments
 (0)