コード例 #1
0
        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();
            }
        }
コード例 #2
0
        protected override void OnEntityRemoved(Entity entity, ModelNodeLinkComponent data)
        {
            if (meshProcessor == null)
            {
                meshProcessor = EntityManager.GetProcessor <ModelProcessor>();
            }

            meshProcessor.UnlinkEntity(data.EntityLink);

            data.Processor = null;
        }
コード例 #3
0
        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;
            }
        }