用户:
陌路离殇已退岛查看:5 回复:1 评论:5 创建时间:2020-12-22T21:21:37
world.onPlayerJoin(({entity})=>{
entity.player.scale=1.8;
entity.player.canFly=true;
entity.enableDamage=true;
entity.maxHp=1000;
entity.hp=entity.maxHp;
entity.mass=10;
entity.player.movementBounds=new Box3Bounds3(new Box3Vector3(-50, -50, -50), new Box3Vector3(258, 258, 258));
})
var pt=world.querySelector(".pt");
var st=world.querySelector(".喵");
var pd=world.querySelector(".lchr");
function spawn(){
var a=world.createEntity();
var posx=Math.random()*186;
var posz=Math.random()*186;
a.position.set(posx,11.5,posz);
a.mesh=pt.mesh;
a.meshScale=world.querySelector(".firer").meshScale;
a.addTag("firer");
a.type="双发加农炮";
a.enableDamage=true;
a.collides=false;
a.gravity=false;a.fixed=true;
var b=world.createEntity();
b.position.set(posx,9.6,posz);
b.mesh=st.mesh;
b.meshScale=world.querySelector(".喵").meshScale;
b.addTag("喵")
b.gravity=false;b.fixed=true;
a.喵=b;
}
for(let i=0;i<15;i++){
if(Math.random()<0.5)
spawn();
else
spawnMach();
}
const MeshScale = [0.0625,0.0625,0.0625]
const Quat = new Box3Quaternion(0,-1,0,1)// box引擎默认的旋转朝向
let allPlayers = []
let allZombies = []//所有僵尸
world.onTick(async ({tick}) => {//每秒16个tick
if(tick%32===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
allPlayers = world.querySelectorAll('player')
allZombies = world.querySelectorAll('.firer')
}
allZombies.forEach(async (e) => {
let zomPos = e.position
var ee=e.lchr;
if(tick%10===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
let target = allPlayers.sort((a,b)=>{//寻找距离最近的玩家
return a.position.distance(zomPos)-b.position.distance(zomPos)
})[0]
if(target){//地图如果还有玩家
e.target = target
}
}
if(e.target && !e.target.destroyed&&e.target.position.distance(e.position)<40&&e.target.hp>0){//如果要追杀的玩家还没有离开地图
var direction = e.target.position.sub(zomPos);
var orientation = Quat.rotateY(Math.atan2(direction.z, direction.x))
e.meshOrientation.copy(orientation)
if(e.type="双发加农炮"&&tick%32==0){
for(let i=0;i<=1;i++){
var c=world.createEntity();
c.position.set(e.position.x,11.7,e.position.z);
c.mesh=pd.mesh;
c.gravity=true;c.fixed=false;
c.addTag("lchr");
c.velocity.x=direction.x/5;
c.velocity.z=direction.z/5;
c.mass=0.01;
setTimeout(()=>{c.destroy()},2000)
await sleep(200);
}
}else if(e.type="机关喵"&&tick%16==0){
var c=world.createEntity();
c.position.set(e.position.x,11.7,e.position.z);
c.mesh="mesh/venus.vb";
c.gravity=true;c.fixed=false;
c.addTag("lchr");
c.velocity.x=direction.x/3;
c.velocity.z=direction.z/3;
c.mass=0.01;
setTimeout(()=>{c.destroy()},2000)
}
}
})
})
world.onEntityContact(({entity,other})=>{
if(entity.hasTag("lchr")&&other.isPlayer){
other.hurt(10);
entity.destroy();
}else if(entity.isPlayer&&other.hasTag("喵")){
entity.hurt(1000);
world.say(entity.player.name+"触碰了炮台被电喵了")
}
})
world.onClick(({entity,clicker})=>{
if(entity.hasTag("firer")){
entity.hurt(5);
if(entity.hp<=0){
entity.喵.meshColor.set(0,0,0,1)
world.say(clicker.player.name+"干掉了一个"+entity.type);
entity.destroy();
if(Math.random()<0.5)
spawn();
else
spawnMach();
}
}
})
world.onDie(async({entity})=>{
if(entity.isPlayer){
entity.player.directMessage("你将在三秒后复活")
await sleep(3000);
entity.hp=1000;
world.say(entity.player.name+"复活了")
}
})