using Svelto.ECS.Internal; namespace Svelto.ECS.Internal { public abstract class MultiEntityViewsEngine:IHandleEntityViewEngine where T:EntityView, new() { protected abstract void Add(T entityView); protected abstract void Remove(T entityView); public virtual void Add(IEntityView entityView) { Add((T) entityView); } public virtual void Remove(IEntityView entityView) { Remove((T) entityView); } } } namespace Svelto.ECS { public abstract class MultiEntityViewsEngine : MultiEntityViewsEngine where T:EntityView, new() where U:EntityView, new() { protected abstract void Add(U entityView); protected abstract void Remove(U entityView); public override void Add(IEntityView entityView) { var castedEntityView = entityView as U; if (castedEntityView != null) { Add(castedEntityView); } else { base.Add(entityView); } } public override void Remove(IEntityView entityView) { if (entityView is U) { Remove((U) entityView); } else { base.Remove(entityView); } } } public abstract class MultiEntityViewsEngine : MultiEntityViewsEngine where T : EntityView, new() where U : EntityView, new() where V : EntityView, new() { protected abstract void Add(V entityView); protected abstract void Remove(V entityView); public override void Add(IEntityView entityView) { var castedEntityView = entityView as V; if (castedEntityView != null) { Add(castedEntityView); } else base.Add(entityView); } public override void Remove(IEntityView entityView) { var castedEntityView = entityView as V; if (castedEntityView != null) { Remove(castedEntityView); } else base.Remove(entityView); } } }