コード例 #1
0
        //设置地图块对象单元
        public static void configElement(Form_Main form_mainT, TileObjectElement elementT, String title)
        {
            form_main = form_mainT;
            if (elementT == null)
            {
                Console.WriteLine("error in configElement");
                return;
            }
            element = elementT;
            SmallDialog_ConfigMapObj dialog = new SmallDialog_ConfigMapObj(title);

            element.keyValueManager.MNodeUI = dialog;
            dialog.showParamsList();
            dialog.ShowDialog();
        }
コード例 #2
0
 private void SmallDialog_MapEventObjConfig_FormClosing(object sender, FormClosingEventArgs e)
 {
     element.keyValueManager.MNodeUI = null;
     form_main = null;
     element   = null;
 }
コード例 #3
0
 //按钮事件响应
 private void button_OK_Click(object sender, EventArgs e)
 {
     form_main = null;
     element   = null;
     this.Close();
 }
コード例 #4
0
 //矩形填充(参数为索引坐标)
 public bool fillRect(int bufW, int bufH, float zoomLevel, int x1, int y1, int x2, int y2, short level, Object element)
 {
     if (currentMap == null)
     {
         return false;
     }
     this.inRemTileEdit = true;
     this.fillPointsCmd = new FillRandomPointsCommand(currentMap);
     int xMin = Math.Min(x1, x2);
     int yMin = Math.Min(y1, y2);
     int xMax = Math.Max(x1, x2);
     int yMax = Math.Max(y1, y2);
     xMin = MathUtil.limitNumber(xMin, 0, currentMap.getMapW() - 1);
     xMax = MathUtil.limitNumber(xMax, 0, currentMap.getMapW() - 1);
     yMin = MathUtil.limitNumber(yMin, 0, currentMap.getMapH() - 1);
     yMax = MathUtil.limitNumber(yMax, 0, currentMap.getMapH() - 1);
     bool changed = false;
     for (int i = xMin; i <= xMax; i++)
     {
         for (int j = yMin; j <= yMax; j++)
         {
             Object elementT = element;
             if (elementT is Antetype)
             {
                 TileObjectElement obj = new TileObjectElement(currentMap.getTile(i, j));
                 obj.antetype = (Antetype)elementT;
                 elementT = obj;
             }
             bool changedOnce = false;
             if (!TSB_autoTile.Checked)
             {
                 changedOnce = fillPoint(currentMap, bufW, bufH, zoomLevel, i, j, level, elementT, true, currentStageID);
             }
             else
             {
                 changedOnce = fillPointWithAutoTile(currentMap, bufW, bufH, zoomLevel, i, j, level, true, currentStageID, element == null);
             }
             if (changedOnce)
             {
                 changed = true;
             }
         }
     }
     this.m_HistoryManager.AddUndoCommand(fillPointsCmd,this);
     this.inRemTileEdit = false;
     return changed;
 }
コード例 #5
0
        //线填充地图
        public bool fillLine(int bufW, int bufH, float zoomLevel, int x1, int y1, int x2, int y2, short level, Object element)
        {
            if (currentMap == null)
            {
                return false;
            }
            if (x1 == x2 && y1 == y2)
            {
                return false;
            }
            bool changed = false;
            bool currentChanged = false;
            int x = x1;
            int y = y1;
            int zoomW = (int)(zoomTileW);
            if (zoomW < 1)
            {
                zoomW = 1;
            }
            int zoomH = (int)(zoomTileH);
            if (zoomH < 1)
            {
                zoomH = 1;
            }
            canAutoTile();
            //Console.WriteLine("fillLine_Phy:" + x1 + "," + y1 +"|"+ x2 + "," + y2);
            if (Math.Abs(x1 - x2) > Math.Abs(y1 - y2))//偏横向
            {
                int dir = (x2 - x1) / Math.Abs(x1 - x2);
                int step = (int)(zoomW);
                int distance = (int)Math.Sqrt((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2));
                if (distance < step)
                {
                    step = distance;
                }
                step *= dir;
                while (x1 < x2 ? x < x2 : x >= x2)
                {
                    x += step;
                    y = y1 + (x - x1) * (y2 - y1) / (x2 - x1);
                    Object elementT = element;
                    if (elementT is Antetype)
                    {
                        TileObjectElement obj = new TileObjectElement(currentMap.getTile(x / zoomW, y / zoomH));
                        obj.antetype = (Antetype)elementT;
                        elementT = obj;
                    }
                    if (TSB_autoTile.Checked)
                    {
                        currentChanged = fillPointWithAutoTile(currentMap, bufW, bufH, zoomLevel, x / zoomW, y / zoomH, level, true, currentStageID, editMode != EDITMOD_PENCIL);
                    }
                    else
                    {
                        currentChanged = fillPoint(currentMap, bufW, bufH, zoomLevel, x / zoomW, y / zoomH, level, elementT, true, currentStageID);
                    }
                    if (!changed)
                    {
                        changed = currentChanged;
                    }
                }
            }
            else
            {
                int dir = (y2 - y1) / Math.Abs(y1 - y2);
                int step = (int)(zoomH);
                int distance = (int)Math.Sqrt((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2));
                if (distance < step)
                {
                    step = distance;
                }
                step *= dir;
                while (y1 < y2 ? y < y2 : y >= y2)
                {
                    y += step;
                    x = x1 + (y - y1) * (x2 - x1) / (y2 - y1);
                    Object elementT = element;
                    if (elementT is Antetype)
                    {
                        TileObjectElement obj = new TileObjectElement(currentMap.getTile(x / zoomW, y / zoomH));
                        obj.antetype = (Antetype)elementT;
                        elementT = obj;
                    }
                    if (TSB_autoTile.Checked)
                    {
                        currentChanged = fillPointWithAutoTile(currentMap, bufW, bufH, zoomLevel, x / zoomW, y / zoomH, level, true, currentStageID, editMode != EDITMOD_PENCIL);
                    }
                    else
                    {
                        currentChanged = fillPoint(currentMap, bufW, bufH, zoomLevel, x / zoomW, y / zoomH, level, elementT, true, currentStageID);
                    }

                    if (!changed)
                    {
                        changed = currentChanged;
                    }
                }
            }
            return changed;
        }
