Rendering/GridBackdrop.cs
using System;
/// <summary>
/// 背景网格 + 发光边界(静态几何,line.shader 直线网格)。
/// warp_grid.shader(正弦扭曲网格,Assets/shaders/ 下保留)曾实装并被用户喊停——先回退静态网格,
/// 该 shader 文件留着以后想再开时直接换回(见 PLAN.md M4 记录)。
/// 场地尺寸可被 cr_arena_size 改(Replicated 下发,可能晚于 OnStart 到达)——OnUpdate 检测变化重建几何。
/// </summary>
public sealed class GridBackdrop : Component
{
SceneDynamicObject _lines;
float _builtHalf; // 当前几何对应的场地半宽(变了就重建)
static readonly Color GridColor = new Color( 0.10f, 0.22f, 0.42f, 0.45f );
static readonly Color BorderColor = new Color( 0.10f, 0.95f, 1.00f, 0.9f );
protected override void OnStart()
{
base.OnStart();
Rebuild();
}
protected override void OnUpdate()
{
base.OnUpdate();
if ( !Game.IsPlaying ) return;
// 客户端收到 Replicated 的场地尺寸(可能晚于 OnStart)→ 重建几何
if ( MathF.Abs( _builtHalf - GameConfig.ArenaHalfSize ) > 0.5f )
Rebuild();
}
void Rebuild()
{
var half = GameConfig.ArenaHalfSize;
_builtHalf = half;
if ( !_lines.IsValid() )
{
_lines = new SceneDynamicObject( Scene.SceneWorld );
_lines.Material = Material.FromShader( "shaders/line.shader" );
_lines.Flags.CastShadows = false;
_lines.RenderLayer = SceneRenderLayer.OverlayWithDepth;
_lines.Attributes.SetCombo( "D_BLEND", 1 );
}
_lines.Clear();
_lines.Init( Graphics.PrimitiveType.Lines );
var step = GameConfig.GridStep;
for ( var x = -half; x <= half + 1f; x += step )
{
AddLine( new Vector3( x, -half, 0f ), new Vector3( x, half, 0f ), GridColor );
}
for ( var y = -half; y <= half + 1f; y += step )
{
AddLine( new Vector3( -half, y, 0f ), new Vector3( half, y, 0f ), GridColor );
}
AddSquare( half - 2f, BorderColor );
AddSquare( half + 10f, BorderColor * 0.55f );
}
void AddSquare( float half, Color color )
{
AddLine( new Vector3( -half, -half, 0.5f ), new Vector3( half, -half, 0.5f ), color );
AddLine( new Vector3( half, -half, 0.5f ), new Vector3( half, half, 0.5f ), color );
AddLine( new Vector3( half, half, 0.5f ), new Vector3( -half, half, 0.5f ), color );
AddLine( new Vector3( -half, half, 0.5f ), new Vector3( -half, -half, 0.5f ), color );
}
void AddLine( Vector3 a, Vector3 b, Color color )
{
_lines.AddVertex( new Vertex( a, color ) );
_lines.AddVertex( new Vertex( b, color ) );
}
}