public override void Draw(RenderContext context) { lock (DirtyLinks) { if (DirtyLinks.Count == 0) { return; } if (meshProcessor == null) { meshProcessor = EntityManager.GetProcessor <ModelProcessor>(); } if (meshProcessor == null) // (no model in the scene) { return; } foreach (var transformationLinkComponent in DirtyLinks) { // ModelNodeLinkComponent has been changed, regenerate link meshProcessor.UnlinkEntity(transformationLinkComponent.EntityLink); if (transformationLinkComponent.Target != null) { meshProcessor.LinkEntity(transformationLinkComponent.Entity, transformationLinkComponent.Target, transformationLinkComponent.NodeName); } } DirtyLinks.Clear(); } }
protected override void OnEntityRemoved(Entity entity, ModelNodeLinkComponent data) { if (meshProcessor == null) { meshProcessor = EntityManager.GetProcessor <ModelProcessor>(); } meshProcessor.UnlinkEntity(data.EntityLink); data.Processor = null; }
protected override void OnEntityAdding(Entity entity, ModelNodeLinkComponent data) { data.Processor = this; if (meshProcessor == null) { meshProcessor = EntityManager.GetProcessor <ModelProcessor>(); } lock (DirtyLinks) { DirtyLinks.Add(data); // Mark it as invalid data.EntityLink.NodeIndex = -1; } }