| 143 | } |
| 144 | |
| 145 | void TeamBar::buildTeamBar() { |
| 146 | auto teamClient = m_client->teamClient(); |
| 147 | auto player = m_client->mainPlayer(); |
| 148 | |
| 149 | auto list = fetchChild("list"); |
| 150 | auto assets = Root::singleton().assets(); |
| 151 | |
| 152 | Vec2I offset; |
| 153 | size_t controlIndex = 0; |
| 154 | |
| 155 | float portraitScale = assets->json("/interface/windowconfig/teambar.config:memberPortraitScale").toFloat(); |
| 156 | int memberSize = assets->json("/interface/windowconfig/teambar.config:memberSize").toInt(); |
| 157 | int memberSpacing = assets->json("/interface/windowconfig/teambar.config:memberSpacing").toInt(); |
| 158 | |
| 159 | Uuid myUuid = player->clientContext()->playerUuid(); |
| 160 | for (auto member : teamClient->members()) { |
| 161 | if (member.uuid == myUuid) { |
| 162 | continue; |
| 163 | } |
| 164 | |
| 165 | String cellName = toString(controlIndex); |
| 166 | WidgetPtr cell = list->fetchChild(cellName); |
| 167 | |
| 168 | if (!cell) { |
| 169 | GuiReader reader; |
| 170 | cell = make_shared<Widget>(); |
| 171 | cell->disableScissoring(); |
| 172 | cell->markAsContainer(); |
| 173 | |
| 174 | reader.registerCallback("showMemberMenu", [this](Widget* widget) { |
| 175 | auto position = widget->screenPosition() + jsonToVec2I(Root::singleton().assets()->json("/interface/windowconfig/teambar.config:memberMenuOffset")); |
| 176 | showMemberMenu(Uuid(widget->parent()->data().toString()), position); |
| 177 | }); |
| 178 | |
| 179 | reader.construct(assets->json("/interface/windowconfig/teambar.config:entry"), cell.get()); |
| 180 | |
| 181 | list->addChild(cellName, cell); |
| 182 | } |
| 183 | |
| 184 | offset[1] -= memberSize; |
| 185 | cell->setPosition(offset); |
| 186 | |
| 187 | cell->setData(member.uuid.hex()); |
| 188 | |
| 189 | cell->show(); |
| 190 | |
| 191 | if (!teamClient->isTeamLeader(member.uuid)) |
| 192 | cell->fetchChild<ImageWidget>("leader")->hide(); |
| 193 | else |
| 194 | cell->fetchChild<ImageWidget>("leader")->show(); |
| 195 | |
| 196 | List<Drawable> drawables = member.portrait; |
| 197 | Drawable::scaleAll(drawables, portraitScale); |
| 198 | cell->fetchChild<ImageWidget>("portrait")->setDrawables(std::move(drawables)); |
| 199 | |
| 200 | if (member.world == m_client->playerWorld() && m_client->worldClient()) { |
| 201 | auto mpos = member.position; |
| 202 | if (auto entity = m_client->worldClient()->entity(member.entity)) |
nothing calls this directly
no test coverage detected