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
|
|
|
|
}
|