Deduplication pass (44 extractions): - New SmoothedLook: shared smoothed yaw/pitch look tick + view seeding (FirstPersonController, FreeCamController) - New CharacterTeleport: disable-CC-around-teleport idiom (rescue, owner position apply, free-cam sync) - New GeometryUtil: RescaleToUnitScale + TransformBounds (concealment meter/volume, skinned collider baker) - Paint family: canonical map read/write shared between Net and Persistence, snapshot decode, backend stroke dispatch, RebuildBackend, ResolveSeed, chunked RPC send/gate/copy, CamoKnobs/HeightKnobs aggregates, SanitizeFileKey, NewMaskTexture, AdoptAlbedo, FindSlider - Player/modes: GameMode SetPlayerControl/SetPainting/SetOrbitInputEnabled, InputUtil.GameplayKeyPressed, NearestClimbHit, ComputeXRay delegates to ComputeResolutionFreeze, FingerIK TryInPlaneAngle - Match/misc: UnhookSessionCallbacks, SendEmptyNamedMessage, SwapScenes, RunSessionOpAsync, CovarianceEigen, CollectClusterPoints, MatchHud GUIStyle cache, HsvColorPicker rehook, VoxelCenter Documentation pass: remove 6 triplicated doc blocks and 2 restating inline comments left after the previous reduction. Behavior-neutral; hot-path rasterizer loops intentionally untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
/// <summary>
|
|
/// Base class for a high-level game mode handled by <see cref="GameModeManager"/>.
|
|
/// Modes are plain C# classes (not MonoBehaviours); Enter/Exit/Tick are driven
|
|
/// manually by the manager. Derive from this and register an instance in
|
|
/// GameModeManager.BuildModes().
|
|
/// </summary>
|
|
public abstract class GameMode
|
|
{
|
|
protected GameModeManager Manager { get; private set; }
|
|
|
|
/// <summary>Human-readable name (shown in logs).</summary>
|
|
public abstract string DisplayName { get; }
|
|
|
|
internal void Bind(GameModeManager manager) => Manager = manager;
|
|
|
|
/// <summary>Called once when this mode becomes active.</summary>
|
|
public virtual void Enter() { }
|
|
|
|
/// <summary>Called once when this mode stops being active.</summary>
|
|
public virtual void Exit() { }
|
|
|
|
/// <summary>Called every frame while this mode is active.</summary>
|
|
public virtual void Tick() { }
|
|
|
|
/// <summary>Enables the player component and sets whether it accepts movement input.</summary>
|
|
protected void SetPlayerControl(bool controlEnabled)
|
|
{
|
|
if (Manager.Player)
|
|
{
|
|
Manager.Player.enabled = true;
|
|
Manager.Player.ControlEnabled = controlEnabled;
|
|
}
|
|
}
|
|
|
|
/// <summary>Toggles painting on the mesh painter.</summary>
|
|
protected void SetPainting(bool on)
|
|
{
|
|
if (Manager.Painter)
|
|
Manager.Painter.PaintingEnabled = on;
|
|
}
|
|
|
|
/// <summary>Enables/disables the orbit camera input component. Off while a dedicated camera rig is
|
|
/// live: the orbit rig would otherwise keep grabbing the cursor and reading the mouse every frame.</summary>
|
|
protected void SetOrbitInputEnabled(bool on)
|
|
{
|
|
if (Manager.CameraInput)
|
|
Manager.CameraInput.enabled = on;
|
|
}
|
|
}
|