From 97c5998a016e6fc61502f5958cf957eabdbd4cf0 Mon Sep 17 00:00:00 2001 From: strawberry42271 <2806566736@qq.com> Date: Wed, 1 Jan 2025 14:05:45 +0800 Subject: [PATCH] =?UTF-8?q?music=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _saves/Eustia_autoSave | 2 +- _server/config.json | 2 +- _server/table/plugins.comment.js | 6 + index.html | 401 +++---- main.js | 1781 +++++++++++++++--------------- project/plugins.js | 447 ++++---- 6 files changed, 1313 insertions(+), 1326 deletions(-) diff --git a/_saves/Eustia_autoSave b/_saves/Eustia_autoSave index 8dbd77d..450e619 100644 --- a/_saves/Eustia_autoSave +++ b/_saves/Eustia_autoSave @@ -1 +1 @@ -N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0ADgDtWZEMwFNmmDijDMI6HOQHNG0kAGFmTERABuqIuQp8WADwMFLRvhasgWysxfIPmqAuUkBrZyEQ4wX0Z/QJQiD3soARwAT3dyHFMbFAicAEcAV3oTHAFMVABtAF1yeilGdDoQAGMorDFMSpRQACMYHzDySDiwgF9yTBh5On6QdKy+JuBe0ehqqsR6XGrMeijODJtycxQAVnIe8NHINimQMpxGABF8LQhUbAzFEAyFACF8AHc8AQAZelYFHyKEezwA+mCFDhEBCDAAmYgANjhAE4AByItHkCGwMQwsHwpGojFY0S4ZhNAqgRxqAA6GQALDgCC16btqgy4SIWJNChotIwKFBVCAiv1qSo6YzmayMuzOdzmLyUAUQAAregZVgZMSi8UgGmcelMllsjlclxKykgADSABUAGp60gSkVoekAdjhyM9cLAJEtytV9odADEuWKXQbJUaMl6fXG/QH7Fa+awoBBEF5Ys7XVKTbL5RaU0GQC16BRXhlaJG87GTcwzQrA9aNcwoJgxMJa9G3SBjczG3LzYrS+gqEIBLohSKe4b3dKCEOi6PreP6FOZxw5zGF/G4b7/au+Rroe3c72pfvD8meWvsHhCMmsLh8ARi9qu9UKF2RJ+hN+XYRvq879omCZekeLZ8qY9DtrBXbEBeoG+hBSbHiqIAIVACFCO+eolBgXjZKgsjyM8P6wMgKTYmClGIOoGZwLCaC4MgtEXIwAASG6YCxxS0RAODMLoOC/FA1QsdMtG6PQ6AXPiVQvo+SEgrATyjC0Xw/AAgpgnbVF4VySG4KACBkEAQMcGbQN8sCUoRWA4MqhgppgHQROgfB4NR4TkC+vhsPQvi8b4tQCEEQXzDIcgKP5narFg9DVGcgydhAdpMNIiJekQPCktUGSwLAmVukQaIegyPCIpYtV1ZYDLWPEZaSJgQnNYwUQ5jRYxJM1LStUJxksOwzV8FAclRMNbDSKkpjYMw02jT1nWiVcSw4CsEA9BEAICHAOAAMpSMqnmdrAwI5XCeVojMRjMFRnAYdJIA0BkUicDaUDhuoDKsAAvCIuhyE8UyjKJ9lrBFC4ojgADMiBsi0uwEJ6zAoojGQou+qNymiuwMmaBBgPSKKIkQgTkNq9DUSAiItEyLSIB6aJgkQzAMswYIMmAHoomCaKIHDLRgrscO7HCAQMogiBgCiDIiKsZUeuLYsMvLcPy4ivRAA=== \ No newline at end of file +N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0ADgDtWZEMwFNmmDijDMI6HOQHNG0kAGFmTERABuqIuQp8WADwMFLRvhasgWysxfIPmqAuUkBrZyEQ4wX0Z/QJQiD3soARwAT3dyHFMbFAicAEcAV3oTHAFMVABtAF1yeilGdDoQAGMorDFMSpRQACMYHzDySDiwgF9yTBh5On6QdKy+JtB0AHc4RBI+0ehqqsR6XGrMeijODJtycxQAVnIe8NHINimQMpxGABF8LQhUbAzFEAyFACF8GbwAgAMvRWBR8ih3p8APrQhQ4RCw1AAJgA7MiAMyWDEADlOIFhsDEiOhKPRWIIuPxzFwzCaBVAjjUAB0MgAWHAEFqs47VNnIkQsSaFDRaRgUKCqEBFfqMlQs9mc7kZXn8wXMYUoAogABW9AyrAyYmlspATM4rI5XJ5fIFLg19JAAGkACoANRNpDlUrQrPRADZkX7kWASPbNdrXW6AGICmVes3yi0ZANBlMhsP2B0i1hQCCILyxT3ehVW5Wqu1ZiMgFr0CjfDK0eMl5NW5g2tXhx165hQTBiYTNxM+kCWzntlW29XV9BUIQCXQSqVD82+xUECcV6eO2f0BdLjgrpNr1PB0PbkV6hG94vDhWn9PnrsirC4fDEESvvCESuGgfVCgBxEP8hAAgc41NVdR3TQMz0zIVHVMeheyQgcPyPEdg1gx94OzLUQFQqBUKEAgIJKDAvGyVBZHkT5ANgZAUnIWF6MQdQ8zgJE0FwZBmOhO5GAACT3TAuOKPiIBwZhdBwIEoGqLjgFGWFdHodA7hJKov3fRYoVGFp/kBABBTB+2qLwHkkNwUAEDIIAgPj1nQZgWkkzTmgwbBvw/LUCiIDFjhKYoZUuPNoABWB6XIrAcE1Qws0wDoInQPg8EY8JyFfXw2HoXwRN8WoBCCHLVhkOQFEy/ttiwehqhuQZ+wgF0mGkY4iHanEMQATn9HhLAILrkWRIg2XIaoMlgWBmp9Ea2S6nh8WMeIa0kTBJOWxgoiLJixiSZaWlWyTLJYdhlr4KA1KiY62GkVJTGwZhrtOnbNpkh4NhwLYIB6CJQQEOAcAAZSkTVkv7WAIVRUj5uOXpRlYzgLw87TCEWUAhUKDwsdIbHcZx/GCgAWkMYnSFJ8nDA8CmyZJ2maZpkosZC8gaAyKROCdKBY3UNlWAAXhEXQ5A+KZRhkyKdiKtcupwDFEB5FpjgIP1mC6+WMi60jlZVPE2RtAgwFZHqiECchDXoRiQH9FoORaRBURxaEiGYNlmGhNkwFRLroRxRAMRaaFjgC5EAjZRBEDALq2REbYZtRALUXCcJ/QxDFUV6IA \ No newline at end of file diff --git a/_server/config.json b/_server/config.json index 5d318ea..95571db 100644 --- a/_server/config.json +++ b/_server/config.json @@ -1 +1 @@ -{"viewportLoc":[0,0],"editorLastFloorId":"street01"} \ No newline at end of file +{"viewportLoc":[0,0],"editorLastFloorId":"street01","lastUsed":[{"idnum":43,"id":"sword5","images":"items","y":54,"recent":1735710095206,"frequent":1},{"idnum":41,"id":"sword4","images":"items","y":53,"recent":1735710093206,"frequent":1},{"idnum":39,"id":"sword3","images":"items","y":52,"recent":1735710091127,"frequent":1},{"idnum":37,"id":"sword2","images":"items","y":51,"recent":1735710088598,"frequent":1},{"idnum":35,"id":"sword1","images":"items","y":50,"recent":1735710086310,"frequent":1},{"idnum":36,"id":"shield1","images":"items","y":55,"recent":1735710097750,"frequent":1}]} \ No newline at end of file diff --git a/_server/table/plugins.comment.js b/_server/table/plugins.comment.js index 3b78f89..a02e298 100644 --- a/_server/table/plugins.comment.js +++ b/_server/table/plugins.comment.js @@ -116,6 +116,12 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "_type": "textarea", "_range": "typeof(thiseval)=='string' || thiseval==null", "_data": "警告消息" + }, + "musicMode": { + "_leaf": true, + "_type": "textarea", + "_range": "typeof(thiseval)=='string' || thiseval==null", + "_data": "音乐鉴赏" } } if (obj[key]) return obj[key]; diff --git a/index.html b/index.html index 2ffec0e..dceab9b 100644 --- a/index.html +++ b/index.html @@ -1,205 +1,226 @@ - - - - - - + + + + + HTML5魔塔 - - - - - - - - - + + + + + + + + + - -
-
- + +
+
+
-
-

请稍候...

- -
-
-
-
-
-

资源即将开始加载

-

HTML5魔塔游戏平台,享受更多魔塔游戏:
https://h5mota.com/

