src/player_gui.cpp
branchcpp_gui
changeset 6308 646711c5feaa
parent 6303 84c215fc8eb8
equal deleted inserted replaced
6307:f40e88cff863 6308:646711c5feaa
    27 
    27 
    28 static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied);
    28 static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied);
    29 
    29 
    30 static void DrawPlayerEconomyStats(const Player *p, byte mode)
    30 static void DrawPlayerEconomyStats(const Player *p, byte mode)
    31 {
    31 {
    32 	int x,y,i,j,year;
    32 	int x, y, i, j, year;
    33 	const int64 (*tbl)[13];
    33 	const int64 (*tbl)[13];
    34 	int64 sum, cost;
    34 	int64 sum, cost;
    35 	StringID str;
    35 	StringID str;
    36 
    36 
    37 	if (!(mode & 1)) { // normal sized economics window (mode&1) is minimized status
    37 	if (!(mode & 1)) { // normal sized economics window (mode&1) is minimized status
    38 		/* draw categories */
    38 		/* draw categories */
    39 		DrawStringCenterUnderline(61, 15, STR_700F_EXPENDITURE_INCOME, 0);
    39 		DrawStringCenterUnderline(61, 15, STR_700F_EXPENDITURE_INCOME, 0);
    40 		for (i = 0; i != 13; i++)
    40 		for (i = 0; i != 13; i++)
    41 			DrawString(2, 27 + i*10, STR_7011_CONSTRUCTION + i, 0);
    41 			DrawString(2, 27 + i * 10, STR_7011_CONSTRUCTION + i, 0);
    42 		DrawStringRightAligned(111, 27 + 10*13 + 2, STR_7020_TOTAL, 0);
    42 		DrawStringRightAligned(111, 27 + 10 * 13 + 2, STR_7020_TOTAL, 0);
    43 
    43 
    44 		/* draw the price columns */
    44 		/* draw the price columns */
    45 		year = _cur_year - 2;
    45 		year = _cur_year - 2;
    46 		j = 3;
    46 		j = 3;
    47 		x = 215;
    47 		x = 215;
    58 						sum += cost;
    58 						sum += cost;
    59 
    59 
    60 						str = STR_701E;
    60 						str = STR_701E;
    61 						if (cost < 0) { cost = -cost; str++; }
    61 						if (cost < 0) { cost = -cost; str++; }
    62 						SetDParam64(0, cost);
    62 						SetDParam64(0, cost);
    63 						DrawStringRightAligned(x, 27+i*10, str, 0);
    63 						DrawStringRightAligned(x, 27 + i * 10, str, 0);
    64 					}
    64 					}
    65 				}
    65 				}
    66 
    66 
    67 				str = STR_701E;
    67 				str = STR_701E;
    68 				if (sum < 0) { sum = -sum; str++; }
    68 				if (sum < 0) { sum = -sum; str++; }
    69 				SetDParam64(0, sum);
    69 				SetDParam64(0, sum);
    70 				DrawStringRightAligned(x, 27 + 13*10 + 2, str, 0);
    70 				DrawStringRightAligned(x, 27 + 13 * 10 + 2, str, 0);
    71 
    71 
    72 				GfxFillRect(x - 75, 27 + 10*13, x, 27 + 10*13, 215);
    72 				GfxFillRect(x - 75, 27 + 10 * 13, x, 27 + 10 * 13, 215);
    73 				x += 95;
    73 				x += 95;
    74 			}
    74 			}
    75 			year++;
    75 			year++;
    76 			tbl--;
    76 			tbl--;
    77 		} while (--j != 0);
    77 		} while (--j != 0);
    78 
    78 
    79 		y = 171;
    79 		y = 171;
    80 
    80 
    81 		/* draw max loan aligned to loan below (y += 10) */
    81 		/* draw max loan aligned to loan below (y += 10) */
    82 		SetDParam64(0, (uint64)_economy.max_loan);
    82 		SetDParam64(0, (uint64)_economy.max_loan);
    83 		DrawString(202, y+10, STR_MAX_LOAN, 0);
    83 		DrawString(202, y + 10, STR_MAX_LOAN, 0);
    84 	} else {
    84 	} else {
    85 		y = 15;
    85 		y = 15;
    86 	}
    86 	}
    87 
    87 
    88 	DrawString(2, y, STR_7026_BANK_BALANCE, 0);
    88 	DrawString(2, y, STR_7026_BANK_BALANCE, 0);
    95 	SetDParam64(0, p->current_loan);
    95 	SetDParam64(0, p->current_loan);
    96 	DrawStringRightAligned(182, y, STR_7028, 0);
    96 	DrawStringRightAligned(182, y, STR_7028, 0);
    97 
    97 
    98 	y += 12;
    98 	y += 12;
    99 
    99 
   100 	GfxFillRect(182 - 75, y-2, 182, y-2, 215);
   100 	GfxFillRect(182 - 75, y - 2, 182, y - 2, 215);
   101 
   101 
   102 	SetDParam64(0, p->money64 - p->current_loan);
   102 	SetDParam64(0, p->money64 - p->current_loan);
   103 	DrawStringRightAligned(182, y, STR_7028, 0);
   103 	DrawStringRightAligned(182, y, STR_7028, 0);
   104 }
   104 }
   105 
   105 
   164 		SetDParam(1, p->name_2);
   164 		SetDParam(1, p->name_2);
   165 		SetDParam(2, GetPlayerNameString(player, 3));
   165 		SetDParam(2, GetPlayerNameString(player, 3));
   166 		SetDParam(4, 10000);
   166 		SetDParam(4, 10000);
   167 		w->DrawWidgets();
   167 		w->DrawWidgets();
   168 
   168 
   169 		DrawPlayerEconomyStats(p, (byte)WP(w,def_d).data_1);
   169 		DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
   170 	} break;
   170 	} break;
   171 
   171 
   172 	case WE_CLICK:
   172 	case WE_CLICK:
   173 		switch (e->we.click.widget) {
   173 		switch (e->we.click.widget) {
   174 		case 2: {/* toggle size */
   174 		case 2: {/* toggle size */
   175 			byte mode = (byte)WP(w,def_d).data_1;
   175 			byte mode = (byte)WP(w, def_d).data_1;
   176 			bool stickied = !!(w->flags4 & WF_STICKY);
   176 			bool stickied = !!(w->flags4 & WF_STICKY);
   177 			PlayerID player = (PlayerID)w->window_number;
   177 			PlayerID player = (PlayerID)w->window_number;
   178 			w->Close();
   178 			w->Close();
   179 			DoShowPlayerFinances(player, !HASBIT(mode, 0), stickied);
   179 			DoShowPlayerFinances(player, !HASBIT(mode, 0), stickied);
   180 		} break;
   180 		} break;
   237 
   237 
   238 	mode = (player != _local_player) * 2 + show_small;
   238 	mode = (player != _local_player) * 2 + show_small;
   239 	w = BaseWindow::AllocateFront(desc_table[mode], player);
   239 	w = BaseWindow::AllocateFront(desc_table[mode], player);
   240 	if (w != NULL) {
   240 	if (w != NULL) {
   241 		w->caption_color = w->window_number;
   241 		w->caption_color = w->window_number;
   242 		WP(w,def_d).data_1 = mode;
   242 		WP(w, def_d).data_1 = mode;
   243 		if (show_stickied) w->flags4 |= WF_STICKY;
   243 		if (show_stickied) w->flags4 |= WF_STICKY;
   244 	}
   244 	}
   245 }
   245 }
   246 
   246 
   247 void ShowPlayerFinances(PlayerID player)
   247 void ShowPlayerFinances(PlayerID player)
   552 	case WE_PAINT: {
   552 	case WE_PAINT: {
   553 		Player *p;
   553 		Player *p;
   554 		w->LowerWidget(WP(w, facesel_d).gender + 5);
   554 		w->LowerWidget(WP(w, facesel_d).gender + 5);
   555 		w->DrawWidgets();
   555 		w->DrawWidgets();
   556 		p = GetPlayer((PlayerID)w->window_number);
   556 		p = GetPlayer((PlayerID)w->window_number);
   557 		DrawPlayerFace(WP(w,facesel_d).face, p->player_color, 2, 16);
   557 		DrawPlayerFace(WP(w, facesel_d).face, p->player_color, 2, 16);
   558 	} break;
   558 	} break;
   559 
   559 
   560 	case WE_CLICK:
   560 	case WE_CLICK:
   561 		switch (e->we.click.widget) {
   561 		switch (e->we.click.widget) {
   562 		case 3: w->Close(); break;
   562 		case 3: w->Close(); break;
   563 		case 4: /* ok click */
   563 		case 4: /* ok click */
   564 			DoCommandP(0, 0, WP(w,facesel_d).face, NULL, CMD_SET_PLAYER_FACE);
   564 			DoCommandP(0, 0, WP(w, facesel_d).face, NULL, CMD_SET_PLAYER_FACE);
   565 			w->Close();
   565 			w->Close();
   566 			break;
   566 			break;
   567 		case 5: /* male click */
   567 		case 5: /* male click */
   568 		case 6: /* female click */
   568 		case 6: /* female click */
   569 			w->RaiseWidget(WP(w, facesel_d).gender + 5);
   569 			w->RaiseWidget(WP(w, facesel_d).gender + 5);
   570 			WP(w, facesel_d).gender = e->we.click.widget - 5;
   570 			WP(w, facesel_d).gender = e->we.click.widget - 5;
   571 			w->LowerWidget(WP(w, facesel_d).gender + 5);
   571 			w->LowerWidget(WP(w, facesel_d).gender + 5);
   572 			w->SetDirty();
   572 			w->SetDirty();
   573 			break;
   573 			break;
   574 		case 7:
   574 		case 7:
   575 			WP(w,facesel_d).face = ConvertFromOldPlayerFace((WP(w, facesel_d).gender << 31) + GB(InteractiveRandom(), 0, 31));
   575 			WP(w, facesel_d).face = ConvertFromOldPlayerFace((WP(w, facesel_d).gender << 31) + GB(InteractiveRandom(), 0, 31));
   576 			w->SetDirty();
   576 			w->SetDirty();
   577 			break;
   577 			break;
   578 		}
   578 		}
   579 		break;
   579 		break;
   580 	}
   580 	}
   654 				default: break;
   654 				default: break;
   655 			}
   655 			}
   656 		}
   656 		}
   657 	}
   657 	}
   658 
   658 
   659 	if (train+road+air+ship == 0) {
   659 	if (train + road + air + ship == 0) {
   660 		DrawString(x+70, y, STR_7042_NONE, 0);
   660 		DrawString(x + 70, y, STR_7042_NONE, 0);
   661 	} else {
   661 	} else {
   662 		if (train != 0) {
   662 		if (train != 0) {
   663 			SetDParam(0, train);
   663 			SetDParam(0, train);
   664 			DrawString(x + 70, y, STR_TRAINS, 0);
   664 			DrawString(x + 70, y, STR_TRAINS, 0);
   665 			y += 10;
   665 			y += 10;
   760 			SetDParam(0, p->inaugurated_year);
   760 			SetDParam(0, p->inaugurated_year);
   761 			DrawString(110, 25, STR_7038_INAUGURATED, 0);
   761 			DrawString(110, 25, STR_7038_INAUGURATED, 0);
   762 
   762 
   763 			DrawPlayerVehiclesAmount((PlayerID)w->window_number);
   763 			DrawPlayerVehiclesAmount((PlayerID)w->window_number);
   764 
   764 
   765 			DrawString(110,48, STR_7006_COLOR_SCHEME, 0);
   765 			DrawString(110, 48, STR_7006_COLOR_SCHEME, 0);
   766 			/* Draw company-colour bus */
   766 			/* Draw company-colour bus */
   767 			DrawSprite(SPR_VEH_BUS_SW_VIEW, PLAYER_SPRITE_COLOR(p->index), 215, 49);
   767 			DrawSprite(SPR_VEH_BUS_SW_VIEW, PLAYER_SPRITE_COLOR(p->index), 215, 49);
   768 
   768 
   769 			DrawPlayerFace(p->face, p->player_color, 2, 16);
   769 			DrawPlayerFace(p->face, p->player_color, 2, 16);
   770 
   770 
   784 			switch (e->we.click.widget) {
   784 			switch (e->we.click.widget) {
   785 				case PCW_WIDGET_NEW_FACE: {
   785 				case PCW_WIDGET_NEW_FACE: {
   786 					BaseWindow *wf = BaseWindow::AllocateFront(&_select_player_face_desc, w->window_number);
   786 					BaseWindow *wf = BaseWindow::AllocateFront(&_select_player_face_desc, w->window_number);
   787 					if (wf != NULL) {
   787 					if (wf != NULL) {
   788 						wf->caption_color = w->window_number;
   788 						wf->caption_color = w->window_number;
   789 						WP(wf,facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face;
   789 						WP(wf, facesel_d).face = GetPlayer((PlayerID)wf->window_number)->face;
   790 						WP(wf,facesel_d).gender = 0;
   790 						WP(wf, facesel_d).gender = 0;
   791 					}
   791 					}
   792 					break;
   792 					break;
   793 				}
   793 				}
   794 
   794 
   795 				case PCW_WIDGET_COLOR_SCHEME: {
   795 				case PCW_WIDGET_COLOR_SCHEME: {
   796 					BaseWindow *wf = BaseWindow::AllocateFront(_have_2cc ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
   796 					BaseWindow *wf = BaseWindow::AllocateFront(_have_2cc ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
   797 					if (wf != NULL) {
   797 					if (wf != NULL) {
   798 						wf->caption_color = wf->window_number;
   798 						wf->caption_color = wf->window_number;
   799 						WP(wf,livery_d).livery_class = LC_OTHER;
   799 						WP(wf, livery_d).livery_class = LC_OTHER;
   800 						WP(wf,livery_d).sel = 1;
   800 						WP(wf, livery_d).sel = 1;
   801 						wf->LowerWidget(2);
   801 						wf->LowerWidget(2);
   802 					}
   802 					}
   803 					break;
   803 					break;
   804 				}
   804 				}
   805 
   805 
   811 					break;
   811 					break;
   812 				}
   812 				}
   813 
   813 
   814 				case PCW_WIDGET_COMPANY_NAME: {
   814 				case PCW_WIDGET_COMPANY_NAME: {
   815 					Player *p = GetPlayer((PlayerID)w->window_number);
   815 					Player *p = GetPlayer((PlayerID)w->window_number);
   816 					WP(w,def_d).byte_1 = 1;
   816 					WP(w, def_d).byte_1 = 1;
   817 					SetDParam(0, p->name_2);
   817 					SetDParam(0, p->name_2);
   818 					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
   818 					ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
   819 					break;
   819 					break;
   820 				}
   820 				}
   821 
   821 
   850 					break;
   850 					break;
   851 
   851 
   852 				#ifdef ENABLE_NETWORK
   852 				#ifdef ENABLE_NETWORK
   853 				case PCW_WIDGET_COMPANY_PASSWORD:
   853 				case PCW_WIDGET_COMPANY_PASSWORD:
   854 					if (w->window_number == _local_player) {
   854 					if (w->window_number == _local_player) {
   855 						WP(w,def_d).byte_1 = 2;
   855 						WP(w, def_d).byte_1 = 2;
   856 						ShowQueryString(BindCString(_network_player_info[_local_player].password),
   856 						ShowQueryString(BindCString(_network_player_info[_local_player].password),
   857 							STR_SET_COMPANY_PASSWORD, sizeof(_network_player_info[_local_player].password), 250, w, CS_ALPHANUMERAL);
   857 							STR_SET_COMPANY_PASSWORD, sizeof(_network_player_info[_local_player].password), 250, w, CS_ALPHANUMERAL);
   858 					}
   858 					}
   859 					break;
   859 					break;
   860 				#endif /* ENABLE_NETWORK */
   860 				#endif /* ENABLE_NETWORK */
   883 
   883 
   884 		case WE_ON_EDIT_TEXT: {
   884 		case WE_ON_EDIT_TEXT: {
   885 			char *b = e->we.edittext.str;
   885 			char *b = e->we.edittext.str;
   886 
   886 
   887 			/* empty string is allowed for password */
   887 			/* empty string is allowed for password */
   888 			if (*b == '\0' && WP(w,def_d).byte_1 != 2) return;
   888 			if (*b == '\0' && WP(w, def_d).byte_1 != 2) return;
   889 
   889 
   890 			_cmd_text = b;
   890 			_cmd_text = b;
   891 			switch (WP(w,def_d).byte_1) {
   891 			switch (WP(w, def_d).byte_1) {
   892 				case 0: /* Change president name */
   892 				case 0: /* Change president name */
   893 					DoCommandP(0, 0, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
   893 					DoCommandP(0, 0, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
   894 					break;
   894 					break;
   895 				case 1: /* Change company name */
   895 				case 1: /* Change company name */
   896 					DoCommandP(0, 0, 0, NULL, CMD_CHANGE_COMPANY_NAME | CMD_MSG(STR_700C_CAN_T_CHANGE_COMPANY_NAME));
   896 					DoCommandP(0, 0, 0, NULL, CMD_CHANGE_COMPANY_NAME | CMD_MSG(STR_700C_CAN_T_CHANGE_COMPANY_NAME));