| 140 | } |
| 141 | |
| 142 | sp<RGBImage> BaseGraphics::drawMiniBase(const Base &base, FacilityHighlight highlight, |
| 143 | sp<Facility> selected) |
| 144 | { |
| 145 | auto minibase = mksp<RGBImage>(Vec2<unsigned int>{32, 32}); |
| 146 | |
| 147 | // Draw corridors |
| 148 | Vec2<int> i; |
| 149 | for (i.x = 0; i.x < Base::SIZE; i.x++) |
| 150 | { |
| 151 | for (i.y = 0; i.y < Base::SIZE; i.y++) |
| 152 | { |
| 153 | int sprite = getCorridorSprite(base, i); |
| 154 | if (sprite != 0) |
| 155 | { |
| 156 | sprite -= 3; |
| 157 | } |
| 158 | Vec2<int> pos = i * MINI_SIZE; |
| 159 | auto image = |
| 160 | format("RAW:xcom3/ufodata/minibase.dat:4:4:%d:xcom3/ufodata/base.pcx", sprite); |
| 161 | RGBImage::blit(std::dynamic_pointer_cast<RGBImage>(fw().data->loadImage(image)), |
| 162 | minibase, {0, 0}, pos); |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | // Draw facilities |
| 167 | sp<Image> spriteNormal = |
| 168 | fw().data->loadImage("RAW:xcom3/ufodata/minibase.dat:4:4:16:xcom3/ufodata/base.pcx"); |
| 169 | sp<Image> spriteHighlighted = |
| 170 | fw().data->loadImage("RAW:xcom3/ufodata/minibase.dat:4:4:17:xcom3/ufodata/base.pcx"); |
| 171 | sp<Image> spriteSelected = |
| 172 | fw().data->loadImage("RAW:xcom3/ufodata/minibase.dat:4:4:18:xcom3/ufodata/base.pcx"); |
| 173 | for (const auto &facility : base.facilities) |
| 174 | { |
| 175 | // FIXME: When we implement displaying capacity make sure to round up |
| 176 | // So that once it reaches over-capacity it immediately shows 101% |
| 177 | // Also allow modification by inheriting form |
| 178 | // For example for base transfer form which will modify store space without committing it |
| 179 | bool highlighted = false; |
| 180 | switch (highlight) |
| 181 | { |
| 182 | case FacilityHighlight::None: |
| 183 | break; |
| 184 | case FacilityHighlight::Construction: |
| 185 | highlighted = (facility->buildTime > 0); |
| 186 | break; |
| 187 | case FacilityHighlight::Quarters: |
| 188 | highlighted = (facility->type->capacityType == FacilityType::Capacity::Quarters); |
| 189 | break; |
| 190 | case FacilityHighlight::Stores: |
| 191 | highlighted = (facility->type->capacityType == FacilityType::Capacity::Stores); |
| 192 | break; |
| 193 | case FacilityHighlight::Labs: |
| 194 | highlighted = (facility->lab != nullptr); |
| 195 | break; |
| 196 | case FacilityHighlight::Aliens: |
| 197 | highlighted = (facility->type->capacityType == FacilityType::Capacity::Aliens); |
| 198 | break; |
| 199 | } |