/** 读取字节流(简版) */ protected override void toReadBytesSimple(BytesReadStream stream) { base.toReadBytesSimple(stream); id = stream.readInt(); if (CommonSetting.clientMapNeedGrid) { grid = new GridMapInfoConfig(); grid.readBytesSimple(stream); } }
public override void init() { base.init(); _wallRoot = GameObject.Find("wall"); _wall1Rid = LoadControl.getResourceIDByName(GGlobal.source_wall1); _wall2Rid = LoadControl.getResourceIDByName(GGlobal.source_wall2); //场景显示构造 _gridConfig = _scene.getMapInfoConfig().grid; makeWall(); }
private void makeWall() { _gridConfig = _scene.getMapInfoConfig().grid; int width = _gridConfig.width; int height = _gridConfig.width; byte[] mainGrids = _gridConfig.mainGrids; IntSet usedSet = new IntSet(); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int gridIndex = _gridConfig.getGridIndex(i, j); //未使用 if (!usedSet.contains(gridIndex)) { int v = mainGrids[gridIndex]; if (v == GMapBlockType.Wall) { int rx = i; int nx = rx; while (true) { nx++; if (nx < width && _gridConfig.getGrid(nx, j) == GMapBlockType.Wall) { //继续 rx = nx; } else { break; } } //横排有 if (rx != i) { for (int k = i; k <= rx; k++) { usedSet.add(_gridConfig.getGridIndex(k, j)); } makeOne(i, j, rx - i, true); continue; } int ry = j; int ny = ry; while (true) { ny++; if (ny < height && _gridConfig.getGrid(i, ny) == GMapBlockType.Wall) { //继续 ry = ny; } else { break; } } //竖排有 if (ry != j) { for (int k = j; k <= ry; k++) { usedSet.add(_gridConfig.getGridIndex(i, k)); } makeOne(i, j, ry - j, false); continue; } usedSet.add(gridIndex); makeOne(i, j, 1, MathUtils.randomBoolean()); } } } } }