UNPKG

@bscotch/stitch

Version:

Stitch: The GameMaker Studio 2 Asset Pipeline Development Kit.

70 lines 2.48 kB
import { yyRoomInstanceSchema, } from '@bscotch/yy'; import { camelCase } from 'change-case'; import { assert } from '../../../utility/errors.js'; import { info } from '../../../utility/log.js'; import { uuidV4 } from '../../../utility/uuid.js'; import { Gms2ResourceBase, } from './Gms2ResourceBase.js'; export class Gms2Room extends Gms2ResourceBase { constructor(...setup) { super('rooms', ...setup); } get instanceLayers() { const layers = this.yyData.layers; const instanceLayers = []; for (const layer of layers) { if ('instances' in layer) { instanceLayers.push(layer); } } return instanceLayers; } hasObjectInstance(object) { const targetName = typeof object === 'string' ? object : object.name; for (const instanceLayer of this.instanceLayers || []) { for (const instance of instanceLayer.instances) { if (instance.objectId.name === targetName) { return true; } } } return false; } addObjectInstance(object, x = 0, y = 0) { const instanceLayer = this.instanceLayers[0]; assert(instanceLayer, `No instance layer found in room ${this.name}`); // Add to the list of instances in the instance layer const instanceName = camelCase(uuidV4()); // Need a unique identifier; const newInstance = yyRoomInstanceSchema.parse({ name: instanceName, x, y, objectId: object.id, }); instanceLayer.instances.push(newInstance); // Add to the instancing order this.yyData.instanceCreationOrder.push({ name: instanceName, path: `rooms/${this.name}/${this.name}.yy`, }); info(`Added object ${object.name} instance to room ${this.name}`); return this.save(); } static async create(name, comms) { const room = new Gms2Room(name, comms); await room.replaceYyFile({ name, layers: [ { resourceType: 'GMRBackgroundLayer', }, { resourceType: 'GMRInstanceLayer', }, ], // Rooms start with 8 views views: Array.from({ length: 8 }).map(() => ({})), }); return room; } } //# sourceMappingURL=Gms2Room.js.map