Saltar al contenido principal

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.

ibattle system

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;
}
Ganchos del motor

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ámetroTipoDescripción
playerWonbooltrue 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
}
}
}
Gestión de memoria

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.