From 5b46aa23c8240ea090a96091c0e6375d111d9628 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 21:01:33 +0200 Subject: [PATCH 1/6] Fixed bug: groups UI is not refreshed immediately after droid is damaged --- src/order.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/order.cpp b/src/order.cpp index eeb5d01da58..3adc78c6eb1 100644 --- a/src/order.cpp +++ b/src/order.cpp @@ -3330,6 +3330,7 @@ void secondaryCheckDamageLevel(DROID *psDroid) if (psDroid->group != UBYTE_MAX) { psDroid->repairGroup = psDroid->group; + intGroupsChanged(psDroid->group); } psDroid->group = UBYTE_MAX; } From dfeeb80b34791c0abdb5e5aed0043f094be85151 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 21:02:01 +0200 Subject: [PATCH 2/6] Keep track of damaged droids in the UI --- src/hci/groups.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/hci/groups.cpp b/src/hci/groups.cpp index 52c1a2cdb35..4428d9d98cf 100644 --- a/src/hci/groups.cpp +++ b/src/hci/groups.cpp @@ -40,6 +40,7 @@ class GroupsUIController: public std::enable_shared_from_this controller; std::shared_ptr groupNumberLabel; std::shared_ptr groupCountLabel; + std::shared_ptr groupDamagedCountLabel; size_t groupNumber; uint32_t lastUpdatedGlowAlphaTime = 0; protected: @@ -131,10 +133,16 @@ class GroupButton : public DynamicIntFancyButton groupNumberLabel->setTransparentToMouse(true); attach(groupCountLabel = std::make_shared()); - groupCountLabel->setGeometry(OBJ_TEXTX + 40, OBJ_B1TEXTY + 20, 16, 16); + groupCountLabel->setGeometry(OBJ_TEXTX, OBJ_B1TEXTY + 20, 16, 16); groupCountLabel->setString(""); groupCountLabel->setTransparentToMouse(true); + attach(groupDamagedCountLabel = std::make_shared()); + groupDamagedCountLabel->setGeometry(0, 0, 16, 16); + groupDamagedCountLabel->setFontColour(pal_RGBA(255, 0, 0, 255) /* red */); + groupDamagedCountLabel->setString(""); + groupDamagedCountLabel->setTransparentToMouse(true); + buttonBackgroundEmpty = true; const std::string groupNumberStr = std::to_string(groupNumber); @@ -193,7 +201,7 @@ class GroupButton : public DynamicIntFancyButton lastUpdatedGlowAlphaTime = realTime; } - if (!groupInfo->numberInGroup) + if (!groupInfo->numberInGroup && !groupInfo->numberDamagedInGroup) { groupCountLabel->setString(""); displayBlank(xOffset, yOffset, false); @@ -202,6 +210,20 @@ class GroupButton : public DynamicIntFancyButton { displayIMD(AtlasImage(), ImdObject::DroidTemplate(&(groupInfo->displayDroidTemplate)), xOffset, yOffset); groupCountLabel->setString(WzString::fromUtf8(astringf("%u", groupInfo->numberInGroup))); + groupCountLabel->move( + OBJ_TEXTX + 40 - groupDamagedCountLabel->getMaxLineWidth(), + groupCountLabel->y() + ); + } + + if (!groupInfo->numberDamagedInGroup) + { + groupDamagedCountLabel->setString(""); + } + else + { + groupDamagedCountLabel->setString(WzString::fromUtf8(astringf("+%u", groupInfo->numberDamagedInGroup))); + groupDamagedCountLabel->move(groupCountLabel->x() + groupCountLabel->getMaxLineWidth(), groupCountLabel->y()); } if (groupInfo->currAttackGlowAlpha > 0) @@ -270,6 +292,7 @@ void GroupsUIController::updateData() struct AccumulatedGroupInfo { size_t numberInGroup = 0; + size_t numberDamagedInGroup = 0; size_t numberCommandedByGroup = 0; // the number of droids commanded by commanders in this group uint64_t totalGroupMaxHealth = 0; DROID *displayDroid = nullptr; @@ -280,6 +303,10 @@ void GroupsUIController::updateData() std::array calculatedGroupInfo; for (DROID *psDroid : apsDroidLists[selectedPlayer]) { + if (psDroid->repairGroup < calculatedGroupInfo.size()) { + calculatedGroupInfo[psDroid->repairGroup].numberDamagedInGroup++; + } + auto groupIdx = psDroid->group; if (psDroid->group >= calculatedGroupInfo.size()) { @@ -313,6 +340,7 @@ void GroupsUIController::updateData() const auto& calculatedInfo = calculatedGroupInfo[idx]; auto& storedGroupInfo = groupInfo[idx]; storedGroupInfo.numberInGroup = calculatedInfo.numberInGroup; + storedGroupInfo.numberDamagedInGroup = calculatedInfo.numberDamagedInGroup; storedGroupInfo.numberCommandedByGroup = calculatedInfo.numberCommandedByGroup; storedGroupInfo.totalGroupMaxHealth = calculatedInfo.totalGroupMaxHealth; if (calculatedInfo.numberInGroup > 0) From 8e4fb9260db87732caea86a3e3bf3a6cfe28d1e7 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 21:57:17 +0200 Subject: [PATCH 3/6] Fixed issue: damaged droids should never have their group until "do or die" flag is set --- src/droid.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/droid.cpp b/src/droid.cpp index 51f4869cf54..49c22920d16 100644 --- a/src/droid.cpp +++ b/src/droid.cpp @@ -833,7 +833,8 @@ void droidUpdate(DROID *psDroid) if (psDroid->repairGroup != UBYTE_MAX && psDroid->order.type != DORDER_RTR && psDroid->order.type != DORDER_RTR_SPECIFIED && - psDroid->order.type != DORDER_RTB) + psDroid->order.type != DORDER_RTB && + secondaryGetState(psDroid, DSO_REPAIR_LEVEL) == DSS_REPLEV_NEVER) { droidWasFullyRepairedBase(psDroid); } From 43aeae662c878dceb51a0615ea0c6ad5a8364934 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 22:08:40 +0200 Subject: [PATCH 4/6] Keep the default value for this label --- src/hci/groups.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hci/groups.cpp b/src/hci/groups.cpp index 4428d9d98cf..83fea00da1c 100644 --- a/src/hci/groups.cpp +++ b/src/hci/groups.cpp @@ -133,7 +133,7 @@ class GroupButton : public DynamicIntFancyButton groupNumberLabel->setTransparentToMouse(true); attach(groupCountLabel = std::make_shared()); - groupCountLabel->setGeometry(OBJ_TEXTX, OBJ_B1TEXTY + 20, 16, 16); + groupCountLabel->setGeometry(OBJ_TEXTX + 40, OBJ_B1TEXTY + 20, 16, 16); groupCountLabel->setString(""); groupCountLabel->setTransparentToMouse(true); From e0be96e42b6907d06b72426f22d91116e9b46b11 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 23:02:43 +0200 Subject: [PATCH 5/6] Fit big droid counts in the box (like 100 and more) --- src/hci/groups.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/hci/groups.cpp b/src/hci/groups.cpp index 83fea00da1c..b706bc2e50b 100644 --- a/src/hci/groups.cpp +++ b/src/hci/groups.cpp @@ -210,8 +210,14 @@ class GroupButton : public DynamicIntFancyButton { displayIMD(AtlasImage(), ImdObject::DroidTemplate(&(groupInfo->displayDroidTemplate)), xOffset, yOffset); groupCountLabel->setString(WzString::fromUtf8(astringf("%u", groupInfo->numberInGroup))); + int32_t xOffset = 0; + const uint32_t xFitNumberInTheBox = 16; + if (groupCountLabel->getMaxLineWidth() > xFitNumberInTheBox) + { + xOffset -= groupCountLabel->getMaxLineWidth() - xFitNumberInTheBox; + } groupCountLabel->move( - OBJ_TEXTX + 40 - groupDamagedCountLabel->getMaxLineWidth(), + OBJ_TEXTX + 40 + xOffset - groupDamagedCountLabel->getMaxLineWidth(), groupCountLabel->y() ); } From ff8064cd20264925ecc18f7be80929ec4f17e062 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Mon, 15 Jul 2024 23:13:37 +0200 Subject: [PATCH 6/6] Renamed local variable --- src/hci/groups.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hci/groups.cpp b/src/hci/groups.cpp index b706bc2e50b..00422e53a7f 100644 --- a/src/hci/groups.cpp +++ b/src/hci/groups.cpp @@ -210,14 +210,14 @@ class GroupButton : public DynamicIntFancyButton { displayIMD(AtlasImage(), ImdObject::DroidTemplate(&(groupInfo->displayDroidTemplate)), xOffset, yOffset); groupCountLabel->setString(WzString::fromUtf8(astringf("%u", groupInfo->numberInGroup))); - int32_t xOffset = 0; + int32_t xNumberOffset = 0; const uint32_t xFitNumberInTheBox = 16; if (groupCountLabel->getMaxLineWidth() > xFitNumberInTheBox) { - xOffset -= groupCountLabel->getMaxLineWidth() - xFitNumberInTheBox; + xNumberOffset -= groupCountLabel->getMaxLineWidth() - xFitNumberInTheBox; } groupCountLabel->move( - OBJ_TEXTX + 40 + xOffset - groupDamagedCountLabel->getMaxLineWidth(), + OBJ_TEXTX + 40 + xNumberOffset - groupDamagedCountLabel->getMaxLineWidth(), groupCountLabel->y() ); }