Loading

Paste #paxqo42ed

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

Comments