Skip to content

Commit f2551fc

Browse files
committed
Update vehicle classes
1 parent bd0baf6 commit f2551fc

8 files changed

Lines changed: 117 additions & 125 deletions

File tree

ETS2LA.Game/SDK/ParkedVehicles.cs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,13 @@
55
using System.Numerics;
66
using System.Diagnostics;
77
using System.IO.MemoryMappedFiles;
8-
using TruckLib;
98

109
namespace ETS2LA.Game.SDK;
1110

12-
public class ParkedVehicle
11+
public class ParkedVehicle : BaseVehicle
1312
{
14-
public Vector3 position;
15-
public Quaternion rotation;
16-
public Vector3 size;
1713
public int id;
1814
public bool isTrailer;
19-
20-
public List<Vector3> GetCornersOnGround()
21-
{
22-
List<Vector3> corners = new List<Vector3>();
23-
Vector3 halfSize = size / 2;
24-
25-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, -halfSize.Z));
26-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, -halfSize.Z));
27-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, halfSize.Z));
28-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, halfSize.Z));
29-
30-
Quaternion invQuat = Quaternion.Conjugate(rotation);
31-
Vector3 euler = invQuat.ToEuler();
32-
Quaternion filteredRot = Quaternion.CreateFromYawPitchRoll(-euler.Y + (float)Math.PI, -euler.Z + (float)Math.PI, -euler.X);
33-
for (int i = 0; i < corners.Count; i++)
34-
{
35-
corners[i] = Vector3.Transform(corners[i] - position, filteredRot) + position;
36-
}
37-
38-
return corners;
39-
}
4015
}
4116

4217
public class ParkedVehicleData
@@ -68,6 +43,11 @@ public ParkedVehiclesProvider()
6843
updateThread.Start();
6944
}
7045

46+
public ParkedVehicleData? GetCurrentParkedVehicleData()
47+
{
48+
return _currentData;
49+
}
50+
7151
private void UpdateThread()
7252
{
7353
Stopwatch stopwatch = new Stopwatch();
@@ -138,18 +118,18 @@ private void Update()
138118
for (int i = 0; i < 40; i++)
139119
{
140120
ParkedVehicle vehicle = new ParkedVehicle();
141-
vehicle.position = new Vector3(
121+
vehicle.Position = new Vector3(
142122
_reader.ReadFloat(offset),
143123
_reader.ReadFloat(offset + 4),
144124
_reader.ReadFloat(offset + 8)
145125
); offset += 12;
146-
vehicle.rotation = new Quaternion(
126+
vehicle.Rotation = new Quaternion(
147127
_reader.ReadFloat(offset),
148128
_reader.ReadFloat(offset + 4),
149129
_reader.ReadFloat(offset + 8),
150130
_reader.ReadFloat(offset + 12)
151131
); offset += 16;
152-
vehicle.size = new Vector3(
132+
vehicle.Size = new Vector3(
153133
_reader.ReadFloat(offset),
154134
_reader.ReadFloat(offset + 4),
155135
_reader.ReadFloat(offset + 8)

ETS2LA.Game/SDK/Traffic.cs

Lines changed: 29 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,41 @@
99

1010
namespace ETS2LA.Game.SDK;
1111

12-
public class TrafficTrailer
12+
public class BaseVehicle
1313
{
14-
public Vector3 position = Vector3.Zero;
15-
public System.Numerics.Quaternion rotation = System.Numerics.Quaternion.Identity;
16-
public Vector3 size = Vector3.Zero;
14+
public Vector3 Position { get; set; }
15+
public Quaternion Rotation { get; set; }
16+
public Vector3 Size { get; set; }
1717

1818
public List<Vector3> GetCornersOnGround()
1919
{
2020
List<Vector3> corners = new List<Vector3>();
21-
Vector3 halfSize = size / 2;
21+
Vector3 halfSize = Size / 2;
2222

23-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, -halfSize.Z));
24-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, -halfSize.Z));
25-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, halfSize.Z));
26-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, halfSize.Z));
23+
corners.Add(Position + new Vector3(-halfSize.X, -halfSize.Y, -halfSize.Z));
24+
corners.Add(Position + new Vector3(halfSize.X, -halfSize.Y, -halfSize.Z));
25+
corners.Add(Position + new Vector3(halfSize.X, -halfSize.Y, halfSize.Z));
26+
corners.Add(Position + new Vector3(-halfSize.X, -halfSize.Y, halfSize.Z));
2727

