From 1d469d4f3e848ebc42d87495dc4f6ec42118338a Mon Sep 17 00:00:00 2001 From: louis Date: Sun, 12 May 2019 20:20:48 -0400 Subject: [PATCH] webpack, eslint javascript didn't have proper modules until es6 what the fuck bingo's code scares me so i hope i didn't break it when fixing the linting errors --- .eslintignore | 1 + .eslintrc.json | 20 + Js/Audio.js | 8 +- Js/Common.js | 6 +- Js/Main.js | 37 +- Js/Player.js | 49 +- Js/Shaders.js | 9 +- Js/TextFunctions.js | 5 +- Js/UtageParse.js | 32 +- Player.html | 34 +- README.md | 3 +- gulpfile.js | 130 - package-lock.json | 10495 ++++++++++++++++++++++++++++++++++++++---- package.json | 29 +- webpack.config.js | 117 + 15 files changed, 9790 insertions(+), 1185 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 gulpfile.js create mode 100644 webpack.config.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3c6bd60 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +Js/Pixi.min.js diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..840546d --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "env": { + "browser": true, + "es6": true + }, + "extends": "eslint:recommended", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-console": "off", + "no-unused-vars": [2, { "argsIgnorePattern": "^(success|event|resource|delta|reject)$"}], + "no-empty": ["error", { "allowEmptyCatch": true }] + } +} diff --git a/Js/Audio.js b/Js/Audio.js index bb1c33b..6891a09 100644 --- a/Js/Audio.js +++ b/Js/Audio.js @@ -1,5 +1,7 @@ //(Math.exp(x)-1)/(Math.E-1) +import bgmLoopData from './BgmLoop.json'; + class bufferLoader { constructor(context, soundMap, callback) { this.context = context; @@ -94,8 +96,8 @@ class audioController { source.buffer = this.loader.bufferList[sound]; source.loop = false; if(type === "bgm") { - if(this.utage.bgmLoopData[this.utage.soundInfo[sound].origFileName]) { - let loop = this.utage.bgmLoopData[this.utage.soundInfo[sound].origFileName]; + if(bgmLoopData[this.utage.soundInfo[sound].origFileName]) { + let loop = bgmLoopData[this.utage.soundInfo[sound].origFileName]; source.loopStart = loop["loop_start"]["seconds"]; source.loopEnd = loop["loop_end"]["seconds"]; source.loop = true; @@ -182,3 +184,5 @@ class audioController { this.sources = {}; } } + +export { audioController }; diff --git a/Js/Common.js b/Js/Common.js index 4f0cb8e..9f639e4 100644 --- a/Js/Common.js +++ b/Js/Common.js @@ -334,8 +334,10 @@ class commonFunctions { if(props[i] == " ") { break; } retval.color += props[i]; } - retval.color = retval.color; + //retval.color = retval.color; } return retval; } -} \ No newline at end of file +} + +export { rootUrl, baseDimensions, screenRatio, commonFunctions }; diff --git a/Js/Main.js b/Js/Main.js index bcd45b2..05a4e86 100644 --- a/Js/Main.js +++ b/Js/Main.js @@ -1,5 +1,17 @@ 'use strict'; +/* global PIXI */ +import 'Pixi'; +import { Player } from './Player.js'; +import { audioController } from './Audio.js'; +import { baseDimensions, commonFunctions } from './Common.js'; +import { UtageInfo } from './UtageParse.js'; +import { TextFunctions } from './TextFunctions.js'; +import { Shaders } from './Shaders.js'; + +import '../Css/generic.min.css'; +import '../Css/main.css'; + const pixiApp = { app: new PIXI.Application(baseDimensions), loader: PIXI.loader @@ -215,9 +227,9 @@ function missionDropDownChanged(event) { ${chapterSelect} `; document.getElementById("click-catcher").style.cssText = 'display: flex;'; @@ -424,7 +436,7 @@ function openHelpModal(event) { YameteTomete Discord
All Symphogear content belongs to its respective owners
`; @@ -500,3 +512,22 @@ function onWindowResize(event, delay = 400) { document.getElementById('app-container').style.cssText = `width: ${res.width}px; height: ${res.height}px;`; }, delay); } + +export { + onBodyLoaded, + onBodyKey, + toggleMute, + onVolumeChange, + missionDropDownChanged, + languageChanged, + toggleFullscreen, + onMainClick, + openHelpModal, + playFromQuery, + skipClicked, + hideUiClicked, + dialogScrollUp, + dialogScrollDown, + closeMissionModal, + missionChanged +}; diff --git a/Js/Player.js b/Js/Player.js index 5f24332..a425125 100644 --- a/Js/Player.js +++ b/Js/Player.js @@ -1,5 +1,9 @@ 'use strict'; +/* global PIXI */ +import 'Pixi'; +import { baseDimensions, commonFunctions } from './Common.js'; + class Player { constructor(pixi, utage, text, audio, shaderscript) { this.pixi = pixi; @@ -7,7 +11,7 @@ class Player { this.utage = utage; this.text = text; this.audio = audio; - this.shaders = shaders; + this.shaders = shaderscript; //consts this.resolutionScale = 1; //I created this thinking that I would need to handle changing offset when resolution changes. But lucikly I can just scale the parent container and it works without needing this. this.baseFps = 60; //I am assuming that PIXI is going to stay as keeping 60fps = delta1. @@ -51,9 +55,9 @@ class Player { return new Promise((resolve, reject) => { let toLoadBgm = {}; let toLoadSe = {}; - for(let i = 0; i < utage.currentPlayingFile.length; ++i) { + for(let i = 0; i < this.utage.currentPlayingFile.length; ++i) { try { - let c = utage.currentPlayingFile[i]; + let c = this.utage.currentPlayingFile[i]; if(c.comment) { continue; } //They use this to set the sprite set for a charater but have an alternate name displayed if(c.Arg2 && c.Arg2.toLowerCase().includes("") { - this.text.characterName(true, utage.charTranslations[cur.Arg1] || cur.Arg1); + this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1); this.text.dialogText(true, commonFunctions.convertUtageTextTags(text)); } else { - let charName = ""; let found = false; //Look for the character that is saying the text to get their name //future note: This might be better to just look for the character in character info if this start failing. @@ -1216,7 +1219,7 @@ class Player { if(cur.Character) { nameToUse = cur.Arg1; } - this.text.characterName(true, utage.charTranslations[nameToUse] || nameToUse); + this.text.characterName(true, this.utage.charTranslations[nameToUse] || nameToUse); this.text.dialogText(true, text); this.currentCharacters[c].sprite.tint = 0xFFFFFF; found = true; @@ -1229,14 +1232,14 @@ class Player { } //If we didnt find the character just dump the text anyways with Arg1 as the name if(!found) { - this.text.characterName(true, utage.charTranslations[cur.Arg1] || cur.Arg1); + this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1); this.text.dialogText(true, text); } } this.manualNext = true; //Sometimes they don't give a Arg1 for the text. } else if(!cur.Command && cur.Arg2.toLowerCase() === "" && cur.Text) { - let text = cur.English ? (utage.translations[cur.English] || cur.Text) : cur.Text; + let text = cur.English ? (this.utage.translations[cur.English] || cur.Text) : cur.Text; this.text.characterName(true, ""); this.text.dialogText(true, commonFunctions.convertUtageTextTags(text)); this.manualNext = true; @@ -1324,6 +1327,7 @@ class Player { this.lerpTargets.push({type: 'scale.y', object: curChar.sprite, curTime: 0 - (props.delay || 0), time: props.time, finalV: curChar.sprite.scale.y * props.y, initV: curChar.sprite.scale.y }); } + break; } case "colorto": { let props = commonFunctions.getPropertiesFromTweenCommand(cur.Arg3); @@ -1347,6 +1351,7 @@ class Player { curChar.sprite.tint = color.color; } } + break; } } } @@ -1485,8 +1490,8 @@ class Player { } getNextCommand() { - let command = utage.currentPlayingFile.pop(); - if(!utage.currentPlayingFile || utage.currentPlayingFile.length === 0) { + let command = this.utage.currentPlayingFile.pop(); + if(!this.utage.currentPlayingFile || this.utage.currentPlayingFile.length === 0) { this.onEndFile(); return; } @@ -1514,7 +1519,7 @@ class Player { return new Promise((resolve, reject) => { try { this.pixi.app.ticker.remove(this.onPixiTick, this); - utage.currentPlayingFile.length = 0; + this.utage.currentPlayingFile.length = 0; this.currentCharacters = {}; this.layers = {}; this.currentCommand = undefined; @@ -1548,4 +1553,6 @@ class Player { } }); } -} \ No newline at end of file +} + +export { Player }; diff --git a/Js/Shaders.js b/Js/Shaders.js index 676dd0e..95372ad 100644 --- a/Js/Shaders.js +++ b/Js/Shaders.js @@ -1,4 +1,9 @@ //http://glslsandbox.com/e#39992.0 + +/* global PIXI */ +import 'Pixi'; +import { baseDimensions } from './Common.js'; + class Shaders { constructor() { this.leftToRightFadeShader = ` @@ -199,4 +204,6 @@ class Shaders { filterManager.applyFilter(this, input, output); } } -} \ No newline at end of file +} + +export { Shaders }; diff --git a/Js/TextFunctions.js b/Js/TextFunctions.js index 853df36..4c7df82 100644 --- a/Js/TextFunctions.js +++ b/Js/TextFunctions.js @@ -84,7 +84,6 @@ class TextFunctions { function putText() { // skip over any HTML chars this.dialogToDisplay.curPos = this.typeHtmlChars(this.dialogToDisplay.text, this.dialogToDisplay.curPos); - let substr = this.dialogToDisplay.text.substr(this.dialogToDisplay.curPos); if (this.dialogToDisplay.curPos === this.dialogToDisplay.text.length) { this.showNextIndicator(true); this.scrollingText = false; @@ -191,4 +190,6 @@ class TextFunctions { this.scrollingText = false; this.lineHeight = -1; } -} \ No newline at end of file +} + +export { TextFunctions }; diff --git a/Js/UtageParse.js b/Js/UtageParse.js index 927a6d8..3a11ac9 100644 --- a/Js/UtageParse.js +++ b/Js/UtageParse.js @@ -1,6 +1,8 @@ //http://madnesslabo.net/utage/?page_id=4448&lang=en 'use strict'; +import { commonFunctions } from './Common.js'; + class UtageInfo { constructor() { this.currentPlayingFile = []; @@ -31,15 +33,15 @@ class UtageInfo { //commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Scenario.tsv`), commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`), //4 commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`), //5 - commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`), //6 - commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsCustom.json`), //7 - commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomCharacter.tsv`), //8 - commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomSound.tsv`), //9 - commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomTexture.tsv`), //10 + //commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`), + commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsCustom.json`), //6 + commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomCharacter.tsv`), //7 + commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomSound.tsv`), //8 + commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomTexture.tsv`), //9 ]; Promise.all(promises) .then((success) => { - this.groupMissions(success[0], success[7]); + this.groupMissions(success[0], success[6]); this.missionsList = Object.keys(this.groupedMissions).map((k) => { return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId}; }); @@ -50,10 +52,10 @@ class UtageInfo { //this.parseParamInfo(success[4]); this.parseSoundInfo(success[4]); this.parseTextureInfo(success[5]); - this.bgmLoopData = success[6]; - this.parseCharacterInfo(success[8], true); - this.parseSoundInfo(success[9], true); - this.parseTextureInfo(success[10], true); + //this.bgmLoopData = success[6]; + this.parseCharacterInfo(success[7], true); + this.parseSoundInfo(success[8], true); + this.parseTextureInfo(success[9], true); resolve(); }, (failure) => { reject(failure); @@ -173,7 +175,7 @@ class UtageInfo { if(this.charTranslationsInner[this.currentTranslation]) { resolve(); } else { - commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/nametranslations_${this.currentTranslation}.json`) + commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/nametranslations_${this.currentTranslation}.json`) .then((success) => { this.charTranslationsInner[this.currentTranslation] = success; resolve(); @@ -191,8 +193,8 @@ class UtageInfo { resolve(); } else { var promises = [ - commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`), - commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNamesCustom_${this.currentTranslation}.json`) + commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`), + commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsNamesCustom_${this.currentTranslation}.json`) ]; Promise.all(promises) .then((success) => { @@ -362,4 +364,6 @@ class UtageInfo { resetTranslations() { this.translationsInner = {}; } -} \ No newline at end of file +} + +export { UtageInfo }; diff --git a/Player.html b/Player.html index 7561fb8..250ae1b 100644 --- a/Player.html +++ b/Player.html @@ -5,19 +5,19 @@ - - + - + - +

Loading Utage Data...

Loading Page Data...

@@ -26,33 +26,33 @@
Now Playing: None
- 🔊 - + 🔊 +
- - - ? + + + ?
-
+
-
+
- +