MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / buildTeamBar

Method buildTeamBar

source/frontend/StarTeamBar.cpp:145–243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

143}
144
145void 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))

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
toStringFunction · 0.85
jsonToVec2IFunction · 0.85
UuidClass · 0.85
teamClientMethod · 0.80
mainPlayerMethod · 0.80
assetsMethod · 0.80
toFloatMethod · 0.80
jsonMethod · 0.80
toIntMethod · 0.80
playerUuidMethod · 0.80
membersMethod · 0.80

Tested by

no test coverage detected