float GetSpeedLimit(bool dir, int indx)
{
if (BeginTrackSearch(dir))
{
GSTrackSearch SearchDirection = BeginTrackSearch(dir);
Trackside TargetTrackside = GetTrackSideSpeedLimit(SearchDirection, indx);
if (TargetTrackside)
{
if (TargetTrackside.GetSpeedLimit())
{
return TargetTrackside.GetSpeedLimit();
}
}
}
//Nothing found
return -1.0;
}
int GetSignalAspectEx(bool dir, int indx)
{
if (BeginTrackSearch(dir))
{
GSTrackSearch SearchDirection = BeginTrackSearch(dir);
Trackside TargetTrackside = GetTrackSideSignal(SearchDirection, indx);
if (TargetTrackside)
{
if (TargetTrackside != null)
{
return TargetTrackside.GetSignalStateEx();
}
}
}
//Nothing found
return -1;
}
Trackside GetTrackSideSignal(GSTrackSearch SpeedObj, int index)
{
Trackside foundTrackside;
while (SpeedObj.SearchNextObject())
{
foundTrackside = cast < Signal > SpeedObj.GetObject();
if (foundTrackside != null)
{
if (index == 0)
{
return foundTrackside;
}
else
{
index = index - 1;
}
}
}
//Nothing found
return null;
}
Trackside GetTrackSideSpeedLimit(GSTrackSearch SpeedObj, int index)
{
Trackside foundTrackside;
while (SpeedObj.SearchNextObject())
{
foundTrackside = cast < Trackside > SpeedObj.GetObject();
if ((int)foundTrackside.GetSpeedLimit() != 0)
{
if (index == 0)
{
return foundTrackside;
}
else
{
index = index - 1;
}
}
}
//Nothing found
return null;
}