Skip to content

Commit

Permalink
Merge pull request #1635 from OutpostUniverse/refactorMineReport
Browse files Browse the repository at this point in the history
Refactor `MineReport`
  • Loading branch information
DanRStevens authored Feb 24, 2025
2 parents 971a29e + 2f920fa commit a3cf13b
Showing 1 changed file with 68 additions and 44 deletions.
112 changes: 68 additions & 44 deletions appOPHD/UI/Reports/MineReport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,31 +344,29 @@ void MineReport::onRemoveTruck()

void MineReport::drawMineFacilityPane(const NAS2D::Point<int>& origin)
{
auto& r = Utility<Renderer>::get();
auto& renderer = Utility<Renderer>::get();

r.drawImage(mineFacility, origin);
renderer.drawImage(mineFacility, origin);
const auto text = lstMineFacilities.isItemSelected() ? getStructureDescription(*lstMineFacilities.selectedStructure()) : "";
r.drawText(fontBigBold, text, origin + NAS2D::Vector{0, -33}, constants::PrimaryTextColor);
renderer.drawText(fontBigBold, text, origin + NAS2D::Vector{0, -33}, constants::PrimaryTextColor);

r.drawText(fontMediumBold, "Status", origin + NAS2D::Vector{138, 0}, constants::PrimaryTextColor);
renderer.drawText(fontMediumBold, "Status", origin + NAS2D::Vector{138, 0}, constants::PrimaryTextColor);

const auto& facility = *mSelectedFacility;
bool isStatusHighlighted = facility.disabled() || facility.destroyed();
auto statusPosition = btnIdle.position() - NAS2D::Vector{fontMedium.width(facility.stateDescription()) + 5, 0};
r.drawText(fontMedium, facility.stateDescription(), statusPosition, (isStatusHighlighted ? NAS2D::Color::Red : constants::PrimaryTextColor));
const bool isStatusHighlighted = facility.disabled() || facility.destroyed();
const auto statusPosition = btnIdle.position() - NAS2D::Vector{fontMedium.width(facility.stateDescription()) + 5, 0};
renderer.drawText(fontMedium, facility.stateDescription(), statusPosition, (isStatusHighlighted ? NAS2D::Color::Red : constants::PrimaryTextColor));

auto resourceTextOrigin = origin + NAS2D::Vector{138, 30};

const auto& mine = facility.mine();

const auto barOrigin = resourceTextOrigin.x + 125;
const auto barWidth = btnIdle.position().x - barOrigin - 10;

const auto& mine = facility.mine();
const auto oreAvailable = mine.availableResources();
const auto oreTotalYield = mine.totalYield();
for (size_t i = 0; i < ResourceNamesOre.size(); ++i)
{
r.drawText(font, ResourceNamesOre[i], resourceTextOrigin, constants::PrimaryTextColor);
renderer.drawText(font, ResourceNamesOre[i], resourceTextOrigin, constants::PrimaryTextColor);

drawProgressBar(
oreAvailable.resources[i],
Expand All @@ -384,11 +382,11 @@ void MineReport::drawMineFacilityPane(const NAS2D::Point<int>& origin)
void MineReport::drawOreProductionPane(const NAS2D::Point<int>& origin)
{
auto& renderer = Utility<Renderer>::get();
const auto& mine = mSelectedFacility->mine();

renderer.drawText(fontMediumBold, "Ore Production", origin, constants::PrimaryTextColor);
renderer.drawLine(origin + NAS2D::Vector{0, 21}, {static_cast<float>(renderer.size().x - 10), static_cast<float>(origin.y + 21)}, constants::PrimaryTextColor, 1);
renderer.drawLine(origin + NAS2D::Vector{0, 21}, NAS2D::Point{renderer.size().x - 10, origin.y + 21}, constants::PrimaryTextColor, 1);

const auto& mine = mSelectedFacility->mine();
const auto oreAvailable = mine.availableResources();
const auto oreTotalYield = mine.totalYield();

Expand Down Expand Up @@ -425,26 +423,40 @@ void MineReport::drawTruckManagementPane(const NAS2D::Point<int>& origin)
return;
}

auto& r = Utility<Renderer>::get();
r.drawText(fontMediumBold, "Trucks & Routing", origin, constants::PrimaryTextColor);
r.drawLine(origin + NAS2D::Vector{0, 21}, {static_cast<float>(r.size().x - 10), static_cast<float>(origin.y + 21)}, constants::PrimaryTextColor, 1);
auto& renderer = Utility<Renderer>::get();
renderer.drawText(fontMediumBold, "Trucks & Routing", origin, constants::PrimaryTextColor);
renderer.drawLine(origin + NAS2D::Vector{0, 21}, NAS2D::Point{renderer.size().x - 10, origin.y + 21}, constants::PrimaryTextColor, 1);

r.drawText(fontBold, "Trucks Assigned to Facility", origin + NAS2D::Vector{0, 30}, constants::PrimaryTextColor);
renderer.drawText(fontBold, "Trucks Assigned to Facility", origin + NAS2D::Vector{0, 30}, constants::PrimaryTextColor);

const auto labelWidth = btnAddTruck.position().x - origin.x - 10;
drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 30}, labelWidth, "Trucks Assigned to Facility", std::to_string(miningFacility.assignedTrucks()), constants::PrimaryTextColor);
drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 45}, labelWidth, "Trucks Available in Storage", std::to_string(mAvailableTrucks), constants::PrimaryTextColor);
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 30},
labelWidth,
"Trucks Assigned to Facility",
std::to_string(miningFacility.assignedTrucks()),
constants::PrimaryTextColor
);
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 45},
labelWidth,
"Trucks Available in Storage",
std::to_string(mAvailableTrucks),
constants::PrimaryTextColor
);

