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)); |