Ejemplo n.º 1
0
 public void addPoint(FillPointHistory point)
 {
     if (point == null)
     {
         return;
     }
     pointsList.Add(point);
 }
Ejemplo n.º 2
0
 //指定的地图方格填充一个指定自动地形编号的图形单元,这个编号是相对于当前的自动地形起始方格的。
 private void setAutoTile(MapElement currentMap, int bufW, int bufH, float zoomLevel, short level, bool drawInBuffer, int currentStageID, int idx, int idy, int idTile)
 {
     Object oldElement = currentMap.getTile(idx, idy, level, currentStageID);
     Object element = getGfxTileByAutoID(idTile);
     currentMap.fillPoint(gMapBuffer, bufW, bufH, zoomLevel, idx, idy, level, element, drawInBuffer, currentStageID);
     Object newElement = currentMap.getTile(idx, idy, level, currentStageID);
     FillPointHistory pointCmd = new FillPointHistory(currentMap, oldElement, newElement, idx, idy, level, currentStageID);
     fillPointsCmd.addPoint(pointCmd);
 }
Ejemplo n.º 3
0
 //点填充地图
 public bool fillPoint(MapElement currentMap, int bufW, int bufH, float zoomLevel, int indexX, int indexY, short level, Object element, bool drawInBuffer, int currentStageID)
 {
     if (currentMap == null)
     {
         return false;
     }
     //对于对象层的填充
     Graphics g = null;
     if (level >= Consts.LEVEL_TILE_OBJ)
     {
         g = gMapBuffer_Obj;
     }
     else
     {
         g = gMapBuffer;
     }
     //历史记录
     bool changed = false;
     if (inRemTileEdit)
     {
         if (fillPointsCmd != null)
         {
             Object oldElement = currentMap.getTile(indexX, indexY, level, currentStageID);
             changed = currentMap.fillPoint(g, bufW, bufH, zoomLevel, indexX, indexY, level, element, drawInBuffer, currentStageID);
             Object newElement = currentMap.getTile(indexX, indexY, level, currentStageID);
             FillPointHistory pointCmd = new FillPointHistory(currentMap,oldElement, newElement, indexX, indexY, level,currentStageID);
             fillPointsCmd.addPoint(pointCmd);
             //Console.WriteLine(indexX + "," + indexY);
         }
     }
     else
     {
         changed = currentMap.fillPoint(g, bufW, bufH, zoomLevel, indexX, indexY, level, element, drawInBuffer, currentStageID);
     }
     return changed;
 }
Ejemplo n.º 4
0
 //使用自动地形填充地图
 public bool fillPointWithAutoTile(MapElement currentMap, int bufW, int bufH, float zoomLevel, int indexX, int indexY, short level, bool drawInBuffer, int currentStageID,bool blank)
 {
     //历史记录
     bool changed = false;
     if (fillPointsCmd != null)
     {
         updateVectorEnviroment(indexX, indexY, blank);
         //得到双倍方格左上角和状态表矢量影响区在地图中对应左上角
         int x = indexX;
         int y = indexY;
         int xCLT = x - x % 2;
         int yCLT = y - y % 2;
         x = xCLT - 2;
         y = yCLT - 2;
         for (int iy = 0; iy < 6; iy++)
         {
             for (int ix = 0; ix < 6; ix++)
             {
                 int idx = x + ix;
                 int idy = y + iy;
                 if (idx < 0 || idx >= currentMap.getMapW() || idy < 0 || idy >= currentMap.getMapH())
                 {
                     continue;
                 }
                 Object oldElement = currentMap.getTile(idx, idy, level, currentStageID);
                 int idTile = getModelID( idx, idy, 1 + ix, 1 + iy);
                 Object element = getGfxTileByAutoID(idTile);
                 bool changedOnce = currentMap.fillPoint(gMapBuffer, bufW, bufH, zoomLevel, idx, idy, level, element, drawInBuffer, currentStageID);
                 Object newElement = currentMap.getTile(idx, idy, level, currentStageID);
                 FillPointHistory pointCmd = new FillPointHistory(currentMap, oldElement, newElement, idx, idy, level, currentStageID);
                 fillPointsCmd.addPoint(pointCmd);
                 if (changedOnce)
                 {
                     changed = true;
                 }
             }
         }
         //再检查内凹角模块
         for (int iy = 0; iy < 6; iy++)
         {
             for (int ix = 0; ix < 6; ix++)
             {
                 int idx = x + ix;
                 int idy = y + iy;
                 if (idx < 0 || idx >= currentMap.getMapW() || idy < 0 || idy >= currentMap.getMapH())
                 {
                     continue;
                 }
                 Object oldElement = currentMap.getTile(idx, idy, level, currentStageID);
                 int idXEn = 1 + ix;
                 int idYEn = 1 + iy;
                 VectorModel model = getVectorInEviroment(idXEn, idYEn);
                 if (model == null)
                 {
                     continue;
                 }
                 if (!model.equalsValue(vZero))
                 {
                     continue;
                 }
                 bool fillCorner = TSB_fillCorner.Checked;
                 if (isEnviroment(idXEn, idYEn, -1, 0, 0, -1, -1, -1) && ix % 2 == 0 && iy % 2 == 0)
                 {
                     if (!fillCorner)
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 36);
                     }
                     else
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 47);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx-1, idy, 46);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy-1, 41);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx-1, idy-1, 40);
                     }
                 }
                 else if (isEnviroment(idXEn, idYEn, 1, 0, 0, -1, 1, -1) && ix % 2 == 1 && iy % 2 == 0)
                 {
                     if (!fillCorner)
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 37);
                     }
                     else
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 52);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx + 1, idy, 53);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy - 1, 50);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx + 1, idy - 1, 51);
                     }
                 }
                 else if (isEnviroment(idXEn, idYEn, -1, 0, 0, 1, -1, 1) && ix % 2 == 0 && iy % 2 == 1)
                 {
                     if (!fillCorner)
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 42);
                     }
                     else
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 39);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx -1, idy, 38);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx-1, idy + 1, 44);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy + 1, 45);
                     }
                 }
                 else if (isEnviroment(idXEn, idYEn, 1, 0, 0, 1, 1, 1) && ix % 2 == 1 && iy % 2 == 1)
                 {
                     if (!fillCorner)
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 43);
                     }
                     else
                     {
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy, 48);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx + 1, idy, 49);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx + 1, idy + 1, 55);
                         setAutoTile(currentMap, bufW, bufH, zoomLevel, level, drawInBuffer, currentStageID, idx, idy + 1, 54);
                     }
                 }
                 else
                 {
                     continue;
                 }
                 changed = true;
             }
         }
     }
     return changed;
 }