osbtools
Version:
A set of tools for working with osu! storyboards
118 lines (117 loc) • 4.11 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const enums_1 = require("../types/enums");
const converters_1 = require("../utils/converters");
const sbVectorValue_1 = __importDefault(require("./values/sbVectorValue"));
class StoryboardElement {
#data;
#properties = [];
#propertiesByLayer = Object.values(enums_1.ESbElementProperty).reduce((acc, key) => {
acc[key] = [];
return acc;
}, {});
constructor({ path = "", layer = enums_1.ESbLayer.Background, origin = enums_1.ESbElementOrigin.Centre, defaultPosition = new sbVectorValue_1.default({ x: 320, y: 240 }) }) {
this.#data = {
path,
layer,
origin,
defaultPosition,
existStartTime: Infinity,
existEndTime: -Infinity
};
this.#properties.getProperty = function (index) {
return this[index];
};
}
getType() {
return this.type;
}
getData() {
return this.#data;
}
getProperties() {
return this.#properties;
}
getPropertiesByLayer() {
return this.#propertiesByLayer;
}
getProperty(index, cb) {
if (cb)
this.#properties[index] = cb(this.#properties[index]);
return this.#properties[index];
}
#setExistTimes(data) {
this.#data.existStartTime = Math.min(data.startTime, this.#data.existStartTime ?? data.startTime);
const endTime = data.endTime === undefined ? data.startTime : data.endTime;
this.#data.existEndTime = Math.max(endTime ?? -Infinity, this.#data.existEndTime ?? -Infinity);
}
#addProperty(type, data, convertType) {
const updatedData = {
easing: enums_1.ESbElementEasing.Linear,
...data
};
this.#setExistTimes(data);
const completedData = {
type,
data: updatedData,
toString: () => converters_1.convertPropertyToString[convertType](updatedData)
};
this.#properties.push(completedData);
this.#propertiesByLayer[type].push(completedData);
return this;
}
loop(data) {
const loopData = {
...data,
properties: data.loopedProperties()
};
return this.#addProperty(enums_1.ESbElementProperty.L, loopData, "loop");
}
trigger(data) {
const triggerData = {
...data,
properties: data.triggeredProperties()
};
return this.#addProperty(enums_1.ESbElementProperty.T, triggerData, "trigger");
}
move(data) {
return this.#addProperty(enums_1.ESbElementProperty.M, data, "move");
}
moveX(data) {
return this.#addProperty(enums_1.ESbElementProperty.MX, data, "moveX");
}
moveY(data) {
return this.#addProperty(enums_1.ESbElementProperty.MY, data, "moveY");
}
rotate(data) {
return this.#addProperty(enums_1.ESbElementProperty.R, data, "rotate");
}
fade(data) {
return this.#addProperty(enums_1.ESbElementProperty.F, data, "fade");
}
scale(data) {
return this.#addProperty(enums_1.ESbElementProperty.S, data, "scale");
}
scaleVec(data) {
return this.#addProperty(enums_1.ESbElementProperty.V, data, "scaleVec");
}
color(data) {
return this.#addProperty(enums_1.ESbElementProperty.C, data, "color");
}
flipH(data) {
const startParameter = "H";
return this.#addProperty(enums_1.ESbElementProperty.P, { ...data, startParameter }, "parameters");
}
flipV(data) {
const startParameter = "V";
return this.#addProperty(enums_1.ESbElementProperty.P, { ...data, startParameter }, "parameters");
}
additive(data) {
const startParameter = "A";
return this.#addProperty(enums_1.ESbElementProperty.P, { ...data, startParameter }, "parameters");
}
}
exports.default = StoryboardElement;