28-
Quaternion invQuat = Quaternion.Conjugate(rotation);
28+
Quaternion invQuat = Quaternion.Conjugate(Rotation);
2929
Vector3 euler = invQuat.ToEuler();
3030
Quaternion filteredRot = Quaternion.CreateFromYawPitchRoll(-euler.Y + (float)Math.PI, -euler.Z + (float)Math.PI, -euler.X);
3131
for (int i = 0; i < corners.Count; i++)
3232
{
33-
corners[i] = Vector3.Transform(corners[i] - position, filteredRot) + position;
33+
corners[i] = Vector3.Transform(corners[i] - Position, filteredRot) + Position;
3434
}
3535

3636
return corners;
3737
}
3838
}
3939

40-
public class TrafficVehicle
40+
public class TrafficTrailer : BaseVehicle
41+
{
42+
public required TrafficVehicle parent;
43+
}
44+
45+
public class TrafficVehicle : BaseVehicle
4146
{
42-
public Vector3 position = Vector3.Zero;
43-
public System.Numerics.Quaternion rotation = System.Numerics.Quaternion.Identity;
44-
/// <summary>
45-
/// Size, X = Width, Y = Height, Z = Length. Note that the length is not always accurate, especially for trailers.
46-
/// </summary>
47-
public Vector3 size = Vector3.Zero;
4847
public float speed;
4948
public float acceleration;
5049
public Int16 trailer_count;
@@ -55,27 +54,6 @@ public class TrafficVehicle
5554
public bool isTrailer;
5655

5756
public TrafficTrailer[] trailers = Array.Empty<TrafficTrailer>();
58-
59-
public List<Vector3> GetCornersOnGround()
60-
{
61-
List<Vector3> corners = new List<Vector3>();
62-
Vector3 halfSize = size / 2;
63-
64-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, -halfSize.Z));
65-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, -halfSize.Z));
66-
corners.Add(position + new Vector3(halfSize.X, -halfSize.Y, halfSize.Z));
67-
corners.Add(position + new Vector3(-halfSize.X, -halfSize.Y, halfSize.Z));
68-
69-
Quaternion invQuat = Quaternion.Conjugate(rotation);
70-
Vector3 euler = invQuat.ToEuler();
71-
Quaternion filteredRot = Quaternion.CreateFromYawPitchRoll(-euler.Y + (float)Math.PI, -euler.Z + (float)Math.PI, -euler.X);
72-
for (int i = 0; i < corners.Count; i++)
73-
{
74-
corners[i] = Vector3.Transform(corners[i] - position, filteredRot) + position;
75-
}
76-
77-
return corners;
78-
}
7957
}
8058

8159
public class TrafficData
@@ -108,6 +86,11 @@ public TrafficProvider()
10886
updateThread.Start();
10987
}
11088

