Skip to content

Commit

Permalink
Merge pull request #4 from gaensebluemchenritter/master
Browse files Browse the repository at this point in the history
team racing and driver swaps
  • Loading branch information
JariInc committed Jan 21, 2015
2 parents f8e9477 + 5736303 commit 6606e4b
Show file tree
Hide file tree
Showing 7 changed files with 243 additions and 57 deletions.
102 changes: 102 additions & 0 deletions iRTVO/Code/iRacingAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,58 @@ private void parser(string yaml)

foreach (string driver in driverList)
{
// KJ: fix
// let's see if car is already in list ...
int carIdx = parseIntValue(driver, "CarIdx");
var driverCarIdx = SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx));
if (driverCarIdx != null)
{
// car already in list, check if driver changed
var newUserId = parseIntValue(driver, "UserID");
if (driverCarIdx.UserId != newUserId)
{
logger.Info("driverChange detected - new driver ({0})", parseStringValue(driver,"UserName"));
// driver changed - update driver details
SharedData.updateControls = true;
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Name = parseStringValue(driver, "UserName");
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Initials = parseStringValue(driver, "Initials");
if (parseStringValue(driver, "AbbrevName") != null)
{
string[] splitName = parseStringValue(driver, "AbbrevName").Split(',');
if (splitName.Length > 1)
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Shortname = splitName[1] + " " + splitName[0];
else
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Shortname = parseStringValue(driver, "AbbrevName");
}
else
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Shortname = "";
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Club = parseStringValue(driver, "Club");
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).SR = parseStringValue(driver, "SR");
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).iRating = parseIntValue(driver, "iRating");
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).UserId = newUserId;
logger.Info("driverChange - looking for external data", "");
string[] external_driver;
if ( SharedData.externalData.TryGetValue(newUserId, out external_driver) )
{
logger.Info("driverChange - external data found", "");
int ed_idx;
if ( ( ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataFullName") ) ) >= 0 && external_driver.Length > ed_idx )
{
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Name = external_driver[ed_idx];
}
if ( ( ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataShortName") ) ) >= 0 && external_driver.Length > ed_idx )
{
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Shortname = external_driver[ed_idx];
}
if ( ( ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataInitials") ) ) >= 0 && external_driver.Length > ed_idx )
{
SharedData.Drivers.Find(d => d.CarIdx.Equals(carIdx)).Initials = external_driver[ed_idx];
}
}
logger.Info("driverChange - data ready", "");
}
}

int userId = parseIntValue(driver, "UserID");
if (userId < Int32.MaxValue && userId > 0)
{
Expand Down Expand Up @@ -239,6 +291,8 @@ private void parser(string yaml)
driverItem.CarIdx = parseIntValue(driver, "CarIdx");
driverItem.CarClassName = ( SharedData.theme != null ? SharedData.theme.getCarClass(driverItem.CarId) : "unknown" );
driverItem.iRating = parseIntValue(driver, "IRating");
// KJ: teamID!
driverItem.TeamId = parseIntValue(driver, "TeamID");

int liclevel = parseIntValue(driver, "LicLevel");
int licsublevel = parseIntValue(driver, "LicSubLevel");
Expand Down Expand Up @@ -324,6 +378,54 @@ private void parser(string yaml)
if (driverItem.Initials == null)
driverItem.Initials = "";

// KJ: if we are team-racing: get the teamname or make one up ...
if (driverItem.TeamId > 0)
{
if (SharedData.externalTeamData.ContainsKey(driverItem.TeamId))
{
// found teamname for teamid in teams.csv
string[] td_result;
SharedData.externalTeamData.TryGetValue(driverItem.TeamId, out td_result);
driverItem.TeamName = td_result[0];
}
else if (SharedData.externalTeamData.ContainsKey(Int32.Parse(driverItem.NumberPlate)))
{
// found teamname for carnum in teams.csv
string[] td_result;
SharedData.externalTeamData.TryGetValue(Int32.Parse(driverItem.NumberPlate), out td_result);
driverItem.TeamName = td_result[0];
}
else
{
// make up generic teamname (to be parametrized in future)
driverItem.TeamName = "Team #" + driverItem.NumberPlate;
}
}

// KJ: if we have external data - perhaps we shall overload name data for the driver
string[] external_driver;
if (SharedData.externalData.TryGetValue(userId, out external_driver))
{
// found external data for userid
int ed_idx;
SharedData.theme.getIniValue("General", "dataFullName");
if ((ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataFullName"))) >= 0 && external_driver.Length > ed_idx )
{
// fullname gets replaced with column of data.csv
driverItem.Name = external_driver[ed_idx];
}
if ((ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataShortName"))) >= 0 && external_driver.Length > ed_idx )
{
// shortname gets replaced with column of data.csv
driverItem.Shortname = external_driver[ed_idx];
}
if ((ed_idx = Int32.Parse(SharedData.theme.getIniValue("General", "dataInitials"))) >= 0 && external_driver.Length > ed_idx )
{
// initials get replaced with column of data.csv
driverItem.Initials = external_driver[ed_idx];
}
}

SharedData.Drivers.Add(driverItem);
}
}
Expand Down
56 changes: 50 additions & 6 deletions iRTVO/Code/theme.cs
Original file line number Diff line number Diff line change
Expand Up @@ -995,7 +995,7 @@ public string[] getFollowedFormats(StandingsItem standing, SessionInfo session,
{
Double laptime = SharedData.currentSessionTime - standing.Begin;

string[] output = new string[69] {
string[] output = new string[71] {
standing.Driver.Name,
standing.Driver.Shortname,
standing.Driver.Initials,
Expand Down Expand Up @@ -1046,6 +1046,7 @@ public string[] getFollowedFormats(StandingsItem standing, SessionInfo session,
"",
"",
"",
"", // 50
"",
"",
"",
Expand All @@ -1055,8 +1056,7 @@ public string[] getFollowedFormats(StandingsItem standing, SessionInfo session,
"",
"",
"",
"",
"",
"", // 60
"",
standing.PositionLive.ToString(),
ordinate(standing.PositionLive),
Expand All @@ -1065,10 +1065,10 @@ public string[] getFollowedFormats(StandingsItem standing, SessionInfo session,
standing.Driver.iRating.ToString(),
"",
standing.TrackSurface == SurfaceTypes.InPitStall ? "1" : "0",
standing.Driver.TeamId.ToString(), // KJ: new text property teamid
standing.Driver.TeamName, // 70 // KJ: new text property teamname
};



if (standing.FastestLap < 5)
output[8] = translation["invalid"];

Expand Down Expand Up @@ -1606,15 +1606,19 @@ public string formatFollowedText(LabelProperties label, StandingsItem standing,
{"irating", 66},
{"liveintervalfollowed", 67},
{"inpit",68},
{"teamid",69}, // KJ: new text property
{"teamname",70}, // KJ: new text property
};

int start, end;
int start, end, end2;
StringBuilder t = new StringBuilder(label.text);

// replace strings with numbers
foreach (KeyValuePair<string, int> pair in formatMap)
{
t.Replace("{" + pair.Key + "}", "{" + pair.Value + "}");
// KJ: there could be a dependent text property usage
t.Replace("|" + pair.Key + "}", "|" + pair.Value + "}");
}

// replace external strings with numbers
Expand All @@ -1624,6 +1628,11 @@ public string formatFollowedText(LabelProperties label, StandingsItem standing,
for (int i = 0; i < SharedData.externalData[standing.Driver.UserId].Length; i++)
{
t.Replace("{external:" + i + "}", "{" + (formatMap.Keys.Count + i) + "}");
// KJ: there could be a dependent text property usage
foreach ( KeyValuePair<string, int> pair in formatMap )
{
t.Replace("{external:" + i + "|" + pair.Value + "}", "{" + (formatMap.Keys.Count + i) + "}");
}
}
maxExternelData = Math.Max(maxExternelData, SharedData.externalData[standing.Driver.UserId].Length);
}
Expand All @@ -1636,6 +1645,14 @@ public string formatFollowedText(LabelProperties label, StandingsItem standing,
if (start >= 0)
{
end = format.IndexOf('}', start) + 1;
end2 = format.IndexOf('|', start) + 1;

if (end2 < end && end2 > start)
{
start++;
end = end2;
}

format = format.Remove(start, end - start);
}
} while (start >= 0);
Expand Down Expand Up @@ -2036,6 +2053,8 @@ public void readExternalData()
SharedData.externalData.Clear();
SharedData.externalPoints.Clear();
SharedData.externalCurrentPoints.Clear();
// KJ: new externalTeamData property
SharedData.externalTeamData.Clear();

string filename = Directory.GetCurrentDirectory() + "\\themes\\" + this.name + "\\data.csv";
if (File.Exists(filename))
Expand Down Expand Up @@ -2072,6 +2091,31 @@ public void readExternalData()
}
}
}

// KJ: get teamnames - teams.csv
filename = Directory.GetCurrentDirectory() + "\\themes\\" + this.name + "\\teams.csv";
if (File.Exists(filename))
{
string[] lines = System.IO.File.ReadAllLines(filename);

foreach (string line in lines)
{
string[] split = line.Split(';');
int team_id = -1;
if ((split.Length < 2) || String.IsNullOrEmpty(line))
continue;
if (!Int32.TryParse(split[0], out team_id))
continue;

string[] data = new string[split.Length - 1];

if (team_id > 0)
{
Array.Copy(split, 1, data, 0, data.Length);
SharedData.externalTeamData.Add(team_id, data);
}
}
}
}

public static LabelProperties setLabelPosition(ObjectProperties obj, LabelProperties lp, int i)
Expand Down
37 changes: 29 additions & 8 deletions iRTVO/Code/webTiming.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,20 @@ public class webTiming
struct webtimingDriver
{
public string position;
public string name;
public string number;
public string lap;
public string fastestlap;
public string previouslap;
public string interval;
public string name;
public string gap;
public string[] sectors;
public string interval;
public string previouslap;
public string fastestlap;
public string pit;
public string lapsled;
public string lap;
public string car; // KJ: car make and model
public bool pitting; // KJ: in pits?
public bool retired;

public string[] sectors;
public string classname;
public string classid;
public string classposition;
Expand All @@ -44,7 +46,18 @@ public webtimingDriver(StandingsItem driver, SessionInfo session)
{
position = driver.PositionLive.ToString();
name = driver.Driver.Name;

// KJ: for multi-car/multi-class races and pitting status
car = "";
pitting = false;

// KJ: set name for team events
if ( driver.Driver.TeamId > 0 )
{
name = driver.Driver.TeamName + " (" + driver.Driver.Shortname + ")";
}
number = driver.Driver.NumberPlate;
car = SharedData.theme.getCar(driver.Driver.CarId); // KJ: set car
lap = driver.CurrentLap.LapNum.ToString();
fastestlap =Utils.floatTime2String(driver.FastestLap, 3, false);
previouslap =Utils.floatTime2String(driver.PreviousLap.LapTime, 3, false);
Expand Down Expand Up @@ -148,6 +161,7 @@ public webtimingDriver(StandingsItem driver, SessionInfo session)
(SharedData.Sessions.CurrentSession.Time - driver.OffTrackSince) > 1)
{
retired = true;

if (infront.CurrentLap.LapNum > driver.CurrentLap.LapNum)
{
interval = (infront.CurrentLap.LapNum - driver.CurrentLap.LapNum) + " L";
Expand All @@ -169,6 +183,15 @@ public webtimingDriver(StandingsItem driver, SessionInfo session)
{
retired = false;
}
// KJ: set pitting status
if (driver.TrackSurface == SurfaceTypes.InPitStall)
{
pitting = true;
}
else
{
pitting = false;
}
}
}

Expand Down Expand Up @@ -225,7 +248,6 @@ struct TelemData

public webTiming(string url) {
postURL = url;

}

public void postData(object o)
Expand Down Expand Up @@ -282,7 +304,6 @@ public void postData(object o)
}

SharedData.mutex.ReleaseMutex();

send(JsonConvert.SerializeObject(data));

}
Expand Down
8 changes: 8 additions & 0 deletions iRTVO/Data/DriverInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public class DriverInfo : IDriverInfo
int irating;
int caridx;
int userId;
int teamId; // KJ:
string teamName; // KJ:
int carId;
int carclass;

Expand All @@ -39,6 +41,9 @@ public DriverInfo()
userId = 0;
carId = 0;
numberPlate = "0";
// KJ: teamid and teamname
teamId = 0;
teamName = "";
}

public string Name { get { return name; } set { name = value; } }
Expand All @@ -57,6 +62,9 @@ public DriverInfo()
public int CarId { get { return carId; } set { carId = value; } }
public int CarClass { get { return carclass; } set { carclass = value; } }
public string CarClassName { get { return carclassname; } set { carclassname = value; } }
// KJ: teamid and teamname
public int TeamId { get { return teamId; } set { teamId = value; } }
public string TeamName { get { return teamName; } set { teamName = value; } }

public string[] ExternalData
{
Expand Down
2 changes: 2 additions & 0 deletions iRTVO/Data/SharedData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class SharedData
public static Boolean inReplay = false;
private static int overlaySession = 0;


public static int OverlaySession
{
get { return overlaySession; }
Expand Down Expand Up @@ -67,6 +68,7 @@ public static int OverlaySession

// csv
public static Dictionary<int, string[]> externalData = new Dictionary<int, string[]>();
public static Dictionary<int, string[]> externalTeamData = new Dictionary<int, string[]>(); // KJ: teamnames are stored in the theme's teams.csv file
public static Dictionary<int, int> externalPoints = new Dictionary<int, int>();
public static Dictionary<int, int> externalCurrentPoints = new Dictionary<int, int>();

Expand Down
Loading

0 comments on commit 6606e4b

Please sign in to comment.