用户:
SCI氢氧化钡查看:0 回复:2 评论:0 创建时间:2020-02-29T09:17:06
从'./math'导入{Box3Vector3,Box3Quaternion,Box3RGBAColor,Box3RGBColor,Box3Bounds3};/ ** * [[Box3World]]是引擎API的主要入口点。使用该对象,您可以控制*全局场景属性,例如天气,timeOfDay等,并在世界上所有[[Box3Entity]] *的集合上执行搜索。* / export class Box3World {/ ** *项目名称(只读)* / public projectName ='Project'; / ** *太阳在天空中运动的初始阶段。一天中的时间使用以下公式计算:*`timeOfDay =(sunPhase + sunFrequency * tick)%1` * @category weather * / public sunPhase = 0; / ** *太阳在天空中移动的频率。值越高=太阳运动越快。* @类别天气* / public sunFrequency = 0; / ** *月相。必须在0和1之间* @category weather * / public lunarPhase = 0; / ** *雾的吸收率和颜色(确定雾如何吸收光)* @类别天气* /公共雾消光=新的Box3RGBColor(0.001,0.0012,0.0014); / ** *雾的反射/散喵色(确定雾如何反射阳光)* @类别天气* /公共雾散射= new Box3RGBColor(0.001,0.0012,0.0014); / ** * @类别天气* /公共snowDensity = 0; / ** * @类别天气* / public snowSizeLo = 0; / ** * @类别天气* / public snowSizeHi = 1; / ** * @类别天气* / public snowFallSpeed = 1; / ** * @类别天气* / public snowSpinSpeed = 0; / ** * @类别天气* / public snowColor = new Box3RGBAColor(1、1、1、1); / ** * @类别天气* /公共雨量密度= 0; / ** * @类别天气* /公共rainPhi = 0; / ** * @类别天气* /公共rainTheta = 0; / ** * @类别天气* /公共雨速= 1; / ** * @类别天气* /公共rainSizeLo = 0; / ** * @类别天气* /公共rainSizeHi = 1; / ** * @类别天气* /公共雨干扰= 0; / ** * @类别天气* / public rainColor = new Box3RGBAColor(1、1、1、1); / ** *引力场的数量和方向* @类别物理学* /公共重力= -0.1;/ ** *空气摩擦量* @类别物理学* /公共空气摩擦力= 0.001; / ** * @ignore * /构造函数(/ ** * @返回当前游戏刻度* @category刻度* / public tick :()=>数字/ ** * @返回对体素的引用* @category体素* /公共体素:Box3Voxels,)=> Box3Entity,/ ** * @返回世界上所有[[Box3Entity]]的列表* @category实体* /公共实体:()=> Box3Entity [],/ ** * @返回列表世界上所有玩家实体的数量* @category player * /公共玩家:()=>(Box3Entity&{isPlayer:true,player:Box喵layer})[],/ ** *从`origin`发出一道射线在`direction`中* @param原点射线的起点* @param方向射线的方向* @param选项一个选项配置参数* @returns有关所得射线广播的信息* @category搜索* / public raycast:(origin :Box3Vector3,方向:Box3Vector3,选项?:局部)=> Box3RaycastResult,/ ** *搜索边界框内包含的所有实体* @param限制边界框以进行搜索* @returns边界内所有实体* / public searchBox:(bounds:Box3Bounds3)= > Box3Entity [],/ ** *一个称为每个刻度的事件处理程序* @category刻度* / public onTick:Box3EventChannel,/ ** *每当玩家加入游戏时调用* @category玩家* / public onPlayerJoin:Box3EventChannel,/ ** *每当玩家离开游戏时调用* @category玩家* / public onPlayerLeave:Box3EventChannel,/ ** *每当创建实体时调用* @category实体* / public onEntityCreate:Box3EventChannel,/ ** *每当实体被销毁时调用* @category chat * / public onEntityDestroy:Box3EventChannel,/ ** *向所有播放器广播一条全局消息* @param消息是我们要广播的某些文本* @category播放器* /公开说:(message:string)=> void,/ ** *每当播放器说某些东西* @category player * / public onChat:Box3EventChannel,/ ** *每当玩家按下按钮时调用* @category player * / public onPress:Box3EventChannel,/ ** *每当玩家释放按钮时调用* @category player * / public onRelease:Box3EventChannel,/ ** *每当两个实体碰撞时调用* @category实体* / public onEntityContact:Box3EventChannel,/ ** *每当两个实体停止碰撞时调用* @category实体* / public onEntitySeparate:Box3EventChannel,/ ** *每当实体触摸体素时调用* @category实体* / public onVoxelContact:Box3EventChannel,/ ** *每当实体停止接触体素时调用* @category实体* / public onVoxelSeparate:Box3EventChannel,/ ** *当实体进入流体时调用* @category实体* / public onFluidEnter:Box3EventChannel,/ ** *当实体离开流体时调用* @category实体* / public onFluidLeave:Box3EventChannel,){}} / ** * [[Box3Voxels]]为box3中的所有体素提供一个接口。您可以使用它来控制地形* /导出类Box3Voxels {/ ** * @ignore * /构造函数(/ ** *沿x / y / z尺寸的体素网格的大小* /公共形状:Box3Vector3,/ * * *所有受支持的体素类型的数组* @类别名称* / public VoxelTypes:string [],/ ** * @param名称是该体素的可读名称* @返回体素ID号* @category名称* / public id:{name:string)=>数字,/ ** * @param id体素的数字ID * @返回人类可读的体素名称* @category名称* / public Name:{id:number)=>字符串, / ** * @param id三维像素的数字ID * @返回三维像素的旋转代码* @类别名称* / public Rotation:(id:number)=>数字,number,z:number)=> number,){}} / ** *一组可用于指定实体的参数* /导出接口Box3EntityConfig {position:Box3Vector3; 速度:Box3Vector3; 质量:数量;摩擦数 归还:数量; collides:boolean; 固定:布尔; 重力:布尔 meshColor:Box3RGBAColor; mesh:字符串; meshScale:Box3Vector3; meshOrientation:Box3Quaternion; } / ** *实体是box3中的游戏对象。它们可用于编码播放器,对象等。* /导出类Box3Entity实现Box3EntityConfig {/ ** *如果为true,则表示实体被破坏。* @category destroy * / public destroy = false; / ** * @类别物理学* /公共位置=新Box3Vector3(0,0,0); / ** * @类别物理学* /公共速度= new Box3Vector3(0,0,0); / ** *实体的半径 s沿x / y / z的边界框* @category物理* /公共边界= new Box3Vector3(1,1,1); / ** *实体的质量* @类别物理学* /公共质量= 1;/ ** *控制对象的黏性(0 =滑滑,1 =黏滑)* @类别物理* /公共摩擦= 0; / ** *控制弹性(0 =软,1 =弹性)* @类别物理* /公共恢复= 0; / ** *如果为false,则对象不会碰撞* @category物理* / public collides = true; / ** *如果为假,则对象不会掉落* @类别物理学* /公共重力= true;/ ** *如果为true,则对象不会移动* @category物理* / public fixed = false; / ** *实体网格的哈希。如果设置为空字符串/'',则实体没有网格。*除非对象是播放器,否则如果设置了网格,则将使用网格来计算对象边界* @category mesh * / public mesh =''; / ** * @category mesh * / public meshScale = new Box3Vector3(1,1,1); / ** * @category mesh * / public meshOrientation = new Box3Quaternion(0,0,0,1); / ** * @类别网格* / public meshColor = new Box3RGBAColor(1、1、1、1); / ** *如果为true,则该实体为播放器* @category播放器* / public isPlayer = false; / ** *引用所有播放器的特定状态和方法* @category播放器* / public player?:Box喵layer; / ** * @ignore * /构造函数(/ ** *销毁实体* @category destroy * / public destroy :()=> void,/ ** *在销毁实体时调用* @category destroy * / public onDestroy :Box3EventChannel 那么该实体是一个播放器* @category player * / public isPlayer = false; / ** *引用所有播放器的特定状态和方法* @category播放器* / public player?:Box喵layer; / ** * @ignore * /构造函数(/ ** *销毁实体* @category destroy * / public destroy :()=> void,/ ** *在销毁实体时调用* @category destroy * / public onDestroy :Box3EventChannel 那么该实体是一个播放器* @category player * / public isPlayer = false; / ** *引用所有播放器的特定状态和方法* @category播放器* / public player?:Box喵layer; / ** * @ignore * /构造函数(/ ** *销毁实体* @category destroy * / public destroy :()=> void,/ ** *在销毁实体时调用* @category destroy * / public onDestroy :Box3EventChannel,/ ** *使实体交谈* @category chat * /公开说:(message:string)=> void,/ ** *当实体接触另一个实体时调用* @category物理* / public onEntityContact:Box3EventChannel,/ ** *当实体停止接触另一个实体时调用* @category physics * / public onEntitySeparate:Box3EventChannel,/ ** *当实体接触体素时调用* @类别物理* / public onVoxelContact:Box3EventChannel,/ ** *当实体停止接触体素时调用* @category物理* / public onVoxelSeparate:Box3EventChannel,/ ** *在实体进入流体时调用* @category物理* / public onFluidEnter:Box3EventChannel,/ ** *在实体离开流体时调用* @category物理* / public onFluidLeave:Box3EventChannel,){}} / ** *玩家对应于连接到游戏的用户* /导出类Box喵layer {/ ** *玩家的名称。不变。* /公共名称='玩家'; / ** *播放器的初始生成点* / public spawnPoint = new Box3Vector3(0,0,0); / ** *比例因子,应用于玩家* /公共比例= new Box3Vector3(1,1,1); / ** *颜色分级查询表,应用于玩家以着色游戏状态* / public colorLUT =''; / ** *相机行为模式。* +`“ FPS”`-第一人称摄像机* +`“ FOLLOW”`-第三人称跟随摄像机(默认)* +`“ FIXED”`-第三人称固定摄像机* @category摄像机* / public cameraMode:'FOLLOW' |'FPS'|'FIXED'='FOLLOW'; / ** *在FPS或FOLLOW模式下,玩家所在的实体 s摄像机遵循* @category摄像机* / public cameraEntity:Box3Entity | null = null; / ** *固定模式下摄像机的目标点* @category camera * / public cameraTarget = new Box3Vector3(0,0,0); / ** *固定模式下摄像机的上向量* @category camera * / public cameraUp = new Box3Vector3(0,1,0); / ** *摄像机在固定模式下的眼睛位置* @类别摄像机* / public cameraPosition = new Box3Vector3(0,0,0); / ** *如果为true,则允许玩家飞行* @类别运动* / public canFly = false; / ** *如果为true,则玩家是个幽灵,可以穿过墙壁* @category motion * /公共观众= false;/ ** *最大步行速度* @类别运动* /公众walkSpeed = 0.22; / ** *步行加速度* @类别运动* /公众walkAcceleration = 0.19; / ** *最大运行速度* @类别运动* / public runSpeed =。4; / ** *运行加速度* @类别运动* / public runAcceleration = 0.35; / ** *蹲步速度* @类别运动* / public crouchSpeed = 0.10; / ** *蹲步加速* @类别运动* / public crouchAcceleration = 0.09; / ** *最大游泳速度* @类别运动* /公共游泳速度= 0.4; / ** *游泳加速度* @类别运动* /公共游泳加速度= 0.1; / ** *最大飞行速度* @类别运动* / public flySpeed = 2; / ** *飞行加速度* @类别运动* / public flyAcceleration = 2; / ** *最大跌落速度* @类别运动* /公共fallSpeed =无穷大;/ ** *坠落加速度* @类别运动* /公共坠落加速度= 0.05; / ** *跳跃速度* @类别运动* / public jumpSpeedFactor = 0.85; / ** *跳跃加速率* @类别运动* / public jumpAccelerationFactor = 0.55; / ** *跳跃速度冲动* @类别运动* /公共jumpPower = 0.96; / ** *双跳速度脉冲* @类别运动* / public doubleJumpPower = 0.9; / ** * @类别状态* /公共游泳=假;/ ** * @类别状态* /公共场所=假;/ ** * @类别状态* /公共下落=假;/ ** * @类别状态* /公共跳跃=假;/ ** * @类别状态* / public doubleJumping = false; / ** * @类别状态* /公共飞行=假;/ ** * @类别状态* /公共蹲伏= false; / ** * @类别状态* /公共步行=假;/ ** * @类别状态* /公共运行= false; / ** * @类别输入* / public walkButton = false; / ** * @类别输入* / public crouchButton = false; / ** * @类别输入* / public jumpButton = false; / ** * @类别输入* / public action0Button = false; / ** * @类别输入* / public action1Button = false; / ** * @类别输入* / public overlayDirection = new Box3Vector3(1,0,0); / ** * @ignore * /构造函数(/ ** *直接发送私人消息给玩家* @category chat * / public directMessage:(message:string)=> void,/ ** *每当玩家发起聊天事件时调用* @类别聊天* /公共onChat:Box3EventChannel,/ ** *每当玩家按下按钮时调用* @类别输入* / public onPress:Box3EventChannel,/ ** *每当玩家释放按钮时调用* @category输入* / public onRelease:Box3EventChannel,){}} / ** *执行光线投射的结果。包含有关光线投射及其击中内容的信息。* /导出类Box3RaycastResult {/ ** * @ignore * /构造函数(/ ** *如果为true,则raycast命中了一个对象* / public hit:boolean,/ ** * raycast命中的实体* / public hitEntity:Box3Entity | null,/ ** *射线投射击中的体素ID(如果未击中体素,则为0)* / public hitVoxel:number,/ ** *射线投射的起点* /公共起点:Box3Vector3,/ ** *射线投射的方向* /公共方向:Box3Vector3,/ ** *沿射线传播的距离* /公共距离:数字,/ ** *射线相交的位置* /公共位置:Box3Vector3,/ ** *上的法线向量交点处的曲面* / public normal:Box3Vector3,/ ** *如果某个体素被击中,则该命中体素的网格坐标* / public voxelIndex:Box3Vector3){}} / ** *配置参数传递到raycast方法中* /导出接口Box3RaycastOptions {/ ** *射线传播的最大距离* / maxDistance:number; / ** *如果为true,则忽略流体体素* / ignoreFluid:boolean; / ** *如果为true,则不要针对体素测试交集* / ignoreVoxel:boolean; / ** *如果为true,则不要测试与实体的交集* / ignoreEntities:boolean; } / ** *您可以使用EventChannel订阅来自某个对象的事件。* *事件通道将事件处理程序作为输入,并返回可用于取消处理程序的令牌。* * **示例:** *```打字稿* const令牌= world.onTick(()=> console.log(“ tick!”))); * setTimeout(()=> {* console.log('取消报价处理程序'); * token.cancel(); * //不再记录报价事件*},1000); *```* * @param handler触发事件时将调用的处理程序回调* @typeparam EventType通道发出的事件的类型* @returns一个事件处理程序令牌,可用于取消事件处理程序* @category事件* /导出类型Box3EventChannel=(handler:(event:EventType)=>无效)=> Box3EventHandlerToken; / ** *每当注册处理程序时,由[[Box3EventChannel]]返回。可用于取消处理程序。* @category事件* /导出类Box3EventHandlerToken {/ ** * @ignore * /构造函数(/ ** *取消事件处理程序* / public cancel :()=> void,/ ** *恢复使用事件处理程序的监听* / public resume :()=> void,){}} / ** *一个由[[Box3World.onTick]]触发的事件。* @类别事件* /导出类Box3TickEvent {/ ** * @ignore * /构造函数(/ ** *触发事件的刻度* / public tick:number,/ ** *处理的最后一个刻度* / public prevTick:number,/ ** *如果由于脚本落后而不得不跳过任何滴答声* / public skip:boolean,/ ** *滴答之间的挂钟时间* / public elapsedTimeMS:number,} {}} / ** *创建或销毁某些实体时将触发的事件。*由[[Box3World.onPlayerJoin]],[[Box3World.onPlayerLeave]],[[Box3World.onEntityCreate],[[Box3World.onEntityDestroy]]和[[Box3Entity.onDestroy]]和[[Box3Entity.onDestroy]]触发* @类别事件* /导出类Box3EntityEvent {/ ** * @ignore * /构造函数(/ ** *事件发生的时间* / public tick:number,/ ** *创建/销毁的实体* / publicentity:Box3Entity,){}} / ** *两个实体发生碰撞时将触发的事件*由[[Box3World.onEntityContact]],[[Box3World.onEntitySeparate],[[Box3Entity.onEntityContact]],[[Box3Entity.onEntitySeparate]] * @category触发事件* /导出类Box3EntityContactEvent {/ ** * @ignore * /构造函数(/ ** *实体发生碰撞的时间* / public tick:number,[onChat]] * @类别事件* /导出类Box3ChatEvent {/ ** * @ignore * /构造函数(/ ** *发生聊天事件的时间* / public tick:number,/ ** *发起聊天事件的实体* / public实体:Box3Entity,/ ** *实体在聊天事件中所说的内容* /公共消息:字符串,){}} / ** *玩家按下按钮的类型* @类别事件* /导出枚举Box3ButtonType {WALK ='步行',RUN ='跑步',CROUCH ='蹲下',JUMP ='跳跃',DOUBLE_JUMP ='jump2',FLY ='飞',ACTION0 ='action0',ACTION1 ='action1',} / * * *每当玩家按下按钮时,都会生成输入事件。*事件滴答发生在玩家按下按钮的那一刻。*由[[Box3World.onPress]],[[Box3World.onRelease]],[[Box喵layer.onPress]],[[Box喵layer。/ ** *对按下按钮的播放器的引用* / public public:Box3Entity&{isPlayer:true,player:Box喵layer},/ ** *按下按钮时实体的位置* /公共位置:Box3Vector3,/ ** *播放器输入的按钮* /公共按钮:Box3ButtonType,/ ** *如果为true,则这是按下事件。否则,如果为false,则这是一个释放事件* /公开按下:布尔值,/ ** *播放器在玩家从摄像机角度按下按钮的确切瞬间发起的光线广播查询的结果。* / public raycast:Box3RaycastResult,){} / ** *对按下按钮的播放器的引用* / public public:Box3Entity&{isPlayer:true,player:Box喵layer},/ ** *按下按钮时实体的位置* /公共位置:Box3Vector3,/ ** *播放器输入的按钮* /公共按钮:Box3ButtonType,/ ** *如果为true,则这是按下事件。否则,如果为false,则这是一个释放事件* /公开按下:布尔值,/ ** *播放器在玩家从摄像机角度按下按钮的确切瞬间发起的光线广播查询的结果。* / public raycast:Box3RaycastResult,){} 那就是新闻发布会 否则,如果为false,则这是一个释放事件* /公开按下:布尔值,/ ** *播放器在玩家从摄像机角度按下按钮的确切瞬间发起的光线广播查询的结果。* / public raycast:Box3RaycastResult,){} 那就是新闻发布会 否则,如果为false,则这是一个释放事件* /公开按下:布尔值,/ ** *播放器在玩家从摄像机角度按下按钮的确切瞬间发起的光线广播查询的结果。* / public raycast:Box3RaycastResult,){}沙箱>退出,状态为0