// 地圖物件覆蓋檢查 private bool CheckCover(MapObjt Objt) { if (DataMap.pthis.DataObjt.ContainsKey(Objt.Pos.ToVector2())) { return(false); } for (int iX = -2; iX <= 2; ++iX) { for (int iY = -1; iY <= 1; ++iY) { Vector2 Pos = (new MapCoor(Objt.Pos.X + iX, Objt.Pos.Y + iY)).ToVector2(); if (DataMap.pthis.DataObjt.ContainsKey(Pos) && Objt.Cover(DataMap.pthis.DataObjt[Pos])) { return(false); } } //for } //for return(true); }
// 更新地圖 public void Refresh(int iRoad) { MapCoor RoadPos = DataMap.pthis.DataRoad.Count > iRoad ? DataMap.pthis.DataRoad[iRoad] : new MapCoor(); // 建立新物件 for (int iX = -GameDefine.iMapBorder; iX <= GameDefine.iMapBorder; ++iX) { for (int iY = -GameDefine.iMapBorder; iY <= GameDefine.iMapBorder; ++iY) { MapCoor Pos = new MapCoor(RoadPos.X + iX, RoadPos.Y + iY); if (Pos.X < 0 || Pos.Y < 0) { continue; } Vector2 PosVec = Pos.ToVector2(); if (Data.ContainsKey(PosVec)) { continue; } if (DataMap.pthis.DataObjt.ContainsKey(PosVec) == false) { continue; } MapObjt pObjt = DataMap.pthis.DataObjt[PosVec]; float fPosX = PosVec.x + (pObjt.Width * GameDefine.iBlockSize) / 2; float fPosY = PosVec.y + (pObjt.Height * GameDefine.iBlockSize) / 2; Data.Add(PosVec, UITool.pthis.CreateMap(gameObject, pObjt.Type, DataPlayer.pthis.iStyle, fPosX, fPosY)); } //for } //for }
// 建立地圖物件 private void CreateObjt() { // 建立道路物件 for (int iPos = 0; iPos < DataMap.pthis.DataRoad.Count; ++iPos) { MapCoor Pos = DataMap.pthis.DataRoad[iPos]; // 判斷是否該建立起點物件 if (iPos == 0) { MapObjt Temp = new MapObjt(); Temp.Pos = new MapCoor(Pos.X, Pos.Y - 1); Temp.Type = (int)ENUM_Map.MapStart; Temp.Width = GameDefine.ObjtStart.X; Temp.Height = GameDefine.ObjtStart.Y; DataMap.pthis.DataObjt.Add(Temp.Pos.ToVector2(), Temp); } //if // 判斷是否該建立終點物件 if (iPos == DataMap.pthis.DataRoad.Count - 1) { MapObjt Temp = new MapObjt(); Temp.Pos = new MapCoor(Pos.X - 1, Pos.Y + 1); Temp.Type = (int)ENUM_Map.MapEnd; Temp.Width = GameDefine.ObjtEnd.X; Temp.Height = GameDefine.ObjtEnd.Y; DataMap.pthis.DataObjt.Add(Temp.Pos.ToVector2(), Temp); } //if // 建立道路物件 { MapObjt Temp = new MapObjt(); Temp.Pos = new MapCoor(Pos.X, Pos.Y); Temp.Type = (int)ENUM_Map.MapRoad; Temp.Width = GameDefine.ObjtBase.X; Temp.Height = GameDefine.ObjtBase.Y; DataMap.pthis.DataObjt.Add(Temp.Pos.ToVector2(), Temp); } } //for // 建立一般物件 foreach (MapCoor Itor in DataMap.pthis.DataRoad) { for (int iCount = 0; iCount < GameDefine.iObjDensity; ++iCount) { MapCoor Pos = new MapCoor(Itor.X + Random.Range(-GameDefine.iMapBorder, GameDefine.iMapBorder + 1), Itor.Y + Random.Range(-GameDefine.iMapBorder, GameDefine.iMapBorder + 1)); if (Itor.X == Pos.X && Itor.Y == Pos.Y) { continue; } int iIndex = Random.Range(0, GameDefine.ObjtScale.Count); MapObjt Temp = new MapObjt(); Temp.Pos = Pos; Temp.Type = iIndex + (int)ENUM_Map.MapObjt_0; Temp.Width = GameDefine.ObjtScale[iIndex].X; Temp.Height = GameDefine.ObjtScale[iIndex].Y; if (CheckCover(Temp)) { DataMap.pthis.DataObjt.Add(Temp.Pos.ToVector2(), Temp); } } //for } //for // 填滿地圖 foreach (MapCoor Itor in DataMap.pthis.DataRoad) { for (int iX = -GameDefine.iMapBorder; iX <= GameDefine.iMapBorder; ++iX) { for (int iY = -GameDefine.iMapBorder; iY <= GameDefine.iMapBorder; ++iY) { MapCoor Pos = new MapCoor(Itor.X + iX, Itor.Y + iY); if (Pos.X < 0 || Pos.Y < 0) { continue; } if (DataMap.pthis.DataObjt.ContainsKey(Pos.ToVector2())) { continue; } MapObjt Temp = new MapObjt(); Temp.Pos = Pos; Temp.Type = (int)ENUM_Map.MapBase; Temp.Width = GameDefine.ObjtBase.X; Temp.Height = GameDefine.ObjtBase.Y; if (CheckCover(Temp)) { DataMap.pthis.DataObjt.Add(Temp.Pos.ToVector2(), Temp); } } //for } //for } //for }
public bool Cover(MapObjt Data) { return(Cover(Data.Pos, Data.Width, Data.Height)); }