UNPKG

@tomiaa/live2d

Version:
2 lines (1 loc) 6.51 kB
"use strict";var L=Object.defineProperty;var v=(s,t,e)=>t in s?L(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var i=(s,t,e)=>(v(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("@tomiaa/hitokoto"),r=require("@tomiaa/utils"),M=require("./constants.js"),p=require("./modules/loader.js"),c=require("./modules/pixi.js"),l=require("./modules/ui.js"),a=require("./modules/model.js"),m=require("./modules/resize.js"),h=require("./modules/animation.js"),d=require("./utils/url.js");require("./index.scss.js");const y=r.createNamespacs("live2d");class g{constructor(t){i(this,"options",{...M.DEFAULT_OPTIONS});i(this,"el");i(this,"canvas");i(this,"Live2DModel");i(this,"app");i(this,"loading",!1);i(this,"model");i(this,"modelList",[]);i(this,"currentModelOption");i(this,"personIndex",0);i(this,"clothingIndex",0);i(this,"elLoading");i(this,"elControl");i(this,"elSwitchPerson");i(this,"elSwitchClothing");i(this,"elCollapse");i(this,"elExpand");i(this,"elHitokoto");i(this,"hitokoto");i(this,"isCollapsed",!1);Object.assign(this.options,t);const{el:e}=this.options;typeof e=="string"?this.el=document.querySelector(e):this.el=e,this.el.classList.add(y.b()),this.init()}get getJsBaseURL(){return d.URLHelper.getJsBaseURL(this.options.jsBaseURL)}get getLive2d_2_ModelBaseURL(){return d.URLHelper.getLive2d_2_ModelBaseURL(this.options.live2d_2_ModelBaseURL,this.getJsBaseURL)}get getLive2d_3_ModelBaseURL(){return d.URLHelper.getLive2d_3_ModelBaseURL(this.options.live2d_3_ModelBaseURL,this.getJsBaseURL)}async init(){var t,e,o,n;await((e=(t=this.options).beforeInit)==null?void 0:e.call(t,{options:this.options,modelList:this.modelList})),this.options.allowDrag&&r.drag({el:this.el}),await this.loadJS(),this.createPIXI(),await this.loadModelList(),this.addLoadingSvg(),this.addControls(),this.elExpand||(this.elExpand=l.UICreator.createExpandButton(this.expand.bind(this)),this.elExpand.style.display="none"),this.setPersonIndex(),await this.loadModel(),window.addEventListener("resize",this.onresize.bind(this)),this.createHitokoto(),(n=(o=this.options).afterInit)==null||n.call(o,{options:this.options,modelList:this.modelList,currentModelOption:this.currentModelOption,Live2DModel:this.Live2DModel,app:this.app})}async loadJS(){await p.JSLoader.loadAll(this.getJsBaseURL),this.Live2DModel=p.JSLoader.getLive2DModel()}createPIXI(){this.canvas||(this.canvas=c.PIXIManager.createCanvas(this.el),this.canvas.addEventListener("click",this.animation.bind(this))),this.app=c.PIXIManager.create(this.canvas,this.options.iApplicationOptions)}async loadModelList(){this.modelList=a.ModelManager.loadModelList(this.options.loadLive2d_2??!0,this.options.loadLive2d_3??!0)}addLoadingSvg(){this.options.showLoading&&(this.elLoading=l.UICreator.createLoading(this.el))}addControls(){if(!this.options.showControl)return;const t=l.UICreator.createControls(this.el,this.switchPerson.bind(this),this.switchClothing.bind(this),this.collapse.bind(this));this.elControl=t.elControl,this.elSwitchPerson=t.elSwitchPerson,this.elSwitchClothing=t.elSwitchClothing,this.elCollapse=t.elCollapse}async loadModel(){var e,o,n;this.loading=!0,this.el.style.pointerEvents="none",this.elLoading&&(this.elLoading.style.display="block"),this.elControl&&(this.elControl.style.display="none"),this.elHitokoto&&(this.elHitokoto.style.display="none",(e=this.hitokoto)==null||e.getData()),(n=(o=this.model)==null?void 0:o.destroy)==null||n.call(o);const t=a.ModelManager.getModelBaseURL(this.currentModelOption.version,this.options.live2d_2_ModelBaseURL,this.options.live2d_3_ModelBaseURL,this.getJsBaseURL);try{this.model=await a.ModelManager.loadModel(this.Live2DModel,this.currentModelOption,this.clothingIndex,t)}catch{this.elLoading&&(this.elLoading.style.display="none")}this.loading=!1,this.el.style.pointerEvents="auto",this.elLoading&&(this.elLoading.style.display="none"),this.elControl&&(this.elControl.style.display="block"),this.elHitokoto&&(this.elHitokoto.style.display="block"),this.app.stage.addChild(this.model),this.onresize(),this.options.playLoadingAnimation&&h.AnimationManager.playMotion(this.model,"login")}setPersonIndex(){this.options.randomPeople?this.personIndex=r.randomInteger(0,this.modelList.length-1):++this.personIndex>=this.modelList.length&&(this.personIndex=0),this.currentModelOption=this.modelList[this.personIndex],l.UICreator.updateSwitchClothingVisibility(this.elSwitchClothing,this.currentModelOption.list.length>1)}onresize(){!this.model||!this.app||!this.currentModelOption||m.ResizeManager.resize(this.app,this.model,this.currentModelOption,this.options.maxWidth,this.options.minWidth,this.options.aspectRatio)}animation(t){if(this.model){if(typeof t=="string"){h.AnimationManager.playMotion(this.model,t);return}h.AnimationManager.handleClickAnimation(this.model,t)}}switchPerson(){event==null||event.stopPropagation(),this.clothingIndex=0,this.setPersonIndex(),this.loadModel()}switchClothing(){event==null||event.stopPropagation(),++this.clothingIndex>=this.currentModelOption.list.length&&(this.clothingIndex=0),this.loadModel()}createHitokoto(){this.options.hitokoto&&(this.elHitokoto=document.createElement("div"),this.el.appendChild(this.elHitokoto),this.elHitokoto.addEventListener("mousedown",t=>{t.stopPropagation()}),this.hitokoto=new u.Hitokoto({el:this.elHitokoto,...this.options.hitokotoOptions}))}collapse(){event==null||event.stopPropagation(),this.isCollapsed=!0,this.el.style.display="none",this.elExpand||(this.elExpand=l.UICreator.createExpandButton(this.expand.bind(this))),this.elExpand&&(this.elExpand.style.display="flex",this.elExpand.style.zIndex="2001")}async expand(){event==null||event.stopPropagation(),this.isCollapsed=!1,this.elExpand&&(this.elExpand.style.display="none"),this.el.innerHTML="",this.el.style.display="",this.model=void 0,this.app=void 0,this.canvas=void 0,this.elLoading=void 0,this.elControl=void 0,this.elSwitchPerson=void 0,this.elSwitchClothing=void 0,this.elCollapse=void 0,this.elHitokoto=void 0,this.hitokoto=void 0,this.modelList=[],this.currentModelOption=void 0,this.personIndex=0,this.clothingIndex=0,this.loading=!1,this.Live2DModel=void 0,window.removeEventListener("resize",this.onresize.bind(this)),await this.init()}destroy(){window.removeEventListener("resize",this.onresize),this.elExpand&&this.elExpand.parentNode&&this.elExpand.parentNode.removeChild(this.elExpand),this.el.innerHTML=""}}exports.Live2d=g;exports.default=g;