| 549 | } |
| 550 | |
| 551 | void ToolUser::setItems(ItemPtr newPrimaryHandItem, ItemPtr newAltHandItem) { |
| 552 | if (itemSafeTwoHanded(newPrimaryHandItem)) |
| 553 | newAltHandItem = {}; |
| 554 | |
| 555 | if (m_suppress.get()) { |
| 556 | newPrimaryHandItem = {}; |
| 557 | newAltHandItem = {}; |
| 558 | } |
| 559 | |
| 560 | // Only skip if BOTH items match, to easily handle the edge cases where the |
| 561 | // primary and alt hands are swapped or share a pointer, to make sure both |
| 562 | // items end up initialized at the end. |
| 563 | if (newPrimaryHandItem == m_primaryHandItem.get() && newAltHandItem == m_altHandItem.get()) |
| 564 | return; |
| 565 | |
| 566 | uninitItem(m_primaryHandItem.get()); |
| 567 | uninitItem(m_altHandItem.get()); |
| 568 | |
| 569 | // Cancel held fire if we switch primary / alt hand items, to prevent |
| 570 | // accidentally triggering a switched item without a new edge trigger. |
| 571 | |
| 572 | if (m_primaryHandItem.get() != newPrimaryHandItem) { |
| 573 | m_fireMain = false; |
| 574 | m_fireAlt = false; |
| 575 | } |
| 576 | |
| 577 | if (m_altHandItem.get() != newAltHandItem) |
| 578 | m_fireAlt = false; |
| 579 | |
| 580 | m_primaryHandItem.set(std::move(newPrimaryHandItem)); |
| 581 | m_altHandItem.set(std::move(newAltHandItem)); |
| 582 | |
| 583 | initPrimaryHandItem(); |
| 584 | initAltHandItem(); |
| 585 | } |
| 586 | |
| 587 | void ToolUser::suppressItems(bool suppress) { |
| 588 | m_suppress.set(suppress); |
no test coverage detected