Make Boomer Heater more dead
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<path d="M116 142c-18-28 18-36 0-64M160 142c-18-28 18-36 0-64M204 142c-18-28 18-36 0-64" fill="none" stroke="#ff8a4f" stroke-width="8" stroke-linecap="round"/>
|
||||
<path d="M90 180h140" stroke="#475569" stroke-width="10" stroke-linecap="round"/>
|
||||
<circle cx="224" cy="58" r="9" fill="#6a7aa0"/>
|
||||
<text x="160" y="205" text-anchor="middle" fill="#6a7aa0" font-family="monospace" font-size="15" font-weight="700">NO HASHES. JUST GAY.</text>
|
||||
<text x="160" y="205" text-anchor="middle" fill="#6a7aa0" font-family="monospace" font-size="15" font-weight="700">NO HASHES. JUST GHEI.</text>
|
||||
</g>
|
||||
<defs><filter id="g"><feDropShadow dx="0" dy="8" stdDeviation="8" flood-color="#000" flood-opacity=".55"/></filter></defs>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 939 B After Width: | Height: | Size: 940 B |
@@ -5,6 +5,8 @@ import { ROASTS, STATUS_LINES, STALE_LINES } from "../strings";
|
||||
|
||||
const props = defineProps<{ miner: MinerStat; bestWork: number | undefined }>();
|
||||
|
||||
const isBoomerHeater = computed(() => props.miner.nickname === "Boomer Heater");
|
||||
|
||||
const slug = computed(() => {
|
||||
// Map nickname → roast key
|
||||
const map: Record<string, string> = {
|
||||
@@ -16,10 +18,15 @@ const slug = computed(() => {
|
||||
return map[props.miner.nickname] ?? "unknown";
|
||||
});
|
||||
|
||||
const roast = computed(() => ROASTS[slug.value] ?? ROASTS["unknown"]);
|
||||
const roast = computed(() =>
|
||||
isBoomerHeater.value ? "The dumb shit your fiat friends have." : (ROASTS[slug.value] ?? ROASTS["unknown"]),
|
||||
);
|
||||
|
||||
const statusLabel = computed(() => STATUS_LINES[props.miner.status]);
|
||||
const displayStatusLabel = computed(() => isBoomerHeater.value ? "dead" : statusLabel.value);
|
||||
const statusMarker = computed(() => isBoomerHeater.value ? "☠" : "");
|
||||
const statusGlow = computed(() => {
|
||||
if (isBoomerHeater.value) return "glow-red";
|
||||
switch (props.miner.status) {
|
||||
case "hashing": return "glow-green";
|
||||
case "stale": return "glow-amber";
|
||||
@@ -28,6 +35,7 @@ const statusGlow = computed(() => {
|
||||
});
|
||||
|
||||
const lastShareLabel = computed(() => {
|
||||
if (isBoomerHeater.value) return "Nothing";
|
||||
const s = props.miner.lastShareAgeS;
|
||||
if (s === null) return "no shares yet";
|
||||
if (s < 60) return `${s.toFixed(0)}s ago`;
|
||||
@@ -36,10 +44,14 @@ const lastShareLabel = computed(() => {
|
||||
});
|
||||
|
||||
const lifetimeShares = computed(() => props.miner.diffAcceptedCount);
|
||||
const acceptedWork = computed(() => formatBig(props.miner.diffAcceptedSum));
|
||||
const bestWork = computed(() => props.bestWork && props.bestWork > 0 ? formatBig(props.bestWork) : "collecting");
|
||||
const acceptedWork = computed(() => isBoomerHeater.value ? "Zero. Obviously." : formatBig(props.miner.diffAcceptedSum));
|
||||
const bestWork = computed(() => {
|
||||
if (isBoomerHeater.value) return "Fuck all";
|
||||
return props.bestWork && props.bestWork > 0 ? formatBig(props.bestWork) : "collecting";
|
||||
});
|
||||
|
||||
const staleNote = computed(() => {
|
||||
if (isBoomerHeater.value) return "warming a room while contributing nothing to civilization.";
|
||||
if (props.miner.status !== "stale") return "";
|
||||
const idx = Math.floor(Math.random() * STALE_LINES.length);
|
||||
return STALE_LINES[idx];
|
||||
@@ -59,8 +71,9 @@ function formatBig(n: number): string {
|
||||
<header>
|
||||
<div class="nickname glow-magenta">{{ miner.nickname }}</div>
|
||||
<div :class="['status', statusGlow]">
|
||||
<span class="dot pulse" />
|
||||
{{ statusLabel }}
|
||||
<span v-if="statusMarker" class="dead-mark">{{ statusMarker }}</span>
|
||||
<span v-else class="dot pulse" />
|
||||
{{ displayStatusLabel }}
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@@ -71,7 +84,7 @@ function formatBig(n: number): string {
|
||||
<div class="stat">
|
||||
<div class="label">hashrate</div>
|
||||
<div class="value glow-cyan">
|
||||
{{ miner.hashrateThs.toFixed(2) }}
|
||||
{{ isBoomerHeater ? "No hashes" : miner.hashrateThs.toFixed(2) }}
|
||||
<span class="unit">Th/s</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -81,7 +94,7 @@ function formatBig(n: number): string {
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="label">tickets bought</div>
|
||||
<div class="value">{{ lifetimeShares.toLocaleString() }}</div>
|
||||
<div class="value">{{ isBoomerHeater ? "None" : lifetimeShares.toLocaleString() }}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="label">best calc</div>
|
||||
@@ -94,12 +107,12 @@ function formatBig(n: number): string {
|
||||
<div class="stat">
|
||||
<div class="label">reject %</div>
|
||||
<div :class="['value', miner.rejectPct > 5 ? 'glow-red' : '']">
|
||||
{{ miner.rejectPct.toFixed(2) }}%
|
||||
{{ isBoomerHeater ? "not even rejected" : `${miner.rejectPct.toFixed(2)}%` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="label">vdiff</div>
|
||||
<div class="value">{{ miner.vdiff.toLocaleString() }}</div>
|
||||
<div class="value">{{ isBoomerHeater ? "Fiat" : miner.vdiff.toLocaleString() }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -108,7 +121,7 @@ function formatBig(n: number): string {
|
||||
<span class="loc muted">@{{ miner.location }}</span>
|
||||
</footer>
|
||||
|
||||
<div v-if="miner.status === 'stale'" class="stale-banner">
|
||||
<div v-if="miner.status === 'stale' || isBoomerHeater" class="stale-banner">
|
||||
{{ staleNote }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -157,6 +170,11 @@ header {
|
||||
background: currentColor;
|
||||
box-shadow: 0 0 8px currentColor;
|
||||
}
|
||||
.dead-mark {
|
||||
font-size: 13px;
|
||||
line-height: 1;
|
||||
text-shadow: 0 0 8px currentColor;
|
||||
}
|
||||
.model {
|
||||
font-size: 12px;
|
||||
color: var(--fg-1);
|
||||
|
||||
Reference in New Issue
Block a user