Make `ApiContainer` props return `null` if req. services unavailable
specifically `MemoryEvents` and `MemorySaveState` now they behave like `[OptionalApi]` rather than `[RequiredApi]`
This commit is contained in:
parent
6387291e37
commit
2fca4282a9
|
@ -9,24 +9,51 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
public readonly IReadOnlyDictionary<Type, IExternalApi> Libraries;
|
||||
|
||||
public ICommApi Comm => (ICommApi) Libraries[typeof(ICommApi)];
|
||||
public IEmuClientApi EmuClient => (IEmuClientApi) Libraries[typeof(IEmuClientApi)];
|
||||
public IEmulationApi Emulation => (IEmulationApi) Libraries[typeof(IEmulationApi)];
|
||||
public ICommApi Comm
|
||||
=> Get<ICommApi>();
|
||||
|
||||
public IEmuClientApi EmuClient
|
||||
=> Get<IEmuClientApi>();
|
||||
|
||||
public IEmulationApi Emulation
|
||||
=> Get<IEmulationApi>(); // requires IEmulator
|
||||
|
||||
[Obsolete("use Emulation")]
|
||||
public IGameInfoApi GameInfo => (IGameInfoApi) Libraries[typeof(IGameInfoApi)];
|
||||
public IGameInfoApi GameInfo
|
||||
=> Get<IGameInfoApi>();
|
||||
|
||||
public IGuiApi Gui => (IGuiApi) Libraries[typeof(IGuiApi)];
|
||||
public IInputApi Input => (IInputApi) Libraries[typeof(IInputApi)];
|
||||
public IJoypadApi Joypad => (IJoypadApi) Libraries[typeof(IJoypadApi)];
|
||||
public IMemoryApi Memory => (IMemoryApi) Libraries[typeof(IMemoryApi)];
|
||||
public IMemoryEventsApi MemoryEvents => (IMemoryEventsApi) Libraries[typeof(IMemoryEventsApi)];
|
||||
public IMemorySaveStateApi MemorySaveState => (IMemorySaveStateApi) Libraries[typeof(IMemorySaveStateApi)];
|
||||
public IMovieApi Movie => (IMovieApi) Libraries[typeof(IMovieApi)];
|
||||
public ISaveStateApi SaveState => (ISaveStateApi) Libraries[typeof(ISaveStateApi)];
|
||||
public ISQLiteApi SQLite => (ISQLiteApi) Libraries[typeof(ISQLiteApi)];
|
||||
public IUserDataApi UserData => (IUserDataApi) Libraries[typeof(IUserDataApi)];
|
||||
public IToolApi Tool => (IToolApi) Libraries[typeof(IToolApi)];
|
||||
public IGuiApi Gui
|
||||
=> Get<IGuiApi>(); // requires IEmulator
|
||||
|
||||
public IInputApi Input
|
||||
=> Get<IInputApi>();
|
||||
|
||||
public IJoypadApi Joypad
|
||||
=> Get<IJoypadApi>();
|
||||
|
||||
public IMemoryApi Memory
|
||||
=> Get<IMemoryApi>(); // requires IEmulator
|
||||
|
||||
public IMemoryEventsApi? MemoryEvents
|
||||
=> TryGet<IMemoryEventsApi>(); // requires IDebuggable
|
||||
|
||||
public IMemorySaveStateApi? MemorySaveState
|
||||
=> TryGet<IMemorySaveStateApi>(); // requires IStatable
|
||||
|
||||
public IMovieApi Movie
|
||||
=> Get<IMovieApi>();
|
||||
|
||||
public ISaveStateApi SaveState
|
||||
=> Get<ISaveStateApi>();
|
||||
|
||||
public ISQLiteApi SQLite
|
||||
=> Get<ISQLiteApi>();
|
||||
|
||||
public IUserDataApi UserData
|
||||
=> Get<IUserDataApi>();
|
||||
|
||||
public IToolApi Tool
|
||||
=> Get<IToolApi>();
|
||||
|
||||
public ApiContainer(IReadOnlyDictionary<Type, IExternalApi> libs) => Libraries = libs;
|
||||
|
||||
|
@ -34,5 +61,13 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
foreach (var lib in Libraries.Values) if (lib is IDisposable disposableLib) disposableLib.Dispose();
|
||||
}
|
||||
|
||||
public T Get<T>()
|
||||
where T : class, IExternalApi
|
||||
=> (T) Libraries[typeof(T)];
|
||||
|
||||
public T? TryGet<T>()
|
||||
where T : class, IExternalApi
|
||||
=> Libraries.TryGetValue(typeof(T), out var inst) ? (T) inst : null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue