99
1010namespace 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
8159public 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
0 commit comments