用户:
迷失冷光查看:2 回复:12 评论:2 创建时间:2021-12-25T10:40:48
const Quat = new Box3Quaternion(0,0,0,1);
const host = [];
class Joint{
constructor(lookable,model,position = null,children = [],property = {angle: 0,up: 0,radius: 1}){
host.push(Object.assign(this,{
lookable,
model,
position,
children,
property,
angle: 0,
up: 0,
}));
};
addChildren(...joints){
this.children.push(...joints);
};
removeChild(joint){
this.children.splice(this.children.indexOf(joint));
};
changeChild(joint,target){
this.children.splice(this.children.indexOf(joint));
target.children.push(joint);
};
destroy(){
if(host.includes(this)){
host.splice(host.indexOf(this),1);
return true;
}else return false;
};
}
global.Joint = Joint;
world.onTick(()=>{
for(const e of host){
single(e);
}
})
function single(joint,parent = null){
if(parent){
//角度传承上一级
joint.angle = joint.property.angle + parent.angle;
joint.up = joint.property.up + parent.up;
//设置位置
joint.position = point_in_ball(parent.position,joint.angle,joint.up,joint.property.radius);
if(joint.lookable){
joint.model.position.copy(joint.position);
}
}
if(joint.lookable){
//设置旋转
joint.meshOrientation = Quat.rotateX(joint.up).rotateY(joint.angle);
}
//下一级旋转
for(const e of joint.children){
single(e,joint);
}
}
function point_in_ball(origin,angle,up,radius){
return new Box3Vector3(
origin.x + Math.cos(angle) * Math.cos(up) * radius,
origin.y + Math.sin(up) * radius,
origin.z + Math.sin(angle) * Math.cos(up) * radius
)
}
本次更新修复了一些bug以及旋转参数无法隔代遗传的bug