MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / OnPlaceMouseUp

Method OnPlaceMouseUp

src/rail_gui.cpp:736–796  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

734 }
735
736 void OnPlaceMouseUp([[maybe_unused]] ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, [[maybe_unused]] Point pt, TileIndex start_tile, TileIndex end_tile) override
737 {
738 if (pt.x != -1) {
739 switch (select_proc) {
740 default: NOT_REACHED();
741 case DDSP_BUILD_BRIDGE:
742 if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
743 ShowBuildBridgeWindow(start_tile, end_tile, TRANSPORT_RAIL, _cur_railtype);
744 break;
745
746 case DDSP_PLACE_RAIL:
747 HandleAutodirPlacement();
748 break;
749
750 case DDSP_BUILD_SIGNALS:
751 HandleAutoSignalPlacement();
752 break;
753
754 case DDSP_DEMOLISH_AREA:
755 GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
756 break;
757
758 case DDSP_CONVERT_RAIL:
759 Command<CMD_CONVERT_RAIL>::Post(STR_ERROR_CAN_T_CONVERT_RAIL, CcPlaySound_CONSTRUCTION_RAIL, end_tile, start_tile, _cur_railtype, _ctrl_pressed);
760 break;
761
762 case DDSP_REMOVE_STATION:
763 case DDSP_BUILD_STATION:
764 if (this->IsWidgetLowered(WID_RAT_BUILD_STATION)) {
765 /* Station */
766 if (_remove_button_clicked) {
767 bool keep_rail = !_ctrl_pressed;
768 Command<CMD_REMOVE_FROM_RAIL_STATION>::Post(STR_ERROR_CAN_T_REMOVE_PART_OF_STATION, CcPlaySound_CONSTRUCTION_RAIL, end_tile, start_tile, keep_rail);
769 } else {
770 HandleStationPlacement(start_tile, end_tile);
771 }
772 } else {
773 /* Waypoint */
774 if (_remove_button_clicked) {
775 bool keep_rail = !_ctrl_pressed;
776 Command<CMD_REMOVE_FROM_RAIL_WAYPOINT>::Post(STR_ERROR_CAN_T_REMOVE_RAIL_WAYPOINT , CcPlaySound_CONSTRUCTION_RAIL, end_tile, start_tile, keep_rail);
777 } else {
778 TileArea ta(start_tile, end_tile);
779 Axis axis = select_method == VPM_X_LIMITED ? AXIS_X : AXIS_Y;
780 bool adjacent = _ctrl_pressed;
781
782 auto proc = [=](bool test, StationID to_join) -> bool {
783 if (test) {
784 return Command<CMD_BUILD_RAIL_WAYPOINT>::Do(CommandFlagsToDCFlags(GetCommandFlags<CMD_BUILD_RAIL_WAYPOINT>()), ta.tile, axis, ta.w, ta.h, _waypoint_gui.sel_class, _waypoint_gui.sel_type, StationID::Invalid(), adjacent).Succeeded();
785 } else {
786 return Command<CMD_BUILD_RAIL_WAYPOINT>::Post(STR_ERROR_CAN_T_BUILD_RAIL_WAYPOINT , CcPlaySound_CONSTRUCTION_RAIL, ta.tile, axis, ta.w, ta.h, _waypoint_gui.sel_class, _waypoint_gui.sel_type, to_join, adjacent);
787 }
788 };
789
790 ShowSelectRailWaypointIfNeeded(ta, proc);
791 }
792 }
793 break;

Callers 1

PlaceRail_BridgeFunction · 0.45

Calls 12

NOT_REACHEDFunction · 0.85
ResetObjectToPlaceFunction · 0.85
ShowBuildBridgeWindowFunction · 0.85
HandleAutodirPlacementFunction · 0.85
GUIPlaceProcDragXYFunction · 0.85
HandleStationPlacementFunction · 0.85
CommandFlagsToDCFlagsFunction · 0.85
InvalidFunction · 0.85
IsWidgetLoweredMethod · 0.80
SucceededMethod · 0.80

Tested by

no test coverage detected