Exemple #1
0
        public Bitmap GetObjectImage(Map.Object obj, bool shadow = false)
        {
            Bitmap result = null;
            int    index  = -1;

            ThingDb.Thing tt = ThingDb.Things[obj.Name];
            // достаем картинку соответственно типу обьекта и его состоянию
            switch (tt.DrawType)
            {
            case "StaticDraw":
            case "BaseDraw":
            case "AnimateDraw":
            case "SphericalShieldDraw":
            case "WeaponAnimateDraw":
            case "FlagDraw":
            case "SummonEffectDraw":
            case "ReleasedSoulDraw":
            case "GlyphDraw":
            case "BoulderDraw":
            case "StaticRandomDraw":
            case "ArrowDraw":
            case "HarpoonDraw":
            case "WeakArrowDraw":
            case "VectorAnimateDraw":
            case "SlaveDraw":     // obelisk, elevator
                if (tt.Subclass[(int)ThingDb.Thing.SubclassBitIndex.VISIBLE_OBELISK])
                {
                    index = tt.SpriteAnimFrames[tt.SpriteAnimFrames.Count - 1];
                }
                else
                {
                    index = tt.SpriteAnimFrames[0];
                }
                break;

            case "DoorDraw":     // doors
                index = shadow ? index = tt.SpriteAnimFrames[(int)obj.GetExtraData <DoorXfer>().Direction] : tt.SpriteAnimFrames[(int)obj.GetExtraData <DoorXfer>().Direction];
                break;

            case "AnimateStateDraw":     // pits
                if (tt.HasClassFlag(ThingDb.Thing.ClassFlags.HOLE))
                {
                    if (obj.HasFlag(ThingDb.Thing.FlagsFlags.ENABLED) || obj.Terminator == 0)
                    {
                        index = tt.SpriteStates[2].Animation.Frames[0];     // Open (broken)
                    }
                    else
                    {
                        index = tt.SpriteStates[0].Animation.Frames[0];     // Closed
                    }
                }
                else if (tt.SpriteStates.Count > 0)
                {
                    index = tt.SpriteStates[0].Animation.Frames[0];
                }
                break;

            case "ArmorDraw":
            case "WeaponDraw":
                if (!EditorSettings.Default.Draw_ComplexPreview || shadow)
                {
                    // User disabled this feature
                    index = tt.SpriteMenuIcon;
                }
                else
                {
                    // Complex drawing routine
                    return(GetObjectImageSpecial(obj, tt, shadow));
                }
                break;

            case "MonsterDraw":
            case "MaidenDraw":

            case "NPCDraw":
                if (!EditorSettings.Default.Draw_ComplexPreview)
                {
                    // User disabled this feature
                    index = tt.SpriteMenuIcon;
                }
                else
                {
                    // Complex drawing routine
                    return(GetObjectImageSpecial(obj, tt, shadow));
                }
                break;

            default:
                if (tt.SpriteMenuIcon > 0)
                {
                    index = tt.SpriteMenuIcon;
                }
                break;
            }
            if (index >= 0)
            {
                //if(tt.Name == "SentryGlobe")113055
                //MessageBox.Show(index.ToString());
                result      = mapRenderer.VideoBag.GetBitmap(index);
                drawOffsetX = mapRenderer.VideoBag.DrawOffsets[index][0];
                drawOffsetY = mapRenderer.VideoBag.DrawOffsets[index][1];
            }
            return(result);
        }
        /// <summary>
        /// Renders extent for triggers and pressureplates
        /// </summary>
        private void DrawTriggerExtent(Graphics g, Map.Object obj, Map.Object underCursor = null)
        {
            ThingDb.Thing tt = ThingDb.Things[obj.Name];
            if (!tt.HasClassFlag(ThingDb.Thing.ClassFlags.TRIGGER))
            {
                return;
            }

            TriggerXfer trigger       = obj.GetExtraData <TriggerXfer>();
            bool        isUnderCursor = false;
            bool        isDisabled    = !obj.HasFlag(ThingDb.Thing.FlagsFlags.ENABLED) && obj.Terminator == byte.MaxValue;

            if (underCursor != null)
            {
                isUnderCursor = underCursor.Equals(obj);
            }

            bool isSelected  = mapRenderer.SelectedObjects.Items.Contains(obj);
            bool isSelected2 = MapInterface.RecSelected.Contains(obj);

            if (isSelected && isSelected2 && MapInterface.KeyHelper.ShiftKey)
            {
                isSelected  = false;
                isSelected2 = false;
            }

            if (isSelected || isSelected2)
            {
                if (mapRenderer.proHand && isUnderCursor)
                {
                    MainWindow.Instance.mapView.mapPanel.Cursor = Cursors.Hand;
                }
            }

            int       x           = (int)obj.Location.X;
            int       y           = (int)obj.Location.Y;
            Rectangle triggerRect = new Rectangle(x - trigger.SizeX / 2, y - trigger.SizeY / 2, trigger.SizeX, trigger.SizeY);

            using (var m = new Matrix())
            {
                m.RotateAt(45, obj.Location);
                g.Transform = m;

                switch (tt.DrawType)
                {
                case "TriggerDraw":
                    if (!isDisabled)
                    {
                        g.DrawRectangle(triggerPen, triggerRect);
                    }
                    else
                    {
                        g.DrawRectangle(new Pen(Color.Gray, 2f), triggerRect);
                    }
                    if (isSelected || isSelected2)
                    {
                        if (!isDisabled)
                        {
                            g.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 255, 0)), triggerRect);
                            break;
                        }
                        g.FillRectangle(new SolidBrush(Color.FromArgb(150, 50, 50, 50)), triggerRect);
                        break;
                    }
                    else if (isUnderCursor)
                    {
                        if (!isDisabled)
                        {
                            g.FillRectangle(new SolidBrush(Color.FromArgb(60, 0, 255, 0)), triggerRect);
                        }
                        else
                        {
                            g.FillRectangle(new SolidBrush(Color.FromArgb(100, 50, 50, 50)), triggerRect);
                        }
                    }
                    break;

                case "PressurePlateDraw":
                    Rectangle shadeRect = new Rectangle(triggerRect.X + 1, triggerRect.Y + 1, triggerRect.Width, triggerRect.Height);
                    Pen       pen       = new Pen(trigger.BackColor, 1F);
                    g.DrawRectangle(pen, shadeRect);
                    pen = new Pen(trigger.EdgeColor, 1F);
                    g.DrawRectangle(pen, triggerRect);
                    if (isSelected || isSelected2)
                    {
                        g.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 255, 0)), triggerRect);
                    }
                    else if (isUnderCursor)
                    {
                        g.FillRectangle(new SolidBrush(Color.FromArgb(60, 0, 255, 0)), triggerRect);
                    }
                    break;
                }
                g.ResetTransform();
            }
        }