コード例 #6
0
 //鼠标移动事件
 private void pictureBox_Canvas_MouseMove(object sender, MouseEventArgs e)
 {
     if ((editMode == EDITMOD_RECT_SELECT || editMode == EDITMOD_STRAW) && e.Button.Equals(MouseButtons.Left))
     {
         this.paintPenRect = false;
     }
     else
     {
         this.paintPenRect = true;
     }
     mouseMoveXInWindow = MathUtil.limitNumber(e.X, 0, mapWindowW);
     mouseMoveYInWindow = MathUtil.limitNumber(e.Y, 0, mapWindowH);
     //计算参数
     int mouseXImMapOld = mouseXInMap;
     int mouseYImMapOld = mouseYInMap;
     mouseXInMap = mouseMoveXInWindow + cameraX_inMap;
     mouseYInMap = mouseMoveYInWindow + cameraY_inMap;
     if (this.currentMap == null)
     {
         return;
     }
     //鼠标拖动抬起时------------------------------------------(剪贴板)
     if (e.Button.Equals(MouseButtons.None))
     {
         int xPEN_T = mouseMoveXInWindow - ((mouseMoveXInWindow + cameraX_inMap) % zoomTileW);
         int yPEN_T = mouseMoveYInWindow - ((mouseMoveYInWindow + cameraY_inMap) % zoomTileH);
         if (xPEN_T != xPEN || yPEN != yPEN_T)
         {
             this.showFunction("当前方格坐标:" + "(" + mouseXInMap / zoomTileW + "," + mouseYInMap / zoomTileH + ")");
             MapTileElement tile = currentMap.getTile(mouseXInMap / zoomTileW, mouseYInMap / zoomTileH);
             if (tile != null)
             {
                 if (Consts.currentLevel == Consts.LEVEL_TILE_OBJ)
                 {
                     currentActiveObj = tile.tile_object_bg;
                 }
                 else if (Consts.currentLevel == Consts.LEVEL_OBJ_MASK)
                 {
                     currentActiveObj = tile.tile_object_mask;
                 }
                 else if (Consts.currentLevel == Consts.LEVEL_OBJ_TRIGEER)
                 {
                     currentActiveObj = tile.tile_objectList[currentStageID];
                 }
                 else
                 {
                     currentActiveObj = null;
                 }
             }
             this.updateMap();
         }
         return;
     }
     //鼠标按下后拖动------------------------------------------(绘图、框选和擦除)
     if (!e.Button.Equals(MouseButtons.Left))
     {
         return;
     }
     if (currentMap == null)
     {
         MessageBox.Show("请先在“地图列表”中创建地图");
         return;
     }
     //Console.WriteLine("move:"+e.X+","+e.Y);
     Object currentFocusElement = getCurrentFocusElement();
     //执行操作
     switch (this.editMode)
     {
         case EDITMOD_PENCIL://铅笔模式
             if (currentFocusElement != null)
             {
                 fillLine(mapBufferW, mapBufferH, zoomLevel, mouseXImMapOld, mouseYImMapOld, mouseXInMap, mouseYInMap, Consts.currentLevel, currentFocusElement);
                 updateMap();
             }
             break;
         case EDITMOD_RECT_SELECT://框选模式
         case EDITMOD_STRAW://吸管模式
             if (countRectSelect())
             {
                 updateMap();
             }
             break;
         case EDITMOD_ERASER://橡皮模式
             fillLine(mapBufferW, mapBufferH, zoomLevel, mouseXImMapOld, mouseYImMapOld, mouseXInMap, mouseYInMap, Consts.currentLevel, null);
             updateMap();
             break;
     }
 }
