IBattleSystem
Contrato para interactuar con el sistema de batalla desde el código del juego. Ofrece la comprobación del estado de la batalla y la suscripción a eventos.
Tú inicias una batalla y escuchas. Todo lo que hay detrás de la interfaz puede cambiar (incluso trasladar todo el combate a un servidor) sin tocar tu código.
Namespace: OpenMon.MCE.SDK
Definición
public interface IBattleSystem
{
bool IsInBattle { get; }
event Action OnBattleStarted;
event Action<bool> OnBattleEnded;
}
engine.Battle es un BattleSystemFacade. Establece IsInBattle y lanza OnBattleStarted y OnBattleEnded cuando el motor llama a sus ganchos, NotifyBattleStarted() y NotifyBattleEnded(bool playerWon). En el motor actual nada llama todavía a esos ganchos, así que IsInBattle se queda en false y los dos eventos no se disparan. Mientras no estén conectados, observa las batallas a través del lanzador de batallas, que está enlazado en DI y sí notifica: IBattleLauncher.BattleInProgress, SubscribeToBattleLaunched, SubscribeToBattleToUnload y SubscribeToBattleEnded(Action<BattleResultParameters>).
Propiedades
IsInBattle
Indica si hay una batalla en curso.
Tipo: bool
Devuelve true desde el momento en que se carga una escena de batalla hasta que se procesan los resultados y se reanuda el mundo.
Eventos
OnBattleStarted
Se lanza cuando comienza una batalla, después de que se haya cargado la escena de batalla y se haya inicializado el BattleManager.
Firma: event Action OnBattleStarted
OnBattleEnded
Se lanza cuando termina una batalla, antes de que se descargue la escena de batalla.
Firma: event Action<bool> OnBattleEnded
| Parámetro | Tipo | Descripción |
|---|---|---|
playerWon | bool | true si el jugador ganó, false si el jugador perdió, huyó o fue derrotado |
Ejemplo de uso
using OpenMon.MCE.SDK;
using Zenject;
public class BattleTracker : MonoBehaviour
{
// Only IMonsterCaptureEngine is bound in DI; reach subsystems through it.
[Inject] private IMonsterCaptureEngine engine;
private IBattleSystem battle;
private int totalBattles;
private int wins;
private void Awake()
{
battle = engine.Battle;
}
private void OnEnable()
{
battle.OnBattleStarted += OnBattleStart;
battle.OnBattleEnded += OnBattleEnd;
}
private void OnDisable()
{
battle.OnBattleStarted -= OnBattleStart;
battle.OnBattleEnded -= OnBattleEnd;
}
private void OnBattleStart()
{
totalBattles++;
}
private void OnBattleEnd(bool playerWon)
{
if (playerWon) wins++;
Debug.Log($"Record: {wins}/{totalBattles}");
}
private void Update()
{
// Disable certain UI when in battle
if (battle.IsInBattle)
{
// Hide overworld HUD elements
}
}
}
Cancela siempre la suscripción a los eventos en OnDisable() o OnDestroy() para evitar fugas de memoria. Esto es especialmente importante en los MonoBehaviour que pueden destruirse durante las transiciones de escena.