public void EvtStop() { _tdu2Reader.Close(); _tdu2Reader = null; _updateTel.Stop(); Telemetry = default(GenericDataDefinition); }
public static double GetTorque(double RPM, double throttle, double boost) { int BaseEngineCurve = 0x00ADD94C; // TODO: MAP TO SIMULATOR MAPPING // get engine torque figures (at this engine RPM) // this is directly from memory based engine curves. double Rads = (RPM); double Th_L = 0; double Th_H = 0; double Tl_L = 0; double Tl_H = 0; double R_L = 0; double R_H = 0; int offset = 0; double Th_Prev = 0; double Tl_Prev = 0; double R_Prev = 0; bool Cached = ((DoubleList.Count <= 25) ? false : true); if (!Cached) { lock (rf) { if (DoubleList.Count > 25) { return(0); } bool rfOpen = false; try { rf.ReadProcess = Process.GetProcessesByName(Telemetry.m.Sim.ProcessName)[0]; rf.Open(); rfOpen = true; DoubleList.Clear(); for (offset = 0; offset < 500; offset++) { double curve_rpm = 0, Tl_Now = 0, Th_Now = 0; // read rpm // TOOD: RFACTOR ONLY // TODO: these operations need to be moved to game DLL's!!! curve_rpm = Rotations.Rads_RPM(rf.ReadDouble(new IntPtr(BaseEngineCurve + 0x8 * 3 * offset))); Tl_Now = rf.ReadDouble(new IntPtr(BaseEngineCurve + 0x8 * 1 + 0x8 * 3 * offset)); Th_Now = rf.ReadDouble(new IntPtr(BaseEngineCurve + 0x8 * 2 + 0x8 * 3 * offset)); DoubleList.Add(curve_rpm); DoubleList.Add(Tl_Now); DoubleList.Add(Th_Now); } Cached = true; offset = 0; } catch (Exception ex) { Cached = false; DoubleList.Clear(); } if (rfOpen) { rf.Close(); } } } while (Th_H == 0) { double curve_rpm, Tl_Now, Th_Now; curve_rpm = DoubleList[offset * 3]; Tl_Now = DoubleList[offset * 3 + 1]; Th_Now = DoubleList[offset * 3 + 2]; if (curve_rpm >= Rads) { Th_L = Th_Prev; Th_H = Th_Now; Tl_L = Tl_Prev; Tl_H = Tl_Now; R_H = curve_rpm; R_L = R_Prev; break; } R_Prev = curve_rpm; Th_Prev = Th_Now; Tl_Prev = Tl_Now; offset++; } if (Th_H == 0) { } // calculate duty cycle and determine torque. double RPM_Part = (Rads - R_L) / (R_H - R_L); // factor in rpm curve. double TorqueH = Th_L + RPM_Part * (Th_H - Th_L); double TorqueL = Tl_L + RPM_Part * (Tl_H - Tl_L); //return TorqueH * throttle * boost + TorqueL * boost; return((TorqueH - TorqueL) * throttle * boost + TorqueL); }