예제 #1
0
    /// <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);
    }
예제 #2
0
    /// <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);
    }
예제 #3
0
    /// <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);
        }
    }
예제 #4
0
    /// <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);
    }