Files
spellforge/csharp/autoloads/BulletManagerCs.cs
T
2026-07-20 10:56:52 +08:00

42 lines
1.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// BulletManagerCs — 子弹 SoA 热路径 C# 内核(S0 骨架)
// S0 范围:帧时间监控 + AsSpan() 沟通基线验证
// 完整积分热路径在 S1 展开(见 development_plan.md S1
// ADR-L1 规厙1:内层循环禁止 Call() | 规厙2:热数据通过 AsSpan() 零拷贝
using Godot;
using System;
public partial class BulletManagerCs : Node
{
private GodotObject _gdBulletManager;
// S0 性能计时(P-S0-07 帧预算回填)
private double _accumMs;
private int _frames;
public override void _Ready()
{
_gdBulletManager = Engine.GetSingleton("BulletManager");
// S0 骨架不接管积分,保持 _cs_node = null,让 GDScript fallback 运行
GD.Print("[BulletManagerCs] S0 骨架就绪,GDScript fallback 活跞");
}
public override void _PhysicsProcess(double delta)
{
if (_gdBulletManager is null) return;
var t0 = Time.GetTicksUsec();
// S0:仅记录帧时间(积分由 GDScript fallback 负责)
var activeCount = _gdBulletManager.Get("_active_count").AsInt32();
_ = activeCount;
_accumMs += (Time.GetTicksUsec() - t0) / 1000.0;
_frames++;
if (_frames >= 60)
{
GD.Print($"[BulletManagerCs] 帧时间均倦: {_accumMs / _frames:F3} ms " +
$"(active={activeCount} TODO S1: 启用完整热路径)");
_accumMs = 0; _frames = 0;
}
}
}