UNPKG

osbtools

Version:

A set of tools for working with osu! storyboards

229 lines (228 loc) 9.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseElementGroupProperty = exports.parseElementProperty = exports.parseElementTitle = void 0; const sbAnimation_1 = __importDefault(require("../storyboarding/sbAnimation")); const sbSample_1 = __importDefault(require("../storyboarding/sbSample")); const sbSprite_1 = __importDefault(require("../storyboarding/sbSprite")); const sbColorValue_1 = __importDefault(require("../storyboarding/values/sbColorValue")); const sbVectorValue_1 = __importDefault(require("../storyboarding/values/sbVectorValue")); const enums_1 = require("../types/enums"); const tryToParseStringArrayToNumber = (lines) => lines.map((item) => { const isSomethingStrange = isNaN(Number(item)) || item === ""; const strangeItem = item === "" ? undefined : item; return isSomethingStrange ? strangeItem : Number(item); }); const parseElementTitle = (line, type, cb) => { if (line.startsWith(type)) { let currentElement = null; switch (type) { case enums_1.ESbElementType.Sprite: { const [, layer, origin, path, posX, posY] = tryToParseStringArrayToNumber(line.split(",")); currentElement = new sbSprite_1.default({ path: path.slice(1, -1), layer, origin, defaultPosition: new sbVectorValue_1.default({ x: posX, y: posY }) }); break; } case enums_1.ESbElementType.Animation: { const [, layer, origin, path, posX, posY, frameCount, frameDelay, loopType] = tryToParseStringArrayToNumber(line.split(",")); currentElement = new sbAnimation_1.default({ path: path.slice(1, -1), layer, origin, defaultPosition: new sbVectorValue_1.default({ x: posX, y: posY }), frameCount, frameDelay, loopType }); break; } case enums_1.ESbElementType.Sample: { const [, startTime, layer, path, volume] = tryToParseStringArrayToNumber(line.split(",")); currentElement = new sbSample_1.default({ startTime, layer, path: path.slice(1, -1), volume }); break; } } cb(currentElement); } }; exports.parseElementTitle = parseElementTitle; const parseElementProperty = (line, type, element) => { if (line.startsWith(type)) { switch (type) { case enums_1.ESbElementProperty.M: { const [, easing, startTime, endTime, startPosX, startPosY, endPosX, endPosY] = tryToParseStringArrayToNumber(line.split(",")); element.move({ easing, startTime, endTime, startPosition: new sbVectorValue_1.default({ x: startPosX, y: startPosY }), endPosition: new sbVectorValue_1.default({ x: endPosX, y: endPosY }) }); break; } case enums_1.ESbElementProperty.MX: { const [, easing, startTime, endTime, startPositionX, endPositionX] = tryToParseStringArrayToNumber(line.split(",")); element.moveX({ easing, startTime, endTime, startPositionX, endPositionX }); break; } case enums_1.ESbElementProperty.MY: { const [, easing, startTime, endTime, startPositionY, endPositionY] = tryToParseStringArrayToNumber(line.split(",")); element.moveY({ easing, startTime, endTime, startPositionY, endPositionY }); break; } case enums_1.ESbElementProperty.R: { const [, easing, startTime, endTime, startRotation, endRotation] = tryToParseStringArrayToNumber(line.split(",")); element.rotate({ easing, startTime, endTime, startRotation, endRotation }); break; } case enums_1.ESbElementProperty.F: { const [, easing, startTime, endTime, startFade, endFade] = tryToParseStringArrayToNumber(line.split(",")); element.fade({ easing, startTime, endTime, startFade, endFade }); break; } case enums_1.ESbElementProperty.S: { const [, easing, startTime, endTime, startScale, endScale] = tryToParseStringArrayToNumber(line.split(",")); element.scale({ easing, startTime, endTime, startScale, endScale }); break; } case enums_1.ESbElementProperty.V: { const [, easing, startTime, endTime, startScaleX, startScaleY, endScaleX, endScaleY] = tryToParseStringArrayToNumber(line.split(",")); element.scaleVec({ easing, startTime, endTime, startScaleVec: new sbVectorValue_1.default({ x: startScaleX, y: startScaleY }), endScaleVec: new sbVectorValue_1.default({ x: endScaleX, y: endScaleY }) }); break; } case enums_1.ESbElementProperty.C: { const [, easing, startTime, endTime, startColorR, startColorG, startColorB, endColorR, endColorG, endColorB] = tryToParseStringArrayToNumber(line.split(",")); element.color({ easing, startTime, endTime, startColor: new sbColorValue_1.default({ r: startColorR, g: startColorG, b: startColorB }), endColor: new sbColorValue_1.default({ r: endColorR, g: endColorG, b: endColorB }) }); break; } case enums_1.ESbElementProperty.P: { const [, easing, startTime, endTime, parameterType] = tryToParseStringArrayToNumber(line.split(",")); const setCustomProperty = { H: () => { element.flipH({ easing, startTime, endTime }); }, V: () => { element.flipV({ easing, startTime, endTime }); }, A: () => { element.additive({ easing, startTime, endTime }); } }[parameterType]; if (setCustomProperty) setCustomProperty(); break; } } } }; exports.parseElementProperty = parseElementProperty; const parseElementGroupProperty = (line, type, element, groupElement) => { switch (type) { case enums_1.ESbElementProperty.L: { const [, startTime, loopCount] = tryToParseStringArrayToNumber(line.split(",")); element.loop({ startTime, loopCount, loopedProperties() { return groupElement.getProperties(); } }); break; } case enums_1.ESbElementProperty.T: { const [, triggerName, startTime, endTime] = tryToParseStringArrayToNumber(line.split(",")); element.trigger({ startTime, endTime, triggerName, triggeredProperties() { return groupElement.getProperties(); } }); break; } } }; exports.parseElementGroupProperty = parseElementGroupProperty;