osbtools
Version:
A set of tools for working with osu! storyboards
229 lines (228 loc) • 9.16 kB
JavaScript
;
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;