summaryrefslogtreecommitdiff
path: root/train_gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'train_gui.c')
-rw-r--r--train_gui.c61
1 files changed, 25 insertions, 36 deletions
diff --git a/train_gui.c b/train_gui.c
index cfdb8e432..e8dec8bf5 100644
--- a/train_gui.c
+++ b/train_gui.c
@@ -163,13 +163,11 @@ void CcBuildLoco(bool success, TileIndex tile, uint32 p1, uint32 p2)
void CcCloneTrain(bool success, uint tile, uint32 p1, uint32 p2)
{
- Vehicle *v;
+ if (success) {
+ const Vehicle* v = GetVehicle(_new_aircraft_id);
- if (!success)
- return;
-
- v = GetVehicle(_new_train_id);
- ShowTrainViewWindow(v);
+ ShowTrainViewWindow(v);
+ }
}
static void engine_drawing_loop(int *x, int *y, int *pos, int *sel,
@@ -604,40 +602,29 @@ static void TrainDepotClickTrain(Window *w, int x, int y)
* @param *v is the original vehicle to clone
* @param *w is the window of the depot where the clone is build
*/
-static bool HandleCloneVehClick(Vehicle *v, Window *w)
+static void HandleCloneVehClick(const Vehicle* v, const Window* w)
{
-
- if (!v){
- return false;
- }
+ if (v == NULL || v->type != VEH_Train) return;
// for train vehicles: subtype 0 for locs and not zero for others
- if (v->type == VEH_Train && v->subtype != 0) {
+ if (v->subtype != TS_Front_Engine) {
v = GetFirstVehicleInChain(v);
- if (v->subtype != 0) // This happens when clicking on a train in depot with no loc attached
- return false;
- }else{
- if (v->type != VEH_Train) {
- // it's not a train, Do Nothing
- return false;
- }
+ // Do nothing when clicking on a train in depot with no loc attached
+ if (v->subtype != TS_Front_Engine) return;
}
- DoCommandP(w->window_number, v->index, _ctrl_pressed ? 1 : 0, CcCloneTrain, CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
+ DoCommandP(w->window_number, v->index, _ctrl_pressed ? 1 : 0, CcCloneTrain,
+ CMD_CLONE_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE)
+ );
ResetObjectToPlace();
-
- return true;
}
-static void ClonePlaceObj(uint tile, Window *w)
+static void ClonePlaceObj(TileIndex tile, const Window* w)
{
- Vehicle *v;
+ Vehicle* v = CheckMouseOverVehicle();
-
- v = CheckMouseOverVehicle();
- if (v && HandleCloneVehClick(v, w))
- return;
+ if (v != NULL) HandleCloneVehClick(v, w);
}
static void TrainDepotWndProc(Window *w, WindowEvent *e)
@@ -686,11 +673,12 @@ static void TrainDepotWndProc(Window *w, WindowEvent *e)
// check if a vehicle in a depot was clicked..
case WE_MOUSELOOP: {
- Vehicle *v = _place_clicked_vehicle;
- // since OTTD checks all open depot windows, we will make sure that it triggers the one with a clicked clone button
+ const Vehicle* v = _place_clicked_vehicle;
+
+ // since OTTD checks all open depot windows, we will make sure that it triggers the one with a clicked clone button
if (v != NULL && HASBIT(w->click_state, 9)) {
_place_clicked_vehicle = NULL;
- HandleCloneVehClick( v, w);
+ HandleCloneVehClick(v, w);
}
} break;
@@ -907,6 +895,8 @@ static const Widget _train_view_widgets[] = {
{ WIDGETS_END }
};
+static void ShowTrainDetailsWindow(const Vehicle* v);
+
static void TrainViewWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
@@ -1063,12 +1053,11 @@ static const WindowDesc _train_view_desc = {
TrainViewWndProc
};
-void ShowTrainViewWindow(Vehicle *v)
+void ShowTrainViewWindow(const Vehicle* v)
{
- Window *w;
+ Window* w = AllocateWindowDescFront(&_train_view_desc,v->index);
- w = AllocateWindowDescFront(&_train_view_desc,v->index);
- if (w) {
+ if (w != NULL) {
w->caption_color = v->owner;
AssignWindowViewport(w, 3, 17, 0xE2, 0x66, w->window_number | (1 << 31), 0);
}
@@ -1320,7 +1309,7 @@ static const WindowDesc _train_details_desc = {
};
-void ShowTrainDetailsWindow(Vehicle *v)
+static void ShowTrainDetailsWindow(const Vehicle* v)
{
Window *w;
VehicleID veh = v->index;