UNPKG

@bscotch/gml-parser

Version:

A parser for GML (GameMaker Language) files for programmatic manipulation and analysis of GameMaker projects.

420 lines 13.6 kB
import { pathy } from '@bscotch/pathy'; import { expect } from 'chai'; import { Spine } from './spine.js'; const sampleFile = pathy('samples/sp_player_spine.json'); describe('Spine', function () { it('can summarize a Spine JSON file', async function () { const spine = new Spine(sampleFile); const summary = await spine.summarize(); console.dir(summary, { depth: null }); const expectedSummary = { skinNames: ['default'], eventNames: [ 'anticipation', 'attackbegin', 'flash_35_255_255_1', 'hit', 'hold', 'sfx_swing_hardlight', 'sfx_swing_medium', 'sfx_swing_metal_heavy', 'sfx_swing_metal_light', 'sfx_swing_physical', 'swing_sound', ], animations: [ { name: 'attack_sword_0', duration: 0.6667, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.2333, name: 'attackbegin', }, { time: 0.4, name: 'hit', }, { time: 0.4, name: 'swing_sound', }, ], }, { name: 'attack_sword_1', duration: 0.6833, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.2333, name: 'attackbegin', }, { time: 0.4167, name: 'hit', }, { time: 0.4167, name: 'swing_sound', }, ], }, { name: 'attack_sword_2', duration: 0.7167, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.2167, name: 'attackbegin', }, { time: 0.3667, name: 'hit', }, { time: 0.3667, name: 'sfx_swing_physical', }, ], }, { name: 'buildmode_idle', duration: 1.5, events: [], }, { name: 'buildmode_recoil', duration: 0.3333, events: [ { name: 'anticipation', }, { time: 0.3, name: 'attackbegin', }, { time: 0.3167, name: 'hit', }, ], }, { name: 'fishing_idle', duration: 1.5, events: [ { name: 'anticipation', }, { time: 0.0167, name: 'attackbegin', }, { time: 1.4833, name: 'hit', }, ], }, { name: 'fishing_idle_whopper', duration: 2.1, events: [], }, { name: 'fishing_yank', duration: 0.2667, events: [], }, { name: 'harvest_choppa_0', duration: 0.65, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.1833, name: 'attackbegin', }, { time: 0.3833, name: 'hit', }, { time: 0.3833, name: 'swing_sound', }, ], }, { name: 'harvest_choppa_1', duration: 0.5333, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.2333, name: 'attackbegin', }, { time: 0.2667, name: 'hit', }, { time: 0.2667, name: 'swing_sound', }, ], }, { name: 'harvest_choppa_2', duration: 0.7, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.1333, name: 'attackbegin', }, { time: 0.2667, name: 'hit', }, { time: 0.2667, name: 'swing_sound', }, ], }, { name: 'holster_weapon', duration: 0.1667, events: [], }, { name: 'idle', duration: 1.4833, events: [], }, { name: 'interact_0', duration: 0.5833, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.0333, name: 'attackbegin', }, { time: 0.25, name: 'hit', }, { time: 0.25, name: 'swing_sound', }, ], }, { name: 'interact_1', duration: 0.5833, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.0333, name: 'attackbegin', }, { time: 0.25, name: 'hit', }, { time: 0.25, name: 'swing_sound', }, ], }, { name: 'interact_2', duration: 0.5833, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.0333, name: 'attackbegin', }, { time: 0.2333, name: 'hit', }, { time: 0.2333, name: 'swing_sound', }, ], }, { name: 'juke_0', duration: 0.25, events: [], }, { name: 'juke_1', duration: 0.25, events: [ { name: 'hold', }, ], }, { name: 'levitate', duration: 2, events: [], }, { name: 'lob', duration: 0.5, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.1167, name: 'attackbegin', }, { time: 0.1667, name: 'swing_sound', }, { time: 0.2667, name: 'hit', }, ], }, { name: 'run', duration: 0.5, events: [ { time: 0.15, name: 'hold', }, { time: 0.4, name: 'hold', }, ], }, { name: 'run2discord', duration: 0.5, events: [ { time: 0.15, name: 'hold', }, { time: 0.4, name: 'hold', }, ], }, { name: 'run_transition', duration: 0.0833, events: [], }, { name: 'sit', duration: 1.5, events: [], }, { name: 'throw', duration: 0.5, events: [ { time: 0.0167, name: 'anticipation', }, { time: 0.0333, name: 'attackbegin', }, { time: 0.2667, name: 'hit', }, { time: 0.2667, name: 'swing_sound', }, ], }, { name: 'trophy', duration: 1, events: [], }, ], slotNames: [ 'holster', 'arm_left', 'arm_left_armor', 'leg_left', 'leg_left_armor', 'leg_right', 'leg_right_armor', 'foot_right', 'foot_right_armor', 'foot_left', 'foot_left_armor', 'chest', 'chest_armor', 'head', 'eyes', 'head_armor', 'equippables', 'arm_right', 'arm_right_armor', 'smears', 'discordicon', 'discordicon2', 'discordicon3', 'discordicon4', ], }; expect(summary).to.eql(expectedSummary); }); }); //# sourceMappingURL=spine.test.js.map