Ejemplo n.º 1
0
        //合并
        public void combine(AntetypesManager src_Manager, ArrayList anteTypesID)
        {
            //开始合并
            for (int i = 0; i < anteTypesID.Count; i++)
            {
                int      id         = Convert.ToInt32(anteTypesID[i]);
                Antetype srcElement = src_Manager.getAntetypeBySumID(id);
                Antetype newElement = null;
                //检查是否已经含有同名和同文件夹的角色原型
                for (int j = 0; j < this.GetSonsCount(); j++)
                {
                    Antetype localAT = (Antetype)getAntetypeBySumID(j);
                    if (localAT.equalsNameAndFolder(srcElement))
                    {
                        newElement = localAT;
                    }
                }
                //没有找到的话,则将源角色原型加入当前列表,优先加入到相同文件夹,如果文件夹不存在则创建
                if (newElement == null)
                {
                    AntetypeFolder folderDest = this.getFolderByName(srcElement.getFolderName());
                    if (folderDest == null)
                    {
                        folderDest      = new AntetypeFolder(this);
                        folderDest.name = srcElement.getFolderName();
                        this.Add(folderDest);
                    }
                    newElement = srcElement.clone(folderDest);
                    folderDest.Add(newElement);
                }
                //转移源角色原型引用
                for (int k = 0; k < src_Manager.mapsManager.getElementCount(); k++)
                {
                    MapElement map = src_Manager.mapsManager.getElement(k);
                    for (int x = 0; x < map.getMapW(); x++)
                    {
                        for (int y = 0; y < map.getMapH(); y++)
                        {
                            MapTileElement mapTile = map.getTile(x, y);
                            for (int z = 0; z < mapTile.tile_objectList.Count; z++)
                            {
                                if (mapTile.tile_objectList[z] != null && mapTile.tile_objectList[z].antetype != null && mapTile.tile_objectList[z].antetype.Equals(srcElement))
                                {
                                    mapTile.tile_objectList[z].antetype = newElement;
                                }
                            }

                            if (mapTile.tile_object_mask != null && mapTile.tile_object_mask.antetype != null && mapTile.tile_object_mask.antetype.Equals(srcElement))
                            {
                                mapTile.tile_object_mask.antetype = newElement;
                            }
                            if (mapTile.tile_object_bg != null && mapTile.tile_object_bg.antetype != null && mapTile.tile_object_bg.antetype.Equals(srcElement))
                            {
                                mapTile.tile_object_bg.antetype = newElement;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public void combine(TilePhysicsManager src_Manager, ArrayList mapsID)
 {
     for (int i = 0; i < src_Manager.getElementCount(); i++)
     {
         TilePhysicsElement srcTile = src_Manager.getElement(i);
         //检查是否被源关卡所用到
         bool usingBySrc = false;
         for (int j = 0; j < mapsID.Count; j++)
         {
             MapElement map = src_Manager.mapsManager.getElement((int)mapsID[j]);
             if (map.getTileUsedTime(srcTile) > 0)
             {
                 usingBySrc = true;
                 break;
             }
         }
         if (!usingBySrc)
         {
             continue;
         }
         //进入合并
         TilePhysicsElement newTile = null;
         for (int j = 0; j < getElementCount(); j++)
         {
             TilePhysicsElement localTile = getElement(j);
             if (localTile.equlasTo(srcTile))
             {
                 newTile = localTile;
                 break;
             }
         }
         if (newTile == null)
         {
             newTile = srcTile.clone(this);
         }
         if (!PhyTilesList.Contains(newTile))
         {
             this.addElement(newTile);
         }
         //转移引用
         for (int k = 0; k < src_Manager.mapsManager.getElementCount(); k++)
         {
             MapElement map = src_Manager.mapsManager.getElement(k);
             for (int x = 0; x < map.getMapW(); x++)
             {
                 for (int y = 0; y < map.getMapH(); y++)
                 {
                     MapTileElement mapTile = map.getTile(x, y);
                     if (mapTile.tile_physic != null && mapTile.tile_physic.Equals(srcTile))
                     {
                         mapTile.tile_physic = newTile;
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
        private void AddTile(MapTileElement Tile)
        {
            _tiles.Add(Tile);
            MapVisual visual = Tile.GetVisual(ZoomLevel);

            visual.Transform = _globalTransform;
            AddVisual(visual);
            _tilesToVisuals.Add(Tile, visual);
            Tile.ChangeVisualRequested += TileChangeRequested;
        }
Ejemplo n.º 4
0
 private void RemoveTile(MapTileElement Tile)
 {
     _tiles.Remove(Tile);
     if (_tilesToVisuals.ContainsKey(Tile))
     {
         var visual = _tilesToVisuals[Tile];
         visual.Transform = null;
         DeleteVisual(visual);
         _tilesToVisuals.Remove(Tile);
     }
     Tile.ChangeVisualRequested -= TileChangeRequested;
     Tile.Dispose();
 }
Ejemplo n.º 5
0
 public void clearSpilth(bool clearNotUsed)
 {
     //清除未使用的单元
     if (clearNotUsed)
     {
         for (int i = 0; i < this.Count(); i++)
         {
             AntetypeFolder folder = this[i];
             for (int j = 0; j < folder.Count(); j++)
             {
                 if (folder[i].getUsedTime() <= 0)
                 {
                     folder.RemoveAt(j);
                     j--;
                 }
             }
         }
     }
     //清除重复的单元
     for (int i = 0; i < GetSonsCount(); i++)
     {
         Antetype srcElement = (Antetype)getAntetypeBySumID(i);
         for (int j = i + 1; j < GetSonsCount(); j++)
         {
             Antetype compElement = (Antetype)getAntetypeBySumID(j);
             if (compElement.equalsAnteType(srcElement))//重复的单元
             {
                 //转移引用
                 for (int k = 0; k < mapsManager.getElementCount(); k++)
                 {
                     MapElement map = mapsManager.getElement(k);
                     for (int x = 0; x < map.getMapW(); x++)
                     {
                         for (int y = 0; y < map.getMapH(); y++)
                         {
                             MapTileElement mapTile = map.getTile(x, y);
                             for (int z = 0; z < mapTile.tile_objectList.Count; z++)
                             {
                                 if (mapTile.tile_objectList[z] != null && mapTile.tile_objectList[z].antetype != null && mapTile.tile_objectList[z].antetype.Equals(compElement))
                                 {
                                     mapTile.tile_objectList[z].antetype = srcElement;
                                 }
                             }
                             if (mapTile.tile_object_mask != null && mapTile.tile_object_mask.antetype != null && mapTile.tile_object_mask.antetype.Equals(compElement))
                             {
                                 mapTile.tile_object_mask.antetype = srcElement;
                             }
                             if (mapTile.tile_object_bg != null && mapTile.tile_object_bg.antetype != null && mapTile.tile_object_bg.antetype.Equals(compElement))
                             {
                                 mapTile.tile_object_bg.antetype = srcElement;
                             }
                         }
                     }
                 }
                 //删除重复的单元
                 compElement.getFolder().Remove(compElement);
                 j--;
             }
         }
     }
 }
Ejemplo n.º 6
0
        //合并
        public String combine(TileGfxManager src_Manager, ArrayList mapsID)
        {
            String errorString = null;

            for (int srcConIndex = 0; srcConIndex < src_Manager.Count(); srcConIndex++)
            {
                TileGfxContainer srcContainer = src_Manager[srcConIndex];
                //检查是否被源关卡所用到
                bool usingBySrc = false;
                for (int j = 0; j < mapsID.Count; j++)
                {
                    MapElement map = src_Manager.mapsManager[(int)mapsID[j]];
                    if (map.tileGfxContainer.Equals(srcContainer))
                    {
                        usingBySrc = true;
                        break;
                    }
                }
                if (!usingBySrc)
                {
                    continue;
                }
                TileGfxContainer destContainer = null;
                //检查重复的图形容器
                for (int localConIndex = 0; localConIndex < Count(); localConIndex++)
                {
                    TileGfxContainer localContainer = this[localConIndex];
                    if (localContainer.name.Equals(srcContainer.name))
                    {
                        destContainer = localContainer;
                        break;
                    }
                }
                if (destContainer == null)
                {
                    destContainer = new TileGfxContainer(this, srcContainer.name);
                    this.Add(destContainer);
                }
                //转移地图中的图形容器的引用
                for (int k = 0; k < src_Manager.mapsManager.Count(); k++)
                {
                    MapElement map = src_Manager.mapsManager[k];
                    if (map.tileGfxContainer.Equals(srcContainer))
                    {
                        map.tileGfxContainer = destContainer;
                    }
                }
                //向目标容器添加图形元素
                for (int elementIndex = 0; elementIndex < srcContainer.Count(); elementIndex++)
                {
                    TileGfxElement srcElement = (TileGfxElement)srcContainer[elementIndex];
                    TileGfxElement newElement = null;
                    //检查重复的图形元素
                    if (!destContainer.Equals(srcContainer))
                    {
                        for (int j = 0; j < destContainer.Count(); j++)
                        {
                            TileGfxElement localClip = (TileGfxElement)destContainer[j];
                            if (localClip.equalsClip(srcElement))
                            {
                                newElement = localClip;
                                break;
                            }
                        }
                    }
                    if (newElement == null)
                    {
                        newElement = srcElement.Clone(destContainer);
                    }
                    if (!destContainer.Contains(newElement))
                    {
                        if (!destContainer.Add(newElement))
                        {
                            errorString = "合并图形容器“" + srcContainer.name + "”时,图形元素数量超出65536。";
                            break;
                        }
                    }
                    //转移地图中的块的引用
                    for (int k = 0; k < src_Manager.mapsManager.Count(); k++)
                    {
                        MapElement map = src_Manager.mapsManager[k];
                        for (int x = 0; x < map.getMapW(); x++)
                        {
                            for (int y = 0; y < map.getMapH(); y++)
                            {
                                MapTileElement mapTile = map.getTile(x, y);
                                if (mapTile.tile_gfx_ground != null && mapTile.tile_gfx_ground.tileGfxElement != null && mapTile.tile_gfx_ground.tileGfxElement.Equals(srcElement))
                                {
                                    mapTile.tile_gfx_ground.tileGfxElement = newElement;
                                }
                                if (mapTile.tile_gfx_surface != null && mapTile.tile_gfx_surface.tileGfxElement != null && mapTile.tile_gfx_surface.tileGfxElement.Equals(srcElement))
                                {
                                    mapTile.tile_gfx_surface.tileGfxElement = newElement;
                                }
                            }
                        }
                    }
                }
                if (errorString != null)
                {
                    break;
                }
            }
            return(errorString);
        }