public override void Render(Vector2D topLeft, Vector2D bottomRight)
        {
            if (!visible)
            {
                return;
            }
            if (Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.X < topLeft.X ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.X > bottomRight.X ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.Y < topLeft.Y ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.Y > bottomRight.Y)
            {
                return;
            }

            base.Render(topLeft, bottomRight);

            if (_speechBubble != null)
            {
                _speechBubble.Draw(Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position,
                                   ClientWindowData.Singleton.ScreenOrigin, currentBaseSprite);
            }
        }
예제 #2
0
        public virtual void Render(Vector2D topLeft, Vector2D bottomRight)
        {
            //Render slaves beneath
            IEnumerable <IRenderableComponent> renderablesBeneath = from IRenderableComponent c in slaves
                                                                    //FIXTHIS
                                                                    orderby c.DrawDepth ascending
                                                                    where c.DrawDepth < DrawDepth
                                                                    select c;

            foreach (IRenderableComponent component in renderablesBeneath.ToList())
            {
                component.Render(topLeft, bottomRight);
            }

            //Render this sprite
            if (!visible)
            {
                return;
            }
            if (sprite == null)
            {
                return;
            }

            Vector2D renderPos =
                ClientWindowData.WorldToScreen(
                    Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position);

            SetSpriteCenter(renderPos);

            if (Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.X + sprite.AABB.Right <
                topLeft.X ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.X > bottomRight.X
                ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.Y +
                sprite.AABB.Bottom < topLeft.Y ||
                Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.Y > bottomRight.Y)
            {
                return;
            }

            sprite.HorizontalFlip = flip;
            sprite.Draw();
            sprite.HorizontalFlip = false;

            //Render slaves above
            IEnumerable <IRenderableComponent> renderablesAbove = from IRenderableComponent c in slaves
                                                                  //FIXTHIS
                                                                  orderby c.DrawDepth ascending
                                                                  where c.DrawDepth >= DrawDepth
                                                                  select c;

            foreach (IRenderableComponent component in renderablesAbove.ToList())
            {
                component.Render(topLeft, bottomRight);
            }

            //Draw AABB
            var aabb = AABB;

            //Gorgon.CurrentRenderTarget.Rectangle(renderPos.X - aabb.Width/2, renderPos.Y - aabb.Height / 2, aabb.Width, aabb.Height, Color.Lime);

            if (_speechBubble != null)
            {
                _speechBubble.Draw(Owner.GetComponent <TransformComponent>(ComponentFamily.Transform).Position,
                                   ClientWindowData.Singleton.ScreenOrigin, aabb);
            }
        }