/// <summary> /// 填充地表建筑数据(0为清除) /// </summary> /// <param name="entity"></param> /// <param name="value"></param> private void FillBuildingMapData(TileEntity entity, int entity_id) { if (!EntityTypeUtil.IsCostMapGrid(entity.entityType)) { return; } int x = entity.GetTilePos().x; int y = entity.GetTilePos().y; // 填充建筑全部区域 int w = entity.width; int h = entity.height; for (int i = x; i < x + w; ++i) { for (int j = y; j < y + h; ++j) { m_buildingMap[i, j] = entity_id; } } // 填充建筑不可通行区域(blockingRange最大值为边数减1,所以不会导致建筑边上的entity_id重合。) int blocking = entity.blockingRange; if (blocking > 0) { int offset_x = (int)((w + 1 - blocking) / 2); int offset_y = (int)((h + 1 - blocking) / 2); Assert.Should(offset_x >= 1 && offset_y >= 1, "Entity的blockingRange不正确..."); for (int i = x + offset_x; i < x + offset_x + blocking; ++i) { for (int j = y + offset_y; j < y + offset_y + blocking; ++j) { m_routeMap[i, j].EntityID = entity_id; } } } // 更新墙之间的连接器 并 刷新墙的方向(显示用) if (entity.entityType == EntityType.Wall) { RefreshWallLinkerAndDirection(entity, entity_id); } }