Example #1
0
        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;
        }