Paint a WAE station by the traffic left with it, as N1MM does
N1MM has four colours for a station in WAE rather than the usual three, and the manual and the RTTY tutorial both spell them out. Red is a new multiplier, as everywhere else. Green is a new station with QTC traffic still to exchange, which takes the more-than-one-multiplier colour because WAE has no second multiplier to use it. Black is a station already worked that still has traffic left — worth working for the QTC points alone — and it is a colour of its own, N1MM's "Color of a QTC callsign in the WAE contest". Grey is a dupe with nothing left, the same as in other contests. The verdict carries how much traffic is left with the station, so the callsign box, the check window, the bandmap and everything else that colours a station say the same thing. The contest works the number out: ten with a station on the other side of the contest, none with one on our own continent, and none once the ten have gone. Every other contest answers nought. The log counts the QTC rows per station as they are indexed rather than counting them again for each station judged, because the bandmap judges every spot it holds on every pass. The verdict line says it in words as well, so a dupe reads `dupe · 7 QTCs left` rather than `dupe`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0157i7PiZyqBkquxS9A6FTdQ
This commit is contained in:
@@ -33,13 +33,15 @@ public sealed partial class ThemeDialog : Window
|
||||
{
|
||||
Theme theme = Picked;
|
||||
AboutText.Text = "What a station is painted in the callsign box, left to right: worth " +
|
||||
"working, one new multiplier, more than one, a dupe.";
|
||||
"working, one new multiplier, more than one, a dupe, and in WAE a dupe " +
|
||||
"with QTC traffic still to exchange.";
|
||||
Swatches.ItemsSource = new[]
|
||||
{
|
||||
Swatch(theme.Worth, theme.FieldBackground),
|
||||
Swatch(theme.Multiplier, theme.FieldBackground),
|
||||
Swatch(theme.Multipliers, theme.FieldBackground),
|
||||
Swatch(theme.Dupe, theme.FieldBackground),
|
||||
Swatch(theme.QtcCallsign, theme.FieldBackground),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,10 @@ public sealed record Theme
|
||||
|
||||
public required Color DupeBackground { get; init; }
|
||||
|
||||
/// A station in WAE that still has QTC traffic to exchange, which N1MM
|
||||
/// calls "Color of a QTC callsign in the WAE contest" and paints black.
|
||||
public required Color QtcCallsign { get; init; }
|
||||
|
||||
/// The frequency we are calling CQ on.
|
||||
public required Color Cq { get; init; }
|
||||
|
||||
@@ -91,6 +95,7 @@ public sealed record Theme
|
||||
MultipliersBackground = Color.FromRgb(0x5F, 0xF1, 0x5F),
|
||||
Dupe = Color.FromRgb(0x80, 0x80, 0x80),
|
||||
DupeBackground = Color.FromRgb(0xD4, 0xD4, 0xD4),
|
||||
QtcCallsign = Color.FromRgb(0x00, 0x00, 0x00),
|
||||
Cq = Color.FromRgb(0xFF, 0x00, 0x00),
|
||||
GoodBackground = Color.FromRgb(0xD4, 0xF5, 0xD4),
|
||||
EmptyBackground = Color.FromRgb(0xFF, 0xE4, 0xE1),
|
||||
@@ -121,6 +126,9 @@ public sealed record Theme
|
||||
MultipliersBackground = Color.FromRgb(0x1B, 0x5E, 0x36),
|
||||
Dupe = Color.FromRgb(0x7F, 0x8C, 0x8D),
|
||||
DupeBackground = Color.FromRgb(0x3A, 0x40, 0x40),
|
||||
// black on a dark background cannot be read, so the dark theme takes
|
||||
// the other end of the same idea: a plain, bright callsign
|
||||
QtcCallsign = Color.FromRgb(0xEC, 0xF0, 0xF1),
|
||||
Cq = Color.FromRgb(0xE7, 0x4C, 0x3C),
|
||||
GoodBackground = Color.FromRgb(0x1E, 0x38, 0x24),
|
||||
EmptyBackground = Color.FromRgb(0x3A, 0x24, 0x24),
|
||||
|
||||
@@ -17,6 +17,10 @@ public static class Verdicts
|
||||
|
||||
public static IBrush Dupe => Themes.Brush(Themes.Current.Dupe);
|
||||
|
||||
/// A station with QTC traffic still to exchange, which is worth working in
|
||||
/// WAE even when it is a dupe.
|
||||
public static IBrush Traffic => Themes.Brush(Themes.Current.QtcCallsign);
|
||||
|
||||
public static IBrush Nothing => Dupe;
|
||||
|
||||
/// The frequency we are calling CQ on.
|
||||
@@ -28,11 +32,19 @@ public static class Verdicts
|
||||
|
||||
/// Nothing typed yet is the same colour as a station worth working: that is
|
||||
/// what N1MM leaves the callsign box.
|
||||
///
|
||||
/// WAE has two states the other contests do not, and N1MM paints them in
|
||||
/// colours it already has: a new station with QTC traffic still to
|
||||
/// exchange takes the more-than-one-multiplier colour, green, because WAE
|
||||
/// has no second multiplier to use it; a dupe with traffic left takes the
|
||||
/// QTC colour, black, rather than the grey of a dupe worth nothing. A new
|
||||
/// multiplier still wins over both.
|
||||
public static IBrush Colour(Verdict? verdict) =>
|
||||
verdict is null ? Worth
|
||||
: verdict.IsDupe ? Dupe
|
||||
: verdict.IsDupe ? verdict.TrafficLeft > 0 ? Traffic : Dupe
|
||||
: verdict.NewMultipliers.Count > 1 ? NewMultipliers
|
||||
: verdict.NewMultipliers.Count == 1 ? NewMultiplier
|
||||
: verdict.TrafficLeft > 0 ? NewMultipliers
|
||||
: Worth;
|
||||
|
||||
/// The same four states as backgrounds, which is what N1MM paints behind a
|
||||
@@ -54,13 +66,16 @@ public static class Verdicts
|
||||
{
|
||||
return "";
|
||||
}
|
||||
// a dupe in WAE is still worth working while it has traffic left, so
|
||||
// the line says how much rather than only that the station is worked
|
||||
string traffic = verdict.TrafficLeft > 0 ? $" · {verdict.TrafficLeft} QTCs left" : "";
|
||||
if (verdict.IsDupe)
|
||||
{
|
||||
return "dupe";
|
||||
return $"dupe{traffic}";
|
||||
}
|
||||
string points = $"{verdict.Points} {(verdict.Points == 1 ? "point" : "points")}";
|
||||
return verdict.IsNewMultiplier
|
||||
? $"{points} · new {string.Join(", ", verdict.NewMultipliers.Select(m => m.Value))}"
|
||||
: points;
|
||||
? $"{points} · new {string.Join(", ", verdict.NewMultipliers.Select(m => m.Value))}{traffic}"
|
||||
: $"{points}{traffic}";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user