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

Function stateViewportLeft

src/OpenLoco/src/Input/MouseInput.cpp:418–546  ·  view source on GitHub ↗

0x004C7334 Left-clicking on a view of the game world (e.g. using terraforming tools, clicking vehicles, buildings, labels)

Source from the content-addressed store, hash-verified

416 // 0x004C7334
417 // Left-clicking on a view of the game world (e.g. using terraforming tools, clicking vehicles, buildings, labels)
418 static void stateViewportLeft(const MouseButton button, const int32_t x, const int32_t y)
419 {
420 auto window = WindowManager::find(_dragWindowType, _dragWindowNumber);
421 if (window == nullptr)
422 {
423 Input::state(State::reset);
424 return;
425 }
426
427 switch (button)
428 {
429 case MouseButton::released:
430 {
431 // 0x4C735D
432 auto viewport = window->viewports[0];
433 if (viewport == nullptr)
434 {
435 viewport = window->viewports[1];
436 }
437 if (viewport == nullptr)
438 {
439 Input::state(State::reset);
440 return;
441 }
442
443 if (window->type == _dragWindowType && window->number == _dragWindowNumber)
444 {
445
446 if (Input::hasFlag(Flags::toolActive))
447 {
448 auto tool = WindowManager::find(ToolManager::getToolWindowType(), ToolManager::getToolWindowNumber());
449 if (tool != nullptr)
450 {
451 // TODO: Handle widget id properly for tools.
452 tool->callToolDrag(ToolManager::getToolWidgetIndex(), WidgetId::none, x, y);
453 }
454 }
455 }
456 break;
457 }
458
459 case MouseButton::leftReleased:
460 {
461 // 0x4C73C2
462 Input::state(State::reset);
463 if (window->type != _dragWindowType || window->number != _dragWindowNumber)
464 {
465 return;
466 }
467
468 if (hasFlag(Flags::toolActive))
469 {
470 auto tool = WindowManager::find(ToolManager::getToolWindowType(), ToolManager::getToolWindowNumber());
471 if (tool != nullptr)
472 {
473 // TODO: Handle widget id properly for tools.
474 tool->callToolUp(ToolManager::getToolWidgetIndex(), WidgetId::none, x, y);
475 }

Callers 1

handleMouseFunction · 0.85

Calls 15

findFunction · 0.85
getToolWindowTypeFunction · 0.85
getToolWindowNumberFunction · 0.85
getToolWidgetIndexFunction · 0.85
getItemLeftFunction · 0.85
StationIdEnum · 0.85
companiesFunction · 0.85
IndustryIdEnum · 0.85
callToolDragMethod · 0.80
callToolUpMethod · 0.80
baseZMethod · 0.80
stateFunction · 0.50

Tested by

no test coverage detected