|
1 | 1 | ---@diagnostic disable: param-type-mismatch, return-type-mismatch, assign-type-mismatch |
2 | 2 |
|
3 | 3 | local FeatureBase = require("includes.modules.FeatureBase") |
| 4 | +local CWheel = require("includes.classes.CWheel") |
4 | 5 |
|
5 | 6 | ---@class DriftMode : FeatureBase |
6 | 7 | ---@field private m_entity PlayerVehicle -- Reference to PlayerVehicle |
7 | 8 | ---@field private m_smoke_fx array<handle>|nil |
8 | 9 | ---@field private m_is_active boolean |
9 | 10 | ---@overload fun(pv: PlayerVehicle): DriftMode |
10 | | -local DriftMode = setmetatable({}, FeatureBase) |
| 11 | +local DriftMode = setmetatable({}, FeatureBase) |
11 | 12 | DriftMode.__index = DriftMode |
12 | 13 | DriftMode.fxBones = { "suspension_lr", "suspension_rr" } |
13 | 14 |
|
@@ -107,7 +108,90 @@ function DriftMode:UpdateFX() |
107 | 108 | end |
108 | 109 | end |
109 | 110 |
|
110 | | -function DriftMode:Update() |
| 111 | +-- local debug_txt_scale = vec2:new(0.3, 0.3) |
| 112 | +-- local debug_white = Color(225, 225, 225, 255) |
| 113 | +-- function DriftMode:DrawDebugHUD() |
| 114 | +-- local PV = self.m_entity |
| 115 | +-- if (not PV:IsValid()) then |
| 116 | +-- return |
| 117 | +-- end |
| 118 | + |
| 119 | +-- local speed_vec = PV:GetSpeedVector() |
| 120 | +-- local lateral_vel = speed_vec.x |
| 121 | +-- local forward_vel = speed_vec.y |
| 122 | +-- local absolute_x = math.abs(lateral_vel) |
| 123 | +-- local absolute_y = math.abs(speed_vec.y) |
| 124 | +-- local delta_x = 0 + absolute_x |
| 125 | +-- local delta_y = 0 + absolute_y |
| 126 | +-- local angle_rad = math.atan(delta_y, delta_x) |
| 127 | +-- local angle_deg = math.deg(angle_rad) |
| 128 | +-- local wheels = PV:Resolve().m_wheels |
| 129 | + |
| 130 | +-- Game.DrawText( |
| 131 | +-- vec2:new(0.8, 0.35), |
| 132 | +-- _F("Raw Lateral Velocity: %.3f", lateral_vel), |
| 133 | +-- debug_white, |
| 134 | +-- debug_txt_scale, |
| 135 | +-- 4 |
| 136 | +-- ) |
| 137 | +-- Game.DrawText( |
| 138 | +-- vec2:new(0.8, 0.37), |
| 139 | +-- _F("Angle: %.0f°", angle_deg), |
| 140 | +-- debug_white, |
| 141 | +-- debug_txt_scale, |
| 142 | +-- 4 |
| 143 | +-- ) |
| 144 | + |
| 145 | +-- Game.DrawText( |
| 146 | +-- vec2:new(0.8, 0.39), |
| 147 | +-- _F("Forward Velocity: %.3f", forward_vel), |
| 148 | +-- debug_white, |
| 149 | +-- debug_txt_scale, |
| 150 | +-- 4 |
| 151 | +-- ) |
| 152 | + |
| 153 | +-- for i, wheel in wheels:Iter() do |
| 154 | +-- local cwheel = CWheel(wheel) |
| 155 | +-- if (not cwheel) then |
| 156 | +-- goto continue |
| 157 | +-- end |
| 158 | + |
| 159 | +-- local wheel_pwr = cwheel.m_drive_force:get_float() |
| 160 | +-- local brk_pwr = cwheel.m_brake_force:get_float() |
| 161 | +-- local drag_co = cwheel.m_tire_drag_coeff:get_float() |
| 162 | +-- local rot_spd = cwheel.m_rotation_speed:get_float() |
| 163 | +-- local top_spd_mult = cwheel.m_top_speed_mult:get_float() |
| 164 | +-- local is_full_thottle = cwheel:GetWheelFlag(Enums.eWheelFlags.FULL_THROTTLE) |
| 165 | +-- local is_cheat_tc = cwheel:GetWheelFlag(Enums.eWheelFlags.CHEAT_TC) |
| 166 | +-- local is_cheat_sc = cwheel:GetWheelFlag(Enums.eWheelFlags.CHEAT_SC) |
| 167 | +-- local is_driven = cwheel:GetConfigFlag(Enums.eWheelConfigFlags.POWERED) |
| 168 | +-- local wheel_txt = _F( |
| 169 | +-- "- %d: Power: %.3f | Brake: %.3f | Drag: %.3f | Rotation: %.3f | Speed Mult: %.3f", |
| 170 | +-- i, |
| 171 | +-- wheel_pwr, |
| 172 | +-- brk_pwr, |
| 173 | +-- drag_co, |
| 174 | +-- rot_spd, |
| 175 | +-- top_spd_mult |
| 176 | +-- ) |
| 177 | + |
| 178 | +-- Game.DrawText( |
| 179 | +-- vec2:new(0.7, 0.4 + (i * 0.02)), |
| 180 | +-- wheel_txt, |
| 181 | +-- debug_white, |
| 182 | +-- debug_txt_scale, |
| 183 | +-- 4 |
| 184 | +-- ) |
| 185 | + |
| 186 | +-- ::continue:: |
| 187 | +-- end |
| 188 | + |
| 189 | +-- if (angle_deg <= 88 and PAD.IS_CONTROL_PRESSED(0, 71)) then |
| 190 | +-- VEHICLE.SET_VEHICLE_CHEAT_POWER_INCREASE(PV:GetHandle(), 10.0) |
| 191 | +-- end |
| 192 | +-- end |
| 193 | + |
| 194 | +function DriftMode:UpdateArcadeStyle() |
111 | 195 | local PV = self.m_entity |
112 | 196 | local handle = PV:GetHandle() |
113 | 197 |
|
@@ -135,8 +219,18 @@ function DriftMode:Update() |
135 | 219 | VEHICLE.SET_VEHICLE_CHEAT_POWER_INCREASE(handle, 1.0) |
136 | 220 | self.m_is_active = false |
137 | 221 | end |
| 222 | +end |
| 223 | + |
| 224 | +function DriftMode:Update() |
| 225 | + if (GVars.features.vehicle.drift.mode < 3) then |
| 226 | + self:UpdateArcadeStyle() |
| 227 | + end |
138 | 228 |
|
139 | 229 | self:UpdateFX() |
| 230 | + |
| 231 | + -- if (Backend.debug_mode) then |
| 232 | + -- self:DrawDebugHUD() |
| 233 | + -- end |
140 | 234 | end |
141 | 235 |
|
142 | 236 | return DriftMode |
0 commit comments