-
- - -
-
- START GAME - LOAD GAME - CG MODE - REPLAY MODE -
-
-
+
+

请稍候...

+ +
+
+
+
+
+

资源即将开始加载

+

+ HTML5魔塔游戏平台,享受更多魔塔游戏:
https://h5mota.com/ +

-
-

-

-

+ + +
+
+ START GAME + LOAD GAME + CG MODE + MUSIC MODE + REPLAY MODE +
+
+
+
+
+

+

+

+
+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ +

+
+
+ + + + +
+
+ + + +
+
+ + +
-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- -

-
-
- - - - -
-
- - - -
-
- - - -
- - -
-
- - - - - - - - - - - - - - - - -

-
-
-
-
- - - - - - - - - - 此浏览器不支持HTML5 - -
+ + +
+
+ + + + + + + + + + + + + + + + +

+
+
+
+
+ + + + + + + + + + 此浏览器不支持HTML5 + +
-
-
-

请输入文字...

- - - -
+
+
+

请输入文字...

+ + + +
- - - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/main.js b/main.js index d331ff9..a9242ca 100644 --- a/main.js +++ b/main.js @@ -1,996 +1,967 @@ /// function main() { - //------------------------ 用户修改内容 ------------------------// + //------------------------ 用户修改内容 ------------------------// - this.version = '2.10.3'; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 + this.version = "2.10.3"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 - this.useCompress = false; // 是否使用压缩文件 - // 当你即将发布你的塔时,请使用“JS代码压缩工具”将所有js代码进行压缩,然后将这里的useCompress改为true。 - // 请注意,只有useCompress是false时才会读取floors目录下的文件,为true时会直接读取libs目录下的floors.min.js文件。 - // 如果要进行剧本的修改请务必将其改成false。 + this.useCompress = false; // 是否使用压缩文件 + // 当你即将发布你的塔时,请使用“JS代码压缩工具”将所有js代码进行压缩,然后将这里的useCompress改为true。 + // 请注意,只有useCompress是false时才会读取floors目录下的文件,为true时会直接读取libs目录下的floors.min.js文件。 + // 如果要进行剧本的修改请务必将其改成false。 - this.bgmRemote = false; // 是否采用远程BGM - this.bgmRemoteRoot = 'https://h5mota.com/music/'; // 远程BGM的根目录 + this.bgmRemote = false; // 是否采用远程BGM + this.bgmRemoteRoot = "https://h5mota.com/music/"; // 远程BGM的根目录 - this.isCompetition = false; // 是否是比赛模式 - this.enableSplitChunks = true; // 允许拆分压缩包 - this.savePages = 1000; // 存档页数,每页可存5个;默认为1000页5000个存档 - this.criticalUseLoop = 1; // 循环临界的分界 + this.isCompetition = false; // 是否是比赛模式 + this.enableSplitChunks = true; // 允许拆分压缩包 + this.savePages = 1000; // 存档页数,每页可存5个;默认为1000页5000个存档 + this.criticalUseLoop = 1; // 循环临界的分界 - //------------------------ 用户修改内容 END ------------------------// + //------------------------ 用户修改内容 END ------------------------// - this.dom = { - body: document.body, - gameGroup: document.getElementById('gameGroup'), - mainTips: document.getElementById('mainTips'), - musicBtn: document.getElementById('musicBtn'), - enlargeBtn: document.createElement('img'), - startPanel: document.getElementById('startPanel'), - startTop: document.getElementById('startTop'), - startTopProgressBar: document.getElementById('startTopProgressBar'), - startTopProgress: document.getElementById('startTopProgress'), - startTopLoadTips: document.getElementById('startTopLoadTips'), - startBackground: document.getElementById('startBackground'), - startLogo: document.getElementById('startLogo'), - startButtonGroup: document.getElementById('startButtonGroup'), - floorMsgGroup: document.getElementById('floorMsgGroup'), - logoLabel: document.getElementById('logoLabel'), - versionLabel: document.getElementById('versionLabel'), - floorNameLabel: document.getElementById('floorNameLabel'), - statusBar: document.getElementById('statusBar'), - status: document.getElementsByClassName('status'), - toolBar: document.getElementById('toolBar'), - tools: document.getElementsByClassName('tools'), - gameCanvas: document.getElementsByClassName('gameCanvas'), - gif: document.getElementById('gif'), - gif2: document.getElementById('gif2'), - gameDraw: document.getElementById('gameDraw'), - startButtons: document.getElementById('startButtons'), - playGame: document.getElementById('playGame'), - loadGame: document.getElementById('loadGame'), - CGMode: document.getElementById('CGMode'), - replayGame: document.getElementById('replayGame'), - levelChooseButtons: document.getElementById('levelChooseButtons'), - data: document.getElementById('data'), - statusLabels: document.getElementsByClassName('statusLabel'), - statusTexts: document.getElementsByClassName('statusText'), - floorCol: document.getElementById('floorCol'), - nameCol: document.getElementById('nameCol'), - lvCol: document.getElementById('lvCol'), - hpmaxCol: document.getElementById('hpmaxCol'), - hpCol: document.getElementById('hpCol'), - manaCol: document.getElementById('manaCol'), - atkCol: document.getElementById('atkCol'), - defCol: document.getElementById('defCol'), - mdefCol: document.getElementById('mdefCol'), - moneyCol: document.getElementById('moneyCol'), - expCol: document.getElementById('expCol'), - upCol: document.getElementById('upCol'), - keyCol: document.getElementById('keyCol'), - pzfCol: document.getElementById('pzfCol'), - debuffCol: document.getElementById('debuffCol'), - skillCol: document.getElementById('skillCol'), - hard: document.getElementById('hard'), - statusCanvas: document.getElementById('statusCanvas'), - statusCanvasCtx: document - .getElementById('statusCanvas') - .getContext('2d'), - inputDiv: document.getElementById('inputDiv'), - inputMessage: document.getElementById('inputMessage'), - inputBox: document.getElementById('inputBox'), - inputYes: document.getElementById('inputYes'), - inputNo: document.getElementById('inputNo'), - next: document.getElementById('next') - }; - this.mode = 'play'; - this.loadList = [ - 'loader', - 'control', - 'utils', - 'items', - 'icons', - 'maps', - 'enemys', - 'events', - 'actions', - 'data', - 'ui', - 'extensions', - 'core' - ]; - this.pureData = [ - 'data', - 'enemys', - 'icons', - 'maps', - 'items', - 'functions', - 'events', - 'plugins' - ]; - this.materials = [ - 'animates', - 'enemys', - 'items', - 'npcs', - 'terrains', - 'enemy48', - 'npc48', - 'icons' - ]; + this.dom = { + body: document.body, + gameGroup: document.getElementById("gameGroup"), + mainTips: document.getElementById("mainTips"), + musicBtn: document.getElementById("musicBtn"), + enlargeBtn: document.createElement("img"), + startPanel: document.getElementById("startPanel"), + startTop: document.getElementById("startTop"), + startTopProgressBar: document.getElementById("startTopProgressBar"), + startTopProgress: document.getElementById("startTopProgress"), + startTopLoadTips: document.getElementById("startTopLoadTips"), + startBackground: document.getElementById("startBackground"), + startLogo: document.getElementById("startLogo"), + startButtonGroup: document.getElementById("startButtonGroup"), + floorMsgGroup: document.getElementById("floorMsgGroup"), + logoLabel: document.getElementById("logoLabel"), + versionLabel: document.getElementById("versionLabel"), + floorNameLabel: document.getElementById("floorNameLabel"), + statusBar: document.getElementById("statusBar"), + status: document.getElementsByClassName("status"), + toolBar: document.getElementById("toolBar"), + tools: document.getElementsByClassName("tools"), + gameCanvas: document.getElementsByClassName("gameCanvas"), + gif: document.getElementById("gif"), + gif2: document.getElementById("gif2"), + gameDraw: document.getElementById("gameDraw"), + startButtons: document.getElementById("startButtons"), + playGame: document.getElementById("playGame"), + loadGame: document.getElementById("loadGame"), + CGMode: document.getElementById("CGMode"), + musicMode: document.getElementById("musicMode"), + replayGame: document.getElementById("replayGame"), + levelChooseButtons: document.getElementById("levelChooseButtons"), + data: document.getElementById("data"), + statusLabels: document.getElementsByClassName("statusLabel"), + statusTexts: document.getElementsByClassName("statusText"), + floorCol: document.getElementById("floorCol"), + nameCol: document.getElementById("nameCol"), + lvCol: document.getElementById("lvCol"), + hpmaxCol: document.getElementById("hpmaxCol"), + hpCol: document.getElementById("hpCol"), + manaCol: document.getElementById("manaCol"), + atkCol: document.getElementById("atkCol"), + defCol: document.getElementById("defCol"), + mdefCol: document.getElementById("mdefCol"), + moneyCol: document.getElementById("moneyCol"), + expCol: document.getElementById("expCol"), + upCol: document.getElementById("upCol"), + keyCol: document.getElementById("keyCol"), + pzfCol: document.getElementById("pzfCol"), + debuffCol: document.getElementById("debuffCol"), + skillCol: document.getElementById("skillCol"), + hard: document.getElementById("hard"), + statusCanvas: document.getElementById("statusCanvas"), + statusCanvasCtx: document.getElementById("statusCanvas").getContext("2d"), + inputDiv: document.getElementById("inputDiv"), + inputMessage: document.getElementById("inputMessage"), + inputBox: document.getElementById("inputBox"), + inputYes: document.getElementById("inputYes"), + inputNo: document.getElementById("inputNo"), + next: document.getElementById("next"), + }; + this.mode = "play"; + this.loadList = [ + "loader", + "control", + "utils", + "items", + "icons", + "maps", + "enemys", + "events", + "actions", + "data", + "ui", + "extensions", + "core", + ]; + this.pureData = [ + "data", + "enemys", + "icons", + "maps", + "items", + "functions", + "events", + "plugins", + ]; + this.materials = [ + "animates", + "enemys", + "items", + "npcs", + "terrains", + "enemy48", + "npc48", + "icons", + ]; - this.statusBar = { - image: { - floor: document.getElementById('img-floor'), - name: document.getElementById('img-name'), - lv: document.getElementById('img-lv'), - hpmax: document.getElementById('img-hpmax'), - hp: document.getElementById('img-hp'), - mana: document.getElementById('img-mana'), - atk: document.getElementById('img-atk'), - def: document.getElementById('img-def'), - mdef: document.getElementById('img-mdef'), - money: document.getElementById('img-money'), - exp: document.getElementById('img-exp'), - up: document.getElementById('img-up'), - skill: document.getElementById('img-skill'), - book: document.getElementById('img-book'), - fly: document.getElementById('img-fly'), - toolbox: document.getElementById('img-toolbox'), - keyboard: document.getElementById('img-keyboard'), - shop: document.getElementById('img-shop'), - save: document.getElementById('img-save'), - load: document.getElementById('img-load'), - settings: document.getElementById('img-settings'), - btn1: document.getElementById('img-btn1'), - btn2: document.getElementById('img-btn2'), - btn3: document.getElementById('img-btn3'), - btn4: document.getElementById('img-btn4'), - btn5: document.getElementById('img-btn5'), - btn6: document.getElementById('img-btn6'), - btn7: document.getElementById('img-btn7'), - btn8: document.getElementById('img-btn8') - }, - icons: { - floor: 0, - name: null, - lv: 1, - hpmax: 2, - hp: 3, - atk: 4, - def: 5, - mdef: 6, - money: 7, - exp: 8, - up: 9, - book: 10, - fly: 11, - toolbox: 12, - keyboard: 13, - shop: 14, - save: 15, - load: 16, - settings: 17, - play: 18, - pause: 19, - stop: 20, - speedDown: 21, - speedUp: 22, - rewind: 23, - equipbox: 24, - mana: 25, - skill: 26, - btn1: 27, - btn2: 28, - btn3: 29, - btn4: 30, - btn5: 31, - btn6: 32, - btn7: 33, - btn8: 34 - }, - floor: document.getElementById('floor'), - name: document.getElementById('name'), - lv: document.getElementById('lv'), - hpmax: document.getElementById('hpmax'), - hp: document.getElementById('hp'), - mana: document.getElementById('mana'), - atk: document.getElementById('atk'), - def: document.getElementById('def'), - mdef: document.getElementById('mdef'), - money: document.getElementById('money'), - exp: document.getElementById('exp'), - up: document.getElementById('up'), - skill: document.getElementById('skill'), - yellowKey: document.getElementById('yellowKey'), - blueKey: document.getElementById('blueKey'), - redKey: document.getElementById('redKey'), - greenKey: document.getElementById('greenKey'), - poison: document.getElementById('poison'), - weak: document.getElementById('weak'), - curse: document.getElementById('curse'), - pickaxe: document.getElementById('pickaxe'), - bomb: document.getElementById('bomb'), - fly: document.getElementById('fly'), - hard: document.getElementById('hard') - }; - this.floors = {}; - this.canvas = {}; + this.statusBar = { + image: { + floor: document.getElementById("img-floor"), + name: document.getElementById("img-name"), + lv: document.getElementById("img-lv"), + hpmax: document.getElementById("img-hpmax"), + hp: document.getElementById("img-hp"), + mana: document.getElementById("img-mana"), + atk: document.getElementById("img-atk"), + def: document.getElementById("img-def"), + mdef: document.getElementById("img-mdef"), + money: document.getElementById("img-money"), + exp: document.getElementById("img-exp"), + up: document.getElementById("img-up"), + skill: document.getElementById("img-skill"), + book: document.getElementById("img-book"), + fly: document.getElementById("img-fly"), + toolbox: document.getElementById("img-toolbox"), + keyboard: document.getElementById("img-keyboard"), + shop: document.getElementById("img-shop"), + save: document.getElementById("img-save"), + load: document.getElementById("img-load"), + settings: document.getElementById("img-settings"), + btn1: document.getElementById("img-btn1"), + btn2: document.getElementById("img-btn2"), + btn3: document.getElementById("img-btn3"), + btn4: document.getElementById("img-btn4"), + btn5: document.getElementById("img-btn5"), + btn6: document.getElementById("img-btn6"), + btn7: document.getElementById("img-btn7"), + btn8: document.getElementById("img-btn8"), + }, + icons: { + floor: 0, + name: null, + lv: 1, + hpmax: 2, + hp: 3, + atk: 4, + def: 5, + mdef: 6, + money: 7, + exp: 8, + up: 9, + book: 10, + fly: 11, + toolbox: 12, + keyboard: 13, + shop: 14, + save: 15, + load: 16, + settings: 17, + play: 18, + pause: 19, + stop: 20, + speedDown: 21, + speedUp: 22, + rewind: 23, + equipbox: 24, + mana: 25, + skill: 26, + btn1: 27, + btn2: 28, + btn3: 29, + btn4: 30, + btn5: 31, + btn6: 32, + btn7: 33, + btn8: 34, + }, + floor: document.getElementById("floor"), + name: document.getElementById("name"), + lv: document.getElementById("lv"), + hpmax: document.getElementById("hpmax"), + hp: document.getElementById("hp"), + mana: document.getElementById("mana"), + atk: document.getElementById("atk"), + def: document.getElementById("def"), + mdef: document.getElementById("mdef"), + money: document.getElementById("money"), + exp: document.getElementById("exp"), + up: document.getElementById("up"), + skill: document.getElementById("skill"), + yellowKey: document.getElementById("yellowKey"), + blueKey: document.getElementById("blueKey"), + redKey: document.getElementById("redKey"), + greenKey: document.getElementById("greenKey"), + poison: document.getElementById("poison"), + weak: document.getElementById("weak"), + curse: document.getElementById("curse"), + pickaxe: document.getElementById("pickaxe"), + bomb: document.getElementById("bomb"), + fly: document.getElementById("fly"), + hard: document.getElementById("hard"), + }; + this.floors = {}; + this.canvas = {}; - this.__VERSION__ = '2.10.3'; - this.__VERSION_CODE__ = 512; + this.__VERSION__ = "2.10.3"; + this.__VERSION_CODE__ = 512; } main.prototype.init = function (mode, callback) { - for (var i = 0; i < main.dom.gameCanvas.length; i++) { - main.canvas[main.dom.gameCanvas[i].id] = - main.dom.gameCanvas[i].getContext('2d'); - } - main.mode = mode; + for (var i = 0; i < main.dom.gameCanvas.length; i++) { + main.canvas[main.dom.gameCanvas[i].id] = + main.dom.gameCanvas[i].getContext("2d"); + } + main.mode = mode; - 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.loadJs("project", main.pureData, function () { + var mainData = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main; + for (var ii in mainData) main[ii] = mainData[ii]; - main.dom.startLogo.style = main.styles.startLogoStyle; - main.dom.startButtonGroup.style = main.styles.startButtonsStyle; - main.levelChoose = main.levelChoose || []; - main.levelChoose.forEach(function (value) { - var span = document.createElement('span'); - span.setAttribute('class', 'startButton'); - span.innerText = value.title || ''; - (function (span, str_) { - span.onclick = function () { - core.events.startGame(str_); - }; - })(span, value.name || ''); - main.dom.levelChooseButtons.appendChild(span); - }); - main.createOnChoiceAnimation(); - 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]; - }); - main.core.init(coreData, callback); - main.core.resize(); - // 自动放缩最大化 - if (!main.replayChecking) { - if (core.getLocalStorage('autoScale') == null) { - core.setLocalStorage('autoScale', true); - } - if ( - core.getLocalStorage('autoScale') && - !core.domStyle.isVertical - ) { - try { - if (main.core) { - var index = - main.core.domStyle.availableScale.indexOf( - core.domStyle.scale - ); - main.core.control.setDisplayScale( - main.core.domStyle.availableScale.length - - 1 - - index - ); - if ( - !main.core.isPlaying() && - main.core.flags.enableHDCanvas - ) { - main.core.domStyle.ratio = Math.max( - window.devicePixelRatio || 1, - main.core.domStyle.scale - ); - main.core.resize(); - } - requestAnimationFrame(function () { - var style = getComputedStyle( - main.dom.gameGroup - ); - var height = parseFloat(style.height); - if (height > window.innerHeight * 0.95) { - main.core.control.setDisplayScale(-1); - if ( - !main.core.isPlaying() && - main.core.flags.enableHDCanvas - ) { - main.core.domStyle.ratio = Math.max( - window.devicePixelRatio || 1, - main.core.domStyle.scale - ); - main.core.resize(); - } - } - }); - } - } catch (e) { - console.error(e); - } - } - } - }); - }); + main.dom.startLogo.style = main.styles.startLogoStyle; + main.dom.startButtonGroup.style = main.styles.startButtonsStyle; + main.levelChoose = main.levelChoose || []; + main.levelChoose.forEach(function (value) { + var span = document.createElement("span"); + span.setAttribute("class", "startButton"); + span.innerText = value.title || ""; + (function (span, str_) { + span.onclick = function () { + core.events.startGame(str_); + }; + })(span, value.name || ""); + main.dom.levelChooseButtons.appendChild(span); }); + main.createOnChoiceAnimation(); + 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]; + }); + main.core.init(coreData, callback); + main.core.resize(); + // 自动放缩最大化 + if (!main.replayChecking) { + if (core.getLocalStorage("autoScale") == null) { + core.setLocalStorage("autoScale", true); + } + if (core.getLocalStorage("autoScale") && !core.domStyle.isVertical) { + try { + if (main.core) { + var index = main.core.domStyle.availableScale.indexOf( + core.domStyle.scale + ); + main.core.control.setDisplayScale( + main.core.domStyle.availableScale.length - 1 - index + ); + if (!main.core.isPlaying() && main.core.flags.enableHDCanvas) { + main.core.domStyle.ratio = Math.max( + window.devicePixelRatio || 1, + main.core.domStyle.scale + ); + main.core.resize(); + } + requestAnimationFrame(function () { + var style = getComputedStyle(main.dom.gameGroup); + var height = parseFloat(style.height); + if (height > window.innerHeight * 0.95) { + main.core.control.setDisplayScale(-1); + if ( + !main.core.isPlaying() && + main.core.flags.enableHDCanvas + ) { + main.core.domStyle.ratio = Math.max( + window.devicePixelRatio || 1, + main.core.domStyle.scale + ); + main.core.resize(); + } + } + }); + } + } catch (e) { + console.error(e); + } + } + } + }); + }); + }); }; ////// 动态加载所有核心JS文件 ////// main.prototype.loadJs = function (dir, loadList, callback) { - // 加载js - main.setMainTipsText('正在加载核心js文件...'); + // 加载js + main.setMainTipsText("正在加载核心js文件..."); - if (this.useCompress) { - main.loadMod(dir, dir, function () { - callback(); - }); - } 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(); - } - }); + if (this.useCompress) { + main.loadMod(dir, dir, function () { + callback(); + }); + } 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(); } + }); } + } }; ////// 加载某一个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); + 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); }; ////// 动态加载所有楼层(剧本) ////// 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; - } - - // 高层塔优化 - var script = document.createElement('script'); - script.src = - '__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(); - } - }); - } - }; + // 加载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; + } + + // 高层塔优化 + var script = document.createElement("script"); + script.src = + "__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(); + } + }); + } + }; + 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); - }; + var script = document.createElement("script"); + script.src = "project/floors/" + floorId + ".js?v=" + this.version; + main.dom.body.appendChild(script); + script.onload = function () { + callback(floorId); + }; }; ////// 加载过程提示 ////// main.prototype.setMainTipsText = function (text) { - main.dom.mainTips.innerHTML = 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); - } + 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)'; - // get rgb value - var rgb = - /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*\d+\s*)?\)$/.exec( - borderColor - ); - if (rgb != null) { - var value = rgb[1] + ', ' + rgb[2] + ', ' + rgb[3]; - var style = document.createElement('style'); - style.type = 'text/css'; - var keyFrames = - 'onChoice { ' + - '0% { border-color: rgba(' + - value + - ', 0.9); } ' + - '50% { border-color: rgba(' + - value + - ', 0.3); } ' + - '100% { border-color: rgba(' + - value + - ', 0.9); } ' + - '}'; - style.innerHTML = - '@-webkit-keyframes ' + keyFrames + ' @keyframes ' + keyFrames; - document.body.appendChild(style); - } + var borderColor = + main.dom.startButtonGroup.style.caretColor || "rgb(255, 215, 0)"; + // get rgb value + var rgb = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*\d+\s*)?\)$/.exec( + borderColor + ); + if (rgb != null) { + var value = rgb[1] + ", " + rgb[2] + ", " + rgb[3]; + var style = document.createElement("style"); + style.type = "text/css"; + var keyFrames = + "onChoice { " + + "0% { border-color: rgba(" + + value + + ", 0.9); } " + + "50% { border-color: rgba(" + + value + + ", 0.3); } " + + "100% { border-color: rgba(" + + value + + ", 0.9); } " + + "}"; + style.innerHTML = + "@-webkit-keyframes " + keyFrames + " @keyframes " + keyFrames; + document.body.appendChild(style); + } }; ////// 选项 ////// main.prototype.selectButton = function (index) { - var select = function (children) { - index = (index + children.length) % children.length; - for (var i = 0; i < children.length; ++i) { - children[i].classList.remove('onChoiceAnimate'); - } - children[index].classList.add('onChoiceAnimate'); - if (main.selectedButton == index) { - children[index].click(); - } else { - main.selectedButton = index; - } - }; - - if (core.dom.startPanel.style.display != 'block') return; - - if (main.dom.startButtons.style.display == 'block') { - select(main.dom.startButtons.children); - } else if (main.dom.levelChooseButtons.style.display == 'block') { - select(main.dom.levelChooseButtons.children); + var select = function (children) { + index = (index + children.length) % children.length; + for (var i = 0; i < children.length; ++i) { + children[i].classList.remove("onChoiceAnimate"); } + children[index].classList.add("onChoiceAnimate"); + if (main.selectedButton == index) { + children[index].click(); + } else { + main.selectedButton = index; + } + }; + + if (core.dom.startPanel.style.display != "block") return; + + if (main.dom.startButtons.style.display == "block") { + select(main.dom.startButtons.children); + } else if (main.dom.levelChooseButtons.style.display == "block") { + select(main.dom.levelChooseButtons.children); + } }; ////// 创建字体 ////// main.prototype.importFonts = function (fonts) { - if (!(fonts instanceof Array) || fonts.length == 0) return; - var style = document.createElement('style'); - style.type = 'text/css'; - var html = ''; - fonts.forEach(function (font) { - html += - '@font-face { font-family: "' + - font + - '"; src: url("project/fonts/' + - font + - '.ttf") format("truetype"); }'; - }); - style.innerHTML = html; - document.body.appendChild(style); + if (!(fonts instanceof Array) || fonts.length == 0) return; + var style = document.createElement("style"); + style.type = "text/css"; + var html = ""; + fonts.forEach(function (font) { + html += + '@font-face { font-family: "' + + font + + '"; src: url("project/fonts/' + + font + + '.ttf") format("truetype"); }'; + }); + style.innerHTML = html; + document.body.appendChild(style); }; main.prototype.listen = function () { - ////// 窗口大小变化时 ////// - window.onresize = function () { - try { - main.core.resize(); - } catch (ee) { - console.error(ee); - } - }; + ////// 窗口大小变化时 ////// + window.onresize = function () { + try { + main.core.resize(); + } catch (ee) { + console.error(ee); + } + }; - ////// 在界面上按下某按键时 ////// - main.dom.body.onkeydown = function (e) { - if (main.editorOpened) return; - try { - if (main.dom.inputDiv.style.display == 'block') return; - if ( - main.core && - (main.core.isPlaying() || main.core.status.lockControl) - ) - main.core.onkeyDown(e); - } catch (ee) { - console.error(ee); - } - }; + ////// 在界面上按下某按键时 ////// + main.dom.body.onkeydown = function (e) { + if (main.editorOpened) return; + try { + if (main.dom.inputDiv.style.display == "block") return; + if (main.core && (main.core.isPlaying() || main.core.status.lockControl)) + main.core.onkeyDown(e); + } catch (ee) { + console.error(ee); + } + }; - ////// 在界面上放开某按键时 ////// - main.dom.body.onkeyup = function (e) { - if (main.editorOpened) return; - try { - if ( - main.dom.startPanel.style.display == 'block' && - (main.dom.startButtons.style.display == 'block' || - main.dom.levelChooseButtons.style.display == 'block') - ) { - if (e.keyCode == 38 || e.keyCode == 33) - // up/pgup - main.selectButton((main.selectedButton || 0) - 1); - else if (e.keyCode == 40 || e.keyCode == 34) - // down/pgdn - main.selectButton((main.selectedButton || 0) + 1); - else if (e.keyCode == 67 || e.keyCode == 13 || e.keyCode == 32) - // C/Enter/Space - main.selectButton(main.selectedButton); - else if ( - e.keyCode == 27 && - main.dom.levelChooseButtons.style.display == 'block' - ) { - // ESC - main.core.showStartAnimate(true); - } - e.stopPropagation(); - return; - } - if (main.dom.inputDiv.style.display == 'block') { - if (e.keyCode == 13) { - setTimeout(function () { - main.dom.inputYes.click(); - }, 50); - } else if (e.keyCode == 27) { - setTimeout(function () { - main.dom.inputNo.click(); - }, 50); - } - return; - } - if ( - main.core && - main.core.isPlaying && - main.core.status && - (main.core.isPlaying() || main.core.status.lockControl) - ) - main.core.onkeyUp(e); - } catch (ee) { - console.error(ee); - } - }; - - [main.dom.startButtons, main.dom.levelChooseButtons].forEach(function ( - dom - ) { - dom.onmousemove = function (e) { - for (var i = 0; i < dom.children.length; ++i) { - if ( - dom.children[i] == e.target && - i != (main.selectedButton || 0) - ) { - main.selectButton(i); - } - } - }; - }); - - ////// 开始选择时 ////// - main.dom.body.onselectstart = function () { - return false; - }; - - ////// 鼠标按下时 ////// - main.dom.data.onmousedown = function (e) { - try { - e.stopPropagation(); - var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); - if (loc == null) return; - main.core.ondown(loc); - } catch (ee) { - console.error(ee); - } - }; - - ////// 鼠标移动时 ////// - main.dom.data.onmousemove = function (e) { - try { - e.stopPropagation(); - var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); - if (loc == null) return; - main.core.onmove(loc); - } catch (ee) { - console.error(ee); - } - }; - - ////// 鼠标放开时 ////// - main.dom.data.onmouseup = function (e) { - try { - e.stopPropagation(); - var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); - if (loc == null) return; - main.core.onup(loc); - } catch (ee) { - console.error(ee); - } - }; - - ////// 鼠标滑轮滚动时 ////// - 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)); - } catch (ee) { - console.error(ee); - } - }; - - ////// 手指在触摸屏开始触摸时 ////// - main.dom.data.ontouchstart = function (e) { - try { - e.preventDefault(); - var loc = main.core.actions._getClickLoc( - e.targetTouches[0].clientX, - e.targetTouches[0].clientY - ); - if (loc == null) return; - main.lastTouchLoc = loc; - main.core.ondown(loc); - } catch (ee) { - console.error(ee); - } - }; - - ////// 手指在触摸屏上移动时 ////// - main.dom.data.ontouchmove = function (e) { - try { - e.preventDefault(); - var loc = main.core.actions._getClickLoc( - e.targetTouches[0].clientX, - e.targetTouches[0].clientY - ); - if (loc == null) return; - main.lastTouchLoc = loc; - main.core.onmove(loc); - } catch (ee) { - console.error(ee); - } - }; - - ////// 手指离开触摸屏时 ////// - main.dom.data.ontouchend = function (e) { - try { - e.preventDefault(); - if (main.lastTouchLoc == null) return; - var loc = main.lastTouchLoc; - delete main.lastTouchLoc; - main.core.onup(loc); - } catch (e) { - console.error(e); - } - }; - - main.dom.statusCanvas.onclick = function (e) { - try { - e.preventDefault(); - main.core.onStatusBarClick(e); - } catch (e) { - console.error(e); - } - }; - - ////// 点击状态栏中的怪物手册时 ////// - main.statusBar.image.book.onclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - core.triggerReplay(); - return; - } - - if (main.core.isPlaying()) main.core.openBook(true); - }; - - ////// 点击状态栏中的楼层传送器/装备栏时 ////// - main.statusBar.image.fly.onclick = function (e) { - e.stopPropagation(); - - // 播放录像时 - if (core.isReplaying()) { - core.stopReplay(); - return; - } - - if (main.core.isPlaying()) { - if (!main.core.flags.equipboxButton) { - main.core.useFly(true); - } else { - main.core.openEquipbox(true); - } - } - }; - - ////// 点击状态栏中的工具箱时 ////// - main.statusBar.image.toolbox.onclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - core.rewindReplay(); - return; - } - - if (main.core.isPlaying()) { - main.core.openToolbox(core.status.event.id != 'equipbox'); - } - }; - - ////// 双击状态栏中的工具箱时 ////// - main.statusBar.image.toolbox.ondblclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - return; - } - - if (main.core.isPlaying()) main.core.openEquipbox(true); - }; - - ////// 点击状态栏中的虚拟键盘时 ////// - main.statusBar.image.keyboard.onclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - core.control._replay_book(); - return; - } - - if (main.core.isPlaying()) main.core.openKeyBoard(true); - }; - - ////// 点击状态栏中的快捷商店时 ////// - main.statusBar.image.shop.onclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - core.control._replay_viewMap(); - return; - } - - if (main.core.isPlaying()) main.core.openQuickShop(true); - }; - - ////// 点击金币时也可以开启快捷商店 ////// - main.statusBar.image.money.onclick = function (e) { - e.stopPropagation(); - - if (main.core.isPlaying()) main.core.openQuickShop(true); - }; - - ////// 点击楼梯图标也可以浏览地图 ////// - main.statusBar.image.floor.onclick = function (e) { - e.stopPropagation(); - - if ( - main.core && - main.core.isPlaying() && - !core.isMoving() && - !core.status.lockControl + ////// 在界面上放开某按键时 ////// + main.dom.body.onkeyup = function (e) { + if (main.editorOpened) return; + try { + if ( + main.dom.startPanel.style.display == "block" && + (main.dom.startButtons.style.display == "block" || + main.dom.levelChooseButtons.style.display == "block") + ) { + if (e.keyCode == 38 || e.keyCode == 33) + // up/pgup + main.selectButton((main.selectedButton || 0) - 1); + else if (e.keyCode == 40 || e.keyCode == 34) + // down/pgdn + main.selectButton((main.selectedButton || 0) + 1); + else if (e.keyCode == 67 || e.keyCode == 13 || e.keyCode == 32) + // C/Enter/Space + main.selectButton(main.selectedButton); + else if ( + e.keyCode == 27 && + main.dom.levelChooseButtons.style.display == "block" ) { - core.ui._drawViewMaps(); + // ESC + main.core.showStartAnimate(true); } - }; - - ////// 点击状态栏中的存档按钮时 ////// - main.statusBar.image.save.onclick = function (e) { e.stopPropagation(); - - if (core.isReplaying()) { - core.speedDownReplay(); - return; + return; + } + if (main.dom.inputDiv.style.display == "block") { + if (e.keyCode == 13) { + setTimeout(function () { + main.dom.inputYes.click(); + }, 50); + } else if (e.keyCode == 27) { + setTimeout(function () { + main.dom.inputNo.click(); + }, 50); } + return; + } + if ( + main.core && + main.core.isPlaying && + main.core.status && + (main.core.isPlaying() || main.core.status.lockControl) + ) + main.core.onkeyUp(e); + } catch (ee) { + console.error(ee); + } + }; - if (main.core.isPlaying()) main.core.save(true); - }; - - ////// 点击状态栏中的读档按钮时 ////// - main.statusBar.image.load.onclick = function (e) { - e.stopPropagation(); - - if (core.isReplaying()) { - core.speedUpReplay(); - return; + [main.dom.startButtons, main.dom.levelChooseButtons].forEach(function (dom) { + dom.onmousemove = function (e) { + for (var i = 0; i < dom.children.length; ++i) { + if (dom.children[i] == e.target && i != (main.selectedButton || 0)) { + main.selectButton(i); } - - if (main.core.isPlaying()) main.core.load(true); + } }; + }); - ////// 点击状态栏中的系统菜单时 ////// - main.statusBar.image.settings.onclick = function (e) { - e.stopPropagation(); + ////// 开始选择时 ////// + main.dom.body.onselectstart = function () { + return false; + }; - if (core.isReplaying()) { - core.control._replay_SL(); - return; - } + ////// 鼠标按下时 ////// + main.dom.data.onmousedown = function (e) { + try { + e.stopPropagation(); + var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); + if (loc == null) return; + main.core.ondown(loc); + } catch (ee) { + console.error(ee); + } + }; - if (main.core.isPlaying()) main.core.openSettings(true); - }; + ////// 鼠标移动时 ////// + main.dom.data.onmousemove = function (e) { + try { + e.stopPropagation(); + var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); + if (loc == null) return; + main.core.onmove(loc); + } catch (ee) { + console.error(ee); + } + }; - ////// 点击工具栏时 ////// - main.dom.hard.onclick = function () { - main.core.control.setToolbarButton(!core.domStyle.toolbarBtn); - }; + ////// 鼠标放开时 ////// + main.dom.data.onmouseup = function (e) { + try { + e.stopPropagation(); + var loc = main.core.actions._getClickLoc(e.clientX, e.clientY); + if (loc == null) return; + main.core.onup(loc); + } catch (ee) { + console.error(ee); + } + }; - ////// 手机端的按钮1-7 ////// - main.statusBar.image.btn1.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 49, - altKey: core.getLocalStorage('altKey') - }); - }; + ////// 鼠标滑轮滚动时 ////// + 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)); + } catch (ee) { + console.error(ee); + } + }; - main.statusBar.image.btn2.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 50, - altKey: core.getLocalStorage('altKey') - }); - }; + ////// 手指在触摸屏开始触摸时 ////// + main.dom.data.ontouchstart = function (e) { + try { + e.preventDefault(); + var loc = main.core.actions._getClickLoc( + e.targetTouches[0].clientX, + e.targetTouches[0].clientY + ); + if (loc == null) return; + main.lastTouchLoc = loc; + main.core.ondown(loc); + } catch (ee) { + console.error(ee); + } + }; - main.statusBar.image.btn3.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 51, - altKey: core.getLocalStorage('altKey') - }); - }; + ////// 手指在触摸屏上移动时 ////// + main.dom.data.ontouchmove = function (e) { + try { + e.preventDefault(); + var loc = main.core.actions._getClickLoc( + e.targetTouches[0].clientX, + e.targetTouches[0].clientY + ); + if (loc == null) return; + main.lastTouchLoc = loc; + main.core.onmove(loc); + } catch (ee) { + console.error(ee); + } + }; - main.statusBar.image.btn4.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 52, - altKey: core.getLocalStorage('altKey') - }); - }; + ////// 手指离开触摸屏时 ////// + main.dom.data.ontouchend = function (e) { + try { + e.preventDefault(); + if (main.lastTouchLoc == null) return; + var loc = main.lastTouchLoc; + delete main.lastTouchLoc; + main.core.onup(loc); + } catch (e) { + console.error(e); + } + }; - main.statusBar.image.btn5.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 53, - altKey: core.getLocalStorage('altKey') - }); - }; + main.dom.statusCanvas.onclick = function (e) { + try { + e.preventDefault(); + main.core.onStatusBarClick(e); + } catch (e) { + console.error(e); + } + }; - main.statusBar.image.btn6.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 54, - altKey: core.getLocalStorage('altKey') - }); - }; + ////// 点击状态栏中的怪物手册时 ////// + main.statusBar.image.book.onclick = function (e) { + e.stopPropagation(); - main.statusBar.image.btn7.onclick = function (e) { - e.stopPropagation(); - main.core.onkeyUp({ - keyCode: 55, - altKey: core.getLocalStorage('altKey') - }); - }; + if (core.isReplaying()) { + core.triggerReplay(); + return; + } - main.statusBar.image.btn8.onclick = function (e) { - e.stopPropagation(); - if (core.getLocalStorage('altKey')) { - core.removeLocalStorage('altKey'); - core.drawTip('Alt模式已关闭。'); - main.statusBar.image.btn8.style.filter = ''; - } else { - core.setLocalStorage('altKey', true); - core.drawTip('Alt模式已开启;此模式下1~7按钮视为Alt+1~7。'); - main.statusBar.image.btn8.style.filter = 'sepia(1) contrast(1.5)'; - } - }; + if (main.core.isPlaying()) main.core.openBook(true); + }; - ////// 点击“开始游戏”时 ////// - main.dom.playGame.onclick = function () { - main.dom.startButtons.style.display = 'none'; - main.core.control.checkBgm(); + ////// 点击状态栏中的楼层传送器/装备栏时 ////// + main.statusBar.image.fly.onclick = function (e) { + e.stopPropagation(); - if (main.levelChoose.length == 0) { - core.events.startGame(''); - } else { - main.dom.levelChooseButtons.style.display = 'block'; - main.selectedButton = null; - main.selectButton(0); - } - }; + // 播放录像时 + if (core.isReplaying()) { + core.stopReplay(); + return; + } - ////// 点击“载入游戏”时 ////// - main.dom.loadGame.onclick = function () { - main.core.control.checkBgm(); - main.core.load(); - }; + if (main.core.isPlaying()) { + if (!main.core.flags.equipboxButton) { + main.core.useFly(true); + } else { + main.core.openEquipbox(true); + } + } + }; - ////// 点击“录像回放”时 ////// - main.dom.replayGame.onclick = function () { - main.core.control.checkBgm(); - main.core.chooseReplayFile(); - }; + ////// 点击状态栏中的工具箱时 ////// + main.statusBar.image.toolbox.onclick = function (e) { + e.stopPropagation(); - main.dom.musicBtn.onclick = function () { - try { - if (main.core) main.core.triggerBgm(); - } catch (ee) { - console.error(ee); - } - }; + if (core.isReplaying()) { + core.rewindReplay(); + return; + } - window.onblur = function () { - if (main.core && main.core.control) { - try { - main.core.control.checkAutosave(); - } catch (e) {} - } - }; + if (main.core.isPlaying()) { + main.core.openToolbox(core.status.event.id != "equipbox"); + } + }; - main.dom.inputYes.onclick = function () { - main.dom.inputDiv.style.display = 'none'; - var func = core.platform.successCallback; - core.platform.successCallback = core.platform.errorCallback = null; - if (func) func(main.dom.inputBox.value); - }; + ////// 双击状态栏中的工具箱时 ////// + main.statusBar.image.toolbox.ondblclick = function (e) { + e.stopPropagation(); - main.dom.inputNo.onclick = function () { - main.dom.inputDiv.style.display = 'none'; - var func = core.platform.errorCallback; - core.platform.successCallback = core.platform.errorCallback = null; - if (func) func(null); - }; + if (core.isReplaying()) { + return; + } + + if (main.core.isPlaying()) main.core.openEquipbox(true); + }; + + ////// 点击状态栏中的虚拟键盘时 ////// + main.statusBar.image.keyboard.onclick = function (e) { + e.stopPropagation(); + + if (core.isReplaying()) { + core.control._replay_book(); + return; + } + + if (main.core.isPlaying()) main.core.openKeyBoard(true); + }; + + ////// 点击状态栏中的快捷商店时 ////// + main.statusBar.image.shop.onclick = function (e) { + e.stopPropagation(); + + if (core.isReplaying()) { + core.control._replay_viewMap(); + return; + } + + if (main.core.isPlaying()) main.core.openQuickShop(true); + }; + + ////// 点击金币时也可以开启快捷商店 ////// + main.statusBar.image.money.onclick = function (e) { + e.stopPropagation(); + + if (main.core.isPlaying()) main.core.openQuickShop(true); + }; + + ////// 点击楼梯图标也可以浏览地图 ////// + main.statusBar.image.floor.onclick = function (e) { + e.stopPropagation(); + + if ( + main.core && + main.core.isPlaying() && + !core.isMoving() && + !core.status.lockControl + ) { + core.ui._drawViewMaps(); + } + }; + + ////// 点击状态栏中的存档按钮时 ////// + main.statusBar.image.save.onclick = function (e) { + e.stopPropagation(); + + if (core.isReplaying()) { + core.speedDownReplay(); + return; + } + + if (main.core.isPlaying()) main.core.save(true); + }; + + ////// 点击状态栏中的读档按钮时 ////// + main.statusBar.image.load.onclick = function (e) { + e.stopPropagation(); + + if (core.isReplaying()) { + core.speedUpReplay(); + return; + } + + if (main.core.isPlaying()) main.core.load(true); + }; + + ////// 点击状态栏中的系统菜单时 ////// + main.statusBar.image.settings.onclick = function (e) { + e.stopPropagation(); + + if (core.isReplaying()) { + core.control._replay_SL(); + return; + } + + if (main.core.isPlaying()) main.core.openSettings(true); + }; + + ////// 点击工具栏时 ////// + main.dom.hard.onclick = function () { + main.core.control.setToolbarButton(!core.domStyle.toolbarBtn); + }; + + ////// 手机端的按钮1-7 ////// + main.statusBar.image.btn1.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 49, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn2.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 50, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn3.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 51, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn4.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 52, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn5.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 53, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn6.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 54, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn7.onclick = function (e) { + e.stopPropagation(); + main.core.onkeyUp({ + keyCode: 55, + altKey: core.getLocalStorage("altKey"), + }); + }; + + main.statusBar.image.btn8.onclick = function (e) { + e.stopPropagation(); + if (core.getLocalStorage("altKey")) { + core.removeLocalStorage("altKey"); + core.drawTip("Alt模式已关闭。"); + main.statusBar.image.btn8.style.filter = ""; + } else { + core.setLocalStorage("altKey", true); + core.drawTip("Alt模式已开启;此模式下1~7按钮视为Alt+1~7。"); + main.statusBar.image.btn8.style.filter = "sepia(1) contrast(1.5)"; + } + }; + + ////// 点击“开始游戏”时 ////// + main.dom.playGame.onclick = function () { + main.dom.startButtons.style.display = "none"; + main.core.control.checkBgm(); + + if (main.levelChoose.length == 0) { + core.events.startGame(""); + } else { + main.dom.levelChooseButtons.style.display = "block"; + main.selectedButton = null; + main.selectButton(0); + } + }; + + ////// 点击“载入游戏”时 ////// + main.dom.loadGame.onclick = function () { + main.core.control.checkBgm(); + main.core.load(); + }; + + ////// 点击“录像回放”时 ////// + main.dom.replayGame.onclick = function () { + main.core.control.checkBgm(); + main.core.chooseReplayFile(); + }; + + main.dom.musicBtn.onclick = function () { + try { + if (main.core) main.core.triggerBgm(); + } catch (ee) { + console.error(ee); + } + }; + + window.onblur = function () { + if (main.core && main.core.control) { + try { + main.core.control.checkAutosave(); + } catch (e) {} + } + }; + + main.dom.inputYes.onclick = function () { + main.dom.inputDiv.style.display = "none"; + var func = core.platform.successCallback; + core.platform.successCallback = core.platform.errorCallback = null; + if (func) func(main.dom.inputBox.value); + }; + + main.dom.inputNo.onclick = function () { + main.dom.inputDiv.style.display = "none"; + var func = core.platform.errorCallback; + core.platform.successCallback = core.platform.errorCallback = null; + if (func) func(null); + }; }; //listen end var main = new main(); diff --git a/project/plugins.js b/project/plugins.js index 15ee72e..770e5db 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -2569,6 +2569,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.dom.playGame.style.fontSize = font + "px"; core.dom.loadGame.style.fontSize = font + "px"; core.dom.CGMode.style.fontSize = font + "px"; + core.dom.musicMode.style.fontSize = font + "px"; core.dom.replayGame.style.fontSize = font + "px"; core.dom.startButtonGroup.style.padding = font * 0.3 + "px 25px"; }; @@ -2582,6 +2583,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = main.dom.CGUI.style.width = obj.totalWidth + 3 + "px"; main.dom.CGUI.style.height = obj.totalHeight + 3 + "px"; } + if (main.dom.music) { + main.dom.music.style.width = obj.totalWidth + 3 + "px"; + main.dom.music.style.height = obj.totalHeight + 3 + "px"; + } if (main.dom.cgText) { main.dom.cgText.style.width = obj.totalWidth + 3 + "px"; main.dom.cgText.style.height = obj.totalHeight + 3 + "px"; @@ -2764,8 +2769,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = if (core.status.automaticRoute == null) core.status.automaticRoute = {}; core.updateStatusBar(); - if (main.dom.CGUI) core.ui.CG.update(); - if (main.dom.cgText) core.ui.cgText.update(); + if (main.dom.CGUI && main.dom.CGUI.style.display === "block") core.ui.CG.update(); + if (main.dom.music && main.dom.music.style.display === "block") core.ui.music.update() + if (main.dom.cgText && main.dom.cgText.style.display === "block") core.ui.cgText.update(); }; class StatusBar { @@ -11752,176 +11758,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } }; - function drawImage( - name, - image, - x, - y, - w, - h, - x1, - y1, - w1, - h1, - angle, - reverse - ) { - // 检测文件名以 :x, :y, :o 结尾,表示左右翻转,上下翻转和中心翻转 - image = core.material.images.images[image]; - - var scale = { - x: [-1, 1], - y: [1, -1], - o: [-1, -1], - }; - - // 只能接受2, 4, 8个参数 - if (x != null && y != null) { - if (w == null || h == null) { - // 两个参数变成四个参数 - w = image.width; - h = image.height; - } - if (x1 != null && y1 != null && w1 != null && h1 != null) { - if (!reverse && !angle) { - name.drawImage(image, x, y, w, h, x1, y1, w1, h1); - } else { - name.save(); - name.translate(x1 + w1 / 2, y1 + h1 / 2); - if (reverse) name.scale(scale[reverse][0], scale[reverse][1]); - if (angle) name.rotate(angle); - name.drawImage(image, x, y, w, h, -w1 / 2, -h1 / 2, w1, h1); - name.restore(); - } - return; - } - if (!reverse && !angle) { - name.drawImage(image, x, y, w, h); - } else { - name.save(); - name.translate(x + w / 2, y + h / 2); - if (reverse) name.scale(scale[reverse][0], scale[reverse][1]); - if (angle) name.rotate(angle); - name.drawImage(image, -w / 2, -h / 2, w, h); - name.restore(); - } - return; - } - } - - function drawWindow(background, ctx, x, y, w, h, direction, px, py) { - // 仿RM窗口皮肤 ↓ - - drawImage(ctx, background, 0, 0, 128, 128, x + 2, y + 2, w - 4, h - 4); - // 绘制边框 - // 上方 - drawImage(ctx, background, 128, 0, 16, 16, x, y, 16, 16); - for (var dx = 0; dx < w - 64; dx += 32) { - drawImage(ctx, background, 144, 0, 32, 16, x + dx + 16, y, 32, 16); - drawImage( - ctx, - background, - 144, - 48, - 32, - 16, - x + dx + 16, - y + h - 16, - 32, - 16 - ); - } - drawImage( - ctx, - background, - 144, - 0, - w - dx - 32, - 16, - x + dx + 16, - y, - w - dx - 32, - 16 - ); - drawImage( - ctx, - background, - 144, - 48, - w - dx - 32, - 16, - x + dx + 16, - y + h - 16, - w - dx - 32, - 16 - ); - drawImage(ctx, background, 176, 0, 16, 16, x + w - 16, y, 16, 16); - // 左右 - for (var dy = 0; dy < h - 64; dy += 32) { - drawImage(ctx, background, 128, 16, 16, 32, x, y + dy + 16, 16, 32); - drawImage( - ctx, - background, - 176, - 16, - 16, - 32, - x + w - 16, - y + dy + 16, - 16, - 32 - ); - } - drawImage( - ctx, - background, - 128, - 16, - 16, - h - dy - 32, - x, - y + dy + 16, - 16, - h - dy - 32 - ); - drawImage( - ctx, - background, - 176, - 16, - 16, - h - dy - 32, - x + w - 16, - y + dy + 16, - 16, - h - dy - 32 - ); - // 下方 - drawImage(ctx, background, 128, 48, 16, 16, x, y + h - 16, 16, 16); - drawImage( - ctx, - background, - 176, - 48, - 16, - 16, - x + w - 16, - y + h - 16, - 16, - 16 - ); - - // arrow - if (px != null && py != null) { - if (direction == "up") { - drawImage(ctx, background, 128, 96, 32, 32, px, y + h - 3, 32, 32); - } else if (direction == "down") { - drawImage(ctx, background, 160, 96, 32, 32, px, y - 29, 32, 32); - } - } - // 仿RM窗口皮肤 ↑ - } class CG { constructor() { //cg列表 @@ -11974,16 +11811,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = background() { //画布大小设置 if (core.domStyle.isVertical) { - ctx.canvas.width = 1248; - ctx.canvas.height = 2028; - - core.setTextAlign(ctx, "center"); + CGUI.width = 1248; + CGUI.height = 2028; } else { - ctx.canvas.width = 2028; - ctx.canvas.height = 1248; - - core.setTextAlign(ctx, "center"); + CGUI.width = 2028; + CGUI.height = 1248; } + core.setTextAlign(ctx, "center"); } onclick(px, py) { //点击 @@ -11993,7 +11827,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = this.update(); return; } - console.log([px, py]); const makeBox = ([x, y], [w, h]) => { return [ [x, y], @@ -12007,7 +11840,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = return sx <= x && x <= dx && sy <= y && y <= dy; }; const pos = [px, py]; - const backbox = makeBox([33, 33], [144, 144]); + const backbox = makeBox([45, 45], [120, 80]); if (inRect(pos, backbox)) { //离开按钮是一致的,其余的记区分横竖屏 CGUI.style.display = "none"; @@ -12126,55 +11959,37 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } else if (inRect(pos, imagebox0)) { const img = core.material.images.images[this.UIMx[page][0][0]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } else if (inRect(pos, imagebox1)) { const img = core.material.images.images[this.UIMx[page][0][1]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } else if (inRect(pos, imagebox2)) { const img = core.material.images.images[this.UIMx[page][0][2]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } else if (inRect(pos, imagebox3)) { const img = core.material.images.images[this.UIMx[page][1][0]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } else if (inRect(pos, imagebox4)) { const img = core.material.images.images[this.UIMx[page][1][1]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } else if (inRect(pos, imagebox5)) { const img = core.material.images.images[this.UIMx[page][1][2]]; if (img) { - ctx.save(); //保存设置 - ctx.translate(0, 0); //重新定位右上角为基准 ctx.drawImage(img, 0, 0, 2028, 1248); - ctx.restore(); //重置画布设置 show = !show; } } @@ -12183,13 +11998,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = drawUI() { //绘制页面 core.clearMap(CGUI); - if (!core?.material?.images?.images?.["winskin1.png"]) return; + const bgVertical = core.material.images.images["bg_2010.png"] //竖屏背景 + const bg = core.material.images.images["bg_5043.png"] //横屏背景 if (core.domStyle.isVertical) { //竖屏 - //core.drawWindowSkin('winskin1.png', ctx, 0, 0, 1248, 2028); + core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景 ctx.globalAlpha = 0.5; //透明度 - drawImage(ctx, "bg_2010.png", 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片 + if (bgVertical) ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片 ctx.globalAlpha = 1; //恢复为不透明 core.setTextAlign(ctx, "center"); @@ -12214,9 +12030,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ); core.fillBoldText1( ctx, - "离开", - 100, + "<离开", 110, + 100, "#FFFFFF", "#000000", 6, @@ -12237,7 +12053,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 45 - 12, 400 - 12, 120 + 24, - 120 + 12, + 120 + 24, 12, "#444444", 3 @@ -12256,7 +12072,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 45 - 12, 1100 - 12, 120 + 24, - 120 + 12, + 120 + 24, 12, "#444444", 3 @@ -12306,20 +12122,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } } - // 添加浏览模式和CG模式的字样 - /* - core.fillRoundRect(ctx, 350 - 6, 120 - 6, 120 + 12, 120 + 12, 6, '#444444'); - core.strokeRoundRect(ctx, 350 - 12, 120 - 12, 120 + 24, 120 + 12, 12, "#444444", 3); - core.fillRoundRect(ctx, 950 - 6, 120 - 6, 120 + 12, 120 + 12, 6, '#444444'); - core.strokeRoundRect(ctx, 950 - 12, 120 - 12, 120 + 24, 120 + 12, 12, "#444444", 3); - core.fillText(ctx, '浏览模式', 400, 180, '#FFFFFF', core.ui._buildFont(24, true)); - core.fillText(ctx, 'CG模式', 1000, 180, '#FFFFFF', core.ui._buildFont(24, true)); - */ + } else { //横屏 core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景 ctx.globalAlpha = 0.5; //透明度 - drawImage(ctx, "bg_5043.png", 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片 + if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片 ctx.globalAlpha = 1; //恢复为不透明 //core.drawWindowSkin('winskin1.png', ctx, 0, 0, 2028, 1248); core.setTextAlign(ctx, "center"); @@ -12328,7 +12136,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 45 - 6, 45 - 6, 120 + 12, - 120 + 12, + 80 + 12, 6, "#444444" ); @@ -12337,16 +12145,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = 45 - 12, 45 - 12, 120 + 24, - 120 + 24, + 80 + 24, 12, "#444444", 3 ); core.fillBoldText1( ctx, - "离开", - 100, + "<离开", 110, + 100, "#FFFFFF", "#000000", 6, @@ -12437,15 +12245,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } } - // 添加浏览模式和CG模式的字样 - /* - core.fillRoundRect(ctx, 550 - 6, 45 - 6, 120 + 12, 120 + 12, 6, '#444444'); - core.strokeRoundRect(ctx, 550 - 12, 45 - 12, 120 + 24, 120 + 24, 12, "#444444", 3); - core.fillText(ctx, '浏览模式', 600, 100, '#FFFFFF', core.ui._buildFont(24, true)); - core.fillRoundRect(ctx, 1150 - 6, 45 - 6, 120 + 12, 120 + 12, 6, '#444444'); - core.strokeRoundRect(ctx, 1150 - 12, 45 - 12, 120 + 24, 120 + 24, 12, "#444444", 3); - core.fillText(ctx, 'CG模式', 1200, 100, '#FFFFFF', core.ui._buildFont(24, true)) - */ + } } } @@ -14277,5 +14077,194 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } }) } +}, + "musicMode": function () { + // 在此增加新插件 + const music = document.createElement("canvas"); //CGui画布设置 + music.style.position = "absolute"; + music.style.zIndex = 300; + music.style.display = "none"; + music.id = "music"; + main.dom.gameGroup.insertAdjacentElement("afterend", music); + music.style.top = "50%"; + music.style.left = "50%"; + music.style.transform = "translate(-50%,-50%)"; + const ctx = music.getContext("2d"); + main.dom.music = music; + let page = 0; //初始页面 + let show = false; //展示状态 + music.onclick = function (e) { + try { + e.preventDefault(); + if (core.isPlaying()) return false; + const left = core.dom.gameGroup.offsetLeft; + const top = core.dom.gameGroup.offsetTop; + const px = Math.floor((e.clientX - left) / core.domStyle.scale), + py = Math.floor((e.clientY - top) / core.domStyle.scale); + core.ui.music.onclick(px * 3, py * 3); + } catch (ee) { + main.log(ee); + } + }; + + + class musicclass { + constructor() { + //music列表 + //需全塔属性注册并保存在bgms文件夹,每个数组为显示的一页内容 + this.musicMx = [ + ["Asphodelus_Ceui.mp3", 'Blind_Alley.mp3'], + ['Crawler.mp3', 'op.mp3', 'theme.mp3'] + ]; + //音乐别名(将在播放器内显示的音乐名,music列表内的都要有对应歌名) + this.musicname = { + "Asphodelus_Ceui.mp3": 'Asphodelus', + 'Blind_Alley.mp3': 'Blind', + 'Crawler.mp3': 'Crawler', + 'op.mp3': 'op', + 'theme.mp3': 'theme' + } + } + + //更新 + update() { + this.background(); + this.drawUI(); + } + background() { + //画布大小设置 + if (core.domStyle.isVertical) { + music.width = 1248; + music.height = 2028; + + } else { + music.width = 2028; + music.height = 1248; + + } + } + onclick(px, py) { + //点击 + if (show) { + show = !show; + core.clearMap(ctx); + this.update(); + return; + } + const makeBox = ([x, y], [w, h]) => { + return [ + [x, y], + [x + w, y + h], + ]; + }; + const inRect = ([x, y], [ + [sx, sy], + [dx, dy] + ]) => { + return sx <= x && x <= dx && sy <= y && y <= dy; + }; + const pos = [px, py]; + const backbox = makeBox([45, 45], [120, 80]); + if (inRect(pos, backbox)) { + //离开按钮是一致的,其余的记区分横竖屏 + music.style.display = "none"; + core.clearMap(ctx); + core.restart(); + return; + } + + + } + drawUI() { + //绘制页面 + core.clearMap(music); + const bgVertical = core.material.images.images["bg_2010.png"] //竖屏背景 + const bg = core.material.images.images["bg_5043.png"] //竖屏背景 + if (core.domStyle.isVertical) { + //竖屏 + + core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景 + ctx.globalAlpha = 0.5; //透明度 + if (bgVertical) ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片 + ctx.globalAlpha = 1; //恢复为不透明 + + core.setTextAlign(ctx, "center"); + core.fillRoundRect( + ctx, + 45 - 6, + 45 - 6, + 120 + 12, + 80 + 12, + 6, + "#444444" + ); + core.strokeRoundRect( + ctx, + 45 - 12, + 45 - 12, + 120 + 24, + 80 + 24, + 12, + "#444444", + 3 + ); + core.fillBoldText1( + ctx, + "<离开", + 110, + 100, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(33, true) + ); + } else { + //横屏 + core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景 + ctx.globalAlpha = 0.5; //透明度 + if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片 + ctx.globalAlpha = 1; //恢复为不透明 + core.setTextAlign(ctx, "center"); + core.fillRoundRect( + ctx, + 45 - 6, + 45 - 6, + 120 + 12, + 80 + 12, + 6, + "#444444" + ); + core.strokeRoundRect( + ctx, + 45 - 12, + 45 - 12, + 120 + 24, + 80 + 24, + 12, + "#444444", + 3 + ); + core.fillBoldText1( + ctx, + "<离开", + 110, + 100, + "#FFFFFF", + "#000000", + 6, + core.ui._buildFont(33, true) + ); + + } + } + } + core.ui.music = new musicclass(); + main.dom.musicMode.onclick = function () { + //点击开始页面的CG MODE进入cg回廊 + main.core.control.checkBgm(); + page = 0; + music.style.display = "block"; + main.core.ui.music.update(); + }; } } \ No newline at end of file