const auto& routeTable = NAS2D::Utility<std::map<class MineFacility*, Route>>::get();
bool routeAvailable = routeTable.find(mSelectedFacility) != routeTable.end();

if (miningFacility.operational() || miningFacility.isIdle())
{
drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 65},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 65},
labelWidth,
"Route Available",
routeAvailable ? "Yes" : "No",
routeAvailable ? constants::PrimaryTextColor : NAS2D::Color::Red);
routeAvailable ? constants::PrimaryTextColor : NAS2D::Color::Red
);

if (routeAvailable)
{
Expand All @@ -456,79 +468,91 @@ void MineReport::drawTruckManagementPane(const NAS2D::Point<int>& origin)

void MineReport::drawTruckHaulInfo(const NAS2D::Point<int>& origin)
{
auto& r = Utility<Renderer>::get();
const auto& routeTable = NAS2D::Utility<std::map<class MineFacility*, Route>>::get();
auto& renderer = Utility<Renderer>::get();

const auto& routeTable = NAS2D::Utility<std::map<class MineFacility*, Route>>::get();
const auto& route = routeTable.at(mSelectedFacility);
drawLabelAndValueRightJustify(origin,
drawLabelAndValueRightJustify(
origin,
btnAddTruck.position().x - origin.x - 10,
"Route Cost",
std::to_string(route.cost).substr(0, std::to_string(route.cost).find(".") + 3), // hack-ish and probably slow, this could be cached
constants::PrimaryTextColor);
constants::PrimaryTextColor
);


const float routeCost = std::clamp(route.cost, 1.0f, FLT_MAX);
const int totalOreMovement = static_cast<int>(constants::ShortestPathTraversalCount / routeCost) * mSelectedFacility->assignedTrucks();
const int oreMovementLabelWidth = r.size().x - origin.x - 10;
const int oreMovementLabelWidth = renderer.size().x - origin.x - 10;
const int oreMovementPart = totalOreMovement / 4;
const int oreLabelWidth = (oreMovementLabelWidth - 10) / 2;

const NAS2D::Rectangle<int> tableRect({{origin.x - 2, origin.y + 18}, {oreMovementLabelWidth + 5, 47}});

r.drawBoxFilled(tableRect, {0, 0, 0, 100});
r.drawBox(tableRect, constants::PrimaryTextColor);
renderer.drawBoxFilled(tableRect, {0, 0, 0, 100});
renderer.drawBox(tableRect, constants::PrimaryTextColor);

r.drawLine(origin + NAS2D::Vector{0, 34}, origin + NAS2D::Vector{oreMovementLabelWidth, 34}, constants::PrimaryTextColor);
r.drawLine(origin + NAS2D::Vector{0, 50}, origin + NAS2D::Vector{oreMovementLabelWidth, 50}, constants::PrimaryTextColor);
r.drawLine(origin + NAS2D::Vector{oreLabelWidth + 5, 37}, origin + NAS2D::Vector{oreLabelWidth + 5, 63}, constants::PrimaryTextColor);
renderer.drawLine(origin + NAS2D::Vector{0, 34}, origin + NAS2D::Vector{oreMovementLabelWidth, 34}, constants::PrimaryTextColor);
renderer.drawLine(origin + NAS2D::Vector{0, 50}, origin + NAS2D::Vector{oreMovementLabelWidth, 50}, constants::PrimaryTextColor);
renderer.drawLine(origin + NAS2D::Vector{oreLabelWidth + 5, 37}, origin + NAS2D::Vector{oreLabelWidth + 5, 63}, constants::PrimaryTextColor);

drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 20},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 20},
oreMovementLabelWidth,
"Total Haul Capacity per Turn",
std::to_string(totalOreMovement),
constants::PrimaryTextColor);
constants::PrimaryTextColor
);

drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 35},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 35},
oreLabelWidth,
ResourceNamesOre[0] + " Haul Capacity",
std::to_string(oreMovementPart),
constants::PrimaryTextColor);
constants::PrimaryTextColor
);

drawLabelAndValueRightJustify(origin + NAS2D::Vector{oreLabelWidth + 10, 35},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{oreLabelWidth + 10, 35},
oreLabelWidth,
ResourceNamesOre[1] + " Haul Capacity",
std::to_string(oreMovementPart),
constants::PrimaryTextColor);
constants::PrimaryTextColor
);

drawLabelAndValueRightJustify(origin + NAS2D::Vector{0, 50},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{0, 50},
oreLabelWidth,
ResourceNamesOre[2] + " Haul Capacity",
std::to_string(oreMovementPart),
constants::PrimaryTextColor);
constants::PrimaryTextColor
);

drawLabelAndValueRightJustify(origin + NAS2D::Vector{oreLabelWidth + 10, 50},
drawLabelAndValueRightJustify(
origin + NAS2D::Vector{oreLabelWidth + 10, 50},
oreLabelWidth,
ResourceNamesOre[3] + " Haul Capacity",
std::to_string(oreMovementPart + (totalOreMovement % 4)),
constants::PrimaryTextColor);
constants::PrimaryTextColor
);
}


void MineReport::update()
{
if (!visible()) { return; }

auto& r = Utility<Renderer>::get();
auto& renderer = Utility<Renderer>::get();

const auto startPoint = NAS2D::Point{area().center().x , area().position.y + 10};

r.drawLine(startPoint, startPoint + NAS2D::Vector{0, area().size.y - 20}, constants::PrimaryTextColor);
renderer.drawLine(startPoint, startPoint + NAS2D::Vector{0, area().size.y - 20}, constants::PrimaryTextColor);

if (mSelectedFacility)
{
drawMineFacilityPane(startPoint + NAS2D::Vector{10, 30});
drawOreProductionPane(startPoint + NAS2D::Vector{10, 170});
drawTruckManagementPane(startPoint + NAS2D::Vector{10, r.size().y - 214});
drawTruckManagementPane(startPoint + NAS2D::Vector{10, renderer.size().y - 214});
}

UIContainer::update();
Expand Down

0 comments on commit a3cf13b

Please sign in to comment.