| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- //const log$E = new Logger$1("Avatar")
- import BillboardStatus from "./enum/BillboardStatus.js"
- import {avatarLoader} from "./XAvatarLoader.js"
- import XAnimationController from "./XAnimationController.js"
- import XAvatarComopnent from "./XAvatarComopnent.js"
- import XStateMachine from "./XStateMachine.js"
- import XAvatarBillboardComponent from "./XAvatarBillboardComponent.js"
- import util from "./util.js"
- const castRayOffsetY = .01;
- const castRayTeleportationOffset = 10;
- export default class XAvatar {
- constructor({id: e, avatarType: t, priority: r, avatarManager: n, assets: o, status: a}) {
- E(this, "id", "-1");
- E(this, "priority", 0);
- E(this, "isRender", !1);
- E(this, "distLevel", 0);
- E(this, "isInLoadingList", !1);
- E(this, "isHide", !1);
- E(this, "component");
- E(this, "controller");
- E(this, "stateMachine");
- E(this, "bbComponent");
- E(this, "_avatarType");
- E(this, "clothesList", []);
- E(this, "isSelected", !1);
- E(this, "pendingLod", !1);
- E(this, "_previousReceivedPosition", new BABYLON.Vector3(0,1e4,0));
- E(this, "_avatarPosition");
- E(this, "_avatarRotation");
- E(this, "_avatarScale");
- E(this, "rootNode");
- E(this, "distToCam", 1e11);
- E(this, "enableNickname", !0);
- E(this, "distance", 1e11);
- E(this, "isCulling", !1);
- E(this, "reslevel", 0);
- E(this, "isInLoadingQueue", !1);
- E(this, "_isRayCastEnable");
- E(this, "_scene");
- E(this, "_avatarManager");
- E(this, "_transparent", 0);
- E(this, "hide", ()=>(this.isHide = !0,
- this._hide(),
- !this.isRender));
- E(this, "_show", ()=>{
- var e;
- this.isHide || (this.setIsPickable(!0),
- this.priority == 0 && (this.rootNode.setEnabled(!0),
- this.isRender = !0,
- this.avatarManager._updateBillboardStatus(this, BillboardStatus.SHOW),
- (e = this.controller) == null || e.playAnimation(this.controller.onPlay, this.controller.loop)))
- }
- );
- E(this, "show", ()=>(this.isHide = !1,
- this._show(),
- !!this.isRender));
- E(this, "setAnimations", e=>{
- this.controller.animations = e
- }
- );
- E(this, "attachToAvatar", (e,t=!1,r={
- x: 0,
- y: 0,
- z: 0
- },n=!1,o,a)=>this.bbComponent.attachToAvatar(this, e, t, r, n, o, a));
- E(this, "detachFromAvatar", (e,t=!1)=>this.bbComponent.detachFromAvatar(this, e, t));
- E(this, "getBbox", (e={})=>this.bbComponent.getBbox(this, e));
- this.id = e,
- this._avatarManager = n,
- this._scene = this.avatarManager.scene,
- this.clothesList = o,
- this._avatarType = t,
- this.priority = r || 0,
- this.controller = new XAnimationController(this),
- this.component = new XAvatarComopnent,
- this.stateMachine = new XStateMachine(this._scene),
- this.bbComponent = new XAvatarBillboardComponent(this._scene),
- this.rootNode = new BABYLON.TransformNode(e,this._avatarManager.scene),
- this._avatarScale = a.avatarScale == null ? 1 : a.avatarScale,
- this._avatarRotation = a.avatarRotation == null ? {
- pitch: 0,
- yaw: 0,
- roll: 0
- } : a.avatarRotation,
- this._avatarPosition = a.avatarPosition == null ? {
- x: 0,
- y: 0,
- z: 0
- } : a.avatarPosition,
- this.setPosition(this._avatarPosition),
- this.setRotation(this._avatarRotation),
- this.setScale(this.scale),
- this._isRayCastEnable = avatarSetting.isRayCastEnable,
- this._scene.registerBeforeRender(()=>{
- this.tick()
- }
- )
- }
- tick() {
- this.cullingTick()
- }
- cullingTick() {
- var e;
- this.isCulling && ((e = this.rootNode) == null || e.getChildMeshes().forEach(t=>{
- this.distToCam < 50 ? t.visibility = 0 : t.visibility = this._transparent
- }
- ))
- }
- setTransParentThresh(e) {
- this._transparent = e
- }
- get isNameVisible() {
- return this.bbComponent.isNameVisible
- }
- get isBubbleVisible() {
- return this.bbComponent.isBubbleVisible
- }
- get isGiftButtonsVisible() {
- return this.bbComponent.isGiftButtonsVisible
- }
- get words() {
- return this.bbComponent.words
- }
- get nickName() {
- return this.bbComponent.nickName
- }
- get giftButtons() {
- return this.bbComponent.giftButtons
- }
- get bubble() {
- return this.bbComponent.bubble
- }
- get nameBoard() {
- return this.bbComponent.nameBoard
- }
- get avatarManager() {
- return this._avatarManager
- }
- set withinVisibleRange(e) {
- this.bbComponent.withinVisualRange = e
- }
- setNicknameStatus(e) {
- return this.bbComponent.setNicknameStatus(e)
- }
- setBubbleStatus(e) {
- return this.bbComponent.setBubbleStatus(e)
- }
- setButtonsStatus(e) {
- return this.bbComponent.setBubbleStatus(e)
- }
- setGiftButtonsVisible(e) {
- return this.bbComponent.setGiftButtonsVisible(e)
- }
- get avatarType() {
- return this._avatarType
- }
- attachBody(e) {
- return this.component.addBodyComp(this, e)
- }
- attachDecoration(e) {
- return this.component.addClothesComp(this, e)
- }
- detachDecoration(e) {
- return this.component.clearClothesComp(e)
- }
- detachDecorationAll() {
- return this.component.clearAllClothesComps()
- }
- get skeleton() {
- return this.component.skeleton
- }
- get position() {
- return this._avatarPosition
- }
- get rotation() {
- return this._avatarRotation
- }
- get scale() {
- return this._avatarScale
- }
- _hide_culling() {
- this.bbComponent.updateBillboardStatus(this, BillboardStatus.HIDE),
- this.isCulling = !0
- }
- _show_culling() {
- this.isCulling && (this.rootNode && this.rootNode.getChildMeshes().forEach(e=>{
- e.visibility = 1
- }
- ),
- this.bbComponent.updateBillboardStatus(this, BillboardStatus.SHOW),
- this.isCulling = !1)
- }
- _hide() {
- !this.isHide || (this.setIsPickable(!1),
- this.priority == 0 ? (this.rootNode.setEnabled(!1),
- this.isRender = !1,
- this.bbComponent.updateBillboardStatus(this, BillboardStatus.HIDE)) : this.isRender && (this.avatarManager.currentLODUsers[this.distLevel]--,
- this.removeAvatarFromScene()))
- }
- rotate(e, t, r) {
- return this.stateMachine.roll(this, e, t, r)
- }
- set isRayCastEnable(e) {
- this._isRayCastEnable = e
- }
- get isRayCastEnable() {
- return this._isRayCastEnable
- }
- getAvatarId() {
- return this.id
- }
- getAvaliableAnimations() {
- const e = avatarLoader.avaliableAnimation.get(this.avatarType);
- return e || []
- }
- setPosition(e, t=!1) {
- this._avatarPosition = e;
- if (this.rootNode) {
- const r = util.ue4Position2Xverse(this._avatarPosition);
- let n = !1;
- if(this.avatarManager.getMainAvatar()){
- if(this.id == this.avatarManager.getMainAvatar().id){
- Math.abs(r.y - this._previousReceivedPosition.y) > castRayOffsetY && (n = !0);
- if(r.subtract(this._previousReceivedPosition).length() > castRayTeleportationOffset){
- n = !0
- }
- }
- }
- this._isRayCastEnable ? n || t ? this._castRay(e).then(o=>{
- this.rootNode.position = r,
- this.rootNode.position.y -= o
- }
- ).catch(o=>{
- Promise.reject(o)
- }
- ) : (this.rootNode.position.x = r.x,
- this.rootNode.position.z = r.z) : this.rootNode.position = r,
- this._previousReceivedPosition = r.clone()
- }
- return Promise.resolve(e)
- }
- setRotation(e) {
- this._avatarRotation = e;
- if (this.rootNode) {
- const t = {
- pitch: e.pitch,
- yaw: e.yaw + 180,
- roll: e.roll
- }
- const r = util.ue4Rotation2Xverse(t);
- this.rootNode.rotation = r
- }
- }
- setAvatarVisible(e) {
- if(this.rootNode){
- this.rootNode.setEnabled(e),
- this.rootNode.getChildMeshes().forEach(t=>{
- t.setEnabled(e)
- })
- }
- }
- setScale(e) {
- this._avatarScale = e,
- this.rootNode && (this.rootNode.scaling = new BABYLON.Vector3(e,e,e)),
- this.bbComponent.bbox && this.getBbox()
- }
- _removeAvatarFromScene() {
- var e, t;
- this.isRender = !1,
- (e = this.controller) == null || e.detachAnimation(),
- this.component.dispose(this),
- (t = this.avatarManager.sceneManager) == null || t.lightComponent.removeShadow(this)
- }
- removeAvatarFromScene() {
- this._removeAvatarFromScene(),
- this._disposeBillBoard()
- }
- _disposeBillBoard() {
- this.bbComponent.disposeBillBoard(this)
- }
- addComponent(e, t, r, n) {
- return this.component.changeClothesComp(this, e, t, r, n)
- }
- _castRay(e) {
- return new Promise((t,r)=>{
- var d;
- const n = util.ue4Position2Xverse(e)
- , o = new BABYLON.Vector3(0,-1,0)
- , a = 1.5 * this.scale
- , s = 100 * a
- , l = a
- , u = new BABYLON.Vector3(n.x,n.y + l,+n.z)
- , c = new BABYLON.Ray(u,o,s)
- , h = (d = this.avatarManager.sceneManager) == null ? void 0 : d.getGround(e);
- if (!h || h.length <= 0)
- return logger.warn(`\u89D2\u8272 id= ${this.id} \u627E\u4E0D\u5230\u5730\u9762\uFF0C\u5F53\u524D\u9AD8\u5EA6\u4E3A\u4E0B\u53D1\u9AD8\u5EA6`),
- t(0);
- let f = c.intersectsMeshes(h);
- if (f.length > 0)
- return t(f[0].distance - l);
- if (o.y = 1,
- f = c.intersectsMeshes(h),
- f.length > 0)
- return t(-(f[0].distance - l))
- }
- )
- }
- setPickBoxScale(e) {
- return this.bbComponent.setPickBoxScale(e)
- }
- setIsPickable(e) {
- return this.bbComponent.setIsPickable(this, e)
- }
- createPickBoundingbox(e) {
- return this.bbComponent.createPickBoundingbox(this, e)
- }
- scaleBbox(e) {
- this.bbComponent.bbox && this.bbComponent.bbox.scale(e)
- }
- rotateTo(e, t, r) {
- return this.stateMachine.rotateTo(this, e, t, r)
- }
- faceTo(e, t) {
- return this.stateMachine.lookAt(this, e, t)
- }
- removeObserver() {
- this.stateMachine.disposeObsever()
- }
- move(e, t, r, n, o) {
- return this.stateMachine.moveTo(this, e, t, r, n, o)
- }
- initNameboard(e=1) {
- return this.bbComponent.initNameboard(this, e)
- }
- initBubble(e=1) {
- return this.bbComponent.initBubble(this, e)
- }
- say(e, {id: t, isUser: r, background: n, font: o="Arial", fontsize: a=38, fontcolor: s="#ffffff", fontstyle: l="bold", linesize: u=22, linelimit: c, offsets: h={
- x: 0,
- y: 0,
- z: 40
- }, scale: f=this._avatarScale, compensationZ: d=11.2, reregistAnyway: _=!0}) {
- return this.bbComponent.say(this, e, {
- id: t,
- isUser: r,
- background: n,
- font: o,
- fontsize: a,
- fontcolor: s,
- fontstyle: l,
- linesize: u,
- linelimit: c,
- offsets: h,
- scale: f,
- compensationZ: d,
- reregistAnyway: _
- })
- }
- silent() {
- return this.bbComponent.silent()
- }
- setNickName(e, {id: t, isUser: r, background: n, font: o="Arial", fontsize: a=40, fontcolor: s="#ffffff", fontstyle: l="bold", linesize: u=22, linelimit: c, offsets: h={
- x: 0,
- y: 0,
- z: 15
- }, scale: f=this._avatarScale, compensationZ: d=0, reregistAnyway: _=!1}) {
- return this.bbComponent.setNickName(this, e, {
- id: t,
- isUser: r,
- background: n,
- font: o,
- fontsize: a,
- fontcolor: s,
- fontstyle: l,
- linesize: u,
- linelimit: c,
- offsets: h,
- scale: f,
- compensationZ: d,
- reregistAnyway: _
- })
- }
- generateButtons(e=null, t=this._avatarScale, r=85) {
- return this.bbComponent.generateButtons(this, e, t, r)
- }
- clearButtons() {
- return this.bbComponent.clearButtons()
- }
- attachExtraProp(e, t, r, n) {
- return this.component.addDecoComp(this, e, t, r, n)
- }
- showExtra(e) {
- return this.component.showExtra(e)
- }
- hideExtra(e) {
- return this.component.hideExtra(e)
- }
- disposeExtra() {
- return this.component.disposeExtra()
- }
- getSkeletonPositionByName(e) {
- var t;
- if (this.skeleton) {
- const r = this.skeleton.bones.find(n=>n.name.replace("Clone of ", "") == e);
- if (r && r.getTransformNode() && ((t = r.getTransformNode()) == null ? void 0 : t.position)) {
- const n = r.getTransformNode().position;
- return util.xversePosition2Ue4({
- x: n.x,
- y: n.y,
- z: n.z
- })
- }
- }
- }
- shootTo(e, t, r=2, n=10, o={
- x: 0,
- y: 0,
- z: 150
- }) {
- return this.stateMachine.sendObjectTo(this, e, t, r, n, o)
- }
- }
|