Exemplo n.º 1
0
    // 地圖物件覆蓋檢查
    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);
    }
Exemplo n.º 2
0
    // 更新地圖
    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
    }
Exemplo n.º 3
0
    // 建立地圖物件
    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
    }
Exemplo n.º 4
0
 public bool Cover(MapObjt Data)
 {
     return(Cover(Data.Pos, Data.Width, Data.Height));
 }