Beispiel #1
0
    public HashSet <int> GetVisiableBlock(Camera mapCamera, HashSet <int> fillSet = null)
    {
        HashSet <int> ret = fillSet != null ? fillSet : new HashSet <int> ();
        //地图的可见区域是一个四边形,因为当前摄像机是不能旋转的,所以只取左上和右下点
        IntVector2 leftBottom      = ScreenPosToMapCoord(mapCamera, new Vector2(0f, 0f));
        IntVector2 leftTop         = ScreenPosToMapCoord(mapCamera, new Vector2(0f, Screen.height));
        IntVector2 rightTop        = ScreenPosToMapCoord(mapCamera, new Vector2(Screen.width, Screen.height));
        IntVector2 leftBottomBlock = MapDataManager.TileCoordToBlockCoord(leftBottom);
        IntVector2 rightTopBlock   = MapDataManager.TileCoordToBlockCoord(rightTop);
        IntVector2 leftTopBlock    = MapDataManager.TileCoordToBlockCoord(leftTop);

        for (int i = leftTopBlock.x; i <= rightTopBlock.x; ++i)
        {
            for (int j = leftBottomBlock.y; j <= leftTopBlock.y; ++j)
            {
                ret.Add(MapDataManager.BlockCoordToBlockId(i, j));
            }
        }
        return(ret);
    }