Die 8 HUD-Slider (Half Lambert, Brightness, Saturation, Specular Damp,
Occlusion Threshold, Normal/Parallax/Emission Intensity) als
[NonSerialized] markiert: bleiben zur Laufzeit ueber Respawn erhalten,
werden aber nicht mehr im PaintHud.json gespeichert/geladen. Tote
hasCamoValues/hasHeightValues-Flags entfernt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- PoseIconStage: permanent editor capture pipeline (context menu 'Capture All Icons') — renders each entry at 4096x4096, alpha-crops, writes Icon_pose_*.png and wires sprites onto matching PlayerPose assets
- PlayerPose: new iconScale property (0.1-2), applied to the icon child in PoseMenu's radial layout
- OverviewMenu: paint-mode special-case removed — Esc/Tab opens the overview menu in every mode
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With a small pose set (hunter) the pose button and C hotkey advance
to the next pose immediately instead of opening the radial overlay.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PlayerPose: Icon (Sprite) + Title (string) UI properties
- PoseMenu: modal pause overlay building a radial menu from Icon Button
prefab instances; active pose disabled (hover ring marks it); click
applies pose via SetPoseIndex and closes
- OverviewMenu: pose button wiring with pause hand-off, Esc/Tab chain
extended; hotkeys C (toggle pose menu) and V (paint mode) mirroring
the buttons incl. identical gating
- PlayerPoseController: C cycle hotkey and NextPose() removed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- OverviewMenu: taunt button (manual ping + close, hider/seek-only), Tab triggers the Escape chain (TypingGuard-gated)
- GameModeManager: LocalPlayerIsHider helper, allow E-ping in free cam (Q/E no longer used for movement)
- FreeCamController: vertical movement only via Space/Ctrl
- Icons: Icon_taunt (wired), Icon_firstperson_paint (unwired, for later)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MatchResultScreen becomes a self-contained modal (IsOpen/Open/Close,
_panelRoot, pause handling); resolution auto-open moves there from the
session browser. OverviewMenu integrates it into the Esc chain and hides
the Match Results button until results exist (same pattern as the
role-scoped mode buttons).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New OverviewMenu component: Esc toggles the pause overlay, buttons
switch modes via GameModeManager.TrySwitchTo<T>() and close the panel;
visibility follows the role-scoped mode set, active mode disabled.
- Esc in paint mode exits to camera mode instead (PlayerControlMode,
hunter falls back to FirstPersonMode) rather than opening the menu.
- Centralized all Esc handling in OverviewMenu (browser close included)
to avoid frame races; OnlineSessionBrowserUI gains IsOpen/Open/Close.
- GameModeManager: switchKey Tab-cycle removed, TrySwitchTo<T> added.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Cursor_Normal/Paint/Pipette: generierte Grafiken jetzt in Vollauflösung (766-829 px, Max Size im Importer steuert Anzeigegröße), Paint-Ring-Inneres freigestellt
- Neuer Cursor_Blank (transparent): wird während eines Strokes auf dem Mesh gesetzt statt Cursor.visible zu togglen (fixt Flicker-Kampf mit dem Orbit-Input)
- CursorController: Hotspots normalisiert (0-1, unabhängig von Import Max Size); Zustandskette Pipette > (Stroke ? Blank : Paint) > Normal; off-mesh während Stroke -> Normal
- MeshPainter: StrokeInProgress-Flag (Maustaste auf Paint-Pfad gehalten)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CursorController: polls painter state in LateUpdate; paint cursor only
while the brush preview decal actually draws (MeshPainter.BrushPreviewVisible),
pipette while held/toggled, fallback to normal over UI (InputUtil.PointerOverUi)
- Auto ForceSoftware while Unity Recorder is recording (reflection into
editor-only assembly, 0.5s poll, editor-only) so the cursor is captured;
back to hardware cursor when recording stops
- 3 placeholder cursor PNGs (32x32, cursor import type) with per-cursor hotspots
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A pointer-up after a drag no longer counts as a click (dragging flag +
press-to-release distance within the existing tolerance), so drag ->
release -> click cannot trigger a reset anymore. PaintHud prefab:
pointer tolerance 4 px, HalfLambert default back to 0.5.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sweep over 48 files (Editor/ excluded): remove comments that restate the
code, condense class summaries, fix three stale doc statements
(HsvColorPicker alpha bar, PaintHud layoutPrefab, MasterVolume
FallbackDefault). Inline two single-use wrappers (IsPointerOverUi,
BuildModes), drop an unused using, replace a magic literal with the
existing ParallaxBase constant, and convert ~10 UnityEngine.Object null
checks to the implicit-bool convention. No serialized fields, signatures,
RPC/NetworkVariable names, defaults, or #if blocks touched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Move brightness out of the half-lambert diffuse term to a final exposure
multiply on the whole shaded body color (diffuse + GI + specular), and add
a saturation grade (0 = neutral, -1 = grayscale, >0 = boosted) on the same
final stage. Saturation rides as a 4th component on CamoKnobs (Vector3 ->
Vector4) so it inherits all three persistence paths: HUD JSON, network
replication (_camo NetworkVariable), and painting-slot metadata. Wires the
renamed Slider_Brightness and new Slider_Saturation. Bumps HudFileVersion
and PaintMetaVersion with load-time remaps so existing paintings keep their
look (old 1=neutral saturation remaps to 0=neutral).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
HsvColorPicker: read the color swatch from the SV handle's child
("Handle/Swatch") instead of a standalone root child; drop the dead
leftover-alpha bar and root-swatch fallback handling.
PaintHudPanel.prefab: restructure the picker so the swatch lives under
the SV handle and wire _swatch accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Fur-Map trägt nur noch R = Länge (linearer Datenkanal); Farbe kommt per-texel
aus der Live-Albedo-RT (an _BaseMap des Shell-Shaders gebunden)
- Toggle_Fur als echtes Gate (IsChannelActive = fur), Default aus, furLength 0.5
- Weicher Alpha-Übergang (radial/tip/length coverage) statt Hard-Clip; Transparent-
Pass mit Depth-Bias (Offset -1,-1) gegen Body-Durchflimmern
- Root dunkler / Tip heller aus gemalter Farbe abgeleitet (kein Fix-Tint)
- Gravity/Curl in World-Space nach Transform (unabhängig von Mesh-Rotation)
- Pipette aktiviert Fur-Toggle immer; liest R-Kanal als Länge
- First-Person blendet FurShellRenderer mit aus
- Netzwerk (FlagFur), Undo, Persistence (fur.png R=Länge) mitgezogen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fur wird die vierte kanonische Paint-Map (RGB=Farbe, A=Länge). Integration
über Seed (kahl), GPU/CPU-Paint, Undo, Netzwerk-Sync, Persistence (fur.png,
v6) und Live-RT-Hook im FurShellRenderer. HUD-Binding (Toggle/Picker/Alpha)
aktiviert. Fur-Alpha lerpt jetzt zu einer Ziel-Opacity (Slider_FurOpacity)
statt additiv Richtung 1 zu akkumulieren (zwei Brush-Passes: Fade + Deposit).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the former per-value PlayerPrefs storage with a shared human-readable
Settings.json store (GameSettings). MouseSensitivity keeps its public .Multiplier
API and only swaps its backing to the JSON store, so the camera controllers stay
untouched. Add a MasterVolume facade that drives the AudioMixer's exposed
"MasterVolume" parameter (loaded from Resources, linear<->dB mapping), applied at
startup and on change, plus a MasterVolumeSlider binder. The default is the level
currently authored on the mixer instead of an arbitrary constant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the scene-derived hudSaveId/key mechanism and save the HUD layout to a
single PaintHud.json under persistentDataPath.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the code-gen canvas/EventSystem bootstrap and the layoutPrefab
instantiation; the canvas and its panel now live in the scene, so PaintHud
binds to its first child at startup instead of building the UI at runtime.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move scripts under Assets/Scripts/ into Components, GameMode, Helper,
Network, Enum, Struct and ScriptableObject folders. Pure file moves
(plus folder .meta files); no code changes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>