|
|
@ -707,11 +707,14 @@ int Locomotives::AutoCheckWaySingleStep(string way, string locname, int *data) {
|
|
|
|
int res = 0;
|
|
|
|
int res = 0;
|
|
|
|
size_t pos1;
|
|
|
|
size_t pos1;
|
|
|
|
size_t curpos;
|
|
|
|
size_t curpos;
|
|
|
|
|
|
|
|
size_t blockpos;
|
|
|
|
int state;
|
|
|
|
int state;
|
|
|
|
int newdata = 0;
|
|
|
|
int newdata = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (*data < 0) *data = 0;
|
|
|
|
if (*data < 0) *data = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debug (0, "Locomotives::AutoCheckWaySingleStep Way:%s", way.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
curpos = 0;
|
|
|
|
curpos = 0;
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
curpos = way.find (",t:", curpos+1);
|
|
|
|
curpos = way.find (",t:", curpos+1);
|
|
|
@ -929,12 +932,12 @@ int Locomotives::Loco_OnRoute(Locomotive *loco) {
|
|
|
|
if (Loco_SearchAndLock(loco) == 1) {
|
|
|
|
if (Loco_SearchAndLock(loco) == 1) {
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKNEXT;
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKNEXT;
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Found Way Prepare '%s'\n", loco->name);
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Found Way Prepare '%s'\n", loco->name);
|
|
|
|
SetSpeed(loco->name, loco->vmid);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vmin : loco->vmid);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKSTOP;
|
|
|
|
loco->auto_onroute = LOCO_OR_ENTERBLOCKSTOP;
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Slow Down '%s'\n", loco->name);
|
|
|
|
debug (0, "Locomotives::Loco_OnRoute Slow Down '%s'\n", loco->name);
|
|
|
|
SetSpeed(loco->name, loco->vslow);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vslow : loco->vslow);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
|
@ -1064,7 +1067,6 @@ int Locomotives::Loop() {
|
|
|
|
string way;
|
|
|
|
string way;
|
|
|
|
Locomotive *loco = NULL;
|
|
|
|
Locomotive *loco = NULL;
|
|
|
|
JSONParse jp;
|
|
|
|
JSONParse jp;
|
|
|
|
int reverse = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (lnum = 0; lnum < max; lnum++) if (locomotives[lnum].name[0] != 0) {
|
|
|
|
for (lnum = 0; lnum < max; lnum++) if (locomotives[lnum].name[0] != 0) {
|
|
|
|
loco = &locomotives[lnum];
|
|
|
|
loco = &locomotives[lnum];
|
|
|
@ -1122,7 +1124,7 @@ int Locomotives::Loop() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
// nothing found -> try reverse
|
|
|
|
// nothing found -> try reverse
|
|
|
|
if (loco->blockassign[0] != 0 && (loco->flags & LOCO_F_CANREVERSE)) {
|
|
|
|
if (loco->blockassign[0] != 0 && loco->blockdest[0] != 0 && (loco->flags & LOCO_F_CANREVERSE)) {
|
|
|
|
debug (0, "* Loco_SearchAndLock Reverse Loco %s", loco->name);
|
|
|
|
debug (0, "* Loco_SearchAndLock Reverse Loco %s", loco->name);
|
|
|
|
if (loco->blockassign[0] == '-') loco->blockassign[0] = '+';
|
|
|
|
if (loco->blockassign[0] == '-') loco->blockassign[0] = '+';
|
|
|
|
else if (loco->blockassign[0] == '+') loco->blockassign[0] = '-';
|
|
|
|
else if (loco->blockassign[0] == '+') loco->blockassign[0] = '-';
|
|
|
@ -1143,7 +1145,7 @@ int Locomotives::Loop() {
|
|
|
|
else if (loco->auto_onroute == LOCO_OR_PREPARE) {
|
|
|
|
else if (loco->auto_onroute == LOCO_OR_PREPARE) {
|
|
|
|
switch (Loco_PrepareWay(loco)) {
|
|
|
|
switch (Loco_PrepareWay(loco)) {
|
|
|
|
case 1:
|
|
|
|
case 1:
|
|
|
|
SetSpeed(loco->name, reverse * loco->vmid);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vmid : loco->vmid);
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
debug (0, "* Locomotive '%s' Way Prepared -> Speed: VMID", loco->name);
|
|
|
|
debug (0, "* Locomotive '%s' Way Prepared -> Speed: VMID", loco->name);
|
|
|
|
jp.Clear();
|
|
|
|
jp.Clear();
|
|
|
@ -1151,7 +1153,7 @@ int Locomotives::Loop() {
|
|
|
|
if(network) network->ChangeListPushToAll(jp.ToString());
|
|
|
|
if(network) network->ChangeListPushToAll(jp.ToString());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 2:
|
|
|
|
SetSpeed(loco->name, reverse * loco->vfast);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vfast : loco->vfast);
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
debug (0, "* Locomotive '%s' Way Prepared -> Speed: VFAST", loco->name);
|
|
|
|
debug (0, "* Locomotive '%s' Way Prepared -> Speed: VFAST", loco->name);
|
|
|
|
jp.Clear();
|
|
|
|
jp.Clear();
|
|
|
@ -1183,7 +1185,7 @@ int Locomotives::Loop() {
|
|
|
|
else if (loco->auto_onroute == LOCO_OR_ENTERBLOCKNEXT) {
|
|
|
|
else if (loco->auto_onroute == LOCO_OR_ENTERBLOCKNEXT) {
|
|
|
|
switch (Loco_BlockEnterNext(loco)) {
|
|
|
|
switch (Loco_BlockEnterNext(loco)) {
|
|
|
|
case 1:
|
|
|
|
case 1:
|
|
|
|
SetSpeed(loco->name, reverse * loco->vmid);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vmid : loco->vmid);
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
debug (0, "* Locomotive LOCO_OR_ENTERBLOCKNEXT '%s' Way Prepared -> Speed: VMID", loco->name);
|
|
|
|
debug (0, "* Locomotive LOCO_OR_ENTERBLOCKNEXT '%s' Way Prepared -> Speed: VMID", loco->name);
|
|
|
|
jp.Clear();
|
|
|
|
jp.Clear();
|
|
|
@ -1191,7 +1193,7 @@ int Locomotives::Loop() {
|
|
|
|
if(network) network->ChangeListPushToAll(jp.ToString());
|
|
|
|
if(network) network->ChangeListPushToAll(jp.ToString());
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 2:
|
|
|
|
SetSpeed(loco->name, reverse * loco->vfast);
|
|
|
|
SetSpeed(loco->name, loco->flags & LOCO_F_REVERSE ? -loco->vfast : loco->vfast);
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
loco->auto_onroute = LOCO_OR_ONTHEWAY;
|
|
|
|
debug (0, "* Locomotive LOCO_OR_ENTERBLOCKNEXT '%s' Way Prepared -> Speed: VFAST", loco->name);
|
|
|
|
debug (0, "* Locomotive LOCO_OR_ENTERBLOCKNEXT '%s' Way Prepared -> Speed: VFAST", loco->name);
|
|
|
|
jp.Clear();
|
|
|
|
jp.Clear();
|
|
|
|