用户:
卑微OIer查看:5 回复:4 评论:5 创建时间:2022-07-24T09:40:36
world.addCollisionFilter('player', '.resourses');//取消碰撞
world.addCollisionFilter('.resourses', '.resourses');//取消碰撞
const resourceVox = [299, 289, 285, 287]//方块类型,资源点方块一定要放在里面
let resource = [
{
name: '铁资源点1', // 填入资源点的名称,不能有重复
pos: new Box3Vector3(0, 8, 0)/*资源点的位置*/, ct: [
{ create: '铁锭', delay: 1, maxCD: 1 }, // 产出的物资 maxCd表示有每8*maxCd tick后产出一次 delay最好和maxCd同值
{ create: '金锭', delay: 4, maxCD: 4 },],//和上面一样
hasThings: [], color: 0 // hasThings表示有多少东西 color表示资源点的颜色 颜色位于 resourseVox 里面 为白色,黄色,靛蓝,绿发光方块
},
]
let timer = 0
for (let i = 0; i < resource.length; i++) { //放置资源点,最好别动这几行
const e = resource[i];
voxels.setVoxelId(e.pos.x, e.pos.y, e.pos.z, resourceVox[e.color])
}
world.onTick(({ tick }) => {
world.querySelectorAll(".resourses").forEach((entity) => {//资源点的旋转,最好别动 但是agn可以,表示旋转的速度
entity.meshOrientation.x = Math.sin(entity.agn * 180 / Math.PI);
entity.meshOrientation.z = Math.cos(entity.agn * 180 / Math.PI);
entity.agn += 0.0003;
})
if (tick % 8 !== 0) return; //timer计时器
timer++;
//资源点生成
resource.forEach((res) => { // 生成代码,最好不要动
for (let i = 0; i < res.ct.length; i++) {
if (res.ct[i].delay <= 0) {
res.ct[i].delay = res.ct[i].maxCD;
res.hasThings.push(res.ct[i].create);
if (res.hasThings.length <= 20) {
const m = world.createEntity({
mesh: `mesh/${res.ct[i].create}.vb`,
position: new Box3Vector3(res.pos.x + Math.random() * 1.5, res.pos.y + 1.5, res.pos.z + Math.random() * 1.5),
meshScale: [0.05, 0.05, 0.05],
collides: true,
fixed: false,
gravity: true,
id: res.name
})
m.velocity.y += 0.3;
m.addTag('resourses');
Object.assign(m, { agn: 0 });
}
} else res.ct[i].delay -= 1;
}
})
})
world.onPlayerJoin(({entity})=>{ // 获取资源
entity.onVoxelContact(({ x, y, z }) => {
if (resourceVox.includes(voxels.getVoxelId(x, y, z))) //是资源点
resource.forEach((res) => {
if (entity.position.distance(res.pos) < 3) { //防止隔空获得资源
console.log(entity.player.name, res.hasThings)
//玩家获取资源的代码可以放在这里
res.hasThings = [];
world.querySelectorAll(`#${res.name}`).forEach((e) => {
e.destroy();//销毁实体
})
//或者这里
}
})
});
})