Перейти к основному содержимому

Обзор API SDK

SDK MCE предоставляет чистую и стабильную публичную поверхность API для взаимодействия с движком из кода вашей игры. Все интерфейсы SDK находятся в пространстве имён OpenMon.MCE.SDK. Публичный API SDK входит в редакции Indie, Pro, Source и Studio; в редакции Starter API закрыт.

sdk overview

Если чего-то нет в одном из этих четырёх интерфейсов, оно не входит в контракт SDK.

Принципы проектирования​

  • На основе интерфейсов: все публичные API представлены как интерфейсы, а не как конкретные классы. Это позволяет реализации развиваться, не ломая ваш код.
  • С упором на чтение: большинство методов SDK — запросы только для чтения. Изменения происходят через внутренние системы движка (CommandGraph, Inspector и т. д.).
  • Управляемый событиями: ключевые изменения состояния сообщаются через события C#.
  • С внедрением через Zenject: обращайтесь к интерфейсам SDK через атрибут [Inject].

Точка входа​

Главная точка входа — IMonsterCaptureEngine:

[Inject] private IMonsterCaptureEngine engine;

Через этот интерфейс вы получаете доступ ко всем подсистемам:

СвойствоИнтерфейсНазначение
engine.DatabaseIMonsterDatabaseЗапросы по монстрам, приёмам, предметам, типам
engine.BattleIBattleSystemСостояние боя и события
engine.PlayerIPlayerDataПартия, деньги, имя и значки игрока
engine.SaveSystemISaveSystemОперации сохранения/загрузки
engine.VersionstringСтрока версии движка

Быстрый пример​

using OpenMon.MCE.SDK;
using Zenject;

public class GameDashboard : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;

private void Start()
{
// Query database
var allMonsters = engine.Database.GetAllMonsters();
Debug.Log($"Database has {allMonsters.Count} monster species");

// Check player state
Debug.Log($"Player: {engine.Player.PlayerName}");
Debug.Log($"Team size: {engine.Player.PlayerRoster.RosterSize}");
Debug.Log($"Money: {engine.Player.Money}");
Debug.Log($"Badges: {engine.Player.BadgeCount}");

// Listen to battle events
engine.Battle.OnBattleStarted += () => Debug.Log("Battle!");
engine.Battle.OnBattleEnded += (won) => Debug.Log($"Won: {won}");

// Save/load
if (engine.SaveSystem.HasSaveData(0))
Debug.Log("Save slot 0 has data");
}
}

Интерфейсы базы данных и игрока читают живое состояние движка. Интерфейсы боя и сохранения (engine.Battle, engine.SaveSystem) — это фасады, которые зависят от хуков движка, пока не подключённых: прочитайте примечания в IBattleSystem и ISaveSystem, прежде чем полагаться на их события.

Подробную документацию по каждому интерфейсу см. на отдельных страницах API.