diff --git a/public/libs/core.js b/public/libs/core.js
index 71412ea..adbac1c 100644
--- a/public/libs/core.js
+++ b/public/libs/core.js
@@ -286,7 +286,6 @@ core.prototype.init = function (coreData, callback) {
this._init_flags();
this._init_platform();
this._init_others();
- this._init_plugins();
var b = main.mode == 'editor';
// 初始化画布
for (var name in core.canvas) {
@@ -589,51 +588,6 @@ core.prototype._afterLoadResources = function (callback) {
if (callback) callback();
};
-core.prototype._init_plugins = function () {
- core.plugin = new (function () {})();
-
- for (var name in plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1) {
- if (
- plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1[name] instanceof
- Function
- ) {
- try {
- plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1[name].apply(
- core.plugin
- );
- } catch (e) {
- console.error(e);
- console.error('无法初始化插件' + name);
- }
- }
- }
-
- if (!main.pluginUseCompress) {
- (async function () {
- const pluginList = main.plugin;
- for await (const one of pluginList) {
- const script = document.createElement('script');
- script.src = `project/plugin/${one}.js`;
- document.body.appendChild(script);
- await new Promise(res => {
- script.addEventListener('load', res);
- });
- }
- })();
- } else {
- const script = document.createElement('script');
- script.src = `project/plugin.min.js`;
- document.body.appendChild(script);
- }
-
- core._forwardFunc('plugin');
- if (!main.replayChecking && main.mode === 'play') {
- main.forward();
- core.resetSettings();
- core.plugin.showMarkedEnemy.value = true;
- }
-};
-
core.prototype._forwardFuncs = function () {
for (var i = 0; i < main.loadList.length; ++i) {
var name = main.loadList[i];
diff --git a/public/main.js b/public/main.js
index 63c82b9..a162e5b 100644
--- a/public/main.js
+++ b/public/main.js
@@ -1,7 +1,8 @@
+///
function main() {
//------------------------ 用户修改内容 ------------------------//
- this.version = '2.10.0'; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。
+ this.version = '1.0.0'; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。
this.useCompress = false; // 是否使用压缩文件
this.pluginUseCompress = false; // 仅限于gh-pages使用
@@ -218,15 +219,23 @@ function main() {
}
// >>>> body end
-main.prototype.init = function (mode, callback) {
+main.prototype.loadScript = async function (src) {
+ const script = document.createElement('script');
+ script.src = src;
+ document.body.appendChild(script);
+ await new Promise(res => {
+ script.addEventListener('load', res);
+ });
+};
+
+main.prototype.init = async function (mode, callback) {
try {
var a = {};
var b = {};
new Proxy(a, b);
new Promise(res => res());
- const aa = `${123}`;
- aa;
- } catch (e) {
+ eval('`${123}`');
+ } catch {
alert('浏览器版本过低,无法游玩本塔!');
return;
}
@@ -237,184 +246,124 @@ main.prototype.init = function (mode, callback) {
}
main.mode = mode;
- Promise.all();
-
- main.loadJs('project', main.pureData, function () {
- var mainData = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main;
- for (var ii in mainData) main[ii] = mainData[ii];
-
- main.importFonts(main.fonts);
-
- main.loadJs('libs', main.loadList, function () {
- main.core = core;
-
- for (i = 0; i < main.loadList.length; i++) {
- var name = main.loadList[i];
- if (name === 'core') continue;
- main.core[name] = new window[name]();
- }
-
- main.loadFloors(function () {
- var coreData = {};
- [
- 'dom',
- 'statusBar',
- 'canvas',
- 'images',
- 'tilesets',
- 'materials',
- 'animates',
- 'bgms',
- 'sounds',
- 'floorIds',
- 'floors',
- 'floorPartitions'
- ].forEach(function (t) {
- coreData[t] = main[t];
- });
- core.init(coreData, callback);
- core.resize();
- // 自动放缩最大化
- if (core.getLocalStorage('autoScale') == null) {
- core.setLocalStorage('autoScale', true);
- }
- if (
- core.getLocalStorage('autoScale') &&
- !core.domStyle.isVertical
- ) {
- try {
- if (core) {
- core.plugin.maxGameScale();
- if (!core.getLocalStorage('fullscreen', false)) {
- requestAnimationFrame(function () {
- var style = getComputedStyle(
- main.dom.gameGroup
- );
- var height = parseFloat(style.height);
- if (height > window.innerHeight * 0.95) {
- core.control.setDisplayScale(-1);
- if (
- !core.isPlaying() &&
- core.flags.enableHDCanvas
- ) {
- core.domStyle.ratio = Math.max(
- window.devicePixelRatio || 1,
- core.domStyle.scale
- );
- core.resize();
- }
- }
- });
- }
- }
- } catch (e) {
- console.error(e);
- }
- }
- });
- });
- });
-};
-
-////// 动态加载所有核心JS文件 //////
-main.prototype.loadJs = function (dir, loadList, callback) {
- // 加载js
- main.setMainTipsText('正在加载核心js文件...');
-
- if (this.useCompress) {
- main.loadMod(dir, dir, function () {
- callback();
- });
+ // 加载全塔属性代码
+ if (main.useCompress) {
+ await main.loadScript(`project/project.min.js?v=${main.version}`);
} else {
- var instanceNum = 0;
- for (var i = 0; i < loadList.length; i++) {
- main.loadMod(dir, loadList[i], function (modName) {
- main.setMainTipsText(modName + '.js 加载完毕');
- instanceNum++;
- if (instanceNum === loadList.length) {
- callback();
- }
- });
+ await Promise.all(
+ main.pureData.map(v =>
+ main.loadScript(`project/${v}.js?v=${main.version}`)
+ )
+ );
+ }
+ const mainData = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main;
+ Object.assign(main, mainData);
+
+ main.importFonts(main.fonts);
+
+ // 加载核心js代码
+ if (main.useCompress) {
+ await main.loadScript(`libs/libs.min.js?v=${main.version}`);
+ } else {
+ await Promise.all(
+ main.loadList.map(v =>
+ main.loadScript(`libs/${v}.js?v=${main.version}`)
+ )
+ );
+ }
+
+ for (const name of main.loadList) {
+ if (name === 'core') continue;
+ core[name] = new window[name]();
+ }
+
+ // 加载楼层
+ main.setMainTipsText('正在加载楼层文件...');
+ if (main.useCompress) {
+ await main.loadScript(`project/floors.min.js?v=${main.version}`);
+ main.dom.mainTips.style.display = 'none';
+ } else {
+ try {
+ await main.loadScript(
+ `/all/__all_floors__.js?v=${
+ main.version
+ }&id=${main.floorIds.join(',')}`
+ );
+ main.dom.mainTips.style.display = 'none';
+ main.supportBunch = true;
+ } catch {
+ await Promise.all(
+ mainData.floorIds.map(v =>
+ main.loadScript(`project/floors/${v}.js`)
+ )
+ );
}
}
-};
-////// 加载某一个JS文件 //////
-main.prototype.loadMod = function (dir, modName, callback, onerror) {
- var script = document.createElement('script');
- var name = modName;
- script.src =
- dir +
- '/' +
- modName +
- (this.useCompress ? '.min' : '') +
- '.js?v=' +
- this.version;
- script.onload = function () {
- callback(name);
- };
- main.dom.body.appendChild(script);
-};
+ // 初始化core
+ const coreData = {};
+ [
+ 'dom',
+ 'statusBar',
+ 'canvas',
+ 'images',
+ 'tilesets',
+ 'materials',
+ 'animates',
+ 'bgms',
+ 'sounds',
+ 'floorIds',
+ 'floors',
+ 'floorPartitions'
+ ].forEach(function (t) {
+ coreData[t] = main[t];
+ });
+ core.init(coreData, callback);
+ core.resize();
-////// 动态加载所有楼层(剧本) //////
-main.prototype.loadFloors = function (callback) {
- // 加载js
- main.setMainTipsText('正在加载楼层文件...');
- if (this.useCompress) {
- // 读取压缩文件
- var script = document.createElement('script');
- script.src = 'project/floors.min.js?v=' + this.version;
- main.dom.body.appendChild(script);
- script.onload = function () {
- main.dom.mainTips.style.display = 'none';
- callback();
- };
- return;
+ core.plugin = {};
+ // 加载插件
+ if (!main.replayChecking && main.mode === 'play') {
+ main.forward();
+ core.resetSettings();
+ core.plugin.showMarkedEnemy.value = true;
+ }
+ if (main.useCompress) {
+ await main.loadScript(`project/plugin.min.js?v=${main.version}`);
+ } else {
+ for await (const plugin of mainData.plugin) {
+ await main.loadScript(
+ `project/plugin/${plugin}.js?v=${main.version}`
+ );
+ }
}
- // 高层塔优化
- var script = document.createElement('script');
- script.src =
- '/all/__all_floors__.js?v=' +
- this.version +
- '&id=' +
- main.floorIds.join(',');
- script.onload = function () {
- main.dom.mainTips.style.display = 'none';
- main.supportBunch = true;
- callback();
- };
- script.onerror =
- script.onabort =
- script.ontimeout =
- function (e) {
- // console.clear();
- for (var i = 0; i < main.floorIds.length; i++) {
- main.loadFloor(main.floorIds[i], function (modName) {
- main.setMainTipsText(
- '楼层 ' + modName + '.js 加载完毕'
- );
- if (
- Object.keys(main.floors).length ===
- main.floorIds.length
- ) {
- main.dom.mainTips.style.display = 'none';
- callback();
+ // 自动放缩最大化
+ const auto = core.getLocalStorage('autoScale');
+ if (auto == null) {
+ core.setLocalStorage('autoScale', true);
+ }
+ if (auto && !core.domStyle.isVertical) {
+ try {
+ core.plugin.utils.maxGameScale();
+ if (!core.getLocalStorage('fullscreen', false)) {
+ requestAnimationFrame(() => {
+ var style = getComputedStyle(main.dom.gameGroup);
+ var height = parseFloat(style.height);
+ if (height > window.innerHeight * 0.95) {
+ core.control.setDisplayScale(-1);
+ if (!core.isPlaying() && core.flags.enableHDCanvas) {
+ core.domStyle.ratio = Math.max(
+ window.devicePixelRatio || 1,
+ core.domStyle.scale
+ );
+ core.resize();
}
- });
- }
- };
- main.dom.body.appendChild(script);
-};
-
-////// 加载某一个楼层 //////
-main.prototype.loadFloor = function (floorId, callback) {
- var script = document.createElement('script');
- script.src = 'project/floors/' + floorId + '.js?v=' + this.version;
- main.dom.body.appendChild(script);
- script.onload = function () {
- callback(floorId);
- };
+ }
+ });
+ }
+ } catch {}
+ }
};
////// 加载过程提示 //////
@@ -422,17 +371,6 @@ main.prototype.setMainTipsText = function (text) {
main.dom.mainTips.innerHTML = text;
};
-main.prototype.log = function (e, error) {
- if (e) {
- if (error) return console.error(e);
- if (main.core && main.core.platform && !main.core.platform.isPC) {
- console.log(e.stack || e.toString());
- } else {
- console.log(e);
- }
- }
-};
-
main.prototype.createOnChoiceAnimation = function () {
var borderColor =
main.dom.startButtonGroup.style.caretColor || 'rgb(255, 215, 0)';
@@ -485,7 +423,7 @@ main.prototype.listen = function () {
////// 窗口大小变化时 //////
window.onresize = function () {
try {
- main.core.resize();
+ core.resize();
} catch (ee) {
console.error(ee);
}
@@ -497,11 +435,8 @@ main.prototype.listen = function () {
try {
if (e.keyCode === 27) e.preventDefault();
if (main.dom.inputDiv.style.display == 'block') return;
- if (
- main.core &&
- (main.core.isPlaying() || main.core.status.lockControl)
- )
- main.core.onkeyDown(e);
+ if (core && (core.isPlaying() || core.status.lockControl))
+ core.onkeyDown(e);
} catch (ee) {
console.error(ee);
}
@@ -530,7 +465,7 @@ main.prototype.listen = function () {
main.dom.levelChooseButtons.style.display == 'block'
) {
// ESC
- main.core.showStartAnimate(true);
+ core.showStartAnimate(true);
e.preventDefault();
}
e.stopPropagation();
@@ -549,12 +484,12 @@ main.prototype.listen = function () {
return;
}
if (
- main.core &&
- main.core.isPlaying &&
- main.core.status &&
- (main.core.isPlaying() || main.core.status.lockControl)
+ core &&
+ core.isPlaying &&
+ core.status &&
+ (core.isPlaying() || core.status.lockControl)
)
- main.core.onkeyUp(e);
+ core.onkeyUp(e);
} catch (ee) {
console.error(ee);
}
@@ -569,9 +504,9 @@ main.prototype.listen = function () {
main.dom.data.onmousedown = function (e) {
try {
e.stopPropagation();
- var loc = main.core.actions._getClickLoc(e.clientX, e.clientY);
+ var loc = core.actions._getClickLoc(e.clientX, e.clientY);
if (loc == null) return;
- main.core.ondown(loc);
+ core.ondown(loc);
} catch (ee) {
console.error(ee);
}
@@ -580,9 +515,9 @@ main.prototype.listen = function () {
////// 鼠标移动时 //////
main.dom.data.onmousemove = function (e) {
try {
- var loc = main.core.actions._getClickLoc(e.clientX, e.clientY);
+ var loc = core.actions._getClickLoc(e.clientX, e.clientY);
if (loc == null) return;
- main.core.onmove(loc);
+ core.onmove(loc);
} catch (ee) {
console.error(ee);
}
@@ -591,9 +526,9 @@ main.prototype.listen = function () {
////// 鼠标放开时 //////
main.dom.data.onmouseup = function (e) {
try {
- var loc = main.core.actions._getClickLoc(e.clientX, e.clientY);
+ var loc = core.actions._getClickLoc(e.clientX, e.clientY);
if (loc == null) return;
- main.core.onup(loc);
+ core.onup(loc);
} catch (ee) {
console.error(ee);
}
@@ -602,8 +537,8 @@ main.prototype.listen = function () {
////// 鼠标滑轮滚动时 //////
main.dom.data.onmousewheel = function (e) {
try {
- if (e.wheelDelta) main.core.onmousewheel(Math.sign(e.wheelDelta));
- else if (e.detail) main.core.onmousewheel(Math.sign(e.detail));
+ if (e.wheelDelta) core.onmousewheel(Math.sign(e.wheelDelta));
+ else if (e.detail) core.onmousewheel(Math.sign(e.detail));
} catch (ee) {
console.error(ee);
}
@@ -613,13 +548,13 @@ main.prototype.listen = function () {
main.dom.data.ontouchstart = function (e) {
try {
e.preventDefault();
- var loc = main.core.actions._getClickLoc(
+ var loc = core.actions._getClickLoc(
e.targetTouches[0].clientX,
e.targetTouches[0].clientY
);
if (loc == null) return;
main.lastTouchLoc = loc;
- main.core.ondown(loc);
+ core.ondown(loc);
} catch (ee) {
console.error(ee);
}
@@ -629,13 +564,13 @@ main.prototype.listen = function () {
main.dom.data.ontouchmove = function (e) {
try {
e.preventDefault();
- var loc = main.core.actions._getClickLoc(
+ var loc = core.actions._getClickLoc(
e.targetTouches[0].clientX,
e.targetTouches[0].clientY
);
if (loc == null) return;
main.lastTouchLoc = loc;
- main.core.onmove(loc);
+ core.onmove(loc);
} catch (ee) {
console.error(ee);
}
@@ -648,7 +583,7 @@ main.prototype.listen = function () {
if (main.lastTouchLoc == null) return;
var loc = main.lastTouchLoc;
delete main.lastTouchLoc;
- main.core.onup(loc);
+ core.onup(loc);
} catch (e) {
console.error(e);
}
@@ -663,7 +598,7 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.openBook(true);
+ if (core.isPlaying()) core.openBook(true);
};
////// 点击状态栏中的楼层传送器/装备栏时 //////
@@ -676,11 +611,11 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) {
- if (!main.core.flags.equipboxButton) {
- main.core.useFly(true);
+ if (core.isPlaying()) {
+ if (!core.flags.equipboxButton) {
+ core.useFly(true);
} else {
- main.core.openEquipbox(true);
+ core.openEquipbox(true);
}
}
};
@@ -694,8 +629,8 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) {
- main.core.openToolbox(core.status.event.id != 'equipbox');
+ if (core.isPlaying()) {
+ core.openToolbox(core.status.event.id != 'equipbox');
}
};
@@ -707,7 +642,7 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.openEquipbox(true);
+ if (core.isPlaying()) core.openEquipbox(true);
};
////// 点击状态栏中的虚拟键盘时 //////
@@ -719,7 +654,7 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.openKeyBoard(true);
+ if (core.isPlaying()) core.openKeyBoard(true);
};
////// 点击状态栏中的快捷商店时 //////
@@ -731,14 +666,14 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.openQuickShop(true);
+ if (core.isPlaying()) core.openQuickShop(true);
};
////// 点击金币时也可以开启快捷商店 //////
main.statusBar.image.money.onclick = function (e) {
e.stopPropagation();
- if (main.core.isPlaying()) main.core.openQuickShop(true);
+ if (core.isPlaying()) core.openQuickShop(true);
};
////// 点击楼梯图标也可以浏览地图 //////
@@ -746,8 +681,8 @@ main.prototype.listen = function () {
e.stopPropagation();
if (
- main.core &&
- main.core.isPlaying() &&
+ core &&
+ core.isPlaying() &&
!core.isMoving() &&
!core.status.lockControl
) {
@@ -764,7 +699,7 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.save(true);
+ if (core.isPlaying()) core.save(true);
};
////// 点击状态栏中的读档按钮时 //////
@@ -776,7 +711,7 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.load(true);
+ if (core.isPlaying()) core.load(true);
};
////// 点击状态栏中的系统菜单时 //////
@@ -788,18 +723,18 @@ main.prototype.listen = function () {
return;
}
- if (main.core.isPlaying()) main.core.openSettings(true);
+ if (core.isPlaying()) core.openSettings(true);
};
////// 点击工具栏时 //////
main.dom.hard.onclick = function () {
- main.core.control.setToolbarButton(!core.domStyle.toolbarBtn);
+ core.control.setToolbarButton(!core.domStyle.toolbarBtn);
};
////// 手机端的按钮1-7 //////
main.statusBar.image.btn1.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 49,
altKey: core.getLocalStorage('altKey')
});
@@ -807,7 +742,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn2.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 50,
altKey: core.getLocalStorage('altKey')
});
@@ -815,7 +750,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn3.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 51,
altKey: core.getLocalStorage('altKey')
});
@@ -823,7 +758,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn4.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 52,
altKey: core.getLocalStorage('altKey')
});
@@ -831,7 +766,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn5.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 53,
altKey: core.getLocalStorage('altKey')
});
@@ -839,7 +774,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn6.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 54,
altKey: core.getLocalStorage('altKey')
});
@@ -847,7 +782,7 @@ main.prototype.listen = function () {
main.statusBar.image.btn7.onclick = function (e) {
e.stopPropagation();
- main.core.onkeyUp({
+ core.onkeyUp({
keyCode: 55,
altKey: core.getLocalStorage('altKey')
});
@@ -867,9 +802,9 @@ main.prototype.listen = function () {
};
window.onblur = function () {
- if (main.core && main.core.control) {
+ if (core && core.control) {
try {
- main.core.control.checkAutosave();
+ core.control.checkAutosave();
} catch (e) {}
}
};
diff --git a/public/project/functions.js b/public/project/functions.js
index 135701a..5aa3940 100644
--- a/public/project/functions.js
+++ b/public/project/functions.js
@@ -1958,7 +1958,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
try {
eval(core.floors[core.status.floorId].parallelDo);
} catch (e) {
- main.log(e);
+ console.error(e);
}
}
}
diff --git a/public/project/plugins.js b/public/project/plugins.js
index 22e05cf..bcb52fe 100644
--- a/public/project/plugins.js
+++ b/public/project/plugins.js
@@ -1,28 +1,8 @@
-///
-
var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = {
init: function () {
// 这看不到插件,插件全放到plugin文件夹里面了,要看的话去 关于游戏 的开源地址里面看
// 直接把仓库clone下来,或者下载zip都行
// 脚本编辑同理
this._afterLoadResources = function () {};
- },
- pluginUtils: function () {
- // 保留这个函数,以保证main.js能够使用
- this.maxGameScale = function (n = 0) {
- const index = core.domStyle.availableScale.indexOf(
- core.domStyle.scale
- );
- core.control.setDisplayScale(
- core.domStyle.availableScale.length - 1 - index - n
- );
- if (!core.isPlaying() && core.flags.enableHDCanvas) {
- core.domStyle.ratio = Math.max(
- window.devicePixelRatio || 1,
- core.domStyle.scale
- );
- core.resize();
- }
- };
}
};
diff --git a/src/types/core.d.ts b/src/types/core.d.ts
index f7a18d3..353f2d7 100644
--- a/src/types/core.d.ts
+++ b/src/types/core.d.ts
@@ -1263,6 +1263,12 @@ interface Main extends MainData {
*/
init(mode: 'play' | 'editor', callback?: () => void): void;
+ /**
+ * 加载一个脚本
+ * @param src 脚本路径
+ */
+ loadScript(src: string): Promise;
+
/**
* 动态加载js文件
* @param dir 加载的js文件的目录