89 lines
3.6 KiB
JavaScript
89 lines
3.6 KiB
JavaScript
// ================================================================
|
||
// Command Form Component
|
||
// ================================================================
|
||
|
||
window.onCmdTypeChange = function() {
|
||
const type = document.getElementById('cmd-type').value;
|
||
document.getElementById('build-options').style.display = type === 'build' ? '' : 'none';
|
||
document.getElementById('recruit-options').style.display = type === 'recruit' ? '' : 'none';
|
||
document.getElementById('amount-group').style.display = type === 'recruit' ? '' : 'none';
|
||
};
|
||
|
||
window.renderBuildingDropdown = function() {
|
||
const town = window.getSelectedTown();
|
||
if (!town) return;
|
||
const bSelect = document.getElementById('building-select');
|
||
const bLevels = town.buildings || {};
|
||
const bData = town.build_data || {};
|
||
|
||
const currentVal = bSelect.value;
|
||
bSelect.innerHTML = '';
|
||
|
||
for (const [key, nameGr] of Object.entries(window.BUILDING_NAMES_GR)) {
|
||
const level = bLevels[key] !== undefined ? bLevels[key] : "?";
|
||
const data = bData[key];
|
||
|
||
let text = `${nameGr} [Επίπεδο ${level}]`;
|
||
|
||
if (data) {
|
||
const w = window.fmt(data.wood || 0);
|
||
const st = window.fmt(data.stone || 0);
|
||
const i = window.fmt(data.iron || 0);
|
||
const pop = data.pop || 0;
|
||
let t = data.build_time || '';
|
||
if (t.startsWith('00:')) t = t.substring(3); // make '00:06:00' cleaner as '06:00'
|
||
|
||
const popStr = pop > 0 ? ` 🧔:${pop} ` : ' ';
|
||
const costStr = `Ξ:${w} Π:${st} Α:${i}${popStr}· ⏱ ${t}`;
|
||
|
||
// Figure out the state - missing_dependencies is an Object!
|
||
const missingKeys = data.missing_dependencies ? Object.keys(data.missing_dependencies) : [];
|
||
const isLocked = (!data.dependencies) || (missingKeys.length > 0);
|
||
|
||
const option = document.createElement('option');
|
||
option.value = key;
|
||
|
||
if (data.has_max_level) {
|
||
option.textContent = `${text} — (Μέγιστο Επίπεδο)`;
|
||
option.style.color = '#33aa33';
|
||
} else if (isLocked) {
|
||
option.textContent = `${text} — 🔒 Κλειδωμένο (Προϋποθέσεις)`;
|
||
option.style.color = '#ff4444'; // Red as requested
|
||
} else if (data.can_upgrade === true) {
|
||
option.textContent = `${text} — ✅ ${costStr}`;
|
||
} else if (data.enough_resources === false) {
|
||
option.textContent = `${text} — ❌ ${costStr} (Λείπουν Πόροι)`;
|
||
option.style.color = '#aa5555';
|
||
} else {
|
||
// can_upgrade is false, but resources are fine = Population limit or Queue full
|
||
option.textContent = `${text} — ⚠️ ${costStr} (Πληθυσμός / Ουρά)`;
|
||
option.style.color = '#aa8855';
|
||
}
|
||
|
||
bSelect.appendChild(option);
|
||
} else {
|
||
const option = document.createElement('option');
|
||
option.value = key;
|
||
option.textContent = text;
|
||
bSelect.appendChild(option);
|
||
}
|
||
}
|
||
|
||
if (currentVal && Array.from(bSelect.options).some(o => o.value === currentVal)) {
|
||
bSelect.value = currentVal;
|
||
}
|
||
};
|
||
|
||
window.renderBuildQueuePreview = function() {
|
||
const town = window.getSelectedTown();
|
||
const el = document.getElementById('build-queue-preview');
|
||
if (!town || !town.build_queue || !town.build_queue.length) {
|
||
el.innerHTML = '<span style="color:#444">Build queue: empty</span>';
|
||
return;
|
||
}
|
||
const items = town.build_queue.map(o =>
|
||
`<span>${o.building_type || o.name || JSON.stringify(o)}</span>`
|
||
).join('');
|
||
el.innerHTML = `<div style="margin-top:6px;color:#888;font-size:0.72rem;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:4px;">Current queue</div>${items}`;
|
||
};
|