| 59 | } |
| 60 | |
| 61 | void StatusPane::update(float dt) { |
| 62 | Pane::update(dt); |
| 63 | |
| 64 | auto assets = Root::singleton().assets(); |
| 65 | auto interfaceScale = m_guiContext->interfaceScale(); |
| 66 | int roundWindowHeight = ceil(windowHeight() / interfaceScale) * interfaceScale; |
| 67 | |
| 68 | auto imageMetadataDatabase = Root::singleton().imageMetadataDatabase(); |
| 69 | auto statusEffectDatabase = Root::singleton().statusEffectDatabase(); |
| 70 | |
| 71 | Vec2I statusIconOffset = jsonToVec2I(assets->json("/interface.config:statusIconPos")); |
| 72 | Vec2I statusIconPos = Vec2I(statusIconOffset[0] * interfaceScale, roundWindowHeight - statusIconOffset[1] * interfaceScale); |
| 73 | Vec2I statusIconShift = jsonToVec2I(assets->json("/interface.config:statusIconShift")) * interfaceScale; |
| 74 | |
| 75 | RectF boundRect = RectF::null(); |
| 76 | |
| 77 | m_statusIndicators.clear(); |
| 78 | for (auto const& pair : m_player->activeUniqueStatusEffectSummary()) { |
| 79 | auto effectConfig = statusEffectDatabase->uniqueEffectConfig(pair.first); |
| 80 | if (effectConfig.icon) { |
| 81 | RectF rect = RectF::withSize(Vec2F(statusIconPos), Vec2F(imageMetadataDatabase->imageSize(*effectConfig.icon)) * interfaceScale); |
| 82 | boundRect.combine(rect); |
| 83 | m_statusIndicators.append(StatusEffectIndicator{*effectConfig.icon, pair.second, effectConfig.label, rect}); |
| 84 | statusIconPos += statusIconShift; |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | setPosition(Vec2I::round(boundRect.min() / interfaceScale)); |
| 89 | setSize(Vec2I::round(boundRect.size() / interfaceScale)); |
| 90 | } |
| 91 | |
| 92 | } |
nothing calls this directly
no test coverage detected