/* Needs Testing! */ public Drivelane[] getLanesLeadingFrom(Drivelane lane, int ruType) throws InfraException { Road road = lane.getRoad(); // Road[] which will contain the Roads of this Node in a sorted fashion: // [0] == the drivelanes on this Road will have to turn left to get to 'road', .. Road[] srt_rarr = new Road[3]; if (allRoads[0] == road) { srt_rarr[0] = allRoads[1]; // Must turn left srt_rarr[1] = allRoads[2]; // Must go straight on srt_rarr[2] = allRoads[3]; // Must turn right } else if (allRoads[1] == road) { srt_rarr[0] = allRoads[2]; srt_rarr[1] = allRoads[3]; srt_rarr[2] = allRoads[0]; } else if (allRoads[2] == road) { srt_rarr[0] = allRoads[3]; srt_rarr[1] = allRoads[0]; srt_rarr[2] = allRoads[1]; } else { srt_rarr[0] = allRoads[0]; srt_rarr[1] = allRoads[1]; srt_rarr[2] = allRoads[2]; } // System.out.println("Junction getLanesLeadingFrom "+nodeId); Vector v = new Vector(); Drivelane[] lanes; int num_lanes; int cnt_lanes = 0; boolean[] targets = lane.getTargets(); for (int i = 0; i < 3; i++) { if (srt_rarr[i] != null && targets[i] == true) { // System.out.println("Road at target:"+i+" isnt null, getting Outboundlanes"); lanes = srt_rarr[i].getOutboundLanes(this); num_lanes = lanes.length; // System.out.println("Num lanes :"+num_lanes); for (int j = 0; j < num_lanes; j++) { Drivelane l = lanes[j]; // System.out.println("Lane"+j+" being checked now. Has type:"+l.getType()); if (l.mayUse(ruType)) { v.addElement(l); cnt_lanes++; } } } } return (Drivelane[]) v.toArray(new Drivelane[cnt_lanes]); }
public Drivelane[] getLanesLeadingTo(Drivelane lane, int ruType) throws InfraException { Road road = lane.getRoad(); // Road[] which will contain the Roads of this Node in a sorted fashion: // [0] == the drivelanes on this Road will have to turn left to get to 'road', .. Road[] srt_rarr = new Road[3]; if (allRoads[0] == road) { srt_rarr[0] = allRoads[3]; // Must turn left srt_rarr[1] = allRoads[2]; // Must go straight on srt_rarr[2] = allRoads[1]; // Must turn right } else if (allRoads[1] == road) { srt_rarr[0] = allRoads[0]; srt_rarr[1] = allRoads[3]; srt_rarr[2] = allRoads[2]; } else if (allRoads[2] == road) { srt_rarr[0] = allRoads[1]; srt_rarr[1] = allRoads[0]; srt_rarr[2] = allRoads[3]; } else { srt_rarr[0] = allRoads[2]; srt_rarr[1] = allRoads[1]; srt_rarr[2] = allRoads[0]; } Vector v = new Vector(); Drivelane[] lanes; int num_lanes; int cnt_lanes = 0; boolean[] targets; for (int i = 0; i < 3; i++) { if (srt_rarr[i] != null) { lanes = srt_rarr[i].getInboundLanes(this); num_lanes = lanes.length; for (int j = 0; j < num_lanes; j++) { Drivelane l = lanes[j]; targets = l.getTargets(); if (targets[i] == true && l.mayUse(ruType)) { v.addElement(l); cnt_lanes++; } } } } return (Drivelane[]) v.toArray(new Drivelane[cnt_lanes]); }
protected Target[] ownedTargets(Sign tl, int pos, Node des, boolean light) { // This method will determine to which destinations you can go starting at this source // represented in this QEntry CountEntry dummy = new CountEntry(tl, pos, des, light, tl, pos); Target[] ownedtargets; Vector candidate_targets; candidate_targets = new Vector(); // Use the count table to sort this out, we need all Targets from // Only the elements in the count table are used, other just give a P Enumeration _enum = count.elements(); while (_enum.hasMoreElements()) { CountEntry current_entry = (CountEntry) _enum.nextElement(); if (current_entry.sameSource(dummy) != 0) { candidate_targets.addElement(new Target(current_entry.tl_new, current_entry.pos_new)); } } ownedtargets = new Target[candidate_targets.size()]; candidate_targets.copyInto(ownedtargets); return ownedtargets; }