//プロジェクトを読み込みしたときの処理 private void LoadProject(MapInfoFromText mift, string path) { DXEX.TextureCache.AllTextureDelete(); mcrm = mcrm.LoadProject(mift, path + @"\MapChip.png"); sif.LoadProject(mcrm); mapEdit = mapEdit.LoadProject(mift, mapWritePanel, mcrm, sif, hScrollBar1, vScrollBar1); }
public MapChipResourceManager LoadProject(MapInfoFromText mift, string filePath) { var newMcrm = new MapChipResourceManager(mift.MapChipSize); newMcrm.LoadBitmapSheet(mift.LastId, filePath); return(newMcrm); }
public MapPalletScene(Panel panel, MapChipResourceManager mcrm, SelectMapChipScene sms) : base(panel) { mouseSwap = new MouseSwap(); this.mcrm = mcrm; panel.MouseDown += MouseClickAction; panel.MouseMove += MouseDrag; this.sms = sms; mapPalletData = new MapPalletData(); localPos.SetVect(0, 0); AddChild(new MapGrid(this, 40), 1); }
//指定座標のマップチップを入れ替える public void SwapMapChip(int x1, int y1, int x2, int y2, MapChipResourceManager mcrm) { mcrm.SwapImageFile(mapChips[x1, y1].Id.value, mapChips[x2, y2].Id.value); var temp = mapChips[x1, y1].LocalPos; mapChips[x1, y1].LocalPos = mapChips[x2, y2].LocalPos; mapChips[x2, y2].LocalPos = temp; var tempChips = mapChips[x1, y1]; mapChips[x1, y1] = mapChips[x2, y2]; mapChips[x2, y2] = tempChips; }
//プロジェクトからマップチップパレットをロードする public void LoadProject(MapChipResourceManager mcrm) { this.mcrm = mcrm; mapPalletData.ClearMapChip(); for (int id = 0; id <= mcrm.LastID(); id++) { MapChip mapChip = new MapChip(40); mapChip.SetTexture(mcrm.GetTexture(id)); mapChip.SetId(mcrm.GetId(id)); mapPalletData.AddMapChip(mapChip); AddChild(mapChip); } }
//マップpalletにからマップチップを削除する public void RemoveMapChip(int x, int y, MapChipResourceManager mcrm) { mcrm.PopImageFile(mapChips[x, y].Id.value); mapChips[x, y].Dispose(); int lastx = (index - 1) % 6; int lasty = (index - 1) / 6; if (x != lastx || y != lasty) { mapChips[lastx, lasty].LocalPos = mapChips[x, y].LocalPos; mapChips[x, y] = mapChips[lastx, lasty]; } mapChips[lastx, lasty] = null; index--; }
//マップ全体をBitmapに変換する public Bitmap GetBitmap(MapChipResourceManager mcrm) { Bitmap unitedImg = new Bitmap(mapData.MapChipSize * mapData.MapSizeX, mapData.MapChipSize * mapData.MapSizeY); Graphics g = Graphics.FromImage(unitedImg); for (int countY = 0; countY < mapData.MapSizeY; ++countY) { for (int countX = 0; countX < mapData.MapSizeX; ++countX) { Bitmap bitmap = mapData.List[countX, countY].GetBitmap(mcrm); g.DrawImage(bitmap, mapData.MapChipSize * countX, mapData.MapChipSize * countY); } } return(unitedImg); }
//Startで登録したマス座標にあるmapChipを任意のマス座標にあるmapChipと入れ替え public void Move(Point point, MapPalletData mapPalletData, MapChipResourceManager mcrm) { if (tempPoint2 == point) { return; } if (tempPoint == point) { mapPalletData.SwapMapChip(tempPoint2.X, tempPoint2.Y, tempPoint.X, tempPoint.Y, mcrm); tempPoint2 = point; return; } mapPalletData.SwapMapChip(point.X, point.Y, tempPoint2.X, tempPoint2.Y, mcrm); mapPalletData.SwapMapChip(tempPoint2.X, tempPoint2.Y, tempPoint.X, tempPoint.Y, mcrm); tempPoint2 = point; }
/* コンストラクタ */ // :イベントの設定(ドラッグ時とか) // :マップのパレットと,選択中マップチップのやつ public SelectImageForm(MapChipResourceManager mcrm) { InitializeComponent(); sms = new SelectMapChipScene(selectPicture); mps = new MapPalletScene(palletPanel, mcrm, sms); DXEX.DirectorForForm.AddSubScene(mps); DXEX.DirectorForForm.AddSubScene(sms); vScrollBar1.SmallChange = 40; vScrollBar1.LargeChange = 40; vScrollBar1.Scroll += (o, e) => vScrollBar1.Focus(); vScrollBar1.Maximum = 50 * 40 - palletPanel.Size.Height; vScrollBar1.ValueChanged += (o, e) => mps.LocalPosY = -vScrollBar1.Value; }
//初期化 public MapEditForm(int mapChipSize) { InitializeComponent(); //DXEX初期化 DXEX.DirectorForForm.init(this); DX.SetAlwaysRunFlag(DX.TRUE); //描画領域をセット //(見切れないように、画面いっぱいに設定する) DxLibDLL.DX.SetGraphMode( Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, 32 ); //DXライブラリの描画先の背景色を設定する DxLibDLL.DX.SetBackgroundColor(100, 240, 130); mcrm = new MapChipResourceManager(mapChipSize); sif = new SelectImageForm(mcrm); mapEdit = new MapEditControl(mapWritePanel, hScrollBar1, vScrollBar1, new Size(20, 20), mapChipSize); pm = new ProjectManager(); //メインウインドウのロードが終わったら、 //パレッドウインドウを表示する。 Load += (o, e) => sif.Show(); //メインウインドウに終了命令が出たら //パレッドウインドウを速やかに閉じる FormClosing += (o, e) => sif.Dispose(); //comboボックスのデフォルト値設定 layerComboBox.SelectedIndex = 0; drawModeComboBox.SelectedIndex = 0; //メインウインドウ表示 Show(); //DXライブラリループ開始 DXEX.DirectorForForm.StartLoop(this); }
//テキストデータからmapData.listをロードする public void LoadFromText(MapInfoFromText mift, MapChipResourceManager mcrm) { int count = 0; for (int y = 0; y < mapData.MapSizeY; y++) { for (int x = 0; x < mapData.MapSizeX; x++) { for (int layer = 0; layer < MapEditForm.maxLayer; layer++) { if (mift.Id[count] != -1) { mapData.List[x, y].mapChips[layer].SetTexture(mcrm.GetTexture(mift.Id[count])); mapData.List[x, y].mapChips[layer].SetId(mcrm.GetId(mift.Id[count])); mapData.List[x, y].mapChips[layer].Angle = mift.Angle[count]; mapData.List[x, y].mapChips[layer].turnFlag = mift.Turn[count]; } count++; } } } }
//Bitmapとして得る public Bitmap GetBitmap(MapChipResourceManager mcrm) { //返す用のBitmap Bitmap resultBitmap = new Bitmap(mapChipSize, mapChipSize); //重ねるBitmapを生成 Bitmap[] bitmap = new Bitmap[MapEditForm.maxLayer]; for (int i = 0; i < MapEditForm.maxLayer; i++) { if (mapChips[i].Id == null) { bitmap[i] = new Bitmap(mapChipSize, mapChipSize); } else { bitmap[i] = mcrm.GetBitmap(mapChips[i].Id.value); } } Graphics g = Graphics.FromImage(resultBitmap); //画像を扱うアルゴリズムを設定する g.PixelOffsetMode = PixelOffsetMode.Half; g.InterpolationMode = InterpolationMode.NearestNeighbor; //リサイズ&回転&反転して画像をresultBitmapに重ねる for (int i = 0; i < MapEditForm.maxLayer; i++) { bitmap[i].RotateFlip((RotateFlipType)((int)mapChips[i].Angle / 90)); if (mapChips[i].turnFlag == DX.TRUE) { bitmap[i].RotateFlip(RotateFlipType.RotateNoneFlipX); } g.DrawImage(bitmap[i], 0, 0); } return(resultBitmap); }
//自殺してからprivateの方のコンストラクタ呼んで再び復活するだけのクソコード public MapEditControl LoadProject(MapInfoFromText mift, Panel mwp, MapChipResourceManager mcrm, SelectImageForm sif, HScrollBar hScroll, VScrollBar vScroll) { this.Dispose(); return(new MapEditControl(mift, mwp, mcrm, hScroll, vScroll)); }
//miftの情報からmwsのmapData.listを構築する private MapEditControl(MapInfoFromText mift, Panel mwp, MapChipResourceManager mcrm, HScrollBar hScroll, VScrollBar vScroll) : this(mwp, hScroll, vScroll, mift.MapSize, mift.MapChipSize) { MapDataControl.LoadMapDataList.LoadFromText(mift, mcrm); }
public void LoadProject(MapChipResourceManager mcrm) { mps.LoadProject(mcrm); sms.resetMapChip(); }