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
This commit is contained in:
parent
e3b7233b20
commit
1d469d4f3e
15 changed files with 9790 additions and 1185 deletions
|
@ -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 };
|
||||
|
|
|
@ -334,8 +334,10 @@ class commonFunctions {
|
|||
if(props[i] == " ") { break; }
|
||||
retval.color += props[i];
|
||||
}
|
||||
retval.color = retval.color;
|
||||
//retval.color = retval.color;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { rootUrl, baseDimensions, screenRatio, commonFunctions };
|
||||
|
|
37
Js/Main.js
37
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}
|
||||
</div>
|
||||
<div id="modal-buttons">
|
||||
<button onclick="closeMissionModal(event, false)">Close</button>
|
||||
<button onclick="XduPlayer.closeMissionModal(event, false)">Close</button>
|
||||
<span>MstId: ${mis.MstId}</span>
|
||||
<button onclick="missionChanged(${mis.MstId})">Play</button>
|
||||
<button onclick="XduPlayer.missionChanged(${mis.MstId})">Play</button>
|
||||
</div>
|
||||
</div>`;
|
||||
document.getElementById("click-catcher").style.cssText = 'display: flex;';
|
||||
|
@ -424,7 +436,7 @@ function openHelpModal(event) {
|
|||
<a style="margin-top: auto; text-align: center; "href="https://discord.gg/fpQZQ8g">YameteTomete Discord</a>
|
||||
<div style="margin-top: auto; text-align: center;">All Symphogear content belongs to its respective owners</div>
|
||||
<div id="modal-buttons">
|
||||
<button onclick="closeModal(event)">Close</button>
|
||||
<button onclick="XduPlayer.closeModal(event)">Close</button>
|
||||
<a href="https://git.poweris.moe/xduplayer.git/" target="_blank">Source</a>
|
||||
</div>
|
||||
</div>`;
|
||||
|
@ -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
|
||||
};
|
||||
|
|
49
Js/Player.js
49
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("<character=")) {
|
||||
|
@ -254,6 +258,7 @@ class Player {
|
|||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "attachit02":
|
||||
case "attachit03":
|
||||
|
@ -269,6 +274,7 @@ class Player {
|
|||
} else {
|
||||
console.log(`Failed to get attacshot SE: se_ガトリング音`);
|
||||
}
|
||||
break;
|
||||
case "attacshot11":
|
||||
case "attacshot12":
|
||||
if(this.utage.soundInfo['se_ガトリング音']) {
|
||||
|
@ -295,8 +301,7 @@ class Player {
|
|||
console.log(`Failed to get attaclaser SE: se_レーザーが放たれる音`);
|
||||
}
|
||||
break;
|
||||
case "":
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} catch (error) {
|
||||
|
@ -497,7 +502,7 @@ class Player {
|
|||
try {
|
||||
l.object.filters[0].uniforms.time = pos;
|
||||
l.object.filters[0].apply();
|
||||
} catch(error) {}
|
||||
} catch(error) { }
|
||||
break;
|
||||
}
|
||||
case "tint": {
|
||||
|
@ -585,13 +590,13 @@ class Player {
|
|||
this.lerpTargets.push({type: 'alpha', object: sprite, curTime: 0, time: 300, finalV: 1, initV: 0});
|
||||
this.lerpTargets.push({type: 'alpha', object: sprite, curTime: -(this.waitTime+500), time: 300, finalV: 0, initV: 1, post: "destroy"});
|
||||
} catch (error) { }
|
||||
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.titleText(true, text);
|
||||
break;
|
||||
}
|
||||
case "divaeffect": {
|
||||
this.waitTime = Number(cur.Arg5) * 1000;
|
||||
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.divaText(true, text);
|
||||
break;
|
||||
}
|
||||
|
@ -749,7 +754,7 @@ class Player {
|
|||
}
|
||||
case "characteroff": {
|
||||
if(cur.Text) {
|
||||
checkPutText(cur);
|
||||
this.checkPutText(cur);
|
||||
} else {
|
||||
this.text.dialogText(false, "");
|
||||
this.text.characterName(false, "");
|
||||
|
@ -953,6 +958,7 @@ class Player {
|
|||
this.lerpTargets.push({type: 'alpha', object: c3.sprite, curTime: (0 - (this.waitTime/2)), time: 200, finalV: 0, initV: 1, post: "destroy" });
|
||||
this.currentCharacters['キャラ中央'] = undefined;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "noise_disappearance11": //103500341
|
||||
this.waitTime = Number(cur.Arg1) * 1000;
|
||||
|
@ -984,8 +990,6 @@ class Player {
|
|||
this.checkPutCharacterScreen(customCommand, false, true);
|
||||
break;
|
||||
}
|
||||
case "continue01":
|
||||
break;
|
||||
}
|
||||
} catch(error) {
|
||||
console.log(error);
|
||||
|
@ -1198,13 +1202,12 @@ class Player {
|
|||
}
|
||||
if(!cur.Command && cur.Arg1 && cur.Text) {
|
||||
//If its chracter off screen 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;
|
||||
text = commonFunctions.convertUtageTextTags(text);
|
||||
if(cur.Arg2 && cur.Arg2.toLowerCase() === "<off>") {
|
||||
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() === "<off>" && 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 {
|
|||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { Player };
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { Shaders };
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { TextFunctions };
|
||||
|
|
|
@ -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 = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { UtageInfo };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue