MCPcopy Create free account
hub / github.com/OpenApoc/OpenApoc / drawMiniBase

Method drawMiniBase

game/ui/components/basegraphics.cpp:142–220  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140}
141
142sp<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 }

Callers

nothing calls this directly

Calls 2

formatFunction · 0.85
loadImageMethod · 0.45

Tested by

no test coverage detected