using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Svelto.ECS; namespace GamecraftModdingAPI.Events { /// <summary> /// A simple implementation of IEventHandlerEngine sufficient for most uses /// </summary> public class SimpleEventHandlerEngine : IEventHandlerEngine { public object type { get; set; } public string Name { get; set; } private bool isActivated = false; private readonly Action<IEntitiesDB> onActivated; private readonly Action<IEntitiesDB> onDestroyed; public IEntitiesDB entitiesDB { set; private get; } public void Add(ref ModEventEntityStruct entityView, EGID egid) { if (entityView.type.Equals(this.type)) { isActivated = true; onActivated.Invoke(entitiesDB); } } public void Ready() { } public void Remove(ref ModEventEntityStruct entityView, EGID egid) { if (entityView.type.Equals(this.type) && isActivated) { isActivated = false; onDestroyed.Invoke(entitiesDB); } } public void Dispose() { if (isActivated) { isActivated = false; onDestroyed.Invoke(entitiesDB); } } /// <summary> /// Construct the engine /// </summary> /// <param name="activated">The operation to do when the event is created</param> /// <param name="removed">The operation to do when the event is destroyed (if applicable)</param> /// <param name="type">The type of event to handle</param> /// <param name="name">The name of the engine</param> public SimpleEventHandlerEngine(Action activated, Action removed, object type, string name) : this((IEntitiesDB _) => { activated.Invoke(); }, (IEntitiesDB _) => { removed.Invoke(); }, type, name) { } /// <summary> /// Construct the engine /// </summary> /// <param name="activated">The operation to do when the event is created</param> /// <param name="removed">The operation to do when the event is destroyed (if applicable)</param> /// <param name="type">The type of event to handler</param> /// <param name="name">The name of the engine</param> public SimpleEventHandlerEngine(Action<IEntitiesDB> activated, Action<IEntitiesDB> removed, object type, string name) { this.type = type; this.Name = name; this.onActivated = activated; this.onDestroyed = removed; } } }