Table of Contents

Class ClientNameplateSettings

Namespace
FishMMO.Client
Assembly
FishMMO.Client.dll

How overhead nameplates look: how large, how strongly, how solid a background, which rows are worth reading, and how many may be on screen at once.

public static class ClientNameplateSettings
Inheritance
ClientNameplateSettings
Inherited Members

Remarks

Separate from ClientWorldLabelSettings on purpose. The two are drawn by different layers with separate budgets, and they answer different questions for a player: damage numbers are feedback you read for a second, and a nameplate is furniture you look past all day. Wanting one loud and the other faint is an ordinary preference that a single shared opacity could not express.

What is deliberately still shared is the draw distance and the hide-behind- geometry toggle. Both are statements about projected world UI as a whole rather than about nameplates, and a second copy of each would let a player set two answers to one question and then wonder which won.

The three rules that decide WHICH nameplates are up — the two ranges and the own-name toggle — stay in ClientWorldLabelSettings with their original configuration keys. They are read by ClientNameplateDisplay rather than by the layer, and moving their keys would silently reset the choice of every existing install for nothing but tidiness.

Every default here is what the layer draws with no configuration at all, so a fresh install looks exactly as it did before these controls existed and only a player who moves something changes anything.

Fields

DefaultBackgroundOpacity

Background strength a fresh install uses: the style's own opacity, unmodified.

public const float DefaultBackgroundOpacity = 1

Field Value

float

DefaultMaxVisible

How many nameplates a fresh install draws at once.

public const int DefaultMaxVisible = 64

Field Value

int

Remarks

Sixty-four, matching UITKNameplateLayer.MaxVisiblePlates as authored.

DefaultOpacity

Nameplate opacity a fresh install uses.

public const float DefaultOpacity = 1

Field Value

float

DefaultScale

Nameplate size multiplier a fresh install uses.

public const float DefaultScale = 1

Field Value

float

DefaultShowGuild

Whether a fresh install shows the guild row.

public const bool DefaultShowGuild = true

Field Value

bool

DefaultShowTitles

Whether a fresh install shows the title row.

public const bool DefaultShowTitles = true

Field Value

bool

MaximumBackgroundOpacity

Strongest background offered.

public const float MaximumBackgroundOpacity = 1

Field Value

float

MaximumMaxVisible

Most nameplates offered.

public const int MaximumMaxVisible = 256

Field Value

int

MaximumOpacity

Strongest nameplates offered.

public const float MaximumOpacity = 1

Field Value

float

MaximumScale

Largest nameplate size multiplier offered.

public const float MaximumScale = 2

Field Value

float

MinimumBackgroundOpacity

Faintest background offered.

public const float MinimumBackgroundOpacity = 0

Field Value

float

Remarks

Zero IS a setting here, unlike the plate opacity above: it means no background at all, text straight over the world, which is a look people ask for by name. The text stays, so nothing disappears and the effect of the slider is visible all the way down.

MinimumMaxVisible

Fewest nameplates offered.

public const int MinimumMaxVisible = 8

Field Value

int

Remarks

Eight rather than the world labels' sixteen. A nameplate budget is spent on the nearest plates first, so a low setting is a legitimate "only the few things around me" choice rather than the failure a low label budget would be mid-fight.

MinimumOpacity

Faintest nameplates offered.

public const float MinimumOpacity = 0.2

Field Value

float

Remarks

A fifth, not zero: an invisible nameplate is what the two ranges and the own-name toggle are for, and a slider that reached zero would give a player a second, much less discoverable way to turn nameplates off — one they cannot see the effect of while dragging it.

MinimumScale

Smallest nameplate size multiplier offered.

public const float MinimumScale = 0.5

Field Value

float

Properties

BackgroundOpacity

The chosen background strength, as a multiplier on each style's own opacity.

public static float BackgroundOpacity { get; }

Property Value

float

MaxVisible

The chosen nameplate budget.

public static int MaxVisible { get; }

Property Value

int

Opacity

The chosen nameplate opacity.

public static float Opacity { get; }

Property Value

float

Scale

The chosen nameplate size multiplier.

public static float Scale { get; }

Property Value

float

ShowGuild

Whether the guild row is drawn.

public static bool ShowGuild { get; }

Property Value

bool

ShowTitles

Whether the title row is drawn.

public static bool ShowTitles { get; }

Property Value

bool

Methods

IsRowVisible(NameplateSlot)

Whether a row of a given kind is drawn at all.

public static bool IsRowVisible(NameplateSlot slot)

Parameters

slot NameplateSlot

The row's slot.

Returns

bool

False when the player has turned that kind of row off.

Remarks

Answered here rather than in the renderer so "which rows does the player want" has one home, and so the rule can be read without a panel. Only the two optional rows are refusable: a nameplate with its name row turned off is not a nameplate, and a status row is transient enough that hiding it would mostly hide nothing.

IsRowVisible(NameplateSlot, bool, bool)

Whether a row of a given kind is drawn, against settings the caller has already read.

public static bool IsRowVisible(NameplateSlot slot, bool showGuild, bool showTitles)

Parameters

slot NameplateSlot

The row's slot.

showGuild bool

Whether guild rows are wanted.

showTitles bool

Whether title rows are wanted.

Returns

bool

False when that kind of row is turned off.

Remarks

The renderer asks the question for every row of every plate it draws, and reading the configuration store that often would undo the caching the rest of that loop is built around. It caches the two answers and calls this; the overload above is the same rule for anyone who is not in a hot loop, so there is still only one definition of it.

SetBackgroundOpacity(float)

Writes the background strength and notifies the layer.

public static void SetBackgroundOpacity(float value)

Parameters

value float

SetMaxVisible(int)

Writes the nameplate budget and notifies the layer.

public static void SetMaxVisible(int value)

Parameters

value int

SetOpacity(float)

Writes the nameplate opacity and notifies the layer.

public static void SetOpacity(float value)

Parameters

value float

SetScale(float)

Writes the nameplate size multiplier and notifies the layer.

public static void SetScale(float value)

Parameters

value float

SetShowGuild(bool)

Writes the guild row setting and notifies the layer.

public static void SetShowGuild(bool value)

Parameters

value bool

SetShowTitles(bool)

Writes the title row setting and notifies the layer.

public static void SetShowTitles(bool value)

Parameters

value bool

Events

OnChanged

Raised when any of these change, so the layer can re-read them.

public static event Action OnChanged

Event Type

Action

Remarks

Its own event rather than OnChanged: the layer listens to both — it still takes the draw distance and the occlusion toggle from there — and two events cost one more subscription while keeping "who owns this setting" a question with one answer.