public void Draw(Graphics graphics, Point position, Size size, float angle, DrawUtil.AlphaMode alphaMode)
        {
            //Do transformations for position and rotation
            graphics.TranslateTransform(position.X, position.Y);
            graphics.RotateTransform(angle);
            graphics.TranslateTransform(-Origin.X, -Origin.Y);

            //Draw the actual entity
            if (ImageDefinition.DrawMode == EntityImageDefinition.DrawModes.Rectangle)
            {
                DrawUtil.EntityRectBrush.Color = Color.FromArgb(DrawUtil.AlphaInts[(int)alphaMode], ImageDefinition.RectColor);
                graphics.FillRectangle(DrawUtil.EntityRectBrush, new Rectangle(0, 0, size.Width, size.Height));
            }
            else if (ImageDefinition.Tiled)
            {
                Rectangle drawTo = Rectangle.Empty;
                for (drawTo.X = 0; drawTo.X < size.Width; drawTo.X += bitmap.Width)
                {
                    drawTo.Width = Math.Min(bitmap.Width, size.Width - drawTo.X);
                    for (drawTo.Y = 0; drawTo.Y < size.Height; drawTo.Y += bitmap.Height)
                    {
                        drawTo.Height = Math.Min(bitmap.Height, size.Height - drawTo.Y);
                        graphics.DrawImage(bitmap, drawTo, 0, 0, drawTo.Width, drawTo.Height, GraphicsUnit.Pixel, DrawUtil.AlphaAttributes[(int)alphaMode]);
                    }
                }
            }
            else
            {
                graphics.DrawImage(bitmap, new Rectangle(0, 0, size.Width, size.Height), 0, 0, bitmap.Width, bitmap.Height, GraphicsUnit.Pixel, DrawUtil.AlphaAttributes[(int)alphaMode]);
            }

            //Undo the transformations
            graphics.TranslateTransform(Origin.X, Origin.Y);
            graphics.RotateTransform(-angle);
            graphics.TranslateTransform(-position.X, -position.Y);
        }
 public void Draw(Graphics graphics, Point position, float angle, DrawUtil.AlphaMode alphaMode)
 {
     Draw(graphics, position, Size, angle, alphaMode);
 }
Beispiel #3
0
        public void Draw(Graphics graphics, bool current, bool fullAlpha)
        {
            Definition.Draw(graphics, Position, Size, Angle, fullAlpha ? DrawUtil.AlphaMode.Full : DrawUtil.AlphaMode.Half);

            //Selection box
            if (current && Ogmo.EntitySelectionWindow.IsSelected(this))
            {
                graphics.DrawSelectionRectangle(Bounds);
            }

            //Draw Nodes
            if (Nodes != null)
            {
                //Node ghost images
                if (Definition.NodesDefinition.Ghost)
                {
                    DrawUtil.AlphaMode alphaMode = fullAlpha ? DrawUtil.AlphaMode.Half : DrawUtil.AlphaMode.Quarter;
                    foreach (var p in Nodes)
                    {
                        Definition.Draw(graphics, p, Size, Angle, alphaMode);
                    }
                }

                switch (Definition.NodesDefinition.DrawMode)
                {
                case EntityNodesDefinition.PathMode.None:
                    foreach (var p in Nodes)
                    {
                        graphics.DrawNode(p);
                    }
                    break;

                case EntityNodesDefinition.PathMode.Path:
                    if (Nodes.Count > 0)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Position, Nodes[0]);
                        graphics.DrawNode(Nodes[0]);
                    }

                    for (int i = 1; i < Nodes.Count; i++)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Nodes[i - 1], Nodes[i]);
                        graphics.DrawNode(Nodes[i]);
                    }
                    break;

                case EntityNodesDefinition.PathMode.Circuit:
                    if (Nodes.Count > 0)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Position, Nodes[0]);
                        graphics.DrawNode(Nodes[0]);
                    }

                    for (int i = 1; i < Nodes.Count; i++)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Nodes[i - 1], Nodes[i]);
                        graphics.DrawNode(Nodes[i]);
                    }

                    if (Nodes.Count > 1)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Nodes[Nodes.Count - 1], Position);
                    }
                    break;

                case EntityNodesDefinition.PathMode.Fan:
                    foreach (var p in Nodes)
                    {
                        graphics.DrawLine(DrawUtil.NodePathPen, Position, p);
                        graphics.DrawNode(p);
                    }
                    break;
                }
            }
        }