//配列サイズ変更処理 public void Change(int newNumberX, int newNumberY) { var newMapOneMassList = new MapOneMass[newNumberX, newNumberY]; //前のMapImageから、はみ出した部分があれば削除する for (int x = newNumberX; x < mapData.MapSizeX; x++) { for (int y = 0; y < mapData.MapSizeY; y++) { mapData.List[x, y].Dispose(); } } for (int x = 0; x < newNumberX; x++) { for (int y = newNumberY; y < mapData.MapSizeY; y++) { mapData.List[x, y].Dispose(); } } //新しいMapImageに前のMapImageをサイズの範囲内でコピーする for (int x = 0; x < mapData.MapSizeX && x < newNumberX; x++) { for (int y = 0; y < mapData.MapSizeY && y < newNumberY; y++) { newMapOneMassList[x, y] = mapData.List[x, y]; } } //新しいMapImageの新しく生成された領域を初期化する for (int x = mapData.MapSizeX; x < newNumberX; x++) { for (int y = 0; y < newNumberY; y++) { newMapOneMassList[x, y] = new MapOneMass(mapData.MapChipSize); newMapOneMassList[x, y].LocalPos = new DXEX.Vect(x * mapData.MapChipSize, y * mapData.MapChipSize); } } for (int x = 0; x < mapData.MapSizeX; x++) { for (int y = mapData.MapSizeY; y < newNumberY; y++) { newMapOneMassList[x, y] = new MapOneMass(mapData.MapChipSize); newMapOneMassList[x, y].LocalPos = new DXEX.Vect(x * mapData.MapChipSize, y * mapData.MapChipSize); } } //新しいMadDataリストの方のポインタを保存 mapData.List = newMapOneMassList; }
//MapOneMassが持つmapChip配列を交換する public void SwapMapChips(MapOneMass mapOneMass) { for (int i = 0; i < MapEditForm.maxLayer; i++) { mapChips[i].RemoveFromParent(); mapOneMass.mapChips[i].RemoveFromParent(); AddChild(mapOneMass.mapChips[i]); mapOneMass.AddChild(mapChips[i]); } var tempMapChips = mapChips; mapChips = mapOneMass.mapChips; mapOneMass.mapChips = tempMapChips; }
//マップを左回転 public void RotateLeft() { var newMapOneMassList = new MapOneMass[mapData.MapSizeY, mapData.MapSizeX]; for (int x = 0; x < newMapOneMassList.GetLength(0); x++) { for (int y = 0; y < newMapOneMassList.GetLength(1); y++) { newMapOneMassList[x, y] = mapData.List[mapData.MapSizeX - y - 1, x]; newMapOneMassList[x, y].LocalPos = new DXEX.Vect(x * mapData.MapChipSize, y * mapData.MapChipSize); newMapOneMassList[x, y].RotateLeft(); } } //新しいMadDataリストの方のポインタを保存 mapData.List = newMapOneMassList; }
// mapData.listの情報を文字列として書き出す public StringBuilder GetMapDataText() { StringBuilder mapDataText = new StringBuilder(); mapDataText.Append(mapData.MapChipSize + "," + mapData.MapSizeX + "," + mapData.MapSizeY); for (int y = 0; y < mapData.MapSizeY; y++) { mapDataText.Append(Environment.NewLine); for (int x = 0; x < mapData.MapSizeX; x++) { MapOneMass mom = mapData.List[x, y]; MapChip[] ChipId = mom.mapChips; for (int i = 0; i < ChipId.Length; i++) { int Id = ChipId[i].Id?.value ?? -1; int Angle = (int)(ChipId[i].Angle / 90.0); int turnFlag = ChipId[i].turnFlag; mapDataText.Append(Id + "," + Angle + "," + turnFlag + ","); } } } return(mapDataText); }