using MoonTools.ECS; using Nerfed.Runtime.Components; namespace Nerfed.Runtime.Systems { //public class ParentSystem : MoonTools.ECS.System //{ // private readonly Filter parentsAddedFilter; // private readonly Filter parentsRemovedFilter; // private readonly Filter parentsFilter; // public ParentSystem(World world) : base(world) // { // parentsAddedFilter = FilterBuilder.Include().Exclude().Build(); // parentsRemovedFilter = FilterBuilder.Include().Exclude().Build(); // parentsFilter = FilterBuilder.Include().Include().Build(); // } // public override void Update(TimeSpan delta) // { // // Update removed parents. // foreach (Entity entity in parentsRemovedFilter.Entities) // { // // Do stuff here to update/remove child relations etc. // //PreviousParent previousParent = Get(entity); // //World.Unrelate(previousParent.parentEntity, entity); // Remove(entity); // } // // Update added parents. // foreach (Entity entity in parentsAddedFilter.Entities) // { // Parent parent = Get(entity); // if (Has(parent.parentEntity) && Get(parent.parentEntity).parentEntity == entity) // { // Log.Warning($"Entity {entity} cannot be a parent of entity {parent.parentEntity}, because {parent.parentEntity} is the parent of {entity}"); // Remove(entity); // continue; // } // PreviousParent previousParent = new(parent.parentEntity); // Set(entity, previousParent); // World.Relate(parent.parentEntity, entity, new ChildParentRelation()); // } // // Update relations if the parent has changed. // foreach (Entity entity in parentsFilter.Entities) // { // Parent parent = Get(entity); // PreviousParent previousParent = Get(entity); // if(parent.parentEntity != previousParent.parentEntity) // { // World.Unrelate(previousParent.parentEntity, entity); // Set(entity, new PreviousParent(parent.parentEntity)); // World.Relate(parent.parentEntity, entity, new ChildParentRelation()); // } // } // // TODO: // // What if an parent entity gets destroyed? // // How does the child know if the parent is in valid. Also we need to remove the parent component. // // Maybe if we also relate the other way around child -> parent via relations, and the relation is gone that means the parent is gone so we should remove the component. // } //} }