using Models; namespace Core; /// /// 游戏会话(运行时入口) /// 设计说明: /// 1) 将 State + Content + Systems + Services 组织为一个整体。 /// 2) 便于在 Godot Node 中持有,避免散落的静态单例。 /// 注意事项: /// - 真实项目中应通过工厂或依赖注入创建。 /// 未来扩展: /// - 可加入“加载存档/保存存档/重置”接口。 /// public sealed class GameSession { /// /// 游戏状态 /// public GameState State { get; } /// /// 游戏内容数据库 /// public GameContentDatabase Content { get; } /// /// 领域事件总线 /// public DomainEventBus Events { get; } /// /// 本地化服务 /// public ILocalizationService Localization { get; } /// /// 游戏系统集合 /// public GameSystems Systems { get; } /// /// 构造游戏会话 /// /// 游戏状态 /// 内容数据库 /// 本地化服务 /// 事件总线 public GameSession(GameState state, GameContentDatabase content, ILocalizationService localization, DomainEventBus events) { State = state; Content = content; Localization = localization; Events = events; Systems = new GameSystems(); Systems.Initialize(this); } /// /// 创建默认游戏会话 /// /// 游戏会话实例 public static GameSession CreateDefault() { var registry = new ContentRegistry(); var resourceSource = new ResourceContentSource(0); resourceSource.ResourcePaths.Add("res://resources/definitions/discipline_biology.tres"); registry.RegisterSource(resourceSource); var jsonSource = new JsonContentSource(10); jsonSource.DataPaths.Add("res://resources/definitions/disciplines.json"); jsonSource.DataPaths.Add("res://resources/definitions/archetypes.json"); jsonSource.DataPaths.Add("res://resources/definitions/roles.json"); jsonSource.DataPaths.Add("res://resources/definitions/traits.json"); registry.RegisterSource(jsonSource); var content = registry.BuildDatabase(); var localization = new GodotLocalizationService(); var events = new DomainEventBus(); return new GameSession(new GameState(), content, localization, events); } /// /// 每帧更新 /// /// 帧间隔 public void Tick(float delta) { Systems.Tick(delta); } }