A stable modding interface between Techblox and mods https://mod.exmods.org/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

82 Zeilen
2.4KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using RobocraftX.StateSync;
  7. using Svelto.ECS;
  8. using TechbloxModdingAPI.Engines;
  9. namespace TechbloxModdingAPI.Utility
  10. {
  11. /// <summary>
  12. /// Keeps track of custom game-modifying engines
  13. /// </summary>
  14. public static class GameEngineManager
  15. {
  16. private static Dictionary<string, IApiEngine> _gameEngines = new Dictionary<string, IApiEngine>();
  17. private static EnginesRoot _lastEngineRoot;
  18. public static void AddGameEngine(IApiEngine engine)
  19. {
  20. _gameEngines[engine.Name] = engine;
  21. if (_lastEngineRoot != null)
  22. {
  23. Logging.MetaDebugLog($"Registering Game IApiEngine {engine.Name}");
  24. _lastEngineRoot.AddEngine(engine);
  25. if (typeof(IFactoryEngine).IsAssignableFrom(engine.GetType()))
  26. {
  27. ((IFactoryEngine)engine).Factory = _lastEngineRoot.GenerateEntityFactory();
  28. }
  29. }
  30. }
  31. public static bool ExistsGameEngine(string name)
  32. {
  33. return _gameEngines.ContainsKey(name);
  34. }
  35. public static bool ExistsGameEngine(IApiEngine engine)
  36. {
  37. return ExistsGameEngine(engine.Name);
  38. }
  39. public static IApiEngine GetGameEngine(string name)
  40. {
  41. return _gameEngines[name];
  42. }
  43. public static string[] GetGameEngineNames()
  44. {
  45. return _gameEngines.Keys.ToArray();
  46. }
  47. public static void RemoveGameEngine(string name)
  48. {
  49. if (_gameEngines[name].isRemovable)
  50. {
  51. _gameEngines.Remove(name);
  52. }
  53. }
  54. public static void RegisterEngines(StateSyncRegistrationHelper helper)
  55. {
  56. var enginesRoot = helper.enginesRoot;
  57. _lastEngineRoot = enginesRoot;
  58. IEntityFactory factory = enginesRoot.GenerateEntityFactory();
  59. foreach (var key in _gameEngines.Keys)
  60. {
  61. Logging.MetaDebugLog($"Registering Game IApiEngine {_gameEngines[key].Name}");
  62. if (_gameEngines[key] is IDeterministicEngine detEngine)
  63. helper.AddDeterministicEngine(detEngine);
  64. else
  65. enginesRoot.AddEngine(_gameEngines[key]);
  66. if (_gameEngines[key] is IFactoryEngine factEngine)
  67. factEngine.Factory = factory;
  68. }
  69. }
  70. }
  71. }