メインコンテンツまでスキップ

IBattleSystem

ゲームコードからバトルシステムとやり取りするためのコントラクトです。バトル状態のチェックとイベント購読を提供します。

ibattle system

バトルを開始して、待ち受けるだけです。インターフェースの裏側は、戦闘全体をサーバーへ移すことも含めて、あなたのコードに手を入れずに変更できます。

名前空間: OpenMon.MCE.SDK

定義​

public interface IBattleSystem
{
bool IsInBattle { get; }
event Action OnBattleStarted;
event Action<bool> OnBattleEnded;
}
エンジンのフック

engine.Battle は BattleSystemFacade です。エンジンがそのフックである NotifyBattleStarted() と NotifyBattleEnded(bool playerWon) を呼び出したときに、IsInBattle を設定し、OnBattleStarted と OnBattleEnded を発行します。現在のエンジンではこれらのフックを呼び出すものはまだありません。そのため IsInBattle は false のままで、2つのイベントも発行されません。接続されるまでは、DI にバインドされていて実際に通知を行うバトルランチャーを通じてバトルを監視してください:IBattleLauncher.BattleInProgress、SubscribeToBattleLaunched、SubscribeToBattleToUnload、SubscribeToBattleEnded(Action<BattleResultParameters>)。

プロパティ​

IsInBattle​

バトルが現在進行中かどうか。

型: bool

バトルシーンがロードされた時点から、バトル結果が処理されてフィールドが再開されるまでの間、true を返します。

イベント​

OnBattleStarted​

バトルが始まるとき、バトルシーンのロードと BattleManager の初期化が完了した後に発行されます。

シグネチャ: event Action OnBattleStarted

OnBattleEnded​

バトルが終了するとき、バトルシーンがアンロードされる前に発行されます。

シグネチャ: event Action<bool> OnBattleEnded

パラメータ型説明
playerWonboolプレイヤーが勝てば true、プレイヤーが負けた、逃げた、または倒された場合は false

使用例​

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
}
}
}
メモリ管理

メモリリークを防ぐため、イベントの購読は必ず OnDisable() または OnDestroy() で解除してください。シーン遷移中に破棄される可能性のある MonoBehaviour では、特に重要です。