用户:
KaNSF查看:0 回复:12 评论:0 创建时间:2022-05-28T17:13:21
//生成灌木丛
async function make_shrubbery(position, num, lv, tv, pb) {
var i = 0;
var list = [
new Box3Vector3(0, 0, 1),
new Box3Vector3(0, 0, -1),
new Box3Vector3(0, 1, 0),
new Box3Vector3(0, -1, 0),
new Box3Vector3(1, 0, 0),
new Box3Vector3(-1, 0, 0)
];
var set_list = [];
while (i < num) {
var bool = true;
for (var j of set_list) {
if ((
(j.x == position.x) &&
(j.y == position.y) &&
(j.z == position.z)) ||
pb.includes(voxels.getVoxel(position.x, position.y, position.z)
)) {
bool = false;
}
}
if (bool) {
voxels.setVoxel(position.x, position.y, position.z, tv);
i += 1;
set_list.push(position);
var a = pb;
a.push(voxels.id(tv))
if (Math.random() > 0.8) {
circle(position, Math.ceil(Math.random() * 1.03), lv, a);
}
position = position.add(list[Math.floor(Math.random() * 6)]);
} else {
if (i >= 2) {
var a = set_list.length - 2;
position = set_list[a];
position = position.add(list[Math.floor(Math.random() * 6)]);
} else {
position = position.add(list[Math.floor(Math.random() * 6)]);
}
}
await sleep(1);
}
}
function circle(pos, r, block, pb) {
for (let i = pos.x - r; i <= pos.x + r; i++) {
for (let k = pos.y - r; k <= pos.y + r; k++) {
for (let j = pos.z - r; j <= pos.z + r; j++) {
if (!pb.includes(voxels.getVoxel(i, k, j))) {
if (new Box3Vector3(i, k, j).distance(pos) <= r) {
voxels.setVoxel(i, k, j, block);
}
}
}
}
}
}
参数说明:
position:灌木根的位置
num:灌木长度
lv:灌木叶子方块
tv:灌木杆方块
pb:列表里面的是灌木不会穿透的方块id(不要就弄空值)
==========================================下面是拿来炫耀的================================================
稍加点缀,就变成了:
c