- if(executing)
- {
- Row &row = rows[current_row];
- switch(row.type)
- {
- case GOTO:
- if(!train.go_to(**parse_location(row.get_param<string>(0)).get_tracks().begin()))
- set_enabled(false);
- break;
- case TRAVEL:
- pending_block = &parse_location(row.get_param<string>(0));
- pending_train = &train;
- executing = false;
- break;
- case WAIT_TIME:
- wait_timeout = t+row.get_param<unsigned>(0)*Time::sec;
- executing = false;
- break;
- case WAIT_TRAIN:
- pending_train = &train.get_layout().get_train(row.get_param<unsigned>(0));
- pending_block = &parse_location(row.get_param<string>(1));
- executing = false;
- break;
- case ARRIVE:
- executing = false;
- break;
- case SPEED:
- train.set_control("speed", row.get_param<unsigned>(0)/3.6*train.get_layout().get_catalogue().get_scale());
- break;
- case REVERSE:
- train.set_control("reverse", !train.get_control("reverse"));
- break;
- case ROUTE:
- if(!train.set_route(&train.get_layout().get_route(row.get_param<string>(0))))
- set_enabled(false);
- break;
- }
-
- if(executing)
- current_row = (current_row+1)%rows.size();
- }