src/player_gui.cpp
branchcustombridgeheads
changeset 5650 aefc131bf5ce
parent 5649 55c8267c933f
child 5919 2b58160d667d
equal deleted inserted replaced
5649:55c8267c933f 5650:aefc131bf5ce
   146 
   146 
   147 static void PlayerFinancesWndProc(Window *w, WindowEvent *e)
   147 static void PlayerFinancesWndProc(Window *w, WindowEvent *e)
   148 {
   148 {
   149 	switch (e->event) {
   149 	switch (e->event) {
   150 	case WE_PAINT: {
   150 	case WE_PAINT: {
   151 		PlayerID player = w->window_number;
   151 		PlayerID player = (PlayerID)w->window_number;
   152 		const Player *p = GetPlayer(player);
   152 		const Player *p = GetPlayer(player);
   153 
   153 
   154 		if (player == _local_player) {
   154 		if (player == _local_player) {
   155 			/* borrow/repay buttons only exist for local player */
   155 			/* borrow/repay buttons only exist for local player */
   156 			SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
   156 			SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
   168 	case WE_CLICK:
   168 	case WE_CLICK:
   169 		switch (e->we.click.widget) {
   169 		switch (e->we.click.widget) {
   170 		case 2: {/* toggle size */
   170 		case 2: {/* toggle size */
   171 			byte mode = (byte)WP(w,def_d).data_1;
   171 			byte mode = (byte)WP(w,def_d).data_1;
   172 			bool stickied = !!(w->flags4 & WF_STICKY);
   172 			bool stickied = !!(w->flags4 & WF_STICKY);
   173 			PlayerID player = w->window_number;
   173 			PlayerID player = (PlayerID)w->window_number;
   174 			DeleteWindow(w);
   174 			DeleteWindow(w);
   175 			DoShowPlayerFinances(player, !HASBIT(mode, 0), stickied);
   175 			DoShowPlayerFinances(player, !HASBIT(mode, 0), stickied);
   176 		} break;
   176 		} break;
   177 
   177 
   178 		case 6: /* increase loan */
   178 		case 6: /* increase loan */
   303 			if (p->is_active && p->index != _local_player) SETBIT(used_colours, p->player_color);
   303 			if (p->is_active && p->index != _local_player) SETBIT(used_colours, p->player_color);
   304 		}
   304 		}
   305 	}
   305 	}
   306 
   306 
   307 	/* Get the first selected livery to use as the default dropdown item */
   307 	/* Get the first selected livery to use as the default dropdown item */
   308 	for (scheme = 0; scheme < LS_END; scheme++) {
   308 	for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
   309 		if (HASBIT(WP(w, livery_d).sel, scheme)) break;
   309 		if (HASBIT(WP(w, livery_d).sel, scheme)) break;
   310 	}
   310 	}
   311 	if (scheme == LS_END) scheme = LS_DEFAULT;
   311 	if (scheme == LS_END) scheme = LS_DEFAULT;
   312 	livery = &GetPlayer(w->window_number)->livery[scheme];
   312 	livery = &GetPlayer((PlayerID)w->window_number)->livery[scheme];
   313 
   313 
   314 	ShowDropDownMenu(w, _colour_dropdown, widget == 10 ? livery->colour1 : livery->colour2, widget, used_colours, 0);
   314 	ShowDropDownMenu(w, _colour_dropdown, widget == 10 ? livery->colour1 : livery->colour2, widget, used_colours, 0);
   315 }
   315 }
   316 
   316 
   317 static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
   317 static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
   324 				HideWindowWidget(w, 12);
   324 				HideWindowWidget(w, 12);
   325 			}
   325 			}
   326 			break;
   326 			break;
   327 
   327 
   328 		case WE_PAINT: {
   328 		case WE_PAINT: {
   329 			const Player *p = GetPlayer(w->window_number);
   329 			const Player *p = GetPlayer((PlayerID)w->window_number);
   330 			LiveryScheme scheme = LS_DEFAULT;
   330 			LiveryScheme scheme = LS_DEFAULT;
   331 			int y = 51;
   331 			int y = 51;
   332 
   332 
   333 			/* Disable dropdown controls if no scheme is selected */
   333 			/* Disable dropdown controls if no scheme is selected */
   334 			SetWindowWidgetDisabledState(w,  9, (WP(w, livery_d).sel == 0));
   334 			SetWindowWidgetDisabledState(w,  9, (WP(w, livery_d).sel == 0));
   335 			SetWindowWidgetDisabledState(w, 10, (WP(w, livery_d).sel == 0));
   335 			SetWindowWidgetDisabledState(w, 10, (WP(w, livery_d).sel == 0));
   336 			SetWindowWidgetDisabledState(w, 11, (WP(w, livery_d).sel == 0));
   336 			SetWindowWidgetDisabledState(w, 11, (WP(w, livery_d).sel == 0));
   337 			SetWindowWidgetDisabledState(w, 12, (WP(w, livery_d).sel == 0));
   337 			SetWindowWidgetDisabledState(w, 12, (WP(w, livery_d).sel == 0));
   338 
   338 
   339 			if (!(WP(w, livery_d).sel == 0)) {
   339 			if (!(WP(w, livery_d).sel == 0)) {
   340 				for (scheme = 0; scheme < LS_END; scheme++) {
   340 				for (scheme = LS_BEGIN; scheme < LS_END; scheme++) {
   341 					if (HASBIT(WP(w, livery_d).sel, scheme)) break;
   341 					if (HASBIT(WP(w, livery_d).sel, scheme)) break;
   342 				}
   342 				}
   343 				if (scheme == LS_END) scheme = LS_DEFAULT;
   343 				if (scheme == LS_END) scheme = LS_DEFAULT;
   344 			}
   344 			}
   345 
   345 
   381 				case 5:
   381 				case 5:
   382 				case 6: {
   382 				case 6: {
   383 					LiveryScheme scheme;
   383 					LiveryScheme scheme;
   384 
   384 
   385 					RaiseWindowWidget(w, WP(w, livery_d).livery_class + 2);
   385 					RaiseWindowWidget(w, WP(w, livery_d).livery_class + 2);
   386 					WP(w, livery_d).livery_class = e->we.click.widget - 2;
   386 					WP(w, livery_d).livery_class = (LiveryClass)(e->we.click.widget - 2);
   387 					WP(w, livery_d).sel = 0;
   387 					WP(w, livery_d).sel = 0;
   388 					LowerWindowWidget(w, WP(w, livery_d).livery_class + 2);
   388 					LowerWindowWidget(w, WP(w, livery_d).livery_class + 2);
   389 
   389 
   390 					/* Select the first item in the list */
   390 					/* Select the first item in the list */
   391 					for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
   391 					for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
   411 					ShowColourDropDownMenu(w, 12);
   411 					ShowColourDropDownMenu(w, 12);
   412 					break;
   412 					break;
   413 
   413 
   414 				case 13: {
   414 				case 13: {
   415 					LiveryScheme scheme;
   415 					LiveryScheme scheme;
   416 					LiveryScheme j = (e->we.click.pt.y - 48) / 14;
   416 					LiveryScheme j = (LiveryScheme)((e->we.click.pt.y - 48) / 14);
   417 
   417 
   418 					for (scheme = 0; scheme <= j; scheme++) {
   418 					for (scheme = LS_BEGIN; scheme <= j; scheme++) {
   419 						if (livery_class[scheme] != WP(w, livery_d).livery_class) j++;
   419 						if (livery_class[scheme] != WP(w, livery_d).livery_class) j++;
   420 						if (scheme >= LS_END) return;
   420 						if (scheme >= LS_END) return;
   421 					}
   421 					}
   422 					if (j >= LS_END) return;
   422 					if (j >= LS_END) return;
   423 
   423 
   424 					/* If clicking on the left edge, toggle using the livery */
   424 					/* If clicking on the left edge, toggle using the livery */
   425 					if (e->we.click.pt.x < 10) {
   425 					if (e->we.click.pt.x < 10) {
   426 						DoCommandP(0, j | (2 << 8), !GetPlayer(w->window_number)->livery[j].in_use, NULL, CMD_SET_PLAYER_COLOR);
   426 						DoCommandP(0, j | (2 << 8), !GetPlayer((PlayerID)w->window_number)->livery[j].in_use, NULL, CMD_SET_PLAYER_COLOR);
   427 					}
   427 					}
   428 
   428 
   429 					if (_ctrl_pressed) {
   429 					if (_ctrl_pressed) {
   430 						TOGGLEBIT(WP(w, livery_d).sel, j);
   430 						TOGGLEBIT(WP(w, livery_d).sel, j);
   431 					} else {
   431 					} else {
   509 	switch (e->event) {
   509 	switch (e->event) {
   510 	case WE_PAINT: {
   510 	case WE_PAINT: {
   511 		Player *p;
   511 		Player *p;
   512 		LowerWindowWidget(w, WP(w, facesel_d).gender + 5);
   512 		LowerWindowWidget(w, WP(w, facesel_d).gender + 5);
   513 		DrawWindowWidgets(w);
   513 		DrawWindowWidgets(w);
   514 		p = GetPlayer(w->window_number);
   514 		p = GetPlayer((PlayerID)w->window_number);
   515 		DrawPlayerFace(WP(w,facesel_d).face, p->player_color, 2, 16);
   515 		DrawPlayerFace(WP(w,facesel_d).face, p->player_color, 2, 16);
   516 	} break;
   516 	} break;
   517 
   517 
   518 	case WE_CLICK:
   518 	case WE_CLICK:
   519 		switch (e->we.click.widget) {
   519 		switch (e->we.click.widget) {
   673 
   673 
   674 static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
   674 static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
   675 {
   675 {
   676 	switch (e->event) {
   676 	switch (e->event) {
   677 		case WE_PAINT: {
   677 		case WE_PAINT: {
   678 			const Player *p = GetPlayer(w->window_number);
   678 			const Player *p = GetPlayer((PlayerID)w->window_number);
   679 			bool local = w->window_number == _local_player;
   679 			bool local = w->window_number == _local_player;
   680 
   680 
   681 			SetWindowWidgetHiddenState(w, PCW_WIDGET_NEW_FACE,       !local);
   681 			SetWindowWidgetHiddenState(w, PCW_WIDGET_NEW_FACE,       !local);
   682 			SetWindowWidgetHiddenState(w, PCW_WIDGET_COLOR_SCHEME,   !local);
   682 			SetWindowWidgetHiddenState(w, PCW_WIDGET_COLOR_SCHEME,   !local);
   683 			SetWindowWidgetHiddenState(w, PCW_WIDGET_PRESIDENT_NAME, !local);
   683 			SetWindowWidgetHiddenState(w, PCW_WIDGET_PRESIDENT_NAME, !local);
   709 				}
   709 				}
   710 			}
   710 			}
   711 
   711 
   712 			SetDParam(0, p->name_1);
   712 			SetDParam(0, p->name_1);
   713 			SetDParam(1, p->name_2);
   713 			SetDParam(1, p->name_2);
   714 			SetDParam(2, GetPlayerNameString((byte)w->window_number, 3));
   714 			SetDParam(2, GetPlayerNameString((PlayerID)w->window_number, 3));
   715 
   715 
   716 			DrawWindowWidgets(w);
   716 			DrawWindowWidgets(w);
   717 
   717 
   718 			SetDParam(0, p->inaugurated_year);
   718 			SetDParam(0, p->inaugurated_year);
   719 			DrawString(110, 25, STR_7038_INAUGURATED, 0);
   719 			DrawString(110, 25, STR_7038_INAUGURATED, 0);
   720 
   720 
   721 			DrawPlayerVehiclesAmount(w->window_number);
   721 			DrawPlayerVehiclesAmount((PlayerID)w->window_number);
   722 
   722 
   723 			DrawString(110,48, STR_7006_COLOR_SCHEME, 0);
   723 			DrawString(110,48, STR_7006_COLOR_SCHEME, 0);
   724 			// Draw company-colour bus
   724 			// Draw company-colour bus
   725 			DrawSprite(PLAYER_SPRITE_COLOR(p->index) + SPRITE_PALETTE(SPR_VEH_BUS_SW_VIEW), 215, 49);
   725 			DrawSprite(PLAYER_SPRITE_COLOR(p->index) + SPRITE_PALETTE(SPR_VEH_BUS_SW_VIEW), 215, 49);
   726 
   726 
   742 			switch (e->we.click.widget) {
   742 			switch (e->we.click.widget) {
   743 				case PCW_WIDGET_NEW_FACE: {
   743 				case PCW_WIDGET_NEW_FACE: {
   744 					Window *wf = AllocateWindowDescFront(&_select_player_face_desc, w->window_number);
   744 					Window *wf = AllocateWindowDescFront(&_select_player_face_desc, w->window_number);
   745 					if (wf != NULL) {
   745 					if (wf != NULL) {
   746 						wf->caption_color = w->window_number;
   746 						wf->caption_color = w->window_number;
   747 						WP(wf,facesel_d).face = GetPlayer(wf->window_number)->face;
   747 						WP(wf,facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face;
   748 						WP(wf,facesel_d).gender = 0;
   748 						WP(wf,facesel_d).gender = 0;
   749 					}
   749 					}
   750 					break;
   750 					break;
   751 				}
   751 				}
   752 
   752 
   760 					}
   760 					}
   761 					break;
   761 					break;
   762 				}
   762 				}
   763 
   763 
   764 				case PCW_WIDGET_PRESIDENT_NAME: {
   764 				case PCW_WIDGET_PRESIDENT_NAME: {
   765 					const Player *p = GetPlayer(w->window_number);
   765 					const Player *p = GetPlayer((PlayerID)w->window_number);
   766 					WP(w, def_d).byte_1 = 0;
   766 					WP(w, def_d).byte_1 = 0;
   767 					SetDParam(0, p->president_name_2);
   767 					SetDParam(0, p->president_name_2);
   768 					ShowQueryString(p->president_name_1, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
   768 					ShowQueryString(p->president_name_1, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
   769 					break;
   769 					break;
   770 				}
   770 				}
   771 
   771 
   772 				case PCW_WIDGET_COMPANY_NAME: {
   772 				case PCW_WIDGET_COMPANY_NAME: {
   773 					Player *p = GetPlayer(w->window_number);
   773 					Player *p = GetPlayer((PlayerID)w->window_number);
   774 					WP(w,def_d).byte_1 = 1;
   774 					WP(w,def_d).byte_1 = 1;
   775 					SetDParam(0, p->name_2);
   775 					SetDParam(0, p->name_2);
   776 					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
   776 					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
   777 					break;
   777 					break;
   778 				}
   778 				}
   779 
   779 
   780 				case PCW_WIDGET_BUILD_VIEW_HQ: {
   780 				case PCW_WIDGET_BUILD_VIEW_HQ: {
   781 					TileIndex tile = GetPlayer(w->window_number)->location_of_house;
   781 					TileIndex tile = GetPlayer((PlayerID)w->window_number)->location_of_house;
   782 					if (tile == 0) {
   782 					if (tile == 0) {
   783 						if ((byte)w->window_number != _local_player)
   783 						if ((byte)w->window_number != _local_player)
   784 							return;
   784 							return;
   785 						SetObjectToPlaceWnd(SPR_CURSOR_HQ, 1, w);
   785 						SetObjectToPlaceWnd(SPR_CURSOR_HQ, 1, w);
   786 						SetTileSelectSize(2, 2);
   786 						SetTileSelectSize(2, 2);
   888 
   888 
   889 static void BuyCompanyWndProc(Window *w, WindowEvent *e)
   889 static void BuyCompanyWndProc(Window *w, WindowEvent *e)
   890 {
   890 {
   891 	switch (e->event) {
   891 	switch (e->event) {
   892 	case WE_PAINT: {
   892 	case WE_PAINT: {
   893 		Player *p = GetPlayer(w->window_number);
   893 		Player *p = GetPlayer((PlayerID)w->window_number);
   894 		SetDParam(0, p->name_1);
   894 		SetDParam(0, p->name_1);
   895 		SetDParam(1, p->name_2);
   895 		SetDParam(1, p->name_2);
   896 		DrawWindowWidgets(w);
   896 		DrawWindowWidgets(w);
   897 
   897 
   898 		DrawPlayerFace(p->face, p->player_color, 2, 16);
   898 		DrawPlayerFace(p->face, p->player_color, 2, 16);