//合并 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; } } } } } }
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; } } } } } }
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; }
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(); }
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--; } } } }
//合并 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); }