Implement unit action queueing and busy state validation
This commit is contained in:
+56
-27
@@ -715,19 +715,25 @@ void QSceneRenderer::drawUnitsOverlay(QPainter &painter, const QMatrix4x4 &vMatr
|
||||
} else if (act == "aanvallen") {
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::Attack);
|
||||
iconFile = "images/actions/attack.png";
|
||||
tip = QString("Aanvallen (A) [Bereik: %1]").arg(unit->config.attackRange);
|
||||
tip = Localization::instance().get("ui.unit.tip_attack", "Attack (A) [Range: %1]").arg(unit->config.attackRange);
|
||||
} else if (act == "steden_bouwen" || act == "build_city") {
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::BuildCity);
|
||||
bool isQueued = unit->hasQueuedActionType(UnitActionType::BuildCity);
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::BuildCity) || isQueued;
|
||||
iconFile = "images/actions/build_city.png";
|
||||
tip = "Steden bouwen (B)";
|
||||
tip = isQueued
|
||||
? Localization::instance().get("ui.unit.city_queued", "Found City queued on arrival")
|
||||
: Localization::instance().get("ui.unit.tip_build_city", "Found City (B)");
|
||||
} else if (act == "boerderij_bouwen" || act == "build_farm") {
|
||||
isActive = unit->isBuilding();
|
||||
bool isQueued = unit->hasQueuedActionType(UnitActionType::BuildImprovement);
|
||||
isActive = unit->isBuilding() || isQueued;
|
||||
iconFile = "images/actions/farm.png";
|
||||
if (unit->isBuilding()) {
|
||||
int pct = (int)(std::min(1.0f, unit->buildProgress) * 100.0f);
|
||||
tip = QString("Aan het bouwen... %1%").arg(pct);
|
||||
tip = Localization::instance().get("ui.unit.tip_farm_building", "Busy building... %1%").arg(pct);
|
||||
} else if (isQueued) {
|
||||
tip = Localization::instance().get("ui.unit.tip_farm_queued", "Build Farm (Queued on arrival - click to cancel)");
|
||||
} else {
|
||||
tip = "Boerderij bouwen (F)";
|
||||
tip = Localization::instance().get("ui.unit.tip_build_farm", "Build Farm (F)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -918,28 +924,39 @@ void QSceneRenderer::drawUnitCard(QPainter &painter, Unit *unit)
|
||||
painter.setFont(QFont("sans-serif", 8));
|
||||
painter.setPen(QColor(200, 220, 240));
|
||||
|
||||
QString speedInfo = QString("Snelheid: %1 hex/tick").arg(unit->config.movementSpeed, 0, 'f', 1);
|
||||
QString speedInfo = Localization::instance().get("ui.unit.speed_format", "Speed: %1 hex/tick").arg(unit->config.movementSpeed, 0, 'f', 1);
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 76, 140, 14), Qt::AlignLeft | Qt::AlignVCenter, speedInfo);
|
||||
|
||||
QString costInfo = QString("Kosten: %1 pnt").arg(unit->config.cost);
|
||||
QString costInfo = Localization::instance().get("ui.unit.cost_format", "Cost: %1 pts").arg(unit->config.cost);
|
||||
painter.drawText(QRect(cardRect.left() + 160, cardRect.top() + 76, 130, 14), Qt::AlignLeft | Qt::AlignVCenter, costInfo);
|
||||
|
||||
if (unit->config.isMilitary()) {
|
||||
QString combatInfo = QString("Aanval: %1 | Bereik: %2 hex").arg(unit->config.attackDamage).arg(unit->config.attackRange);
|
||||
QString combatInfo = Localization::instance().get("ui.unit.combat_format", "Attack: %1 | Range: %2 hex")
|
||||
.arg(unit->config.attackDamage).arg(unit->config.attackRange);
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter, combatInfo);
|
||||
} else if (unit->isBuilding()) {
|
||||
int pct = (int)(std::min(1.0f, unit->buildProgress) * 100.0f);
|
||||
QString buildInfo = QString("Aan het bouwen... %1%").arg(pct);
|
||||
QString buildInfo = Localization::instance().get("ui.unit.building_pct", "Building... %1%").arg(pct);
|
||||
if (!unit->config.infiniteCharges && unit->buildCharges > 0) {
|
||||
buildInfo += QString(" | Ladingen: %1").arg(unit->buildCharges);
|
||||
buildInfo += QString(" | ") + Localization::instance().get("ui.unit.charges_format", "Charges: %1").arg(unit->buildCharges);
|
||||
}
|
||||
painter.setPen(QColor(255, 210, 80));
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter, buildInfo);
|
||||
} else if (unit->hasQueuedAction()) {
|
||||
QString qSummary = unit->getQueuedActionSummary();
|
||||
QString queuedInfo = Localization::instance().get("ui.unit.status_queued", "Queued: %1").arg(qSummary);
|
||||
if (unit->config.canBuildFarm() && !unit->config.infiniteCharges && unit->buildCharges > 0) {
|
||||
queuedInfo += QString(" | ") + Localization::instance().get("ui.unit.charges_format", "Charges: %1").arg(unit->buildCharges);
|
||||
}
|
||||
painter.setPen(QColor(100, 220, 140));
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter, queuedInfo);
|
||||
} else if (unit->config.canBuildFarm() && !unit->config.infiniteCharges && unit->buildCharges > 0) {
|
||||
QString builderInfo = QString("Civiele eenheid | Ladingen: %1").arg(unit->buildCharges);
|
||||
QString builderInfo = Localization::instance().get("ui.unit.civilian_unit", "Civilian unit") + QString(" | ") +
|
||||
Localization::instance().get("ui.unit.charges_format", "Charges: %1").arg(unit->buildCharges);
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter, builderInfo);
|
||||
} else {
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter, "Civiele eenheid");
|
||||
painter.drawText(QRect(cardRect.left() + 12, cardRect.top() + 94, 280, 14), Qt::AlignLeft | Qt::AlignVCenter,
|
||||
Localization::instance().get("ui.unit.civilian_unit", "Civilian unit"));
|
||||
}
|
||||
|
||||
// Action Bubbles Row at bottom of card
|
||||
@@ -958,34 +975,41 @@ void QSceneRenderer::drawUnitCard(QPainter &painter, Unit *unit)
|
||||
|
||||
bool isActive = false;
|
||||
QString iconFile = "images/actions/move.png";
|
||||
QString label = "Verplaats";
|
||||
QString tip = "Verplaatsen (M)";
|
||||
QString label = Localization::instance().get("ui.unit.btn_move", "Move [M]");
|
||||
QString tip = Localization::instance().get("ui.unit.tip_move", "Move (M)");
|
||||
|
||||
if (act == "verplaatsen") {
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::Move);
|
||||
iconFile = "images/actions/move.png";
|
||||
label = "Beweeg [M]";
|
||||
tip = "Verplaatsen (M)";
|
||||
label = Localization::instance().get("ui.unit.btn_move", "Move [M]");
|
||||
tip = Localization::instance().get("ui.unit.tip_move", "Move (M)");
|
||||
} else if (act == "aanvallen") {
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::Attack);
|
||||
iconFile = "images/actions/attack.png";
|
||||
label = "Aanval [A]";
|
||||
tip = QString("Aanvallen (A) [Bereik: %1]").arg(unit->config.attackRange);
|
||||
label = Localization::instance().get("ui.unit.btn_attack", "Attack [A]");
|
||||
tip = Localization::instance().get("ui.unit.tip_attack", "Attack (A) [Range: %1]").arg(unit->config.attackRange);
|
||||
} else if (act == "steden_bouwen" || act == "build_city") {
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::BuildCity);
|
||||
bool isQueued = unit->hasQueuedActionType(UnitActionType::BuildCity);
|
||||
isActive = (GameManager::instance().currentActionMode() == ActionMode::BuildCity) || isQueued;
|
||||
iconFile = "images/actions/build_city.png";
|
||||
label = "Sticht [B]";
|
||||
tip = "Steden bouwen (B)";
|
||||
label = isQueued ? "Queued" : Localization::instance().get("ui.unit.btn_build_city", "Settle [B]");
|
||||
tip = isQueued
|
||||
? Localization::instance().get("ui.unit.city_queued", "Found City queued on arrival")
|
||||
: Localization::instance().get("ui.unit.tip_build_city", "Found City (B)");
|
||||
} else if (act == "boerderij_bouwen" || act == "build_farm") {
|
||||
isActive = unit->isBuilding();
|
||||
bool isQueued = unit->hasQueuedActionType(UnitActionType::BuildImprovement);
|
||||
isActive = unit->isBuilding() || isQueued;
|
||||
iconFile = "images/actions/farm.png";
|
||||
if (unit->isBuilding()) {
|
||||
int pct = (int)(std::min(1.0f, unit->buildProgress) * 100.0f);
|
||||
label = QString("Bouwt %1%").arg(pct);
|
||||
tip = QString("Bezig met bouwen... %1%").arg(pct);
|
||||
label = Localization::instance().get("ui.unit.btn_farm_building", "Building %1%").arg(pct);
|
||||
tip = Localization::instance().get("ui.unit.tip_farm_building", "Busy building... %1%").arg(pct);
|
||||
} else if (isQueued) {
|
||||
label = Localization::instance().get("ui.unit.btn_farm_queued", "Farm (Queued)");
|
||||
tip = Localization::instance().get("ui.unit.tip_farm_queued", "Build Farm (Queued on arrival - click to cancel)");
|
||||
} else {
|
||||
label = "Boerderij [F]";
|
||||
tip = "Boerderij bouwen (F)";
|
||||
label = Localization::instance().get("ui.unit.btn_build_farm", "Farm [F]");
|
||||
tip = Localization::instance().get("ui.unit.tip_build_farm", "Build Farm (F)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2046,6 +2070,11 @@ void QSceneRenderer::keyPressEvent(QKeyEvent *e)
|
||||
else if (e->key() == Qt::Key_Escape) {
|
||||
if (GameManager::instance().currentActionMode() != ActionMode::None) {
|
||||
GameManager::instance().setActionMode(ActionMode::None);
|
||||
} else if (sel && sel->hasQueuedAction()) {
|
||||
sel->clearActionQueue();
|
||||
GameManager::instance().addFloatingText(
|
||||
Localization::instance().get("ui.unit.queue_cleared", "Queued actions cancelled"),
|
||||
sel->worldPos + QVector3D(0, 0, 0.8f), QColor(255, 180, 80));
|
||||
} else {
|
||||
GameManager::instance().deselectUnit();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user