use-on-demand
Version:
319 lines • 15.6 kB
JavaScript
// import {L2Dwidget} from 'live2d-widget/lib/L2Dwidget.min.js'; // 这种方式,不能用import;只能用【window】方式。
// import {xX_DomScript_Helper} from '../../dom/dom-script';
var _a;
import { __assign } from "tslib";
import { xX_DomScript_Helper } from '../../dom/dom-script';
var CssE;
(function (CssE) {
CssE["demo"] = "demo";
})(CssE || (CssE = {}));
var CdnModeE;
(function (CdnModeE) {
CdnModeE["SelfPublic"] = "SelfPublic";
CdnModeE["UnPkg"] = "UnPkg";
})(CdnModeE || (CdnModeE = {}));
var L2Dwidget_LoadWayE;
(function (L2Dwidget_LoadWayE) {
L2Dwidget_LoadWayE[L2Dwidget_LoadWayE["DynamicLoad"] = 0] = "DynamicLoad";
L2Dwidget_LoadWayE[L2Dwidget_LoadWayE["Import"] = 1] = "Import";
L2Dwidget_LoadWayE[L2Dwidget_LoadWayE["SrcModuleImport"] = 2] = "SrcModuleImport";
L2Dwidget_LoadWayE[L2Dwidget_LoadWayE["Require"] = 3] = "Require";
})(L2Dwidget_LoadWayE || (L2Dwidget_LoadWayE = {}));
export var xX_Live2DModelE;
(function (xX_Live2DModelE) {
xX_Live2DModelE["default_demo"] = "\u4E0D\u9700\u8981\u4F20\u503C\uFF0C\u7559\u4E00\u4E2Aundefined\u5373\u53EF";
xX_Live2DModelE["chitose"] = "chitose";
/**
* 原数据为;["epsilon2.1", "epsilon2_1"]。
* 1.目录名和文件名,不一样。
*/
xX_Live2DModelE["epsilon2_1"] = "epsilon2_1";
/**
* 原数据为:["gantzert_felixander", "gf"]。
* 1.目录名和文件名,不一样。
*/
xX_Live2DModelE["gf"] = "gf";
//
//
//
xX_Live2DModelE["haru01"] = "haru01";
xX_Live2DModelE["haru02"] = "haru02";
xX_Live2DModelE["haruto"] = "haruto";
xX_Live2DModelE["hibiki"] = "hibiki";
xX_Live2DModelE["hijiki"] = "hijiki";
xX_Live2DModelE["izumi"] = "izumi";
xX_Live2DModelE["koharu"] = "koharu";
xX_Live2DModelE["miku"] = "miku";
xX_Live2DModelE["nico"] = "nico";
xX_Live2DModelE["ni-j"] = "ni-j";
xX_Live2DModelE["nipsilon"] = "nipsilon";
xX_Live2DModelE["nito"] = "nito";
xX_Live2DModelE["shizuku"] = "shizuku";
xX_Live2DModelE["tororo"] = "tororo";
// FIXME 【tsumiki】的远程资源包 【/assets/exp】 ,因为大小写的缘故,全都挂了。
// FIXME 【tsumiki】的远程资源包 【/assets/exp】 ,因为大小写的缘故,全都挂了。
// FIXME 【tsumiki】的远程资源包 【/assets/exp】 ,因为大小写的缘故,全都挂了。
xX_Live2DModelE["tsumiki"] = "tsumiki";
xX_Live2DModelE["Unitychan"] = "Unitychan";
xX_Live2DModelE["wanko"] = "wanko";
xX_Live2DModelE["z16"] = "z16";
})(xX_Live2DModelE || (xX_Live2DModelE = {}));
var xX_Live2D_WidgetJs_Helper = /** @class */ (function () {
function xX_Live2D_WidgetJs_Helper() {
}
/**
* 移除Demo
*/
xX_Live2D_WidgetJs_Helper.removeDemo = function () {
console.log('尝试,对Live2D的Demo,进行移除。');
console.error('Live2D-widget.js,目前销毁功能并不完善,请谨慎使用! 建议使用【刷新】来重建。');
var demoDom = document.querySelector(this.rootDom);
demoDom === null || demoDom === void 0 ? void 0 : demoDom.remove();
};
/**
* 初始化Live2D的Demo
*/
xX_Live2D_WidgetJs_Helper.initDemo = function (option) {
var _this = this;
return new Promise((function (resolve /* reject */) {
// 处理默认值
var modelE = (option === null || option === void 0 ? void 0 : option.fallbackModel) || xX_Live2DModelE.default_demo;
var customPathCfg = (option === null || option === void 0 ? void 0 : option.customPathCfg) || _this.customPathCfg;
var prefKey = (option === null || option === void 0 ? void 0 : option.prefKey) || _this.defaultPrefKey;
//
if (option === null || option === void 0 ? void 0 : option.forceUseModel) { // TIP 【1】强行指定,优先级最高
modelE = option === null || option === void 0 ? void 0 : option.forceUseModel;
}
else if (option === null || option === void 0 ? void 0 : option.forceLoad) { // TIP 【2】如果,从【本地】读取
var prefObj = _this.getPref_InLocal(prefKey);
if (prefObj.modelE) {
modelE = prefObj.modelE; // 有则取,没有则回退。
}
console.log('从本地读取', prefObj);
}
PrivateHelper.getL2Dwidget().then(function (_exports) {
console.log('最新调用', _exports);
var L2Dwidget = _exports.L2Dwidget;
_this.loadDemoCss(CssE.demo); // 尝试加载CSS
L2Dwidget
.on('*', function (name) {
console.log('%c EVENT ' + '%c -> ' + name, // 事件
'background: #222; color: yellow', 'background: #fff; color: #000');
})
.init({
dialog: {
// 开启对话框
enable: true,
script: {
// 每空闲 10 秒钟,显示一条一言
'every idle 10s': '$hitokoto$',
// 当触摸到星星图案
'hover .star': '星星在天上而你在我心里 (*/ω\*)',
// 当触摸到角色身体
'tap body': '哎呀!别碰我!',
// 当触摸到角色头部
'tap face': '人家已经不是小孩子了!',
},
},
model: {
jsonPath: modelE === xX_Live2DModelE.default_demo ? undefined : PrivateHelper.getModelUrl(modelE, customPathCfg),
},
display: {
position: 'left',
},
});
if (option === null || option === void 0 ? void 0 : option.savePref) { // TIP 如果,保存【偏好】
var prefObj = __assign(__assign({}, _this.getPref_InLocal(prefKey)), { modelE: modelE });
localStorage.setItem(prefKey, JSON.stringify(prefObj));
console.log('存储到本地', prefObj);
}
resolve('初始化完毕');
});
}));
};
/**
* 绑定快捷键
* 1.Ctrl + Alt + Shift + 【你自己的快捷键】。
* 2.
*
*/
xX_Live2D_WidgetJs_Helper.bindHotKey = function (hotKey, // 快捷键
callback, // 回调
helperKey) {
var _a = helperKey || {}, use_shiftKey = _a.use_shiftKey, use_altKey = _a.use_altKey, use_ctrlKey = _a.use_ctrlKey;
// document.onkeydown = // TIP 这个方式,好像只支持一个。
// TIP 这个方式,支持多个
window.addEventListener('keydown', function (_evt) {
PrivateHelper.get_DomEvents().then(function (_a) {
var xX_BrowserEventMap = _a.xX_BrowserEventMap;
var KEYBOARD = xX_BrowserEventMap.KEYBOARD;
var keyCode = KEYBOARD.getKeyCode(_evt);
if ((use_shiftKey ? _evt.shiftKey : true)
&& (use_altKey ? _evt.altKey : true)
&& (use_ctrlKey ? _evt.ctrlKey : true)) {
switch (keyCode) {
case hotKey: {
console.log('按下了live2D的快捷键');
callback(); // 执行回调。
break;
}
default: {
console.log('其它快捷键');
}
}
}
});
});
};
/**
* 加载CSS
*/
xX_Live2D_WidgetJs_Helper.loadDemoCss = function (cssE) {
if (!this.cssLoadStatus[cssE]) { // 未加载过该CSS
this.cssLoadStatus[cssE] = true; // TIP 记录,该CSS已经加载
switch (cssE) {
case CssE.demo:
require('./css/default-demo.less');
break;
}
}
else { // 已加载过该CSS
console.log('该CSS已经加载过', cssE);
}
};
/**
* 获取本地Pref存储
*/
xX_Live2D_WidgetJs_Helper.getPref_InLocal = function (prefKey) {
return JSON.parse(localStorage.getItem(prefKey) || '{}');
};
/**
* 根据【live2d-widget.js】库的不同版本,选择不同的加载方式。
*/
xX_Live2D_WidgetJs_Helper.libLoadWay = L2Dwidget_LoadWayE.SrcModuleImport;
xX_Live2D_WidgetJs_Helper.cdnMode = CdnModeE.UnPkg;
xX_Live2D_WidgetJs_Helper.rootDom = '#live2d-widget';
xX_Live2D_WidgetJs_Helper.defaultPrefKey = 'xX_Live2D_WidgetJs_Helper';
/**
* Model存储空间 的【远程路径】。
*/
xX_Live2D_WidgetJs_Helper.customPathCfg = {
modelBase: 'http://test-admin.bgex.link/',
};
// ———————————————————————————————————————————————————————————————————————————
// ———————————————————————————————————————————————————————————————————————————
// ———————————————————————————————————————————————————————————————————————————
// ———————————————————————————————————————————————————————————————————————————
// ———————————————————————————————————————————————————————————————————————————
/**
* CSS,加载状态表
*/
xX_Live2D_WidgetJs_Helper.cssLoadStatus = (_a = {},
_a[CssE.demo] = false,
_a);
return xX_Live2D_WidgetJs_Helper;
}());
export { xX_Live2D_WidgetJs_Helper };
//
var PrivateHelper = /** @class */ (function () {
function PrivateHelper() {
}
PrivateHelper.getModelUrl = function (modelE, customPathCfg) {
switch (xX_Live2D_WidgetJs_Helper.cdnMode) {
//
//
//
case CdnModeE.SelfPublic: { // 从自身public目录获取
var dirName = modelE.valueOf().toLowerCase();
var fileName = (function () {
switch (modelE) {
case xX_Live2DModelE.epsilon2_1:
return 'epsilon2.1';
case xX_Live2DModelE.gf:
return 'gantzert_felixander';
default:
return modelE.valueOf().toLowerCase(); // WARN 转化为小写字母。
}
})();
// TIP 加上远程路径。
return customPathCfg.modelBase + ("live2d/model/live2d-widget-model-" + dirName + "/assets/" + fileName + ".model.json");
}
//
//
//
case CdnModeE.UnPkg: { // 从远程 Unpkg.com 网站,进行获取
var dirName = (function () {
switch (modelE) {
case xX_Live2DModelE.haru01:
return 'haru'; // 需要拼接中间目录。
case xX_Live2DModelE.haru02:
return 'haru'; // 需要拼接中间目录。
default:
return modelE.valueOf().toLowerCase(); // WARN 转化为小写字母。
}
})();
var middleDir = (function () {
switch (modelE) {
case xX_Live2DModelE.haru01:
return '01/'; // 需要拼接中间目录。
case xX_Live2DModelE.haru02:
return '02/'; // 需要拼接中间目录。
default:
return ''; // 默认没有中间目录
}
})();
var fileName = (function () {
switch (modelE) {
case xX_Live2DModelE.epsilon2_1:
return 'Epsilon2.1'; // 首字母大写!
case xX_Live2DModelE.gf:
return 'Gantzert_Felixander';
default:
return modelE.valueOf().toLowerCase(); // WARN 转化为小写字母。
}
})();
return "https://unpkg.com/live2d-widget-model-" + dirName + "@latest/" + middleDir + "assets/" + fileName + ".model.json";
}
}
};
PrivateHelper.getL2Dwidget = function () {
switch (xX_Live2D_WidgetJs_Helper.libLoadWay) {
case L2Dwidget_LoadWayE.DynamicLoad: { // TIP 动态脚本加载
console.log('此处注意,【public】目录,最终是落在了哪一个项目上');
return xX_DomScript_Helper.loadJsScript_Async('/L2Dwidget/3.1.5/L2Dwidget.min.js').then(function () {
return {
L2Dwidget: window.L2Dwidget,
};
});
}
case L2Dwidget_LoadWayE.Import: { // TIP Import方式
return import('live2d-widget');
}
/**
* TIP 此处,官方的【发行版本】并没有给出最新的【common.js】。
* 1.我们可以【下载代码】,然后【手动打包】出来。
* 2.
*/
case L2Dwidget_LoadWayE.SrcModuleImport: {
// 上面方法,好像个别环境,会有【exports is not defined】的问题。
return Promise.resolve(require('./3.1.5/L2Dwidget.common.js'));
// @ts-ignore
// return import('./3.1.5/L2Dwidget.common.js').then(exports => {
// return {
// L2Dwidget: exports as L2Dwidget_SimpleNS.L2Dwidget_Type,
// };
// });
}
case L2Dwidget_LoadWayE.Require: {
return Promise.resolve({
L2Dwidget: require('live2d-widget/lib/L2Dwidget.min.js'),
});
}
}
};
PrivateHelper.get_DomEvents = function () {
return import('../../dom/dom-events');
};
return PrivateHelper;
}());
//# sourceMappingURL=Live2D_WidgetJs_Helper.js.map