public void DrawOn3DControl(MapDrawType drawType) { List <MapObject> listOrderOnTop = new List <MapObject>(); List <MapObject> listOrderOnBottom = new List <MapObject>(); List <MapObject> listOrderByY = new List <MapObject>(); lock (_objectLock) { foreach (MapTracker mapTracker in Controls) { List <MapObject> mapObjects = mapTracker.GetMapObjectsToDisplay(MapType.Map3D); switch (mapTracker.GetOrderType()) { case MapTrackerOrderType.OrderOnTop: listOrderOnTop.AddRange(mapObjects); break; case MapTrackerOrderType.OrderOnBottom: listOrderOnBottom.AddRange(mapObjects); break; case MapTrackerOrderType.OrderByY: listOrderByY.AddRange(mapObjects); break; default: throw new ArgumentOutOfRangeException(); } } } listOrderOnTop.Reverse(); listOrderOnBottom.Reverse(); listOrderByY.Reverse(); listOrderByY = listOrderByY.OrderBy(obj => obj.GetY()).ToList(); List <MapObject> listCombined = listOrderOnBottom.Concat(listOrderByY).Concat(listOrderOnTop).ToList(); listCombined.Insert(0, _mapObjBackground); if (!Config.MapGui.checkBoxMapOptionsDisableHitboxTris.Checked) { listCombined.Insert(0, _mapObjHitboxTris); } for (int i = 0; i < Config.Map3DCamera.ZRegionCount; i++) { Config.Map3DCamera.ZRegionCurrentIndex = i; List <MapObject> listDrawType = listCombined.FindAll(obj => obj.GetDrawType() == drawType); foreach (MapObject obj in listDrawType) { obj.DrawOn3DControl(); } } }
public override bool KeyDown(VirtualKey vk) { switch (vk) { case VirtualKey.H: DrawType = MapDrawType.HEIGHTMAP; Debug.HeightMapOpacity = 255; break; case VirtualKey.R: DrawType = MapDrawType.REGIONS; Debug.HeightMapOpacity = 75; break; case VirtualKey.P: DrawPaths = !DrawPaths; break; case VirtualKey.S: DrawType = MapDrawType.SUBREGIONS; break; case VirtualKey.C: DrawType = MapDrawType.CAVES; break; case VirtualKey.Down: _calloutPositionY = Math.Min(_calloutPositionY + _movefactor, World.Height - 1); CenterOnPoint(_calloutPositionX, _calloutPositionY); break; case VirtualKey.Up: _calloutPositionY = Math.Max(_calloutPositionY - _movefactor, 0); CenterOnPoint(_calloutPositionX, _calloutPositionY); break; case VirtualKey.Left: _calloutPositionX = Math.Max(_calloutPositionX - _movefactor, 0); CenterOnPoint(_calloutPositionX, _calloutPositionY); break; case VirtualKey.Right: _calloutPositionX = Math.Min(_calloutPositionX + _movefactor, World.Width - 1); CenterOnPoint(_calloutPositionX, _calloutPositionY); break; case VirtualKey.Add: switch (Scale) { case -1: Scale = 1; break; case 1: Scale = 2; break; case 2: Scale = 5; break; default: Scale += 5; break; } CenterOnPoint(_calloutPositionX, _calloutPositionY); break; case VirtualKey.Subtract: switch (Scale) { case -1: break; case 1: Scale = -1; break; case 2: Scale = 1; break; case 5: Scale = 2; break; default: Scale -= 5; break; } if (Scale == -1) { RecalculateLayout(); } else { CenterOnPoint(_calloutPositionX, _calloutPositionY); } break; } return true; }