Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- define int StateScan = 0;
- define int StateJnLeft = 1;
- define int StateJnRight = 2;
- define int StateExit = -1;
- final RFHumpRoute Scan()
- {
- RFHumpRoute node;
- LTrackSearch it = new LTrackSearch().DistanceLimit(4000.0f)
- .SleepAfter(10000)
- .DepthLimit(50)
- .Begin(Owner, LTrackSearch.Forward, 0));
- while (true) {
- switch (it.State()) {
- default: break;
- case StateScan: {
- if (it.MoveNextTrackside()) {
- RFHumpMarker marker = cast <RFHumpMarker> it.CurrentTrackside();
- if (marker and marker.HumpTrack >= 0) {
- if (marker.HumpTrack > 0) {
- node = new RFHumpRoute();
- node.TrackNumber = marker.HumpTrack;
- node.Marker = marker;
- }
- it.PopState();
- }
- else if (it.OnJunction()) {
- int dir = it.GetArrivedDirection();
- if (dir == LTrackSearch.Backward) {
- node = new RFHumpRoute();
- node.JnId = junc.GetId();
- it.SetState(StateJnLeft, node);
- it.PushState();
- it.SetState(StateScan);
- it.SetDirection(LTrackSearch.Left);
- }
- }
- }
- else
- it.SetState(StateExit, null);
- continue;
- }
- case StateJnLeft: {
- RFHumpRoute parent = cast <RFHumpRoute> it.StateData();
- parent.Left = node;
- it.SetState(StateJnRight);
- it.PushState();
- it.SetState(StateScan);
- it.SetDirection(LTrackSearch.Right);
- continue;
- }
- case StateJnRight: {
- RFHumpRoute parent = cast <RFHumpRoute> it.StateData();
- parent.Right = node;
- node = parent;
- it.PopState();
- continue;
- }
- }
- }
- return node;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement