UNPKG

osbtools

Version:

A set of tools for working with osu! storyboards

118 lines (117 loc) 4.11 kB
"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;