WKLib 0.2.3
A modding library for White Knuckle
Loading...
Searching...
No Matches
WKLibAPI.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
4using WKLib.API.UI;
5
6namespace WKLib.API;
7
8public class WKLibAPI
9{
10 internal static List<WKLibAPI> internalAPIs = new List<WKLibAPI>();
11
12 public string DisplayName { get; internal set; } = string.Empty;
13 public string GUID { get; internal set; } = string.Empty;
14
15 public List<WKLibWindow> Windows { get; internal set; } = new List<WKLibWindow>();
16 public ModTab ModTab { get; internal set; } = null;
17
18 public AssetService AssetService { get; internal set; } = null;
19
20 private WKLibAPI(string displayName, string guid, string defaultConfigFileName)
21 {
22 DisplayName = displayName;
23 GUID = guid;
24
25 AssetService = new AssetService(this);
26 }
27
34 public static WKLibAPI Create(string displayName, string guid)
35 {
36 return Create_Internal(displayName, guid);
37 }
38
46 public static WKLibAPI Create(string displayName, string guid, string defaultConfigFileName)
47 {
48 return Create_Internal(displayName, guid, defaultConfigFileName);
49 }
50
51 private static WKLibAPI Create_Internal(string displayName, string guid, string defaultConfigFileName = "DefaultConfig")
52 {
53 foreach(WKLibAPI API in internalAPIs)
54 {
55 if (string.Equals(guid, API.GUID))
56 throw new Exception($"{displayName} collides with {API.DisplayName}, they both have the same guid, {guid}");
57 }
58
59 WKLibAPI newAPI = new WKLibAPI(displayName, guid, defaultConfigFileName);
60 internalAPIs.Add(newAPI);
61 internalAPIs.Sort((a, b) => string.Compare(a.DisplayName, b.DisplayName, StringComparison.OrdinalIgnoreCase));
62 return newAPI;
63 }
64
65 public void AddWindow(WKLibWindow window)
66 {
67 if (Windows.Contains(window))
68 return;
69
70 Windows.Add(window);
71 }
72
73 public void AddToModList(ModTab modTab)
74 {
75 if (ModTab != null)
76 throw new Exception($"Mod tab already exists, cant add new one");
77
78 ModTab = modTab;
79 }
80
81 public void Destroy()
82 {
83 if (internalAPIs.Contains(this))
84 internalAPIs.Remove(this);
85 }
86}
Loads and caches AssetBundles and assets, scoped by ModContext to avoid collisions.
void AddWindow(WKLibWindow window)
Definition WKLibAPI.cs:65
static WKLibAPI Create(string displayName, string guid, string defaultConfigFileName)
Creates and registers a new API instance.
Definition WKLibAPI.cs:46
void AddToModList(ModTab modTab)
Definition WKLibAPI.cs:73
static WKLibAPI Create(string displayName, string guid)
Creates and registers a new API instance.
Definition WKLibAPI.cs:34
AssetService AssetService
Definition WKLibAPI.cs:18
List< WKLibWindow > Windows
Definition WKLibAPI.cs:15