From 7ec6facb90e6086601ae3552c60cb0af59093c32 Mon Sep 17 00:00:00 2001 From: freezy Date: Wed, 9 Oct 2019 17:36:28 +0200 Subject: [PATCH] decal: Add items and API. --- lib/vpt/decal/decal-api.spec.ts | 80 ++++++++++++++++++++++++++++++++ lib/vpt/decal/decal-api.ts | 54 +++++++++++++++++++++ lib/vpt/decal/decal-data.ts | 78 +++++++++++++++++++++++++++++++ lib/vpt/decal/decal.ts | 54 +++++++++++++++++++++ lib/vpt/enums.ts | 11 +++++ lib/vpt/table/table-loader.ts | 9 ++++ lib/vpt/table/table.ts | 3 ++ test/fixtures/table-decal.vpx | Bin 0 -> 69632 bytes 8 files changed, 289 insertions(+) create mode 100644 lib/vpt/decal/decal-api.spec.ts create mode 100644 lib/vpt/decal/decal-api.ts create mode 100644 lib/vpt/decal/decal-data.ts create mode 100644 lib/vpt/decal/decal.ts create mode 100644 test/fixtures/table-decal.vpx diff --git a/lib/vpt/decal/decal-api.spec.ts b/lib/vpt/decal/decal-api.spec.ts new file mode 100644 index 00000000..6611389c --- /dev/null +++ b/lib/vpt/decal/decal-api.spec.ts @@ -0,0 +1,80 @@ +/* + * VPDB - Virtual Pinball Database + * Copyright (C) 2019 freezy + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import * as chai from 'chai'; +import { expect } from 'chai'; +import sinonChai = require('sinon-chai'); +import { ThreeHelper } from '../../../test/three.helper'; +import { Player } from '../../game/player'; +import { NodeBinaryReader } from '../../io/binary-reader.node'; +import { DecalType, ImageAlignment, SizingType } from '../enums'; +import { Table } from '../table/table'; + +/* tslint:disable:no-unused-expression */ +chai.use(sinonChai); +const three = new ThreeHelper(); + +describe('The VPinball decal API', () => { + + let table: Table; + let player: Player; + + beforeEach(async () => { + table = await Table.load(new NodeBinaryReader(three.fixturePath('table-decal.vpx'))); + player = new Player(table).init(); + }); + + it('should correctly read and write the properties', async () => { + const decal = table.decals.Decal001.getApi(); + + decal.Rotation = 128; + decal.Image = 'test_pattern'; + decal.Width = 1685; + decal.Height = 115; + decal.X = 304; + decal.Y = 1.8; + decal.Surface = 'surface'; + decal.Type = DecalType.Image; expect(decal.Type).to.equal(DecalType.Image); + decal.Type = DecalType.Text; + decal.Text = 'Text'; + decal.SizingType = SizingType.AutoSize; expect(decal.SizingType).to.equal(SizingType.AutoSize); + decal.SizingType = SizingType.AutoWidth; + decal.FontColor = 0x913a8d; + decal.Material = 'Material'; + decal.Font = 'Font'; + decal.HasVerticalText = true; expect(decal.HasVerticalText).to.equal(true); + decal.HasVerticalText = false; + + expect(decal.Rotation).to.equal(128); + expect(decal.Image).to.equal('test_pattern'); + expect(decal.Width).to.equal(1685); + expect(decal.Height).to.equal(115); + expect(decal.X).to.equal(304); + expect(decal.Y).to.be.closeTo(1.8, 0.0001); + expect(decal.Surface).to.equal('surface'); + expect(decal.Type).to.equal(DecalType.Text); + expect(decal.Text).to.equal('Text'); + expect(decal.SizingType).to.equal(SizingType.AutoWidth); + expect(decal.FontColor).to.equal(0x913a8d); + expect(decal.Material).to.equal('Material'); + expect(decal.Font).to.equal('Font'); + expect(decal.HasVerticalText).to.equal(false); + }); + +}); diff --git a/lib/vpt/decal/decal-api.ts b/lib/vpt/decal/decal-api.ts new file mode 100644 index 00000000..7ef27bff --- /dev/null +++ b/lib/vpt/decal/decal-api.ts @@ -0,0 +1,54 @@ +/* + * VPDB - Virtual Pinball Database + * Copyright (C) 2019 freezy + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import { ItemApi } from '../item-api'; +import { DecalData } from './decal-data'; + +export class DecalApi extends ItemApi { + + get Rotation() { return this.data.rotation; } + set Rotation(v) { this.data.rotation = v; } + get Image() { return this.data.szImage; } + set Image(v) { this._assertNonHdrImage(v); this.data.szImage = v; } + get Width() { return this.data.width; } + set Width(v) { this.data.width = v; } + get Height() { return this.data.height; } + set Height(v) { this.data.height = v; } + get X() { return this.data.center.x; } + set X(v) { this.data.center.x = v; } + get Y() { return this.data.center.y; } + set Y(v) { this.data.center.y = v; } + get Surface() { return this.data.szSurface; } + set Surface(v) { this.data.szSurface = v; } + get Type() { return this.data.decalType; } + set Type(v) { this.data.decalType = v; } + get Text() { return this.data.text; } + set Text(v) { this.data.text = v; } + get SizingType() { return this.data.sizingType; } + set SizingType(v) { this.data.sizingType = v; } + get FontColor() { return this.data.color; } + set FontColor(v) { this.data.color = v; } + get Material() { return this.data.szMaterial; } + set Material(v) { this.data.szMaterial = v; } + get Font() { return this.data.font; } + set Font(v) { this.data.font = v; } + get HasVerticalText() { return this.data.verticalText; } + set HasVerticalText(v) { this.data.verticalText = v; } + +} diff --git a/lib/vpt/decal/decal-data.ts b/lib/vpt/decal/decal-data.ts new file mode 100644 index 00000000..6a7bdae9 --- /dev/null +++ b/lib/vpt/decal/decal-data.ts @@ -0,0 +1,78 @@ +/* + * VPDB - Virtual Pinball Database + * Copyright (C) 2019 freezy + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import { BiffParser } from '../../io/biff-parser'; +import { Storage } from '../../io/ole-doc'; +import { Vertex2D } from '../../math/vertex2d'; +import { DecalType, SizingType } from '../enums'; +import { ItemData } from '../item-data'; + +export class DecalData extends ItemData { + + public center!: Vertex2D; + public width: number = 100.0; + public height: number = 100.0; + public rotation: number = 0.0; + public szImage?: string; + public szSurface?: string; + public text?: string; + public decalType: number = DecalType.Image; + public sizingType: number = SizingType.ManualSize; + public color: number = 0x000000; + public szMaterial?: string; + public verticalText: boolean = false; + private backglass: boolean = false; + + public font: string = ''; + + public static async fromStorage(storage: Storage, itemName: string): Promise { + const decalData = new DecalData(itemName); + await storage.streamFiltered(itemName, 4, BiffParser.stream(decalData.fromTag.bind(decalData), { + streamedTags: [ 'FONT' ], + })); + return decalData; + } + + private constructor(itemName: string) { + super(itemName); + } + + private async fromTag(buffer: Buffer, tag: string, offset: number, len: number): Promise { + switch (tag) { + case 'VCEN': this.center = Vertex2D.get(buffer); break; + case 'WDTH': this.width = this.getFloat(buffer); break; + case 'HIGH': this.height = this.getFloat(buffer); break; + case 'ROTA': this.rotation = this.getFloat(buffer); break; + case 'IMAG': this.szImage = this.getString(buffer, len); break; + case 'SURF': this.szSurface = this.getString(buffer, len); break; + case 'TEXT': this.text = this.getString(buffer, len); break; + case 'TYPE': this.decalType = this.getInt(buffer); break; + case 'SIZE': this.sizingType = this.getInt(buffer); break; + case 'COLR': this.color = BiffParser.bgrToRgb(this.getInt(buffer)); break; + case 'MATR': this.szMaterial = this.getString(buffer, len); break; + case 'VERT': this.verticalText = this.getBool(buffer); break; + case 'BGLS': this.backglass = this.getBool(buffer); break; + case 'FONT': break; // don't care for now + default: + this.getCommonBlock(buffer, tag, len); + break; + } + return 0; + } +} diff --git a/lib/vpt/decal/decal.ts b/lib/vpt/decal/decal.ts new file mode 100644 index 00000000..62e71588 --- /dev/null +++ b/lib/vpt/decal/decal.ts @@ -0,0 +1,54 @@ +/* + * VPDB - Virtual Pinball Database + * Copyright (C) 2019 freezy + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import { EventProxy } from '../../game/event-proxy'; +import { IScriptable } from '../../game/iscriptable'; +import { Player } from '../../game/player'; +import { Storage } from '../../io/ole-doc'; +import { Item } from '../item'; +import { Table } from '../table/table'; +import { DecalApi } from './decal-api'; +import { DecalData } from './decal-data'; + +export class Decal extends Item implements IScriptable { + + private api?: DecalApi; + + public static async fromStorage(storage: Storage, itemName: string): Promise { + const data = await DecalData.fromStorage(storage, itemName); + return new Decal(data); + } + + private constructor(data: DecalData) { + super(data); + } + + public setupPlayer(player: Player, table: Table): void { + this.events = new EventProxy(this); + this.api = new DecalApi(this.data, this.events, player, table); + } + + public getApi(): DecalApi { + return this.api!; + } + + public getEventNames(): string[] { + return []; + } +} diff --git a/lib/vpt/enums.ts b/lib/vpt/enums.ts index d63606bf..caa15f07 100644 --- a/lib/vpt/enums.ts +++ b/lib/vpt/enums.ts @@ -113,3 +113,14 @@ export class TextAlignment { public static readonly Center = 1; public static readonly Right = 2; } + +export class DecalType { + public static readonly Text = 0; + public static readonly Image = 1; +} + +export class SizingType { + public static readonly AutoSize = 0; + public static readonly AutoWidth = 1; + public static readonly ManualSize = 2; +} diff --git a/lib/vpt/table/table-loader.ts b/lib/vpt/table/table-loader.ts index 0014fd91..ff5d06b3 100644 --- a/lib/vpt/table/table-loader.ts +++ b/lib/vpt/table/table-loader.ts @@ -42,6 +42,7 @@ import { Timer } from '../timer/timer'; import { Trigger } from '../trigger/trigger'; import { TableLoadOptions } from './table'; import { TableData } from './table-data'; +import { Decal } from '../decal/decal'; export class TableLoader { @@ -124,6 +125,7 @@ export class TableLoader { loadedTable.timers = []; loadedTable.plungers = []; loadedTable.textBoxes = []; + loadedTable.decals = []; // go through all game items for (let i = 0; i < numItems; i++) { @@ -246,6 +248,12 @@ export class TableLoader { return item; } + case ItemType.Decal: { + const item = await Decal.fromStorage(storage, itemName); + loadedTable.decals!.push(item); + return item; + } + default: // ignore the rest for now return null; @@ -307,6 +315,7 @@ export interface LoadedTable { spinners?: Spinner[]; plungers?: Plunger[]; textBoxes?: Textbox[]; + decals?: Decal[]; timers?: Timer[]; } diff --git a/lib/vpt/table/table.ts b/lib/vpt/table/table.ts index 2d4b35e9..e41284f8 100644 --- a/lib/vpt/table/table.ts +++ b/lib/vpt/table/table.ts @@ -63,6 +63,7 @@ import { TableExportOptions } from './table-exporter'; import { TableHitGenerator } from './table-hit-generator'; import { LoadedTable, TableLoader } from './table-loader'; import { TableMeshGenerator } from './table-mesh-generator'; +import { Decal } from '../decal/decal'; /** * A Visual Pinball table. @@ -100,6 +101,7 @@ export class Table implements IScriptable { public readonly textboxes: { [key: string]: Textbox } = {}; public readonly timers: { [key: string]: Timer } = {}; public readonly triggers: { [key: string]: Trigger } = {}; + public readonly decals: { [key: string]: Decal } = {}; private readonly meshGenerator?: TableMeshGenerator; private readonly hitGenerator?: TableHitGenerator; @@ -147,6 +149,7 @@ export class Table implements IScriptable { [loadedTable.textBoxes, this.textboxes], [loadedTable.timers, this.timers], [loadedTable.triggers, this.triggers], + [loadedTable.decals, this.decals], ]; for (const m of mapping) { if (isLoaded(m[0])) { diff --git a/test/fixtures/table-decal.vpx b/test/fixtures/table-decal.vpx new file mode 100644 index 0000000000000000000000000000000000000000..f73f8757e64de9468154f3477e919af82065ed03 GIT binary patch literal 69632 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 K2mZgm1OEqd;n-vV literal 0 HcmV?d00001