|
|
@@ -11,11 +11,14 @@
|
|
|
tr.innerHTML = `
|
|
|
<td>${p.output}</td>
|
|
|
<td>${p.expertise}</td>
|
|
|
- <td>${formatDecimal(p.profit_per_area)}</td>
|
|
|
- <td>${formatWhole(p.capex)}</td>
|
|
|
- <td>${formatWhole(p.cost_per_day)}</td>
|
|
|
- <td>${formatDecimal(p.logistics_per_area)}</td>
|
|
|
- <td>${formatWhole(p.output_per_day)}<br>${formatWhole(p.average_traded_7d)}</td>
|
|
|
+ <td style="color: ${color(p.profit_per_area, 0, 500)}">${formatDecimal(p.profit_per_area)}</td>
|
|
|
+ <td style="color: ${color(p.capex, 300_000, 50_000)}">${formatWhole(p.capex)}</td>
|
|
|
+ <td style="color: ${color(p.cost_per_day, 100_000, 25_000)}">${formatWhole(p.cost_per_day)}</td>
|
|
|
+ <td style="color: ${color(p.logistics_per_area, 2, 0.2)}">${formatDecimal(p.logistics_per_area)}</td>
|
|
|
+ <td>
|
|
|
+ ${formatWhole(p.output_per_day)}<br>
|
|
|
+ <span style="color: ${color(p.output_per_day/p.average_traded_7d, 0.05, 0.002)}">${formatWhole(p.average_traded_7d)}</span>
|
|
|
+ </td>
|
|
|
`;
|
|
|
const output = tr.querySelector('td')!;
|
|
|
output.title = p.recipe;
|
|
|
@@ -23,6 +26,12 @@
|
|
|
}
|
|
|
})();
|
|
|
|
|
|
+function color(n: number, low: number, high: number): string {
|
|
|
+ // scale n from low..high to 0..1 clamped
|
|
|
+ const scale = Math.min(Math.max((n - low) / (high - low), 0), 1);
|
|
|
+ return `color-mix(in oklch, #0c8 ${scale * 100}%, #f70)`;
|
|
|
+}
|
|
|
+
|
|
|
interface Profit {
|
|
|
output: string
|
|
|
recipe: string
|