equal
deleted
inserted
replaced
135 switch(GetVehicle(p1)->type) { |
135 switch(GetVehicle(p1)->type) { |
136 case VEH_TRAIN: CcCloneTrain( true, tile, p1, p2); break; |
136 case VEH_TRAIN: CcCloneTrain( true, tile, p1, p2); break; |
137 case VEH_ROAD: CcCloneRoadVeh( true, tile, p1, p2); break; |
137 case VEH_ROAD: CcCloneRoadVeh( true, tile, p1, p2); break; |
138 case VEH_SHIP: CcCloneShip( true, tile, p1, p2); break; |
138 case VEH_SHIP: CcCloneShip( true, tile, p1, p2); break; |
139 case VEH_AIRCRAFT: CcCloneAircraft(true, tile, p1, p2); break; |
139 case VEH_AIRCRAFT: CcCloneAircraft(true, tile, p1, p2); break; |
|
140 default: NOT_REACHED(); |
140 } |
141 } |
141 } |
142 } |
142 |
143 |
143 static inline void ShowVehicleViewWindow(const Vehicle *v) |
144 static inline void ShowVehicleViewWindow(const Vehicle *v) |
144 { |
145 { |
174 |
175 |
175 int sprite_y = y + w->resize.step_height - GetVehicleListHeight(v->type); |
176 int sprite_y = y + w->resize.step_height - GetVehicleListHeight(v->type); |
176 |
177 |
177 switch (v->type) { |
178 switch (v->type) { |
178 case VEH_TRAIN: |
179 case VEH_TRAIN: |
179 DrawTrainImage(v, x + 21, sprite_y, w->widget[DEPOT_WIDGET_MATRIX].right - 32, w->hscroll.pos, WP(w,depot_d).sel); |
180 DrawTrainImage(v, x + 21, sprite_y, w->hscroll.cap + 4, w->hscroll.pos, WP(w,depot_d).sel); |
180 |
181 |
181 /* Number of wagons relative to a standard length wagon (rounded up) */ |
182 /* Number of wagons relative to a standard length wagon (rounded up) */ |
182 SetDParam(0, (v->u.rail.cached_total_length + 7) / 8); |
183 SetDParam(0, (v->u.rail.cached_total_length + 7) / 8); |
183 DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter |
184 DrawStringRightAligned(w->widget[DEPOT_WIDGET_MATRIX].right - 1, y + 4, STR_TINY_BLACK, 0); // Draw the counter |
184 break; |
185 break; |
485 { |
486 { |
486 uint error_str; |
487 uint error_str; |
487 |
488 |
488 if (v == NULL) return; |
489 if (v == NULL) return; |
489 |
490 |
490 if (v->type == VEH_TRAIN && !IsFrontEngine(v)) { |
491 if (v->HasFront() && !v->IsPrimaryVehicle()) { |
491 v = GetFirstVehicleInChain(v); |
492 v = GetFirstVehicleInChain(v); |
492 /* Do nothing when clicking on a train in depot with no loc attached */ |
493 /* Do nothing when clicking on a train in depot with no loc attached */ |
493 if (!IsFrontEngine(v)) return; |
494 if (v->type == VEH_TRAIN && !IsFrontEngine(v)) return; |
494 } |
495 } |
495 |
496 |
496 switch (v->type) { |
497 switch (v->type) { |
497 case VEH_TRAIN: error_str = CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE); break; |
498 case VEH_TRAIN: error_str = CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE); break; |
498 case VEH_ROAD: error_str = CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE); break; |
499 case VEH_ROAD: error_str = CMD_MSG(STR_9009_CAN_T_BUILD_ROAD_VEHICLE); break; |
533 { |
534 { |
534 switch (type) { |
535 switch (type) { |
535 case VEH_TRAIN: |
536 case VEH_TRAIN: |
536 w->widget[DEPOT_WIDGET_CAPTION].data = STR_8800_TRAIN_DEPOT; |
537 w->widget[DEPOT_WIDGET_CAPTION].data = STR_8800_TRAIN_DEPOT; |
537 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP; |
538 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP; |
538 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP; |
539 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_TRAIN_TIP; |
539 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE; |
540 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE; |
540 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP; |
541 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP; |
541 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR; |
542 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_883F_TRAINS_CLICK_ON_TRAIN_FOR; |
542 |
543 |
543 w->widget[DEPOT_WIDGET_BUILD].data = STR_8815_NEW_VEHICLES; |
544 w->widget[DEPOT_WIDGET_BUILD].data = STR_8815_NEW_VEHICLES; |
544 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_8840_BUILD_NEW_TRAIN_VEHICLE; |
545 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_8840_BUILD_NEW_TRAIN_VEHICLE; |
545 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_TRAIN; |
546 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_TRAIN; |
557 break; |
558 break; |
558 |
559 |
559 case VEH_ROAD: |
560 case VEH_ROAD: |
560 w->widget[DEPOT_WIDGET_CAPTION].data = STR_9003_ROAD_VEHICLE_DEPOT; |
561 w->widget[DEPOT_WIDGET_CAPTION].data = STR_9003_ROAD_VEHICLE_DEPOT; |
561 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP; |
562 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_ROADVEH_TIP; |
562 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP; |
563 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_ROADVEH_TIP; |
563 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE; |
564 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9024_DRAG_ROAD_VEHICLE_TO_HERE; |
564 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP; |
565 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP; |
565 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_9022_VEHICLES_CLICK_ON_VEHICLE; |
566 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_9022_VEHICLES_CLICK_ON_VEHICLE; |
566 |
567 |
567 w->widget[DEPOT_WIDGET_BUILD].data = STR_9004_NEW_VEHICLES; |
568 w->widget[DEPOT_WIDGET_BUILD].data = STR_9004_NEW_VEHICLES; |
568 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9023_BUILD_NEW_ROAD_VEHICLE; |
569 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9023_BUILD_NEW_ROAD_VEHICLE; |
569 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_ROAD_VEHICLE; |
570 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_ROAD_VEHICLE; |
581 break; |
582 break; |
582 |
583 |
583 case VEH_SHIP: |
584 case VEH_SHIP: |
584 w->widget[DEPOT_WIDGET_CAPTION].data = STR_9803_SHIP_DEPOT; |
585 w->widget[DEPOT_WIDGET_CAPTION].data = STR_9803_SHIP_DEPOT; |
585 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP; |
586 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_SHIP_TIP; |
586 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP; |
587 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_DEPOT_SHIP_TIP; |
587 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL; |
588 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_9821_DRAG_SHIP_TO_HERE_TO_SELL; |
588 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP; |
589 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP; |
589 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_981F_SHIPS_CLICK_ON_SHIP_FOR; |
590 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_981F_SHIPS_CLICK_ON_SHIP_FOR; |
590 |
591 |
591 w->widget[DEPOT_WIDGET_BUILD].data = STR_9804_NEW_SHIPS; |
592 w->widget[DEPOT_WIDGET_BUILD].data = STR_9804_NEW_SHIPS; |
592 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9820_BUILD_NEW_SHIP; |
593 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_9820_BUILD_NEW_SHIP; |
593 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_SHIP; |
594 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_SHIP; |
605 break; |
606 break; |
606 |
607 |
607 case VEH_AIRCRAFT: |
608 case VEH_AIRCRAFT: |
608 w->widget[DEPOT_WIDGET_CAPTION].data = STR_A002_AIRCRAFT_HANGAR; |
609 w->widget[DEPOT_WIDGET_CAPTION].data = STR_A002_AIRCRAFT_HANGAR; |
609 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP; |
610 w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_HANGAR_TIP; |
610 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP; |
611 w->widget[DEPOT_WIDGET_START_ALL].tooltips= STR_MASS_START_HANGAR_TIP; |
611 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO; |
612 w->widget[DEPOT_WIDGET_SELL].tooltips = STR_A023_DRAG_AIRCRAFT_TO_HERE_TO; |
612 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP; |
613 w->widget[DEPOT_WIDGET_SELL_ALL].tooltips = STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP; |
613 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT; |
614 w->widget[DEPOT_WIDGET_MATRIX].tooltips = STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT; |
614 |
615 |
615 w->widget[DEPOT_WIDGET_BUILD].data = STR_A003_NEW_AIRCRAFT; |
616 w->widget[DEPOT_WIDGET_BUILD].data = STR_A003_NEW_AIRCRAFT; |
616 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_A022_BUILD_NEW_AIRCRAFT; |
617 w->widget[DEPOT_WIDGET_BUILD].tooltips = STR_A022_BUILD_NEW_AIRCRAFT; |
617 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_AIRCRAFT; |
618 w->widget[DEPOT_WIDGET_CLONE].data = STR_CLONE_AIRCRAFT; |
636 uint _block_sizes[4][2]; |
637 uint _block_sizes[4][2]; |
637 |
638 |
638 /* Array to hold the default resize capacities |
639 /* Array to hold the default resize capacities |
639 * First part is the vehicle type, while the last is 0 = x, 1 = y */ |
640 * First part is the vehicle type, while the last is 0 = x, 1 = y */ |
640 const uint _resize_cap[][2] = { |
641 const uint _resize_cap[][2] = { |
641 /* VEH_TRAIN */ {6, 10 * 29 + 36}, ///< flags, unitnumber and unit count uses a total of 36 pixels and we set default to 10 units |
642 /* VEH_TRAIN */ {6, 10 * 29}, |
642 /* VEH_ROAD */ {5, 5}, |
643 /* VEH_ROAD */ {5, 5}, |
643 /* VEH_SHIP */ {3, 3}, |
644 /* VEH_SHIP */ {3, 3}, |
644 /* VEH_AIRCRAFT */ {3, 4}, |
645 /* VEH_AIRCRAFT */ {3, 4}, |
645 }; |
646 }; |
646 |
647 |
654 { |
655 { |
655 _block_sizes[VEH_ROAD][0] = 56; |
656 _block_sizes[VEH_ROAD][0] = 56; |
656 _block_sizes[VEH_ROAD][1] = GetVehicleListHeight(VEH_ROAD); |
657 _block_sizes[VEH_ROAD][1] = GetVehicleListHeight(VEH_ROAD); |
657 } |
658 } |
658 |
659 |
659 static void ResizeDefaultWindowSize(byte type) |
660 static void ResizeDefaultWindowSize(VehicleType type) |
660 { |
661 { |
661 EngineID engine; |
662 EngineID engine; |
662 uint max_width = 0; |
663 uint max_width = 0; |
663 uint max_height = 0; |
664 uint max_height = 0; |
664 |
665 |
694 ResizeDefaultWindowSizeForRoadVehicles(); |
695 ResizeDefaultWindowSizeForRoadVehicles(); |
695 ResizeDefaultWindowSize(VEH_SHIP); |
696 ResizeDefaultWindowSize(VEH_SHIP); |
696 ResizeDefaultWindowSize(VEH_AIRCRAFT); |
697 ResizeDefaultWindowSize(VEH_AIRCRAFT); |
697 } |
698 } |
698 |
699 |
699 static void CreateDepotListWindow(Window *w, byte type) |
700 static void CreateDepotListWindow(Window *w, VehicleType type) |
700 { |
701 { |
701 WP(w, depot_d).type = type; |
702 WP(w, depot_d).type = type; |
702 _backup_orders_tile = 0; |
703 _backup_orders_tile = 0; |
703 |
704 |
704 assert(IsPlayerBuildableVehicleType(type)); // ensure that we make the call with a valid type |
705 assert(IsPlayerBuildableVehicleType(type)); // ensure that we make the call with a valid type |
717 ResizeWindow(w, |
718 ResizeWindow(w, |
718 _block_sizes[type][0] * w->hscroll.cap, |
719 _block_sizes[type][0] * w->hscroll.cap, |
719 _block_sizes[type][1] * w->vscroll.cap); |
720 _block_sizes[type][1] * w->vscroll.cap); |
720 |
721 |
721 if (type == VEH_TRAIN) { |
722 if (type == VEH_TRAIN) { |
722 /* The train depot has a horizontal scroller so we should make room for it */ |
723 /* Make space for the horizontal scrollbar vertically, and the unit |
723 ResizeWindow(w, 0, 12); |
724 * number, flag, and length counter horizontally. */ |
|
725 ResizeWindow(w, 36, 12); |
724 /* substract the newly added space from the matrix since it was meant for the scrollbar */ |
726 /* substract the newly added space from the matrix since it was meant for the scrollbar */ |
725 w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12; |
727 w->widget[DEPOT_WIDGET_MATRIX].bottom -= 12; |
726 } |
728 } |
727 |
729 |
728 /* Set the minimum window size to the current window size */ |
730 /* Set the minimum window size to the current window size */ |
971 |
973 |
972 /** Opens a depot window |
974 /** Opens a depot window |
973 * @param tile The tile where the depot/hangar is located |
975 * @param tile The tile where the depot/hangar is located |
974 * @param type The type of vehicles in the depot |
976 * @param type The type of vehicles in the depot |
975 */ |
977 */ |
976 void ShowDepotWindow(TileIndex tile, byte type) |
978 void ShowDepotWindow(TileIndex tile, VehicleType type) |
977 { |
979 { |
978 Window *w; |
980 Window *w; |
979 |
981 |
980 switch (type) { |
982 switch (type) { |
981 default: NOT_REACHED(); |
983 default: NOT_REACHED(); |