| @@ -101,4 +101,5 @@ Please refer to existing files. | |||||
| * [pad-rikuu](//github.com/kiootic/pad-rikuu) //Parse data | * [pad-rikuu](//github.com/kiootic/pad-rikuu) //Parse data | ||||
| * [html2canvas](//github.com/niklasvh/html2canvas) //Capture Image | * [html2canvas](//github.com/niklasvh/html2canvas) //Capture Image | ||||
| * [localforage](//github.com/localForage/localForage) //Easy IndexedDB | * [localforage](//github.com/localForage/localForage) //Easy IndexedDB | ||||
| * [pako](//github.com/nodeca/pako) //Deflate URL length | |||||
| * [aaa](//github.com/jy4340132/aaa) //Play voice(ADPCM wav) | * [aaa](//github.com/jy4340132/aaa) //Play voice(ADPCM wav) | ||||
| @@ -19,6 +19,7 @@ const teamsCount = 2; | |||||
| <script type="text/javascript" src="script.js"></script> | <script type="text/javascript" src="script.js"></script> | ||||
| <script type="text/javascript" src="library/localforage.min.js"></script> | <script type="text/javascript" src="library/localforage.min.js"></script> | ||||
| <script type="text/javascript" src="library/html2canvas.min.js"></script> | <script type="text/javascript" src="library/html2canvas.min.js"></script> | ||||
| <script type="text/javascript" src="library/pako.min.js"></script> | |||||
| <!--▼ADPCM播放相关--> | <!--▼ADPCM播放相关--> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | ||||
| @@ -88,6 +88,13 @@ function getQueryString(name,url) { | |||||
| } | } | ||||
| } | } | ||||
| function Uint8ArrayToString(fileData){ | |||||
| return Array.from(fileData).map(int=>String.fromCharCode(int)).join(''); | |||||
| } | |||||
| function stringToUint8Array(str){ | |||||
| const codeArr = Array.from(str).map(chr=>chr.charCodeAt(0)); | |||||
| return new Uint8Array(codeArr); | |||||
| } | |||||
| //数组去重 | //数组去重 | ||||
| /* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html | /* https://www.cnblogs.com/baiyangyuanzi/p/6726258.html | ||||
| * 实现思路:获取没重复的最右一值放入新数组。 | * 实现思路:获取没重复的最右一值放入新数组。 | ||||
| @@ -111,15 +118,15 @@ Array.prototype.uniq = function() | |||||
| const pcmMemory = new WebAssembly.Memory({initial: 256, maximum: 256}); | const pcmMemory = new WebAssembly.Memory({initial: 256, maximum: 256}); | ||||
| const pcmImportObj = { | const pcmImportObj = { | ||||
| env: { | |||||
| abortStackOverflow: () => { throw new Error("overflow"); }, | |||||
| table: new WebAssembly.Table({ initial: 0, maximum: 0, element: "anyfunc" }), | |||||
| tableBase: 0, | |||||
| memory: pcmMemory, | |||||
| memoryBase: 102400, | |||||
| STACKTOP: 0, | |||||
| STACK_MAX: pcmMemory.buffer.byteLength, | |||||
| } | |||||
| env: { | |||||
| abortStackOverflow: () => { throw new Error("overflow"); }, | |||||
| table: new WebAssembly.Table({ initial: 0, maximum: 0, element: "anyfunc" }), | |||||
| tableBase: 0, | |||||
| memory: pcmMemory, | |||||
| memoryBase: 102400, | |||||
| STACKTOP: 0, | |||||
| STACK_MAX: pcmMemory.buffer.byteLength, | |||||
| } | |||||
| }; | }; | ||||
| let pcmPlayer = null; | let pcmPlayer = null; | ||||
| @@ -127,33 +134,33 @@ let adpcm_wasm = null; | |||||
| function decodeAudio(fileName, decodeCallback) | function decodeAudio(fileName, decodeCallback) | ||||
| { | { | ||||
| if(pcmPlayer != null) | |||||
| { | |||||
| pcmPlayer.close(); | |||||
| } | |||||
| pcmPlayer = new PCMPlayer(1, 44100); | |||||
| fetch(fileName).then((response) => response.arrayBuffer()) | |||||
| .then((bytes) => { | |||||
| let audioData = new Uint8Array(bytes); | |||||
| let step = 160; | |||||
| for(let i = 0; i < audioData.byteLength; i += step) | |||||
| { | |||||
| let pcm16BitData = decodeCallback(audioData.slice(i, i + step)); | |||||
| let pcmFloat32Data = Std.shortToFloatData(pcm16BitData); | |||||
| pcmPlayer.feed(pcmFloat32Data); | |||||
| } | |||||
| }); | |||||
| if(pcmPlayer != null) | |||||
| { | |||||
| pcmPlayer.close(); | |||||
| } | |||||
| pcmPlayer = new PCMPlayer(1, 44100); | |||||
| fetch(fileName).then((response) => response.arrayBuffer()) | |||||
| .then((bytes) => { | |||||
| let audioData = new Uint8Array(bytes); | |||||
| let step = 160; | |||||
| for(let i = 0; i < audioData.byteLength; i += step) | |||||
| { | |||||
| let pcm16BitData = decodeCallback(audioData.slice(i, i + step)); | |||||
| let pcmFloat32Data = Std.shortToFloatData(pcm16BitData); | |||||
| pcmPlayer.feed(pcmFloat32Data); | |||||
| } | |||||
| }); | |||||
| } | } | ||||
| fetch("library/jy4340132-aaa/adpcm.wasm").then((response) => response.arrayBuffer()) | fetch("library/jy4340132-aaa/adpcm.wasm").then((response) => response.arrayBuffer()) | ||||
| .then((bytes) => WebAssembly.instantiate(bytes, pcmImportObj)) | .then((bytes) => WebAssembly.instantiate(bytes, pcmImportObj)) | ||||
| .then((wasm) => { | .then((wasm) => { | ||||
| adpcm_wasm = wasm; | adpcm_wasm = wasm; | ||||
| /*addButton("adpcm").onclick = function () { | |||||
| let decoder = new Adpcm(wasm, pcmImportObj); | |||||
| decoder.resetDecodeState(new Adpcm.State(0, 0)); | |||||
| decodeAudio("demo.adpcm", decoder.decode.bind(decoder)); | |||||
| }*/ | |||||
| /*addButton("adpcm").onclick = function () { | |||||
| let decoder = new Adpcm(wasm, pcmImportObj); | |||||
| decoder.resetDecodeState(new Adpcm.State(0, 0)); | |||||
| decodeAudio("demo.adpcm", decoder.decode.bind(decoder)); | |||||
| }*/ | |||||
| }); | }); | ||||
| //▲ADPCM播放相关 | //▲ADPCM播放相关 | ||||
| function latentUseHole(latentId) | function latentUseHole(latentId) | ||||
| @@ -519,7 +526,7 @@ function countTeamHp(memberArr, leader1id, leader2id, solo) | |||||
| return hp; | return hp; | ||||
| }); | }); | ||||
| console.log(mHpArr); | |||||
| console.log('单个队伍血量:',mHpArr); | |||||
| function memberHpMul(card,ls,memberArr,solo) | function memberHpMul(card,ls,memberArr,solo) | ||||
| { | { | ||||
| @@ -597,9 +597,14 @@ function reloadFormationData() | |||||
| let formationData; | let formationData; | ||||
| try | try | ||||
| { | { | ||||
| const parameterDataString = getQueryString("d") || getQueryString("data"); | |||||
| let parameterDataString = getQueryString("d") || getQueryString("data"); | |||||
| if (parameterDataString) | if (parameterDataString) | ||||
| { | { | ||||
| if (parameterDataString.charAt(0) != '{') | |||||
| { | |||||
| parameterDataString = pako.inflate(parameterDataString,{to:'string'}) | |||||
| console.log('数据字符串解压结果:',parameterDataString); | |||||
| } | |||||
| formationData = JSON.parse(parameterDataString); | formationData = JSON.parse(parameterDataString); | ||||
| } | } | ||||
| }catch(e) | }catch(e) | ||||
| @@ -626,7 +631,14 @@ function creatNewUrl(arg){ | |||||
| const newSearch = new URLSearchParams(); | const newSearch = new URLSearchParams(); | ||||
| if (language_i18n) newSearch.set("l",language_i18n); | if (language_i18n) newSearch.set("l",language_i18n); | ||||
| if (datasource && datasource!="ja") newSearch.set("s",datasource); | if (datasource && datasource!="ja") newSearch.set("s",datasource); | ||||
| if (outObj) newSearch.set("d", JSON.stringify(outObj)); | |||||
| const dataJsonStr = JSON.stringify(outObj); //数据部分的字符串 | |||||
| const deflate = pako.deflate(dataJsonStr,{to:'string'}); | |||||
| if (outObj) newSearch.set("d", | |||||
| deflate.length < dataJsonStr.length ? //压缩后长度小于压缩前长度 | |||||
| deflate : //使用压缩字符串 | |||||
| dataJsonStr); //使用原始字符串 | |||||
| const newUrl = (arg.url || "") + '?' + newSearch.toString(); | const newUrl = (arg.url || "") + '?' + newSearch.toString(); | ||||
| @@ -19,6 +19,7 @@ const teamsCount = 1; | |||||
| <script type="text/javascript" src="script.js"></script> | <script type="text/javascript" src="script.js"></script> | ||||
| <script type="text/javascript" src="library/localforage.min.js"></script> | <script type="text/javascript" src="library/localforage.min.js"></script> | ||||
| <script type="text/javascript" src="library/html2canvas.min.js"></script> | <script type="text/javascript" src="library/html2canvas.min.js"></script> | ||||
| <script type="text/javascript" src="library/pako.min.js"></script> | |||||
| <!--▼ADPCM播放相关--> | <!--▼ADPCM播放相关--> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | ||||
| @@ -19,6 +19,7 @@ const teamsCount = 3; | |||||
| <script type="text/javascript" src="script.js"></script> | <script type="text/javascript" src="script.js"></script> | ||||
| <script type="text/javascript" src="library/localforage.min.js"></script> | <script type="text/javascript" src="library/localforage.min.js"></script> | ||||
| <script type="text/javascript" src="library/html2canvas.min.js"></script> | <script type="text/javascript" src="library/html2canvas.min.js"></script> | ||||
| <script type="text/javascript" src="library/pako.min.js"></script> | |||||
| <!--▼ADPCM播放相关--> | <!--▼ADPCM播放相关--> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/std.js"></script> | ||||
| <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | <script type="text/javascript" src="library/jy4340132-aaa/pcm_player.js"></script> | ||||