Files
Cielonos/Assets/Scripts/MainGame/Managers/CombatManager/CombatManager.cs

78 lines
2.5 KiB
C#
Raw Normal View History

2025-12-24 16:58:51 -05:00
using System.Collections.Generic;
using Sirenix.OdinInspector;
2026-02-13 09:22:11 -05:00
using SLSUtilities.General;
2025-12-24 16:58:51 -05:00
using UnityEngine;
namespace Cielonos.MainGame
{
2026-07-18 03:16:20 -04:00
public partial class CombatManager : Singleton<CombatManager>, ISubstructureOwner
2025-12-24 16:58:51 -05:00
{
2026-07-18 03:16:20 -04:00
// CombatManager 只保存“战斗运行时服务”:敌人索引、站位协调、攻击区域、战斗房生命周期。
// Run/Map/Reward 等一局流程语义不应该直接塞进这里。
2025-12-24 16:58:51 -05:00
[ShowInInspector]
private EnemySubmodule enemySm;
2026-05-23 08:27:50 -04:00
[ShowInInspector]
private CoordinatorSubmodule coordinatorSm;
2025-12-24 16:58:51 -05:00
[ShowInInspector]
private AttackAreaSubmodule attackAreaSm;
2026-05-10 11:47:55 -04:00
[ShowInInspector]
2026-05-23 08:27:50 -04:00
private CombatRoomSubmodule combatRoomSm;
2026-05-26 00:21:27 -04:00
2026-07-18 03:16:20 -04:00
[Title("Formation")]
[SerializeField]
private FormationProfile formationProfile;
2026-05-26 00:21:27 -04:00
[ShowInInspector]
[SerializeReference]
private List<CombatSystemBase> combatSystems;
2026-07-18 03:16:20 -04:00
internal FormationProfile FormationProfile => formationProfile;
2025-12-24 16:58:51 -05:00
protected override void Awake()
{
base.Awake();
2026-07-18 03:16:20 -04:00
InitializeSubstructures();
}
public void InitializeSubstructures()
{
2025-12-24 16:58:51 -05:00
enemySm ??= new EnemySubmodule(this);
2026-05-23 08:27:50 -04:00
coordinatorSm ??= new CoordinatorSubmodule(this);
2025-12-24 16:58:51 -05:00
attackAreaSm ??= new AttackAreaSubmodule(this);
2026-05-23 08:27:50 -04:00
combatRoomSm ??= new CombatRoomSubmodule(this);
}
private void Update()
{
coordinatorSm.CleanupTimeoutSectors();
2026-07-18 03:16:20 -04:00
coordinatorSm.TickFormationFrameAutoRefresh();
}
/// <summary>
/// 重置一次战斗遭遇的所有运行时缓存。
/// MapManager 切换 Zone 时只需要调用这个入口,不再逐个触碰 CombatManager 的内部子模块。
/// </summary>
public void ResetEncounter()
{
attackAreaSm.Reset();
combatRoomSm.Reset();
2025-12-24 16:58:51 -05:00
}
}
2026-05-23 08:27:50 -04:00
public partial class CombatManager
2025-12-24 16:58:51 -05:00
{
public static EnemySubmodule EnemySm => Instance.enemySm;
2026-05-23 08:27:50 -04:00
public static CoordinatorSubmodule CoordinatorSm => Instance.coordinatorSm;
2025-12-24 16:58:51 -05:00
public static AttackAreaSubmodule AttackAreaSm => Instance.attackAreaSm;
2026-05-23 08:27:50 -04:00
public static CombatRoomSubmodule CombatRoomSm => Instance.combatRoomSm;
2026-07-18 03:16:20 -04:00
/// <summary>
/// 静态 facade供 MapManager 等全局流程在切换场景时统一重置战斗遭遇。
/// </summary>
public static void ResetCurrentEncounter() => Instance.ResetEncounter();
2025-12-24 16:58:51 -05:00
}
2026-05-23 08:27:50 -04:00
}