Loading

Paste #p8tqj8erj

  1.     virtual void DrawWidget(const Rect &r, int widget) const
  2.     {
  3.         switch (widget) {
  4.             case WID_AIC_GAMELIST: {
  5.                 Dimension square = GetSpriteSize(SPR_SQUARE);
  6.                 uint square_y_offset = (line_height - square.height) / 2;
  7.  
  8.                 Dimension warning = GetSpriteSize(SPR_WARNING_SIGN);
  9.                 uint warning_y_offset = (line_height - warning.height) / 2;
  10.  
  11.                 uint widest_icon = max(square.width, warning.width);
  12.                 uint square_x_offset = (widest_icon - square.width) / 2;
  13.                 uint warning_x_offset = (widest_icon - warning.width) / 2;
  14.  
  15.                 Dimension rai = GetSpriteSize(SPR_RANDOM_AI);
  16.                 uint rai_y_offset = (line_height - rai.height) / 2;
  17.  
  18.                 uint widest_cid = 0;
  19.                 for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
  20.                     SetDParam(0, i + 1);
  21.                     widest_cid = max(GetStringBoundingBox(STR_JUST_INT).width, widest_cid);
  22.                 }
  23.  
  24.                 bool rtl = _current_text_dir == TD_RTL;
  25.                 uint icon_left = rtl ? r.right - WD_MATRIX_RIGHT - widest_icon : r.left + WD_MATRIX_LEFT;
  26.                 uint rai_left = rtl ? icon_left - 1 - rai.width : icon_left + widest_icon + 1;
  27.                 uint cid_left = rtl ? rai_left - 10 - widest_cid : rai_left + rai.width + 10;
  28.                 uint cid_right = rtl ? cid_left + widest_cid : cid_left + widest_cid;
  29.  
  30.                 DrawSprite(SPR_SQUARE, IsEligible(OWNER_DEITY) ? PALETTE_TO_BLUE : IsDead(OWNER_DEITY) ? _game_mode == GM_NORMAL ? PALETTE_TO_GREY : PALETTE_TO_RED : PALETTE_TO_GREEN, icon_left + square_x_offset, r.top + square_y_offset);
  31.                
  32.                 StringID text = STR_AI_CONFIG_NONE;
  33.                 if (GameConfig::GetConfig()->GetInfo() != NULL) {
  34.                     SetDParamStr(0, GameConfig::GetConfig()->GetInfo()->GetName());
  35.                     text = STR_JUST_RAW_STRING;
  36.                 }
  37.                 uint text_width = GetStringBoundingBox(text).width;
  38.  
  39.                 uint text_left = rtl ? r.left + WD_MATRIX_LEFT : cid_right + 10;
  40.                 uint text_right = rtl ? cid_left - 10 : r.right - WD_MATRIX_RIGHT;
  41.                 DrawString(text_left, text_right, r.top + WD_MATRIX_TOP, text, this->selected_slot == OWNER_DEITY ? TC_WHITE : IsSelectable(OWNER_DEITY) ? TC_ORANGE : TC_SILVER);
  42.                 break;
  43.             }
  44.  
  45.             case WID_AIC_LIST: {
  46.                 Dimension square = GetSpriteSize(SPR_SQUARE);
  47.                 uint square_y_offset = (line_height - square.height) / 2;
  48.  
  49.                 Dimension warning = GetSpriteSize(SPR_WARNING_SIGN);
  50.                 uint warning_y_offset = (line_height - warning.height) / 2;
  51.  
  52.                 uint widest_icon = max(square.width, warning.width);
  53.                 uint square_x_offset = (widest_icon - square.width) / 2;
  54.                 uint warning_x_offset = (widest_icon - warning.width) / 2;
  55.  
  56.                 Dimension rai = GetSpriteSize(SPR_RANDOM_AI);
  57.                 uint rai_y_offset = (line_height - rai.height) / 2;
  58.  
  59.                 uint widest_cid = 0;
  60.                 for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
  61.                     SetDParam(0, i + 1);
  62.                     widest_cid = max(GetStringBoundingBox(STR_JUST_INT).width, widest_cid);
  63.                 }
  64.  
  65.                 bool rtl = _current_text_dir == TD_RTL;
  66.                 uint icon_left = rtl ? r.right - WD_MATRIX_RIGHT - widest_icon : r.left + WD_MATRIX_LEFT;
  67.                 uint rai_left = rtl ? icon_left - 1 - rai.width : icon_left + widest_icon + 1;
  68.                 uint cid_left = rtl ? rai_left - 10 - widest_cid : rai_left + rai.width + 10;
  69.                 uint cid_right = rtl ? cid_left + widest_cid : cid_left + widest_cid;
  70.  
  71.                 int y = r.top;
  72.                 for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
  73.                     if (_game_mode == GM_NORMAL && Company::IsValidAiID(i) && IsDead((CompanyID)i)) {
  74.                         DrawSprite(SPR_WARNING_SIGN, PAL_NONE, icon_left + warning_x_offset, y + warning_y_offset);
  75.                     } else {
  76.                         DrawSprite(SPR_SQUARE, IsEligible((CompanyID)i) ? _game_mode != GM_NORMAL ? PALETTE_TO_BLUE : PALETTE_TO_ORANGE : !IsDead((CompanyID)i) ? PALETTE_TO_GREEN : PALETTE_TO_GREY, icon_left + square_x_offset, y + square_y_offset);
  77.                     }
  78.  
  79.                     if (_game_mode == GM_NORMAL && Company::IsValidAiID(i) && AIConfig::GetConfig((CompanyID)i)->IsRandom()) {
  80.                         DrawSprite(SPR_RANDOM_AI, PAL_NONE, rai_left, y + rai_y_offset);
  81.                     }
  82.  
  83.                     SetDParam(0, i + 1);
  84.                     DrawString(cid_left, cid_right, y + WD_MATRIX_TOP, STR_JUST_INT, TC_LIGHT_BLUE);
  85.  
  86.                     StringID text;
  87.                     if (AIConfig::GetConfig((CompanyID)i)->GetInfo() != NULL) {
  88.                         SetDParamStr(0, AIConfig::GetConfig((CompanyID)i)->GetInfo()->GetName());
  89.                         text = STR_JUST_RAW_STRING;
  90.                     } else {
  91.                         text = STR_AI_CONFIG_RANDOM_AI;
  92.                     }
  93.                     uint text_width = GetStringBoundingBox(text).width;
  94.                    
  95.                     uint text_left = rtl ? r.left + WD_MATRIX_LEFT : cid_right + 10;
  96.                     uint text_right = rtl ? cid_left - 10 : r.right - WD_MATRIX_RIGHT;
  97.                     DrawString(text_left, text_right, y + WD_MATRIX_TOP, text, (this->selected_slot == i) ? TC_WHITE : TC_ORANGE);
  98.  
  99.                     y += this->line_height;
  100.                 }
  101.                 break;
  102.             }
  103.         }
  104.     }

Comments