コード例 #7
0
        //鼠标按下事件
        private void pictureBox_Canvas_MouseDown(object sender, MouseEventArgs e)
        {
            mouseDownXInWindow = MathUtil.limitNumber(e.X, 0, mapWindowW - 1);
            mouseDownYInWindow = MathUtil.limitNumber(e.Y, 0, mapWindowH - 1);
            mouseMoveXInWindow = mouseDownXInWindow;
            mouseMoveYInWindow = mouseDownYInWindow;

            if (!e.Button.Equals(MouseButtons.Left))
            {
                if (e.Button.Equals(MouseButtons.Right))
                {
                    inPasting = false;
                    if (currentActiveObj != null && currentActiveObj.antetype!=null)
                    {
                        SmallDialog_ConfigMapObj.configElement(this, currentActiveObj, "对象参数设置");
                        currentActiveObj = null;
                        this.kss_refreshUI(currentMap, currentStageID);
                    }
                    this.updateMap();
                }
                return;
            }
            if (currentMap == null)
            {
                MessageBox.Show("当前没有选中的地图,请先在“地图列表”中创建或选择");
                return;
            }
            //风格限定
            if (Consts.currentLevel == Consts.LEVEL_TILE_BG || Consts.currentLevel == Consts.LEVEL_TILE_SUR)
            {
                if (!currentMap.tileGfxContainer.Equals(currentGfxContainer))
                {
                    MessageBox.Show("当前的地图风格不是“" + currentGfxContainer.name + "”");
                    return;
                }
            }
            //粘贴剪贴板中的内容
            if (this.inPasting)
            {
                int destX = (xPEN + cameraX_inMap) / zoomTileW;
                int destY = (yPEN + cameraY_inMap) / zoomTileH;
                this.pasteRectFinished(destX, destY);
                this.updateMap();
                return;
            }
            //鼠标按下------------------------------------------(绘图、框选和擦除)
            //计算参数
            //Console.WriteLine("down:"+e.X + "," + e.Y);
            mouseXInMap = e.X + cameraX_inMap;
            mouseYInMap = e.Y + cameraY_inMap;
            Object currentFocusElement = getCurrentFocusElement();
            //执行操作
            switch (this.editMode)
            {
                case EDITMOD_PENCIL://铅笔模式
                    if (currentFocusElement != null)
                    {
                        if (currentFocusElement is Antetype)
                        {
                            TileObjectElement obj = new TileObjectElement(currentMap.getTile(mouseXInMap / zoomTileW, mouseYInMap / zoomTileH));
                            obj.antetype = (Antetype)currentFocusElement;
                            currentFocusElement = obj;
                        }
                        inRemTileEdit = true;
                        fillPointsCmd = new FillRandomPointsCommand(currentMap);
                        canAutoTile();
                        if (TSB_autoTile.Checked)
                        {
                            fillPointWithAutoTile(currentMap, mapBufferW, mapBufferH, zoomLevel, mouseXInMap / zoomTileW, mouseYInMap / zoomTileH, Consts.currentLevel, true, currentStageID,false);
                        }
                        else
                        {
                            fillPoint(currentMap, mapBufferW, mapBufferH, zoomLevel, mouseXInMap / zoomTileW, mouseYInMap / zoomTileH, Consts.currentLevel, currentFocusElement, true, currentStageID);
                        }
                    }
                    break;
                case EDITMOD_RECT_SELECT://框选模式
                case EDITMOD_STRAW://吸管模式
                    countRectSelect();
                    break;
                case EDITMOD_ERASER://橡皮模式
                    inRemTileEdit = true;
                    fillPointsCmd = new FillRandomPointsCommand(currentMap);
                    canAutoTile();
                    if (TSB_autoTile.Checked)
                    {
                        fillPointWithAutoTile(currentMap, mapBufferW, mapBufferH, zoomLevel, mouseXInMap / zoomTileW, mouseYInMap / zoomTileH, Consts.currentLevel, true, currentStageID, true);
                    }
                    else
                    {
                        fillPoint(currentMap, mapBufferW, mapBufferH, zoomLevel, mouseXInMap / zoomTileW, mouseYInMap / zoomTileH, Consts.currentLevel, null, true, currentStageID);
                    }
                    break;
            }
            this.updateMap();
        }