@@ -9,30 +9,65 @@ public sealed class ApiContainer : IDisposable
9
9
{
10
10
public readonly IReadOnlyDictionary < Type , IExternalApi > Libraries ;
11
11
12
- public ICommApi Comm => ( ICommApi ) Libraries [ typeof ( ICommApi ) ] ;
13
- public IEmuClientApi EmuClient => ( IEmuClientApi ) Libraries [ typeof ( IEmuClientApi ) ] ;
14
- public IEmulationApi Emulation => ( IEmulationApi ) Libraries [ typeof ( IEmulationApi ) ] ;
12
+ public ICommApi Comm
13
+ => Get < ICommApi > ( ) ;
14
+
15
+ public IEmuClientApi EmuClient
16
+ => Get < IEmuClientApi > ( ) ;
17
+
18
+ public IEmulationApi Emulation
19
+ => Get < IEmulationApi > ( ) ; // requires IEmulator
15
20
16
21
[ Obsolete ( "use Emulation" ) ]
17
- public IGameInfoApi GameInfo => ( IGameInfoApi ) Libraries [ typeof ( IGameInfoApi ) ] ;
18
-
19
- public IGuiApi Gui => ( IGuiApi ) Libraries [ typeof ( IGuiApi ) ] ;
20
- public IInputApi Input => ( IInputApi ) Libraries [ typeof ( IInputApi ) ] ;
21
- public IJoypadApi Joypad => ( IJoypadApi ) Libraries [ typeof ( IJoypadApi ) ] ;
22
- public IMemoryApi Memory => ( IMemoryApi ) Libraries [ typeof ( IMemoryApi ) ] ;
23
- public IMemoryEventsApi MemoryEvents => ( IMemoryEventsApi ) Libraries [ typeof ( IMemoryEventsApi ) ] ;
24
- public IMemorySaveStateApi MemorySaveState => ( IMemorySaveStateApi ) Libraries [ typeof ( IMemorySaveStateApi ) ] ;
25
- public IMovieApi Movie => ( IMovieApi ) Libraries [ typeof ( IMovieApi ) ] ;
26
- public ISaveStateApi SaveState => ( ISaveStateApi ) Libraries [ typeof ( ISaveStateApi ) ] ;
27
- public ISQLiteApi SQLite => ( ISQLiteApi ) Libraries [ typeof ( ISQLiteApi ) ] ;
28
- public IUserDataApi UserData => ( IUserDataApi ) Libraries [ typeof ( IUserDataApi ) ] ;
29
- public IToolApi Tool => ( IToolApi ) Libraries [ typeof ( IToolApi ) ] ;
22
+ public IGameInfoApi GameInfo
23
+ => Get < IGameInfoApi > ( ) ;
24
+
25
+ public IGuiApi Gui
26
+ => Get < IGuiApi > ( ) ; // requires IEmulator
27
+
28
+ public IInputApi Input
29
+ => Get < IInputApi > ( ) ;
30
+
31
+ public IJoypadApi Joypad
32
+ => Get < IJoypadApi > ( ) ;
33
+
34
+ public IMemoryApi Memory
35
+ => Get < IMemoryApi > ( ) ; // requires IEmulator
36
+
37
+ public IMemoryEventsApi ? MemoryEvents
38
+ => TryGet < IMemoryEventsApi > ( ) ; // requires IDebuggable
39
+
40
+ public IMemorySaveStateApi ? MemorySaveState
41
+ => TryGet < IMemorySaveStateApi > ( ) ; // requires IStatable
42
+
43
+ public IMovieApi Movie
44
+ => Get < IMovieApi > ( ) ;
45
+
46
+ public ISaveStateApi SaveState
47
+ => Get < ISaveStateApi > ( ) ;
48
+
49
+ public ISQLiteApi SQLite
50
+ => Get < ISQLiteApi > ( ) ;
51
+
52
+ public IUserDataApi UserData
53
+ => Get < IUserDataApi > ( ) ;
54
+
55
+ public IToolApi Tool
56
+ => Get < IToolApi > ( ) ;
30
57
31
58
public ApiContainer ( IReadOnlyDictionary < Type , IExternalApi > libs ) => Libraries = libs ;
32
59
33
60
public void Dispose ( )
34
61
{
35
62
foreach ( var lib in Libraries . Values ) if ( lib is IDisposable disposableLib ) disposableLib . Dispose ( ) ;
36
63
}
64
+
65
+ public T Get < T > ( )
66
+ where T : class , IExternalApi
67
+ => ( T ) Libraries [ typeof ( T ) ] ;
68
+
69
+ public T ? TryGet < T > ( )
70
+ where T : class , IExternalApi
71
+ => Libraries . TryGetValue ( typeof ( T ) , out var inst ) ? ( T ) inst : null ;
37
72
}
38
73
}
0 commit comments