Exemple #1
0
int Router::Kiss_Ride_Return (Vehicle_Data *veh_ptr)
{
	int stat, acc;

	Trip_End_Data des;

	Location_Data *loc_ptr;
	Access_Data *access_ptr;

	des = trip_des;

	//---- transit to the vehicle ----

	if (veh_ptr->Location () == 0) return (Set_Problem (ACCESS_PROBLEM));

	acc = parking_egress [veh_ptr->Location ()]->To_List ();
	
	if (acc == 0) return (Set_Problem (ACCESS_PROBLEM));

	access_ptr = access_data [acc];

	loc_ptr = location_data [access_ptr->From_ID ()];

	trip_des.Cum (MAX_INTEGER);
	trip_des.Rec (access_ptr->From_ID ());
	trip_des.ID (loc_ptr->ID ());
	trip_des.Link (loc_ptr->Link ());
	trip_des.Offset (loc_ptr->Offset ());
	trip_des.Type (LOCATION_ID);

	stat = Transit_Plan ();

	if (stat) return (stat);

	//---- build the drive path ----

	trip_org = trip_des;
	trip_des = des;
	
	return (Drive_Plan ((Use_Type) veh_ptr->Type (), veh_ptr));
}
Exemple #2
0
int Path_Builder::Build_Path (int lot)
{
	walk_flag = (path_param.max_walk != 0);
	bike_flag = (path_param.max_bike != 0);
	wait_flag = (path_param.max_wait != 0);
	rail_bias_flag = (path_param.rail_bias != 1.0 || path_param.rail_const != 0);
	brt_bias_flag = (path_param.brt_bias != 1.0 || path_param.brt_const != 0);
	bus_bias_flag = (path_param.bus_bias != 1.0 || path_param.bus_const != 0);
	turn_flag = (path_param.left_imped > 0 || path_param.right_imped > 0 || path_param.uturn_imped > 0);
	random_flag = (path_param.random_imped > 0);

	unsigned id = (unsigned) plan_ptr->Household () + plan_ptr->Person () + plan_ptr->Tour () + plan_ptr->Trip ();
	path_param.random.Seed ((unsigned) exe->Random_Seed () + id);

	if (parking_duration == 0) {
		parking_duration = path_param.parking_duration;
	}
	if (plan_flag && !path_param.ignore_time) {
		if (forward_flag) {
			time_limit = plan_ptr->End () + path_param.end_time;
		} else {
			time_limit = plan_ptr->Start () - path_param.end_time;
			if (time_limit < min_time_limit) time_limit = min_time_limit;
		}
	}
	lane_use_delay.clear ();

	//---- build the path ----

	max_imp = MAX_IMPEDANCE;
	imp_diff = 0;

	time_flag = dist_flag = length_flag = zero_flag = wait_time_flag = use_flag = constraint_flag = false;
	transfer_flag = local_acc_flag = reset_veh_flag = walk_acc_flag = park_flag = access_flag = false;

	switch (path_param.mode) {
		case WALK_MODE:		//---- walk ----
			path_param.use = WALK;
			return (Node_Plan ());
		case BIKE_MODE:		//---- bike ----
			path_param.use = BIKE;
			return (Node_Plan ());
		case DRIVE_MODE:		//---- drive ----
			return (Drive_Plan (lot));
		case RIDE_MODE:			//---- ride ----
			return (Magic_Move ());
		case TRANSIT_MODE:		//---- walk to transit ----
			return (Transit_Plan ());
		case PNR_OUT_MODE:		//---- drive to transit ----
		case PNR_IN_MODE:		//---- transit to drive ----
		case KNR_OUT_MODE:		//---- ride to transit ----
		case KNR_IN_MODE:		//---- transit to ride ----
			return (Drive_Transit_Plan (lot));
		case TAXI_MODE:			//---- magic move ----
			path_param.use = HOV2;
			return (Drive_Plan (-1));
		case OTHER_MODE:		//---- school bus ----
			return (Magic_Move ());
		case HOV2_MODE:			//---- carpool 2+ ----
			path_param.use = HOV2;
			return (Drive_Plan (lot));
		case HOV3_MODE:			//---- carpool 3+ ----
			path_param.use = HOV3;
			return (Drive_Plan (lot));
		case HOV4_MODE:			//---- carpool 4+ ----
			path_param.use = HOV4;
			return (Drive_Plan (lot));
		default:
			return (MODE_PROBLEM);
	}
}