src/order_gui.cpp
changeset 6585 7da94b26498a
parent 6417 26acff62d001
child 6589 addf4b6946d0
equal deleted inserted replaced
6584:85b9e0da5754 6585:7da94b26498a
    96 		/* delete */
    96 		/* delete */
    97 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_DELETE,
    97 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_DELETE,
    98 				(uint)v->num_orders + ((shared_orders || v->num_orders != 0) ? 1 : 0) <= (uint)WP(w, order_d).sel);
    98 				(uint)v->num_orders + ((shared_orders || v->num_orders != 0) ? 1 : 0) <= (uint)WP(w, order_d).sel);
    99 
    99 
   100 		/* non-stop only for trains */
   100 		/* non-stop only for trains */
   101 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_NON_STOP,  v->type != VEH_Train || order == NULL);
   101 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_NON_STOP,  v->type != VEH_TRAIN || order == NULL);
   102 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_FULL_LOAD, order == NULL); // full load
   102 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_FULL_LOAD, order == NULL); // full load
   103 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_UNLOAD,    order == NULL); // unload
   103 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_UNLOAD,    order == NULL); // unload
   104 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_TRANSFER,  order == NULL); // transfer
   104 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_TRANSFER,  order == NULL); // transfer
   105 		/* Disable list of vehicles with the same shared orders if there is no list */
   105 		/* Disable list of vehicles with the same shared orders if there is no list */
   106 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SHARED_ORDER_LIST, !shared_orders || v->orders == NULL);
   106 		SetWindowWidgetDisabledState(w, ORDER_WIDGET_SHARED_ORDER_LIST, !shared_orders || v->orders == NULL);
   160 					break;
   160 					break;
   161 
   161 
   162 				case OT_GOTO_DEPOT: {
   162 				case OT_GOTO_DEPOT: {
   163 					StringID s = STR_NULL;
   163 					StringID s = STR_NULL;
   164 
   164 
   165 					if (v->type == VEH_Aircraft) {
   165 					if (v->type == VEH_AIRCRAFT) {
   166 						s = STR_GO_TO_AIRPORT_HANGAR;
   166 						s = STR_GO_TO_AIRPORT_HANGAR;
   167 						SetDParam(2, order->dest);
   167 						SetDParam(2, order->dest);
   168 					} else {
   168 					} else {
   169 						SetDParam(2, GetDepot(order->dest)->town_index);
   169 						SetDParam(2, GetDepot(order->dest)->town_index);
   170 
   170 
   171 						switch (v->type) {
   171 						switch (v->type) {
   172 							case VEH_Train: s = (order->flags & OF_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
   172 							case VEH_TRAIN: s = (order->flags & OF_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
   173 							case VEH_Road:  s = STR_9038_GO_TO_ROADVEH_DEPOT; break;
   173 							case VEH_ROAD:  s = STR_9038_GO_TO_ROADVEH_DEPOT; break;
   174 							case VEH_Ship:  s = STR_GO_TO_SHIP_DEPOT; break;
   174 							case VEH_SHIP:  s = STR_GO_TO_SHIP_DEPOT; break;
   175 							default: break;
   175 							default: break;
   176 						}
   176 						}
   177 					}
   177 					}
   178 
   178 
   179 					if (order->flags & OF_FULL_LOAD) s++; /* service at */
   179 					if (order->flags & OF_FULL_LOAD) s++; /* service at */
   229 
   229 
   230 	// check depot first
   230 	// check depot first
   231 	if (_patches.gotodepot) {
   231 	if (_patches.gotodepot) {
   232 		switch (GetTileType(tile)) {
   232 		switch (GetTileType(tile)) {
   233 		case MP_RAILWAY:
   233 		case MP_RAILWAY:
   234 			if (v->type == VEH_Train && IsTileOwner(tile, _local_player)) {
   234 			if (v->type == VEH_TRAIN && IsTileOwner(tile, _local_player)) {
   235 				if (IsRailDepot(tile)) {
   235 				if (IsRailDepot(tile)) {
   236 					order.type = OT_GOTO_DEPOT;
   236 					order.type = OT_GOTO_DEPOT;
   237 					order.flags = OF_PART_OF_ORDERS;
   237 					order.flags = OF_PART_OF_ORDERS;
   238 					order.dest = GetDepotByTile(tile)->index;
   238 					order.dest = GetDepotByTile(tile)->index;
   239 					return order;
   239 					return order;
   240 				}
   240 				}
   241 			}
   241 			}
   242 			break;
   242 			break;
   243 
   243 
   244 		case MP_STREET:
   244 		case MP_STREET:
   245 			if (GetRoadTileType(tile) == ROAD_TILE_DEPOT && v->type == VEH_Road && IsTileOwner(tile, _local_player)) {
   245 			if (GetRoadTileType(tile) == ROAD_TILE_DEPOT && v->type == VEH_ROAD && IsTileOwner(tile, _local_player)) {
   246 				order.type = OT_GOTO_DEPOT;
   246 				order.type = OT_GOTO_DEPOT;
   247 				order.flags = OF_PART_OF_ORDERS;
   247 				order.flags = OF_PART_OF_ORDERS;
   248 				order.dest = GetDepotByTile(tile)->index;
   248 				order.dest = GetDepotByTile(tile)->index;
   249 				return order;
   249 				return order;
   250 			}
   250 			}
   251 			break;
   251 			break;
   252 
   252 
   253 		case MP_STATION:
   253 		case MP_STATION:
   254 			if (v->type != VEH_Aircraft) break;
   254 			if (v->type != VEH_AIRCRAFT) break;
   255 			if (IsHangar(tile) && IsTileOwner(tile, _local_player)) {
   255 			if (IsHangar(tile) && IsTileOwner(tile, _local_player)) {
   256 				order.type = OT_GOTO_DEPOT;
   256 				order.type = OT_GOTO_DEPOT;
   257 				order.flags = OF_PART_OF_ORDERS;
   257 				order.flags = OF_PART_OF_ORDERS;
   258 				order.dest = GetStationIndex(tile);
   258 				order.dest = GetStationIndex(tile);
   259 				return order;
   259 				return order;
   260 			}
   260 			}
   261 			break;
   261 			break;
   262 
   262 
   263 		case MP_WATER:
   263 		case MP_WATER:
   264 			if (v->type != VEH_Ship) break;
   264 			if (v->type != VEH_SHIP) break;
   265 			if (IsTileDepotType(tile, TRANSPORT_WATER) &&
   265 			if (IsTileDepotType(tile, TRANSPORT_WATER) &&
   266 					IsTileOwner(tile, _local_player)) {
   266 					IsTileOwner(tile, _local_player)) {
   267 				TileIndex tile2 = GetOtherShipDepotTile(tile);
   267 				TileIndex tile2 = GetOtherShipDepotTile(tile);
   268 
   268 
   269 				order.type = OT_GOTO_DEPOT;
   269 				order.type = OT_GOTO_DEPOT;
   277 		}
   277 		}
   278 	}
   278 	}
   279 
   279 
   280 	// check waypoint
   280 	// check waypoint
   281 	if (IsTileType(tile, MP_RAILWAY) &&
   281 	if (IsTileType(tile, MP_RAILWAY) &&
   282 			v->type == VEH_Train &&
   282 			v->type == VEH_TRAIN &&
   283 			IsTileOwner(tile, _local_player) &&
   283 			IsTileOwner(tile, _local_player) &&
   284 			IsRailWaypoint(tile)) {
   284 			IsRailWaypoint(tile)) {
   285 		order.type = OT_GOTO_WAYPOINT;
   285 		order.type = OT_GOTO_WAYPOINT;
   286 		order.flags = 0;
   286 		order.flags = 0;
   287 		order.dest = GetWaypointByTile(tile)->index;
   287 		order.dest = GetWaypointByTile(tile)->index;
   292 		StationID st_index = GetStationIndex(tile);
   292 		StationID st_index = GetStationIndex(tile);
   293 		const Station *st = GetStation(st_index);
   293 		const Station *st = GetStation(st_index);
   294 
   294 
   295 		if (st->owner == _current_player || st->owner == OWNER_NONE) {
   295 		if (st->owner == _current_player || st->owner == OWNER_NONE) {
   296 			byte facil;
   296 			byte facil;
   297 			(facil=FACIL_DOCK, v->type == VEH_Ship) ||
   297 			(facil=FACIL_DOCK, v->type == VEH_SHIP) ||
   298 			(facil=FACIL_TRAIN, v->type == VEH_Train) ||
   298 			(facil=FACIL_TRAIN, v->type == VEH_TRAIN) ||
   299 			(facil=FACIL_AIRPORT, v->type == VEH_Aircraft) ||
   299 			(facil=FACIL_AIRPORT, v->type == VEH_AIRCRAFT) ||
   300 			(facil=FACIL_BUS_STOP, v->type == VEH_Road && v->cargo_type == CT_PASSENGERS) ||
   300 			(facil=FACIL_BUS_STOP, v->type == VEH_ROAD && v->cargo_type == CT_PASSENGERS) ||
   301 			(facil=FACIL_TRUCK_STOP, 1);
   301 			(facil=FACIL_TRUCK_STOP, 1);
   302 			if (st->facilities & facil) {
   302 			if (st->facilities & facil) {
   303 				order.type = OT_GOTO_STATION;
   303 				order.type = OT_GOTO_STATION;
   304 				order.flags = 0;
   304 				order.flags = 0;
   305 				order.dest = st_index;
   305 				order.dest = st_index;
   317 
   317 
   318 static bool HandleOrderVehClick(const Vehicle *v, const Vehicle *u, Window *w)
   318 static bool HandleOrderVehClick(const Vehicle *v, const Vehicle *u, Window *w)
   319 {
   319 {
   320 	if (u->type != v->type) return false;
   320 	if (u->type != v->type) return false;
   321 
   321 
   322 	if (u->type == VEH_Train && !IsFrontEngine(u)) {
   322 	if (u->type == VEH_TRAIN && !IsFrontEngine(u)) {
   323 		u = GetFirstVehicleInChain(u);
   323 		u = GetFirstVehicleInChain(u);
   324 		if (!IsFrontEngine(u)) return false;
   324 		if (!IsFrontEngine(u)) return false;
   325 	}
   325 	}
   326 
   326 
   327 	// v is vehicle getting orders. Only copy/clone orders if vehicle doesn't have any orders yet
   327 	// v is vehicle getting orders. Only copy/clone orders if vehicle doesn't have any orders yet
   463 				const Order *ord = GetVehicleOrder(v, sel);
   463 				const Order *ord = GetVehicleOrder(v, sel);
   464 				TileIndex xy;
   464 				TileIndex xy;
   465 
   465 
   466 				switch (ord->type) {
   466 				switch (ord->type) {
   467 					case OT_GOTO_STATION:  xy = GetStation(ord->dest)->xy ; break;
   467 					case OT_GOTO_STATION:  xy = GetStation(ord->dest)->xy ; break;
   468 					case OT_GOTO_DEPOT:    xy = (v->type == VEH_Aircraft) ?  GetStation(ord->dest)->xy : GetDepot(ord->dest)->xy;    break;
   468 					case OT_GOTO_DEPOT:    xy = (v->type == VEH_AIRCRAFT) ?  GetStation(ord->dest)->xy : GetDepot(ord->dest)->xy;    break;
   469 					case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->dest)->xy; break;
   469 					case OT_GOTO_WAYPOINT: xy = GetWaypoint(ord->dest)->xy; break;
   470 					default:               xy = 0; break;
   470 					default:               xy = 0; break;
   471 				}
   471 				}
   472 
   472 
   473 				if (xy != 0) ScrollMainWindowToTile(xy);
   473 				if (xy != 0) ScrollMainWindowToTile(xy);
   675 	DeleteWindowById(WC_VEHICLE_DETAILS, veh);
   675 	DeleteWindowById(WC_VEHICLE_DETAILS, veh);
   676 
   676 
   677 	if (v->owner != _local_player) {
   677 	if (v->owner != _local_player) {
   678 		w = AllocateWindowDescFront(&_other_orders_desc, veh);
   678 		w = AllocateWindowDescFront(&_other_orders_desc, veh);
   679 	} else {
   679 	} else {
   680 		w = AllocateWindowDescFront((v->type == VEH_Train) ? &_orders_train_desc : &_orders_desc, veh);
   680 		w = AllocateWindowDescFront((v->type == VEH_TRAIN) ? &_orders_train_desc : &_orders_desc, veh);
   681 	}
   681 	}
   682 
   682 
   683 	if (w != NULL) {
   683 	if (w != NULL) {
   684 		w->caption_color = v->owner;
   684 		w->caption_color = v->owner;
   685 		w->vscroll.cap = 6;
   685 		w->vscroll.cap = 6;