diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClient.Demo.csproj b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClient.Demo.csproj
index 464fa55..639b7ef 100644
--- a/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClient.Demo.csproj
+++ b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClient.Demo.csproj
@@ -49,16 +49,16 @@
Component
-
+
Form
-
- Form1.cs
+
+ Ets2SdkClientDemo.cs
-
- Form1.cs
+
+ Ets2SdkClientDemo.cs
ResXFileCodeGenerator
diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Form1.Designer.cs b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.Designer.cs
similarity index 96%
rename from ets2-client/C#/Ets2SdkClient.Demo/Form1.Designer.cs
rename to ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.Designer.cs
index 9d38813..624a4d0 100644
--- a/ets2-client/C#/Ets2SdkClient.Demo/Form1.Designer.cs
+++ b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.Designer.cs
@@ -1,6 +1,6 @@
namespace Ets2SdkClient.Demo
{
- partial class Form1
+ partial class Ets2SdkClientDemo
{
///
/// Required designer variable.
@@ -28,12 +28,12 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Ets2SdkClientDemo));
this.telemetryInfo = new System.Windows.Forms.TabControl();
this.tabAbout = new System.Windows.Forms.TabPage();
- this.lblDemo = new System.Windows.Forms.Label();
- this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.lbGeneral = new System.Windows.Forms.RichTextBox();
+ this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+ this.lblDemo = new System.Windows.Forms.Label();
this.telemetryInfo.SuspendLayout();
this.tabAbout.SuspendLayout();
this.SuspendLayout();
@@ -61,15 +61,13 @@ private void InitializeComponent()
this.tabAbout.Text = "About";
this.tabAbout.UseVisualStyleBackColor = true;
//
- // lblDemo
+ // lbGeneral
//
- this.lblDemo.AutoSize = true;
- this.lblDemo.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.lblDemo.Location = new System.Drawing.Point(132, 33);
- this.lblDemo.Name = "lblDemo";
- this.lblDemo.Size = new System.Drawing.Size(336, 25);
- this.lblDemo.TabIndex = 0;
- this.lblDemo.Text = "ETS2 SDK Telemetry C# Demo";
+ this.lbGeneral.Location = new System.Drawing.Point(20, 210);
+ this.lbGeneral.Name = "lbGeneral";
+ this.lbGeneral.Size = new System.Drawing.Size(549, 243);
+ this.lbGeneral.TabIndex = 2;
+ this.lbGeneral.Text = "";
//
// richTextBox1
//
@@ -79,22 +77,24 @@ private void InitializeComponent()
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = resources.GetString("richTextBox1.Text");
//
- // lbGeneral
+ // lblDemo
//
- this.lbGeneral.Location = new System.Drawing.Point(20, 210);
- this.lbGeneral.Name = "lbGeneral";
- this.lbGeneral.Size = new System.Drawing.Size(549, 243);
- this.lbGeneral.TabIndex = 2;
- this.lbGeneral.Text = "";
+ this.lblDemo.AutoSize = true;
+ this.lblDemo.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lblDemo.Location = new System.Drawing.Point(132, 33);
+ this.lblDemo.Name = "lblDemo";
+ this.lblDemo.Size = new System.Drawing.Size(336, 25);
+ this.lblDemo.TabIndex = 0;
+ this.lblDemo.Text = "ETS2 SDK Telemetry C# Demo";
//
- // Form1
+ // Ets2SdkClientDemo
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(595, 621);
this.Controls.Add(this.telemetryInfo);
- this.Name = "Form1";
- this.Text = "Form1";
+ this.Name = "Ets2SdkClientDemo";
+ this.Text = "Ets2SdkClientDemo 1.4.0";
this.telemetryInfo.ResumeLayout(false);
this.tabAbout.ResumeLayout(false);
this.tabAbout.PerformLayout();
diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.cs
similarity index 88%
rename from ets2-client/C#/Ets2SdkClient.Demo/Form1.cs
rename to ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.cs
index 07ce575..45c8f78 100644
--- a/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs
+++ b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.cs
@@ -6,17 +6,20 @@
namespace Ets2SdkClient.Demo
{
- public partial class Form1 : Form
+ public partial class Ets2SdkClientDemo : Form
{
public Ets2SdkTelemetry Telemetry;
- public Form1()
+ public Ets2SdkClientDemo()
{
InitializeComponent();
Telemetry = new Ets2SdkTelemetry();
Telemetry.Data += Telemetry_Data;
+ Telemetry.JobFinished += TelemetryOnJobFinished;
+ Telemetry.JobStarted += TelemetryOnJobStarted;
+
if (Telemetry.Error != null)
{
lbGeneral.Text =
@@ -26,6 +29,16 @@ public Form1()
}
}
+ private void TelemetryOnJobFinished(object sender, EventArgs args)
+ {
+ MessageBox.Show("Job finished, or at least unloaded nearby cargo destination.");
+ }
+
+ private void TelemetryOnJobStarted(object sender, EventArgs e)
+ {
+ MessageBox.Show("Just started job OR loaded game with active.");
+ }
+
private void Telemetry_Data(Ets2Telemetry data, bool updated)
{
try
diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Form1.resx b/ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.resx
similarity index 100%
rename from ets2-client/C#/Ets2SdkClient.Demo/Form1.resx
rename to ets2-client/C#/Ets2SdkClient.Demo/Ets2SdkClientDemo.resx
diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Program.cs b/ets2-client/C#/Ets2SdkClient.Demo/Program.cs
index 4d05c62..b3c689a 100644
--- a/ets2-client/C#/Ets2SdkClient.Demo/Program.cs
+++ b/ets2-client/C#/Ets2SdkClient.Demo/Program.cs
@@ -1,6 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Windows.Forms;
namespace Ets2SdkClient.Demo
@@ -15,7 +13,7 @@ static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
+ Application.Run(new Ets2SdkClientDemo());
}
}
}
diff --git a/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs b/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs
index d553cc3..89c2add 100644
--- a/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs
+++ b/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs
@@ -234,7 +234,9 @@ public struct Ets2SdkData
[FieldOffset(1016)]
public int gearDashboard;
-
+
+ [FieldOffset(1020)] public byte onJob;
+ [FieldOffset(1021)] public byte jobFinished;
public bool GetBool(Ets2SdkBoolean i)
{
diff --git a/ets2-client/C#/Ets2SdkClient/Ets2SdkTelemetry.cs b/ets2-client/C#/Ets2SdkClient/Ets2SdkTelemetry.cs
index 42da831..c934256 100644
--- a/ets2-client/C#/Ets2SdkClient/Ets2SdkTelemetry.cs
+++ b/ets2-client/C#/Ets2SdkClient/Ets2SdkTelemetry.cs
@@ -1,9 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Dynamic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices;
using System.Text;
using System.Timers;
@@ -27,6 +22,12 @@ public class Ets2SdkTelemetry
public event TelemetryData Data;
+ public event EventHandler JobStarted;
+ public event EventHandler JobFinished;
+
+ private bool wasOnJob;
+ private bool wasFinishingJob;
+
public Ets2SdkTelemetry()
{
Setup(DefaultSharedMemoryMap, DefaultUpdateInterval);
@@ -85,6 +86,22 @@ void _updateTimer_Elapsed(object sender, ElapsedEventArgs e)
if (Data != null)
Data(ets2telemetry, ets2RawData.time != lastTime);
+ // Job close & start events
+ if (wasFinishingJob != ets2telemetry.Job.JobFinished)
+ {
+ wasFinishingJob = ets2telemetry.Job.JobFinished;
+ if (ets2telemetry.Job.JobFinished)
+ JobFinished(this, new EventArgs());
+
+ }
+ if (wasOnJob != ets2telemetry.Job.OnJob)
+ {
+ wasOnJob = ets2telemetry.Job.OnJob;
+ if (ets2telemetry.Job.OnJob)
+ JobStarted(this, new EventArgs());
+
+ }
+
lastTime = ets2RawData.time;
}
diff --git a/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs b/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs
index 0e14de3..4a04956 100644
--- a/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs
+++ b/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs
@@ -1,6 +1,4 @@
using System;
-using System.ComponentModel;
-using System.Dynamic;
using System.Text;
namespace Ets2SdkClient
@@ -108,6 +106,9 @@ public class _Controls
public class _Job
{
+ public bool OnJob { get; internal set; }
+ public bool JobFinished { get; internal set; }
+
public bool TrailerAttached { get; internal set; }
public float Mass { get; internal set; }
public string TrailerId { get; internal set; }
@@ -298,12 +299,15 @@ public Ets2Telemetry(Ets2SdkData raw, Ets2SdkUnmanaged rawUnmanaged)
Job.TrailerAttached = raw.GetBool(Ets2SdkBoolean.TrailerAttached);//TODO
Job.TrailerId = Encoding.UTF8.GetString(raw.trailerId).Replace('\0', ' ').Trim();
Job.TrailerName = Encoding.UTF8.GetString(raw.trailerName).Replace('\0', ' ').Trim();
- Job.Cargo = rawUnmanaged.TrailerModel.Replace('\0', ' ').Trim();
+ Job.Cargo = Job.TrailerName; // trailerModel is actually deprecated
Job.NavigationDistanceLeft = raw.routeDistance;
Job.NavigationTimeLeft = raw.routeTime;
Job.SpeedLimit = raw.speedLimit;
+ Job.OnJob = raw.onJob != 0;
+ Job.JobFinished = raw.jobFinished != 0;
+
// Axilliary flags
Axilliary.AdblueWarning = raw.GetBool(Ets2SdkBoolean.AdblueWarning);
Axilliary.AirPressureEmergency = raw.GetBool(Ets2SdkBoolean.AirPressureEmergency);
diff --git a/ets2-client/C#/Ets2SdkClient/SharedMemory.cs b/ets2-client/C#/Ets2SdkClient/SharedMemory.cs
index 834bfd5..eed1d5b 100644
--- a/ets2-client/C#/Ets2SdkClient/SharedMemory.cs
+++ b/ets2-client/C#/Ets2SdkClient/SharedMemory.cs
@@ -1,7 +1,5 @@
using System;
-using System.Data.Common;
using System.IO.MemoryMappedFiles;
-using System.Net.Mail;
using System.Runtime.InteropServices;
namespace Ets2SdkClient
diff --git a/ets2-telemetry/inc/ets2-telemetry-common.hpp b/ets2-telemetry/inc/ets2-telemetry-common.hpp
index 166198c..b22661f 100644
--- a/ets2-telemetry/inc/ets2-telemetry-common.hpp
+++ b/ets2-telemetry/inc/ets2-telemetry-common.hpp
@@ -7,10 +7,10 @@
// - Shared memory map struct layout
// - [..]
-#define ETS2_PLUGIN_REVID 4
+#define ETS2_PLUGIN_REVID 5
#define ETS2_PLUGIN_LOGGING_ON 0
-#define ETS2_PLUGIN_LOGGING_SHAREDMEMORY 1
+#define ETS2_PLUGIN_LOGGING_SHAREDMEMORY 0
#define ETS2_PLUGIN_FILENAME_PREFIX "C:\ets2telem_"
#if ETS2_PLUGIN_LOGGING_ON == 1
@@ -189,6 +189,12 @@ typedef struct ets2TelemetryMap_s
int gearDashboard;
} tel_rev4; // added in sdk1.5
+ struct
+ {
+ bool onJob;
+ bool jobFinished;
+ } tel_rev5;
+
} ets2TelemetryMap_t;
#endif
\ No newline at end of file
diff --git a/ets2-telemetry/src/ets2-telemetry.cpp b/ets2-telemetry/src/ets2-telemetry.cpp
index d7f8c1d..de12bbb 100644
--- a/ets2-telemetry/src/ets2-telemetry.cpp
+++ b/ets2-telemetry/src/ets2-telemetry.cpp
@@ -42,6 +42,8 @@ SharedMemory *telemMem;
ets2TelemetryMap_t *telemPtr;
const wchar_t* ets2MmfName = ETS2_PLUGIN_MMF_NAME;
+static bool onJob;
+
/**
* @brief Last timestamp we received.
*/
@@ -56,6 +58,7 @@ FILE *log_file = NULL;
SCSAPI_VOID telemetry_frame_start(const scs_event_t UNUSED(event), const void *const event_info, const scs_context_t UNUSED(context))
{
+ static int clearJobTicker = 0;
const struct scs_telemetry_frame_start_t *const info = static_cast(event_info);
// The following processing of the timestamps is done so the output
@@ -88,6 +91,46 @@ SCSAPI_VOID telemetry_frame_start(const scs_event_t UNUSED(event), const void *c
// Do a non-convential periodic update of this field:
telemPtr->tel_rev3.cruiseControl = (telemPtr->tel_rev3.cruiseControlSpeed > 0) ? true : false;
+ // Check if job could be finished ; if so empty the job field info
+ if (telemPtr->tel_rev5.onJob == true && telemPtr->tel_rev1.trailer_attached == false && telemPtr->tel_rev4.routeDistance <= 0.1f && telemPtr->tel_rev4.routeDistance >= 0.0f)
+ {
+ // if was carrying cargo and not anymore with navigation distance close to zero;
+ // then we assume the job has finished
+ // we allow some frames (see ticker) for the client to retrieve data
+ telemPtr->tel_rev5.onJob = false;
+
+ telemPtr->tel_rev5.jobFinished = true;
+ clearJobTicker = 0;
+ }
+ else if (telemPtr->tel_rev5.jobFinished)
+ {
+ clearJobTicker ++;
+
+ if (clearJobTicker > 10)
+ {
+ telemPtr->tel_rev2.jobIncome = 0;
+ telemPtr->tel_rev2.time_abs_delivery = 0;
+ telemPtr->tel_rev2.trailerMass = 0;
+
+ memset(telemPtr->tel_rev2.trailerId, 0, 64);
+ memset(telemPtr->tel_rev2.trailerName, 0, 64);
+
+ memset(telemPtr->tel_rev2.citySrc, 0, 64); // TODO: put 64-byte into global define
+ memset(telemPtr->tel_rev2.cityDst, 0, 64);
+ memset(telemPtr->tel_rev2.compSrc, 0, 64);
+ memset(telemPtr->tel_rev2.compDst, 0, 64);
+
+ telemPtr->tel_rev5.jobFinished = false;
+ }
+ }
+ else
+ {
+ if (telemPtr->tel_rev2.jobIncome != 0 && telemPtr->tel_rev1.trailer_attached)
+ {
+ telemPtr->tel_rev5.onJob = true;
+ }
+ }
+
}
}