//mapWriteSceneを生成するだけ public MapEditControl(Panel mwp, HScrollBar hScroll, VScrollBar vScroll, Size mapSize, int mapChipSize) { MapDataControl = new MapDataControl(mapSize, mapChipSize); mws = new MapWriteScene(mwp, mapChipSize); mws.UpdateLocalPosEvent += () => MapDataControl.MapShowArea.UpdateShowMapImage(mws); MapWriteScroll = new MapWriteScroll(hScroll, vScroll, mws, mapSize, mapChipSize); MapDataControl. setChangeListEvent( () => MapWriteScroll.SetScrollMaximum(mapSize, mapChipSize)); }
public MapWriteScroll(HScrollBar hScroll, VScrollBar vScroll, MapWriteScene mws, Size mapSize, int mapChipSize) : base(hScroll, vScroll) { this.mws = mws; SetScrollDelta(mapChipSize); SetScrollMaximum(mapSize, mapChipSize); //スクロールバーの値が更新されたら、mwsの位置を更新する処理を呼ぶ ValueChenged += UpdateValue; //スクロールバーがスクロールされたら、 //フォーカスを当てるようにしてmouseホイールしやすくする hScroll.Scroll += (o, e) => hScroll.Focus(); vScroll.Scroll += (o, e) => vScroll.Focus(); }
//画面に表示するマップチップをAddChildする private void AddShowMapImage(MapWriteScene mws, int mapChipSize) { var panel = mws.control; //新たにlUpIndexを計算する Point newLUpIndex = mws.LocationToMap(new Point(0, 0), mapChipSize); //新たにrDownIndexを計算する Point newRDownIndex = new Point( panel.Size.Width / mapChipSize + newLUpIndex.X + 1, panel.Size.Height / mapChipSize + newLUpIndex.Y + 1 ); //画面に表示されるMapImageだけAddChild for (int x = newLUpIndex.X; x < newRDownIndex.X && x < mapData.MapSizeX; x++) { for (int y = newLUpIndex.Y; y < newRDownIndex.Y && y < mapData.MapSizeY; y++) { mws.AddChild(mapData.List[x, y]); } } }
//表示するMapImageをAddChildして、表示されなくなったMapImageをRemoveChildする public void UpdateShowMapImage(MapWriteScene mws) { ClearShowMapImage(); AddShowMapImage(mws, mapData.List[0, 0].mapChips[0].MapChipSize); }