// ------------------------------------------------------------------ public void CreateByStandOutRoad(int iMonster, int iRoad_Min, int iRoad_Max) { // 取得路編號. int iRoad = CameraCtrl.pthis.iNextRoad + Random.Range(iRoad_Min, iRoad_Max); if (iRoad > DataMap.pthis.DataRoad.Count - 1) { return; } // 取得路資料. MapCoor Road = DataMap.pthis.DataRoad[iRoad]; for (int iCount = 0; iCount < GameDefine.iPickupSearch; ++iCount) { MapCoor Result = new MapCoor(Road.X + Random.Range(-5, 6), Road.Y + Random.Range(0, 3)); bool bCheck = true; // 確認是否為道路. foreach (MapCoor Itor in DataMap.pthis.DataRoad) { bCheck &= (Result.X == Itor.X && Result.Y == Itor.Y) == false; } bCheck &= (MapCreater.pthis.GetMapObj(Result.ToVector2()) != null); if (bCheck) { if (iMonster == 0) { PickupCreater.pthis.CreateMeet(Result); } else { GameObject pObjMon = CreateOneEnemy(iMonster, -1, Vector2.zero); pObjMon.transform.position = MapCreater.pthis.GetMapObj(Result.ToVector2()).transform.position; } return; } } }
// ------------------------------------------------------------------ // 產生肉肉. public void CreateMeet(MapCoor pMapCoor) { Pickup pData = new Pickup(); pData.Pos = pMapCoor; pData.iType = (int)ENUM_Pickup.Meet; pData.iCount = 1; pData.iLooks = 0; pData.bPickup = false; DataPickup.pthis.Data.Add(pData); GameObject pObjPickup = UITool.pthis.CreatePickup(PlayerCreater.pthis.gameObject, (ENUM_Pickup)pData.iType, 0, 0); pObjPickup.transform.position = MapCreater.pthis.GetMapObj(pMapCoor.ToVector2()).transform.position; Data.Add(pObjPickup); DataPickup.pthis.Save(); }
// 更新地圖 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 }