private void ModApiUpdate() { lock (EventLock) { foreach (var currentModQueue in UpdateQueue) { while (currentModQueue.Value.TryDequeue(out var value)) { RegisteredUpdateMods[currentModQueue.Key](value); } } } }
public override void Update() { base.Update(); lock (EventLock) { foreach (var currentModQueue in UpdateQueue) { byte[] value; while (currentModQueue.Value.TryDequeue(out value)) { RegisteredUpdateMods[currentModQueue.Key](value); } } } }
/// <summary> /// Unregisters a mod handler. /// </summary> /// <returns><c>true</c>, if mod handler was unregistered, <c>false</c> otherwise.</returns> /// <param name="modName">Mod Name.</param> public bool UnregisterModHandler(string modName) { var unregistered = false; lock (EventLock) { if (RegisteredRawMods.ContainsKey(modName)) { RegisteredRawMods.Remove(modName); unregistered = true; } if (RegisteredUpdateMods.ContainsKey(modName)) { RegisteredUpdateMods.Remove(modName); UpdateQueue.Remove(modName); unregistered = true; } if (RegisteredFixedUpdateMods.ContainsKey(modName)) { RegisteredFixedUpdateMods.Remove(modName); FixedUpdateQueue.Remove(modName); unregistered = true; } } return(unregistered); }
/// <summary> /// Registers a mod handler function that will be called on every Update. /// </summary> /// <param name="modName">Mod Name.</param> /// <param name="handlerFunction">Handler function.</param> public bool RegisterUpdateModHandler(string modName, MessageCallback handlerFunction) { lock (EventLock) { if (RegisteredUpdateMods.ContainsKey(modName)) { Debug.Log($"[LMP]: Failed to register Update mod handler for {modName}, mod already registered"); return(false); } Debug.Log($"[LMP]: Registered Update mod handler for {modName}"); RegisteredUpdateMods.Add(modName, handlerFunction); UpdateQueue.Add(modName, new ConcurrentQueue <byte[]>()); } return(true); }