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(); } }