89+
public TrafficData? GetCurrentTrafficData()
90+
{
91+
return _currentData;
92+
}
93+
11194
private void UpdateThread()
11295
{
11396
Stopwatch stopwatch = new Stopwatch();
@@ -181,22 +164,22 @@ private void Update()
181164
TrafficVehicle vehicle = new TrafficVehicle();
182165

183166
// 0
184-
vehicle.position = new Vector3(
167+
vehicle.Position = new Vector3(
185168
_reader.ReadFloat(offset),
186169
_reader.ReadFloat(offset + 4),
187170
_reader.ReadFloat(offset + 8)
188171
); offset += 12;
189172

190173
// 12
191-
vehicle.rotation = new System.Numerics.Quaternion(
174+
vehicle.Rotation = new System.Numerics.Quaternion(
192175
_reader.ReadFloat(offset),
193176
_reader.ReadFloat(offset + 4),
194177
_reader.ReadFloat(offset + 8),
195178
_reader.ReadFloat(offset + 12)
196179
); offset += 16;
197180

198181
// 28
199-
vehicle.size = new Vector3(
182+
vehicle.Size = new Vector3(
200183
_reader.ReadFloat(offset), // Width
201184
_reader.ReadFloat(offset + 4), // Height
202185
_reader.ReadFloat(offset + 8) // Length
@@ -220,23 +203,23 @@ private void Update()
220203
for (int j = 0; j < 3; j++)
221204
{
222205
// 0
223-
TrafficTrailer trailer = new TrafficTrailer();
224-
trailer.position = new Vector3(
206+
TrafficTrailer trailer = new TrafficTrailer{ parent = vehicle };
207+
trailer.Position = new Vector3(
225208
_reader.ReadFloat(offset),
226209
_reader.ReadFloat(offset + 4),
227210
_reader.ReadFloat(offset + 8)
228211
); offset += 12;
229212

230213
// 12
231-
trailer.rotation = new System.Numerics.Quaternion(
214+
trailer.Rotation = new System.Numerics.Quaternion(
232215
_reader.ReadFloat(offset),
233216
_reader.ReadFloat(offset + 4),
234217
_reader.ReadFloat(offset + 8),
235218
_reader.ReadFloat(offset + 12)
236219
); offset += 16;
237220

238221
// 28
239-
trailer.size = new Vector3(
222+
trailer.Size = new Vector3(
240223
_reader.ReadFloat(offset), // Width
241224
_reader.ReadFloat(offset + 4), // Height
242225
_reader.ReadFloat(offset + 8) // Length

ETS2LA.Overlay/ETS2LA.Overlay.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<ItemGroup>
1111
<PackageReference Include="Hexa.NET.GLFW" Version="1.0.5"/>
1212
<PackageReference Include="Hexa.NET.ImGui" Version="2.2.9" />
13+
<PackageReference Include="Hexa.NET.ImPlot" Version="2.2.9" />
1314
<PackageReference Include="Hexa.NET.ImGui.Backends" Version="1.0.18" />
1415
<PackageReference Include="Hexa.NET.ImGui.Backends.GLFW" Version="1.0.18" />
1516
<PackageReference Include="Hexa.NET.OpenGL3" Version="1.1.0" />

ETS2LA.Overlay/Overlay.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using Hexa.NET.GLFW;
55
using Hexa.NET.ImGui;
6+
using Hexa.NET.ImPlot;
67
using Hexa.NET.ImGui.Backends.GLFW;
78
using Hexa.NET.ImGui.Backends.OpenGL3;
89
using Hexa.NET.OpenGL;
@@ -64,6 +65,7 @@ public class OverlayHandler
6465
private string glslVersion = "#version 150";
6566
private GLFWwindowPtr glfwWindow;
6667
private ImGuiContextPtr imGuiContext;
68+
private ImPlotContextPtr ImPlotContext;
6769
private ImGuiIOPtr io;
6870
private GL gl;
6971

@@ -399,6 +401,10 @@ private bool InitImGui()
399401
{
400402
imGuiContext = ImGui.CreateContext();
401403
ImGui.SetCurrentContext(imGuiContext);
404+
405+
ImPlot.SetImGuiContext(imGuiContext);
406+
ImPlotContext = ImPlot.CreateContext();
407+
ImPlot.SetCurrentContext(ImPlotContext);
402408

403409
io = ImGui.GetIO();
404410
io.ConfigFlags |= ImGuiConfigFlags.NavEnableKeyboard; // Enable Keyboard Controls

ETS2LA.State/Program.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,22 @@ public void Shutdown()
137137
// If determining what they do is hard via code, then take a look at the
138138
// example at https://docs.ets2la.com/docs/Rewrite/UserInput#how-to-listen-to-registered-controls
139139

140+
private void RoundToNearestUnit()
141+
{
142+
switch (DisplayUnits)
143+
{
144+
case Units.Metric:
145+
DesiredSpeed = (float)(Math.Round(DesiredSpeed * 3.6) / 3.6); // Round to nearest km/h
146+
break;
147+
case Units.Imperial:
148+
DesiredSpeed = (float)(Math.Round(DesiredSpeed * 2.237) / 2.237); // Round to nearest mph
149+
break;
150+
case Units.Scientific:
151+
DesiredSpeed = (float)Math.Round(DesiredSpeed); // Round to nearest m/s
152+
break;
153+
}
154+
}
155+
140156
private void HandleSet(object sender, ControlChangeEventArgs e)
141157
{
142158
bool b = (bool)e.NewValue;
@@ -149,6 +165,8 @@ private void HandleSet(object sender, ControlChangeEventArgs e)
149165
DesiredSpeed = latestTelemetryData.truckFloat.speed;
150166
else if (assistanceSettings.SetSpeedBehaviourOption == SetSpeedBehaviour.SpeedLimit)
151167
DesiredSpeed = latestTelemetryData.truckFloat.speedLimit;
168+
169+
RoundToNearestUnit();
152170
}
153171
else
154172
{
@@ -182,6 +200,8 @@ private void HandleIncrease(object sender, ControlChangeEventArgs e)
182200
DesiredSpeed += 1f; // 1 m/s
183201
break;
184202
}
203+
204+
RoundToNearestUnit();
185205
}
186206

187207
private void HandleDecrease(object sender, ControlChangeEventArgs e)
@@ -208,6 +228,8 @@ private void HandleDecrease(object sender, ControlChangeEventArgs e)
208228
DesiredSpeed -= 1f; // 1 m/s
209229
break;
210230
}
231+
232+
RoundToNearestUnit();
211233
}
212234

213235
private void HandleAssist(object sender, ControlChangeEventArgs e)

Plugins/ExampleConsumer/Program.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ public override void OnEnable()
8484
var bottomCorners = vehicle.GetCornersOnGround();
8585
var topCorners = new List<Vector3>
8686
{
87-
bottomCorners[0] + new Vector3(0, vehicle.size.Y, 0),
88-
bottomCorners[1] + new Vector3(0, vehicle.size.Y, 0),
89-
bottomCorners[2] + new Vector3(0, vehicle.size.Y, 0),
90-
bottomCorners[3] + new Vector3(0, vehicle.size.Y, 0)
87+
bottomCorners[0] + new Vector3(0, vehicle.Size.Y, 0),
88+
bottomCorners[1] + new Vector3(0, vehicle.Size.Y, 0),
89+
bottomCorners[2] + new Vector3(0, vehicle.Size.Y, 0),
90+
bottomCorners[3] + new Vector3(0, vehicle.Size.Y, 0)
9191
};
9292

9393
AR.Draw3DQuad(bottomCorners[0], bottomCorners[1], bottomCorners[2], bottomCorners[3], 0xFFFFFF);
@@ -102,10 +102,10 @@ public override void OnEnable()
102102
bottomCorners = trailer.GetCornersOnGround();
103103
topCorners = new List<Vector3>
104104
{
105-
bottomCorners[0] + new Vector3(0, trailer.size.Y, 0),
106-
bottomCorners[1] + new Vector3(0, trailer.size.Y, 0),
107-
bottomCorners[2] + new Vector3(0, trailer.size.Y, 0),
108-
bottomCorners[3] + new Vector3(0, trailer.size.Y, 0)
105+
bottomCorners[0] + new Vector3(0, trailer.Size.Y, 0),
106+
bottomCorners[1] + new Vector3(0, trailer.Size.Y, 0),
107+
bottomCorners[2] + new Vector3(0, trailer.Size.Y, 0),
108+
bottomCorners[3] + new Vector3(0, trailer.Size.Y, 0)
109109
};
110110

111111
AR.Draw3DQuad(bottomCorners[0], bottomCorners[1], bottomCorners[2], bottomCorners[3], 0xFFFFFF);
@@ -124,10 +124,10 @@ public override void OnEnable()
124124
var bottomCorners = vehicle.GetCornersOnGround();
125125
var topCorners = new List<Vector3>
126126
{
127-
bottomCorners[0] + new Vector3(0, vehicle.size.Y, 0),
128-
bottomCorners[1] + new Vector3(0, vehicle.size.Y, 0),
129-
bottomCorners[2] + new Vector3(0, vehicle.size.Y, 0),
130-
bottomCorners[3] + new Vector3(0, vehicle.size.Y, 0)
127+
bottomCorners[0] + new Vector3(0, vehicle.Size.Y, 0),
128+
bottomCorners[1] + new Vector3(0, vehicle.Size.Y, 0),
129+
bottomCorners[2] + new Vector3(0, vehicle.Size.Y, 0),
130+
bottomCorners[3] + new Vector3(0, vehicle.Size.Y, 0)
131131
};
132132

133133
AR.Draw3DQuad(bottomCorners[0], bottomCorners[1], bottomCorners[2], bottomCorners[3], 0xFFFFFF);

0 commit comments

Comments
 (0)