/// <summary> /// 计算地图 /// </summary> private void CalcMap() { Int2 Start = Canvans.GetMapSize(); List <List <int> > grid = new List <List <int> >(); int RoomWidth = Start.Unit; for (int i = 0; i < Start.Layer + 1; i++) { List <int> row = new List <int>(); for (int j = 0; j < RoomWidth; j++) { row.Add(0); } grid.Add(row); } // List <ShipPutInfo> l = GetShipBuildInfo(ShipBuildType.BuildRoom); for (int i = 0; i < l.Count; i++) { if (l[i].m_DeckRoom == true) { continue; } List <Int2> map = l[i].GetPuRoomMapData(); foreach (Int2 Pos in map) { grid[Pos.Layer][Pos.Unit] = 1; } } Canvans.SetMap(grid); }
/// <summary> /// 获取地图区域范围。 /// </summary> private void CalcMapArea() { bool bint = false; if (Canvans == null) { return; } Canvans.ResetMapArea(); List <ShipPutInfo> list = GetShipBuildInfo(ShipBuildType.BuildRoom); if (list == null || list.Count == 0) { return; } Int2 Min = Int2.zero; Int2 Max = Int2.zero; for (int i = 0; i < list.Count; i++) { if (list[i].m_DeckRoom == true) { continue; } int MaxX = list[i].cxMapGrid + list[i].GetPutRoomShape().width *MapGrid.m_UnitRoomGridNum; int MaxY = list[i].cyMapGrid + list[i].GetPutRoomShape().height; int MinX = list[i].cxMapGrid; int MinY = list[i].cyMapGrid; //求max if (bint == false) { bint = true; Max.Unit = MaxX; Max.Layer = MaxY; //求min Min.Unit = MinX; Min.Layer = MinY; } else { Max.Unit = (MaxX > Max.Unit) ? MaxX : Max.Unit; Max.Layer = (MaxY > Max.Layer) ? MaxY : Max.Layer; //求min Min.Unit = (MinX < Min.Unit) ? MinX : Min.Unit; Min.Layer = (MinY < Min.Layer) ? MinY : Min.Layer; } } int startX = Min.Unit; int startY = Min.Layer; int width = Max.Unit - startX; int height = Max.Layer - startY; Canvans.SetMapArea(startX, startY, width / MapGrid.m_UnitRoomGridNum, height); }
/// <summary> /// 修正船只建筑物坐标。生成船只用。 /// </summary> public void ReCalcShipBuildInfoXY(XYmode mode) { Mode = mode; int value = 1; if (mode == XYmode.Edit2Save) { value = -1; } else { value = 1; } Int2 Start = Canvans.GetStart(); List <ShipPutInfo> l = GetShipBuildInfo(ShipBuildType.BuildRoom); foreach (ShipPutInfo Info in l) { Info.LinkTransgatePointRoom(l); } foreach (ShipPutInfo Info in l) { Info.cxMapGrid += Start.Unit * value; Info.cyMapGrid += Start.Layer * value; } l = GetShipBuildInfo(ShipBuildType.Soldier); foreach (ShipPutInfo Info in l) { Info.cxMapGrid += Start.Unit * value; Info.cyMapGrid += Start.Layer * value; } l = GetShipBuildInfo(ShipBuildType.BuildStair); foreach (ShipPutInfo Info in l) { Info.cxMapGrid += Start.Unit * value; Info.cyMapGrid += Start.Layer * value; } l = GetShipBuildInfo(ShipBuildType.BuildRoom); foreach (ShipPutInfo Info in l) { Info.UpdateTransgateRoomParam(Start.Unit * value, Start.Layer * value); } }
/// <summary> /// 计算地图形状 /// </summary> private void CalcMapShapeWithout(ShipPutInfo info) { Int2 Start = Canvans.GetMapSize(); List <List <int> > grid = new List <List <int> >(); int RoomWidth = Start.Unit; for (int i = 0; i < Start.Layer; i++) { List <int> row = new List <int>(); for (int j = 0; j < RoomWidth; j++) { row.Add(0); } grid.Add(row); } // List <ShipPutInfo> l = GetShipBuildInfo(ShipBuildType.BuildRoom); for (int i = 0; i < l.Count; i++) { if (l[i] == info) { continue; } if (l[i].m_DeckRoom == true) { continue; } List <Int2> shape = l[i].GetPutRoomGridPos(); foreach (Int2 Pos in shape) { grid[Pos.Layer][Pos.Unit] = 1; } } Canvans.SetShape(grid); }