MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / initViewport

Function initViewport

src/OpenLoco/src/Ui/Windows/TownWindow.cpp:264–325  ·  view source on GitHub ↗

0x00499A87

Source from the content-addressed store, hash-verified

262
263 // 0x00499A87
264 static void initViewport(Window& self)
265 {
266 if (self.currentTab != 0)
267 {
268 return;
269 }
270
271 self.callPrepareDraw();
272
273 // Figure out the town's position on the map.
274 auto town = TownManager::get(TownId(self.number));
275 int16_t tileZ = World::TileManager::getHeight({ town->x, town->y }).landHeight;
276
277 // Compute views.
278 SavedView view = {
279 town->x,
280 town->y,
281 ZoomLevel::quarter,
282 static_cast<int8_t>(self.viewports[0]->getRotation()),
283 tileZ,
284 };
285
286 ViewportFlags flags = ViewportFlags::none;
287 if (self.viewports[0] != nullptr)
288 {
289 if (self.savedView == view)
290 {
291 return;
292 }
293
294 flags = self.viewports[0]->flags;
295 self.viewportRemove(0);
296 }
297 else
298 {
299 if (Config::get().gridlinesOnLandscape)
300 {
301 flags |= ViewportFlags::gridlines_on_landscape;
302 }
303 }
304
305 self.savedView = view;
306
307 // 0x00499B39 start
308 if (self.viewports[0] == nullptr)
309 {
310 auto widget = &self.widgets[widx::viewport];
311 auto tile = World::Pos3({ town->x, town->y, tileZ });
312 auto origin = Ui::Point(widget->left + self.x + 1, widget->top + self.y + 1);
313 auto size = Ui::Size(widget->width() - 2, widget->height() - 2);
314 ViewportManager::create(&self, 0, origin, size, self.savedView.zoomLevel, tile);
315 self.invalidate();
316 self.flags |= WindowFlags::viewportNoScrolling;
317 }
318 // 0x00499B39 end
319
320 if (self.viewports[0] != nullptr)
321 {

Callers 2

onResizeFunction · 0.70
openFunction · 0.70

Calls 11

TownIdEnum · 0.85
getHeightFunction · 0.85
SizeClass · 0.85
callPrepareDrawMethod · 0.80
viewportRemoveMethod · 0.80
createFunction · 0.70
getFunction · 0.50
getRotationMethod · 0.45
widthMethod · 0.45
heightMethod · 0.45
invalidateMethod · 0.45

Tested by

no test coverage detected