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

Method orderSelect

game/ui/tileview/cityview.cpp:634–751  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

632}
633
634void CityView::orderSelect(StateRef<Vehicle> vehicle, bool inverse, bool additive)
635{
636 auto pos = std::find(state->current_city->cityViewSelectedVehicles.begin(),
637 state->current_city->cityViewSelectedVehicles.end(), vehicle);
638
639 if (vehicle->city != state->current_city)
640 {
641 return;
642 }
643 if (inverse)
644 {
645 // Vehicle in selection => remove
646 if (pos != state->current_city->cityViewSelectedVehicles.end())
647 {
648 state->current_city->cityViewSelectedVehicles.erase(pos);
649 }
650 }
651 else
652 {
653 // Vehicle not selected
654 if (pos == state->current_city->cityViewSelectedVehicles.end())
655 {
656 // Selecting non-owned vehicles is always additive to current selection
657 if (additive || vehicle->owner != state->getPlayer())
658 {
659 // Whenever adding clear any non-player vehicles from selection
660 if (!state->current_city->cityViewSelectedVehicles.empty() &&
661 state->current_city->cityViewSelectedVehicles.front()->owner !=
662 state->getPlayer())
663 {
664 state->current_city->cityViewSelectedVehicles.pop_front();
665 }
666 state->current_city->cityViewSelectedVehicles.push_front(vehicle);
667 }
668 else
669 {
670 // Vehicle not in selection => replace selection with vehicle
671 state->current_city->cityViewSelectedVehicles.clear();
672 state->current_city->cityViewSelectedVehicles.push_back(vehicle);
673 }
674 }
675 // Vehicle is selected
676 else
677 {
678 // First move vehicle to front
679 state->current_city->cityViewSelectedVehicles.erase(pos);
680 // If moving vehicle to front, deselect any non-owned vehicle, unless it's that one
681 if (!state->current_city->cityViewSelectedVehicles.empty() &&
682 state->current_city->cityViewSelectedVehicles.front()->owner != state->getPlayer())
683 {
684 state->current_city->cityViewSelectedVehicles.pop_front();
685 }
686 state->current_city->cityViewSelectedVehicles.push_front(vehicle);
687 // Then if not additive then zoom to vehicle
688 if (!additive)
689 {
690 this->setScreenCenterTile(vehicle->position);
691 if (vehicle->owner == state->getPlayer())

Callers

nothing calls this directly

Calls 7

endMethod · 0.80
getPlayerMethod · 0.80
emptyMethod · 0.80
beginMethod · 0.45
clearMethod · 0.45
setScreenCenterTileMethod · 0.45
setCheckedMethod · 0.45

Tested by

no test coverage detected