@spritebuddy/pixi 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -15
- package/README.md +86 -54
- package/dist/index.d.ts +43 -1
- package/dist/index.js +79 -9
- package/dist/index.js.map +1 -1
- package/dist/lit.d.ts +72 -0
- package/dist/lit.js +200 -0
- package/dist/lit.js.map +1 -0
- package/dist/pixi-types.d.ts +6 -0
- package/package.json +56 -56
package/LICENSE
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
ISC License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Patrick Hammond
|
|
4
|
-
|
|
5
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
copyright notice and this permission notice appear in all copies.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Patrick Hammond
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,54 +1,86 @@
|
|
|
1
|
-
# @spritebuddy/pixi
|
|
2
|
-
|
|
3
|
-
Play [SpriteBuddy](https://github.com/Patrick-Hammond/spritebuddy) animations in **PixiJS 5.3+,
|
|
4
|
-
6, 7 and 8** with one package: per-frame timing, loop, ping-pong and play-once, frame offsets,
|
|
5
|
-
and layers drawn live (export with "Play layers live" so the sheet holds each frame once).
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
npm install @spritebuddy/pixi
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
import * as PIXI from 'pixi.js';
|
|
13
|
-
import { spriteBuddy } from '@spritebuddy/pixi';
|
|
14
|
-
|
|
15
|
-
const sb = spriteBuddy(PIXI); // pass your PixiJS in: that is how one package serves 5 to 8
|
|
16
|
-
|
|
17
|
-
const knight = await sb.load('assets/knight.anims.json'); // loads knight.png beside it
|
|
18
|
-
const hero = knight.sprite('walk'); // a Container whose origin is the character's pivot
|
|
19
|
-
hero.x = 200;
|
|
20
|
-
hero.y = 300;
|
|
21
|
-
app.stage.addChild(hero);
|
|
22
|
-
|
|
23
|
-
hero.onComplete = () => hero.play('idle'); // for "once" animations
|
|
24
|
-
hero.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
1
|
+
# @spritebuddy/pixi
|
|
2
|
+
|
|
3
|
+
Play [SpriteBuddy](https://github.com/Patrick-Hammond/spritebuddy) animations in **PixiJS 5.3+,
|
|
4
|
+
6, 7 and 8** with one package: per-frame timing, loop, ping-pong and play-once, frame offsets,
|
|
5
|
+
and layers drawn live (export with "Play layers live" so the sheet holds each frame once).
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @spritebuddy/pixi
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import * as PIXI from 'pixi.js';
|
|
13
|
+
import { spriteBuddy } from '@spritebuddy/pixi';
|
|
14
|
+
|
|
15
|
+
const sb = spriteBuddy(PIXI); // pass your PixiJS in: that is how one package serves 5 to 8
|
|
16
|
+
|
|
17
|
+
const knight = await sb.load('assets/knight.anims.json'); // loads knight.png beside it
|
|
18
|
+
const hero = knight.sprite('walk'); // a Container whose origin is the character's pivot
|
|
19
|
+
hero.x = 200;
|
|
20
|
+
hero.y = 300;
|
|
21
|
+
app.stage.addChild(hero);
|
|
22
|
+
|
|
23
|
+
hero.onComplete = () => hero.play('idle'); // for "once" animations
|
|
24
|
+
hero.on('event:hit', () => enemy.takeHit()); // an event tagged on a frame in SpriteBuddy
|
|
25
|
+
hero.play('attack');
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The sprite's origin is where the character stands (the frame's pivot), so `x` and `y` put its
|
|
29
|
+
feet on the ground. Scale it up for pixel art: `hero.scale.set(4)`.
|
|
30
|
+
|
|
31
|
+
With PixiJS 7 or 8 you can use `Assets` instead:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
PIXI.extensions.add(sb.assetsParser);
|
|
35
|
+
const knight = await PIXI.Assets.load('assets/knight.anims.json'); // a SpriteBuddySheet
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Real-time lighting (PixiJS 8)
|
|
39
|
+
|
|
40
|
+
When the file was exported from SpriteBuddy Pro with a normal map, PixiJS 8 can light the sprite
|
|
41
|
+
as it plays, so the light can move, follow a torch or change with the time of day:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
const knight = await sb.load('assets/knight.anims.json'); // loads knight_n.png too
|
|
45
|
+
const sun = sb.light(knight.editorLight('walk')); // the light the editor used, or {} for defaults
|
|
46
|
+
const hero = knight.sprite('walk', { light: sun });
|
|
47
|
+
|
|
48
|
+
sun.angle = 90; // light from the right; every sprite using `sun` changes on the next render
|
|
49
|
+
sun.set({ height: -20, color: '#ffb070', bands: 3 }); // a low warm rim light, cel shaded
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The light works like SpriteBuddy Pro's: `angle` (degrees clockwise from the top of the screen),
|
|
53
|
+
`height` (90 shines from the viewer, below 0 from behind), `size`, `color`, `brightness`,
|
|
54
|
+
`ambient`, `opacity` and `bands` (0 for smooth, or 2 to 4 cel levels). Unset values are the
|
|
55
|
+
editor's defaults, so a lit sprite looks like the editor's preview. Flipped layers, rotated frames
|
|
56
|
+
and sprites you flip, turn or scale are all lit from the right side. Lit sprites use the WebGL
|
|
57
|
+
renderer (PixiJS 8's default); with PixiJS 5 to 7, hand `sheet.normalTextures` to your own
|
|
58
|
+
lighting shader.
|
|
59
|
+
|
|
60
|
+
The [PixiJS example](https://github.com/Patrick-Hammond/spritebuddy-runtimes/tree/main/examples/pixi) is a complete page: three slimes from one
|
|
61
|
+
sheet, one wearing a hat drawn as a live layer, and a hop on click.
|
|
62
|
+
|
|
63
|
+
## API
|
|
64
|
+
|
|
65
|
+
- `sb.load(url, { pixelArt })` loads a runtime file and its image. `pixelArt` (default `true`)
|
|
66
|
+
turns on nearest-neighbour sampling.
|
|
67
|
+
- `sb.sheet(json, texture)` makes a sheet from a file and an image you loaded yourself.
|
|
68
|
+
- `sheet.sprite(animation?, { autoPlay, autoUpdate, speed, light })` makes an animated sprite.
|
|
69
|
+
`sheet.textures`, `sheet.texture(name)` and `sheet.animations` are there too.
|
|
70
|
+
- Normal maps: when the file has `normals`, `sb.load()` (and the Assets parser) loads it too
|
|
71
|
+
(`{ normals: false }` skips it) and `sheet.normalTextures` holds one normal-map texture per
|
|
72
|
+
frame, cut exactly like `sheet.textures`; `sheet.normalTexture(name)` finds one. With
|
|
73
|
+
`sb.sheet()`, pass the loaded image as `{ normalMap }`.
|
|
74
|
+
- `sb.light(settings?)` (PixiJS 8) makes a light for `{ light }`, and `sheet.editorLight(name?)`
|
|
75
|
+
gives the light SpriteBuddy Pro lit an animation with (or null). `sprite.light` is the sprite's.
|
|
76
|
+
- A sprite has `play(name, time?)`, `stop()`, `seek(ms)`, `update(ms)`, `speed`, `playing`,
|
|
77
|
+
`animation`, `onFrame`, `onEvent` and `onComplete`. It moves on with `Ticker.shared` unless you set
|
|
78
|
+
`autoUpdate = false` and call `update(ms)` yourself.
|
|
79
|
+
- Frame events: as a frame tagged with events starts showing, the sprite calls
|
|
80
|
+
`onEvent(name, index)` and emits `"event"` (name, index) and `"event:<name>"` (index) on its
|
|
81
|
+
PixiJS event emitter, so `hero.on('event:step', playFootstep)` works.
|
|
82
|
+
|
|
83
|
+
Every PixiJS version is tested by rendering the shared fixtures in Chromium and comparing each
|
|
84
|
+
pixel with a software render of the format's rules.
|
|
85
|
+
|
|
86
|
+
Licence: ISC.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import { Player, type SpriteBuddyFile } from '@spritebuddy/core';
|
|
1
|
+
import { Player, type LightDef, type SpriteBuddyFile } from '@spritebuddy/core';
|
|
2
|
+
import { type LightSettings, type SpriteBuddyLight } from './lit.js';
|
|
2
3
|
import type { PixiNamespace, PixiTexture } from './pixi-types.js';
|
|
3
4
|
export type { PixiNamespace } from './pixi-types.js';
|
|
5
|
+
export { DEFAULT_LIGHT, lightDirection, type LightSettings, type SpriteBuddyLight } from './lit.js';
|
|
4
6
|
export interface SheetOptions {
|
|
5
7
|
/** Nearest-neighbour sampling, so pixel art stays crisp when scaled. Defaults to true. */
|
|
6
8
|
readonly pixelArt?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The normal map, for `sheet()`: an already loaded texture of the file's `normals` image. `load()`
|
|
11
|
+
* and the Assets parser load it for you.
|
|
12
|
+
*/
|
|
13
|
+
readonly normalMap?: PixiTexture;
|
|
14
|
+
/** `load()` and the Assets parser: load the file's normal map when it has one. Defaults to true. */
|
|
15
|
+
readonly normals?: boolean;
|
|
7
16
|
}
|
|
8
17
|
export interface SpriteOptions {
|
|
9
18
|
/** Starts playing at once. Defaults to true. */
|
|
@@ -12,6 +21,11 @@ export interface SpriteOptions {
|
|
|
12
21
|
readonly autoUpdate?: boolean;
|
|
13
22
|
/** Playback rate: 1 is normal. */
|
|
14
23
|
readonly speed?: number;
|
|
24
|
+
/**
|
|
25
|
+
* PixiJS 8 with the WebGL renderer: lights the sprite in real time with its normal map, made
|
|
26
|
+
* by `sb.light()`. The sheet needs its normal map loaded.
|
|
27
|
+
*/
|
|
28
|
+
readonly light?: SpriteBuddyLight;
|
|
15
29
|
}
|
|
16
30
|
/** A loaded runtime file: one PixiJS texture per frame, ready to make sprites from. */
|
|
17
31
|
export interface SpriteBuddySheet {
|
|
@@ -22,6 +36,18 @@ export interface SpriteBuddySheet {
|
|
|
22
36
|
readonly animations: readonly string[];
|
|
23
37
|
/** The texture of the frame called `name`. */
|
|
24
38
|
texture(name: string): PixiTexture | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* One normal-map texture per frame, cut exactly like {@link textures}, or null when the file
|
|
41
|
+
* has no normal map (or it wasn't loaded). Hand them to your lighting shader or filter.
|
|
42
|
+
*/
|
|
43
|
+
readonly normalTextures: readonly PixiTexture[] | null;
|
|
44
|
+
/** The normal-map texture of the frame called `name`. */
|
|
45
|
+
normalTexture(name: string): PixiTexture | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* The light SpriteBuddy Pro lit `animation` with (default: the first one), or null. Pass it to
|
|
48
|
+
* `sb.light()` to light the game the way the editor's preview did.
|
|
49
|
+
*/
|
|
50
|
+
editorLight(animation?: string): LightDef | null;
|
|
25
51
|
/** A new animated sprite, playing `animation` (default: the first one). */
|
|
26
52
|
sprite(animation?: string, options?: SpriteOptions): SpriteBuddySprite;
|
|
27
53
|
/** Destroys the frame textures and the sheet image. */
|
|
@@ -36,12 +62,20 @@ export interface SpriteBuddySprite {
|
|
|
36
62
|
readonly player: Player;
|
|
37
63
|
/** The animation playing (or last played). */
|
|
38
64
|
readonly animation: string | null;
|
|
65
|
+
/** The light the sprite is lit by, or null when it isn't lit. */
|
|
66
|
+
readonly light: SpriteBuddyLight | null;
|
|
39
67
|
readonly playing: boolean;
|
|
40
68
|
speed: number;
|
|
41
69
|
/** Called with the frame index each time the frame changes. */
|
|
42
70
|
onFrame: ((index: number) => void) | null;
|
|
43
71
|
/** Called when a `once` animation ends. */
|
|
44
72
|
onComplete: (() => void) | null;
|
|
73
|
+
/**
|
|
74
|
+
* Called for each frame event (such as `"hit"`) as its frame starts showing, with the frame's
|
|
75
|
+
* index in the animation. The sprite also emits `"event"` (name, index) and `"event:<name>"`
|
|
76
|
+
* (index), so `sprite.on('event:hit', ...)` works too.
|
|
77
|
+
*/
|
|
78
|
+
onEvent: ((name: string, index: number) => void) | null;
|
|
45
79
|
play(animation: string, time?: number): this;
|
|
46
80
|
stop(): this;
|
|
47
81
|
/** Jumps to `ms` into the animation. */
|
|
@@ -53,6 +87,9 @@ export interface SpriteBuddySprite {
|
|
|
53
87
|
x: number;
|
|
54
88
|
y: number;
|
|
55
89
|
readonly children: readonly unknown[];
|
|
90
|
+
/** PixiJS's event emitter, typed loosely so any PixiJS version fits. */
|
|
91
|
+
on(event: string, listener: (...args: any[]) => void, context?: unknown): this;
|
|
92
|
+
off(event: string, listener?: (...args: any[]) => void, context?: unknown): this;
|
|
56
93
|
}
|
|
57
94
|
/** What `spriteBuddy(PIXI)` returns. */
|
|
58
95
|
export interface SpriteBuddyPixi {
|
|
@@ -65,6 +102,11 @@ export interface SpriteBuddyPixi {
|
|
|
65
102
|
* a {@link SpriteBuddySheet}. Add it once with `extensions.add(sb.assetsParser)`.
|
|
66
103
|
*/
|
|
67
104
|
readonly assetsParser: object;
|
|
105
|
+
/**
|
|
106
|
+
* PixiJS 8: a directional light for `sheet.sprite(name, { light })`. Unset settings are
|
|
107
|
+
* SpriteBuddy Pro's defaults; `sb.light(sheet.editorLight('walk'))` uses the editor's.
|
|
108
|
+
*/
|
|
109
|
+
light(settings?: LightSettings | LightDef | null): SpriteBuddyLight;
|
|
68
110
|
/** Major PixiJS version detected: 5 or 6 (one code path), 7 or 8. */
|
|
69
111
|
readonly version: number;
|
|
70
112
|
}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,9 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
|
-
import { FORMAT, parseFile, Player } from '@spritebuddy/core';
|
|
12
|
+
import { FORMAT, parseFile, Player, } from '@spritebuddy/core';
|
|
13
|
+
import { createLight, createLitPart, lightInternals, } from './lit.js';
|
|
14
|
+
export { DEFAULT_LIGHT, lightDirection } from './lit.js';
|
|
13
15
|
const isFile = (v) => typeof v === 'object' && v !== null && 'animations' in v && 'width' in v && !('format' in v);
|
|
14
16
|
/** The image's URL next to the runtime file's. */
|
|
15
17
|
export function siblingUrl(fileUrl, image) {
|
|
@@ -22,7 +24,7 @@ export function siblingUrl(fileUrl, image) {
|
|
|
22
24
|
* (rather than importing `pixi.js` here) lets one package serve PixiJS 5 through 8.
|
|
23
25
|
*/
|
|
24
26
|
export function spriteBuddy(PIXI) {
|
|
25
|
-
var _SpriteClass_instances, _SpriteClass_pool, _SpriteClass_auto, _SpriteClass_tick, _SpriteClass_draw;
|
|
27
|
+
var _SpriteClass_instances, _SpriteClass_pool, _SpriteClass_lit, _SpriteClass_auto, _SpriteClass_tick, _SpriteClass_draw;
|
|
26
28
|
const v8 = typeof PIXI.TextureSource === 'function';
|
|
27
29
|
const version = v8 ? 8 : typeof PIXI.Assets === 'object' ? 7 : 6;
|
|
28
30
|
const baseOf = (texture) => (v8 ? texture.source : texture.baseTexture);
|
|
@@ -44,22 +46,39 @@ export function spriteBuddy(PIXI) {
|
|
|
44
46
|
? new PIXI.Texture({ source: base, frame, orig, trim, rotate, label: f.name })
|
|
45
47
|
: new PIXI.Texture(base, frame, orig, trim, rotate);
|
|
46
48
|
}
|
|
49
|
+
/** Each sheet's images, for lit sprites (looked up by its texture list). */
|
|
50
|
+
const images = new WeakMap();
|
|
47
51
|
function makeSheet(raw, image, options = {}) {
|
|
48
52
|
const file = isFile(raw) ? raw : parseFile(raw);
|
|
49
53
|
if (options.pixelArt !== false)
|
|
50
54
|
setNearest(image);
|
|
51
55
|
const base = baseOf(image);
|
|
52
56
|
const textures = file.frames.map((f) => frameTexture(base, f));
|
|
57
|
+
const normalMap = options.normalMap;
|
|
58
|
+
if (normalMap && options.pixelArt !== false)
|
|
59
|
+
setNearest(normalMap);
|
|
60
|
+
const normalBase = normalMap && baseOf(normalMap);
|
|
61
|
+
const normalTextures = normalMap ? file.frames.map((f) => frameTexture(normalBase, f)) : null;
|
|
62
|
+
const indexOf = (name) => file.frames.findIndex((f) => f.name === name);
|
|
63
|
+
images.set(textures, { image, normalMap });
|
|
53
64
|
const sheet = {
|
|
54
65
|
file,
|
|
55
66
|
textures,
|
|
67
|
+
normalTextures,
|
|
56
68
|
animations: file.animations.map((a) => a.name),
|
|
57
|
-
texture: (name) => textures[
|
|
69
|
+
texture: (name) => textures[indexOf(name)],
|
|
70
|
+
normalTexture: (name) => normalTextures?.[indexOf(name)],
|
|
71
|
+
editorLight: (animation) => (animation === undefined
|
|
72
|
+
? file.animations[0]
|
|
73
|
+
: file.animations.find((a) => a.name === animation))?.light ?? null,
|
|
58
74
|
sprite: (animation, spriteOptions) => new SpriteClass(sheet, animation, spriteOptions),
|
|
59
75
|
destroy() {
|
|
60
76
|
for (const t of textures)
|
|
61
77
|
t.destroy(false);
|
|
78
|
+
for (const t of normalTextures ?? [])
|
|
79
|
+
t.destroy(false);
|
|
62
80
|
image.destroy(true);
|
|
81
|
+
normalMap?.destroy(true);
|
|
63
82
|
},
|
|
64
83
|
};
|
|
65
84
|
return sheet;
|
|
@@ -71,13 +90,23 @@ export function spriteBuddy(PIXI) {
|
|
|
71
90
|
_SpriteClass_instances.add(this);
|
|
72
91
|
this.onFrame = null;
|
|
73
92
|
this.onComplete = null;
|
|
93
|
+
this.onEvent = null;
|
|
74
94
|
_SpriteClass_pool.set(this, []);
|
|
95
|
+
_SpriteClass_lit.set(this, []);
|
|
75
96
|
_SpriteClass_auto.set(this, false);
|
|
76
97
|
_SpriteClass_tick.set(this, () => this.update(PIXI.Ticker.shared.deltaMS));
|
|
77
98
|
this.sheet = sheet;
|
|
99
|
+
this.light = options.light ?? null;
|
|
100
|
+
if (this.light)
|
|
101
|
+
checkLit(sheet, this.light);
|
|
78
102
|
this.player = new Player(sheet.file, {
|
|
79
103
|
onFrame: (i) => this.onFrame?.(i),
|
|
80
104
|
onComplete: () => this.onComplete?.(),
|
|
105
|
+
onEvent: (name, index) => {
|
|
106
|
+
this.onEvent?.(name, index);
|
|
107
|
+
this.emit?.('event', name, index);
|
|
108
|
+
this.emit?.(`event:${name}`, index);
|
|
109
|
+
},
|
|
81
110
|
});
|
|
82
111
|
if (options.speed !== undefined)
|
|
83
112
|
this.player.speed = options.speed;
|
|
@@ -140,10 +169,19 @@ export function spriteBuddy(PIXI) {
|
|
|
140
169
|
super.destroy(options);
|
|
141
170
|
}
|
|
142
171
|
}
|
|
143
|
-
_SpriteClass_pool = new WeakMap(), _SpriteClass_auto = new WeakMap(), _SpriteClass_tick = new WeakMap(), _SpriteClass_instances = new WeakSet(), _SpriteClass_draw = function _SpriteClass_draw() {
|
|
172
|
+
_SpriteClass_pool = new WeakMap(), _SpriteClass_lit = new WeakMap(), _SpriteClass_auto = new WeakMap(), _SpriteClass_tick = new WeakMap(), _SpriteClass_instances = new WeakSet(), _SpriteClass_draw = function _SpriteClass_draw() {
|
|
144
173
|
const parts = this.player.parts;
|
|
145
174
|
while (__classPrivateFieldGet(this, _SpriteClass_pool, "f").length < parts.length) {
|
|
146
|
-
|
|
175
|
+
let s;
|
|
176
|
+
if (this.light) {
|
|
177
|
+
const { image, normalMap } = images.get(this.sheet.textures);
|
|
178
|
+
const lit = createLitPart(PIXI, image, normalMap, lightInternals(this.light));
|
|
179
|
+
__classPrivateFieldGet(this, _SpriteClass_lit, "f").push(lit);
|
|
180
|
+
s = lit.mesh;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
s = new PIXI.Sprite(PIXI.Texture.EMPTY);
|
|
184
|
+
}
|
|
147
185
|
__classPrivateFieldGet(this, _SpriteClass_pool, "f").push(s);
|
|
148
186
|
this.addChild(s);
|
|
149
187
|
}
|
|
@@ -152,7 +190,13 @@ export function spriteBuddy(PIXI) {
|
|
|
152
190
|
s.visible = !!part;
|
|
153
191
|
if (!part)
|
|
154
192
|
return;
|
|
155
|
-
|
|
193
|
+
const texture = this.sheet.textures[part.index];
|
|
194
|
+
if (this.light) {
|
|
195
|
+
__classPrivateFieldGet(this, _SpriteClass_lit, "f")[i].setFrame(texture, this.sheet.file.frames[part.index].rotated);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
s.texture = texture;
|
|
199
|
+
}
|
|
156
200
|
s.alpha = part.opacity;
|
|
157
201
|
s.scale.x = part.flipX ? -1 : 1;
|
|
158
202
|
s.scale.y = part.flipY ? -1 : 1;
|
|
@@ -160,6 +204,17 @@ export function spriteBuddy(PIXI) {
|
|
|
160
204
|
s.y = part.y + (part.flipY ? part.frame.height : 0);
|
|
161
205
|
});
|
|
162
206
|
};
|
|
207
|
+
function checkLit(sheet, light) {
|
|
208
|
+
if (!v8)
|
|
209
|
+
throw new Error('Lit sprites need PixiJS 8');
|
|
210
|
+
if (!lightInternals(light))
|
|
211
|
+
throw new Error('Make the light with sb.light()');
|
|
212
|
+
if (!images.get(sheet.textures)?.normalMap) {
|
|
213
|
+
throw new Error(sheet.file.normals
|
|
214
|
+
? "The sheet's normal map isn't loaded (load it without { normals: false })"
|
|
215
|
+
: 'This file has no normal map: export it from SpriteBuddy Pro with normal maps on');
|
|
216
|
+
}
|
|
217
|
+
}
|
|
163
218
|
async function loadImage(url) {
|
|
164
219
|
if (PIXI.Assets)
|
|
165
220
|
return PIXI.Assets.load(url);
|
|
@@ -169,12 +224,23 @@ export function spriteBuddy(PIXI) {
|
|
|
169
224
|
return {
|
|
170
225
|
version,
|
|
171
226
|
sheet: makeSheet,
|
|
227
|
+
light(settings) {
|
|
228
|
+
if (!v8)
|
|
229
|
+
throw new Error('Lights need PixiJS 8');
|
|
230
|
+
return createLight(PIXI, settings);
|
|
231
|
+
},
|
|
172
232
|
async load(url, options) {
|
|
173
233
|
const response = await fetch(url);
|
|
174
234
|
if (!response.ok)
|
|
175
235
|
throw new Error(`Couldn't load ${url}: ${response.status}`);
|
|
176
236
|
const file = parseFile(await response.json());
|
|
177
|
-
|
|
237
|
+
const [image, normalMap] = await Promise.all([
|
|
238
|
+
loadImage(siblingUrl(url, file.image)),
|
|
239
|
+
file.normals && options?.normals !== false
|
|
240
|
+
? loadImage(siblingUrl(url, file.normals))
|
|
241
|
+
: undefined,
|
|
242
|
+
]);
|
|
243
|
+
return makeSheet(file, image, { ...options, normalMap });
|
|
178
244
|
},
|
|
179
245
|
assetsParser: {
|
|
180
246
|
name: 'spritebuddy',
|
|
@@ -187,8 +253,12 @@ export function spriteBuddy(PIXI) {
|
|
|
187
253
|
},
|
|
188
254
|
async parse(asset, resolved, loader) {
|
|
189
255
|
const file = parseFile(asset);
|
|
190
|
-
const
|
|
191
|
-
|
|
256
|
+
const src = resolved?.src ?? '';
|
|
257
|
+
const [image, normalMap] = await Promise.all([
|
|
258
|
+
loader.load(siblingUrl(src, file.image)),
|
|
259
|
+
file.normals ? loader.load(siblingUrl(src, file.normals)) : undefined,
|
|
260
|
+
]);
|
|
261
|
+
return makeSheet(file, image, { normalMap });
|
|
192
262
|
},
|
|
193
263
|
async unload(sheet) {
|
|
194
264
|
sheet.destroy();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lit.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { LightDef } from '@spritebuddy/core';
|
|
2
|
+
import type { PixiNamespace, PixiTexture } from './pixi-types.js';
|
|
3
|
+
/** A light's settings. Every one is optional; missing ones keep their current value. */
|
|
4
|
+
export interface LightSettings {
|
|
5
|
+
/** Where the light comes from, in degrees clockwise from the top of the screen. */
|
|
6
|
+
readonly angle?: number;
|
|
7
|
+
/** Elevation in degrees: 90 shines from the viewer, below 0 from behind (a rim light). */
|
|
8
|
+
readonly height?: number;
|
|
9
|
+
/** How far the light wraps round the shape: 0 tight, 1 broad and soft. */
|
|
10
|
+
readonly size?: number;
|
|
11
|
+
/** `0xrrggbb` or `"#rrggbb"`. */
|
|
12
|
+
readonly color?: number | string;
|
|
13
|
+
readonly brightness?: number;
|
|
14
|
+
/** Light every pixel gets, lit or not. */
|
|
15
|
+
readonly ambient?: number;
|
|
16
|
+
/** Blend of the lit colours over the original ones. */
|
|
17
|
+
readonly opacity?: number;
|
|
18
|
+
/** Cel shading: 2, 3 or 4 light levels, or 0 for smooth shading. */
|
|
19
|
+
readonly bands?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A directional light for lit sprites (PixiJS 8). Change its fields at any time: every sprite
|
|
23
|
+
* using it is lit the new way on the next render.
|
|
24
|
+
*/
|
|
25
|
+
export interface SpriteBuddyLight {
|
|
26
|
+
angle: number;
|
|
27
|
+
height: number;
|
|
28
|
+
size: number;
|
|
29
|
+
/** `0xrrggbb`; setting a `"#rrggbb"` string works too. */
|
|
30
|
+
color: number;
|
|
31
|
+
brightness: number;
|
|
32
|
+
ambient: number;
|
|
33
|
+
opacity: number;
|
|
34
|
+
bands: number;
|
|
35
|
+
/** Changes several settings at once. */
|
|
36
|
+
set(settings: LightSettings | LightDef | null | undefined): this;
|
|
37
|
+
}
|
|
38
|
+
/** SpriteBuddy Pro's default light, so an unchanged light matches the editor's. */
|
|
39
|
+
export declare const DEFAULT_LIGHT: {
|
|
40
|
+
readonly angle: 315;
|
|
41
|
+
readonly height: 45;
|
|
42
|
+
readonly size: 0.5;
|
|
43
|
+
readonly color: 16774368;
|
|
44
|
+
readonly brightness: 1;
|
|
45
|
+
readonly ambient: 0.35;
|
|
46
|
+
readonly opacity: 1;
|
|
47
|
+
readonly bands: 0;
|
|
48
|
+
};
|
|
49
|
+
/** `0xrrggbb` from a number or `"#rrggbb"`. */
|
|
50
|
+
export declare function colorNumber(color: number | string): number;
|
|
51
|
+
/**
|
|
52
|
+
* Unit vector toward the light in screen space (x right, y down, z toward the viewer), exactly as
|
|
53
|
+
* SpriteBuddy computes it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function lightDirection(angle: number, height: number): [number, number, number];
|
|
56
|
+
export declare const LIT_VERTEX = "\nin vec2 aPosition;\nin vec2 aUV;\n\nout vec2 vUV;\nout vec4 vColor;\nout vec2 vNormal0;\nout vec2 vNormal1;\n\nuniform mat3 uProjectionMatrix;\nuniform mat3 uWorldTransformMatrix;\nuniform vec4 uWorldColorAlpha;\nuniform vec2 uResolution;\n\nuniform mat3 uTransformMatrix;\nuniform vec4 uColor;\nuniform float uRound;\n\nvec2 roundPixels(vec2 position, vec2 targetSize) {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n}\n\nvoid main(void) {\n mat3 model = uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((uProjectionMatrix * model * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n if (uRound == 1.0) gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n vUV = aUV;\n vColor = uColor * uWorldColorAlpha;\n // The inverse transpose of the sprite's 2D transform turns its normals to face the screen, so\n // flipped, rotated and scaled sprites are lit from the right side.\n mat2 m = mat2(model);\n float det = m[0][0] * m[1][1] - m[1][0] * m[0][1];\n vNormal0 = vec2(m[1][1], -m[1][0]) / det;\n vNormal1 = vec2(-m[0][1], m[0][0]) / det;\n}\n";
|
|
57
|
+
export declare const LIT_FRAGMENT = "\nin vec2 vUV;\nin vec4 vColor;\nin vec2 vNormal0;\nin vec2 vNormal1;\n\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform sampler2D uNormals;\n\nuniform vec3 uLightDir;\nuniform vec3 uLightColor;\n// ambient, brightness, opacity, wrap\nuniform vec4 uLightParams;\nuniform float uBands;\n\nuniform float uRotated;\n\nvoid main(void) {\n vec4 c = texture(uTexture, vUV);\n if (c.a <= 0.0) {\n finalColor = vec4(0.0);\n return;\n }\n // Textures are premultiplied on upload; the normal map's alpha is the sheet's.\n vec4 t = texture(uNormals, vUV);\n vec3 n = t.a > 0.0 ? t.rgb / t.a * 2.0 - 1.0 : vec3(0.0, 0.0, 1.0);\n // A rotated frame's normals were turned clockwise with its pixels; turn them back (y up).\n if (uRotated > 0.5) n.xy = vec2(-n.y, n.x);\n vec2 local = vec2(n.x, -n.y);\n vec2 screen = mat2(vNormal0, vNormal1) * local;\n float len = length(screen);\n if (len > 0.0) screen *= length(local) / len;\n vec3 N = vec3(screen, n.z);\n\n float wrap = uLightParams.w;\n float d = clamp((dot(N, uLightDir) + wrap) / (1.0 + wrap), 0.0, 1.0);\n if (uBands > 1.0) {\n float steps = uBands - 1.0;\n d = floor(d * steps + 0.5) / steps;\n }\n vec3 C = c.rgb / c.a;\n vec3 lit = min(vec3(1.0), C * (uLightParams.x + uLightParams.y * d * uLightColor));\n finalColor = vec4(mix(C, lit, uLightParams.z) * c.a, c.a) * vColor;\n}\n";
|
|
58
|
+
/** The uniforms one light shares with every sprite it lights. */
|
|
59
|
+
export interface LightInternals {
|
|
60
|
+
readonly uniforms: any;
|
|
61
|
+
}
|
|
62
|
+
/** The light's uniform group, or undefined for something that isn't a light made by `light()`. */
|
|
63
|
+
export declare function lightInternals(light: unknown): LightInternals | undefined;
|
|
64
|
+
/** Makes a light whose fields write straight into a PixiJS 8 uniform group. */
|
|
65
|
+
export declare function createLight(PIXI: PixiNamespace, settings?: LightSettings | LightDef | null): SpriteBuddyLight;
|
|
66
|
+
/** One lit part of a sprite: a quad mesh drawn with the normal-mapped shader. */
|
|
67
|
+
export interface LitPart {
|
|
68
|
+
readonly mesh: any;
|
|
69
|
+
/** Shows `texture` (and its normals) as the part's full frame, from (0, 0). */
|
|
70
|
+
setFrame(texture: PixiTexture, rotated: boolean): void;
|
|
71
|
+
}
|
|
72
|
+
export declare function createLitPart(PIXI: PixiNamespace, image: PixiTexture, normalMap: PixiTexture, light: LightInternals): LitPart;
|
package/dist/lit.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/** SpriteBuddy Pro's default light, so an unchanged light matches the editor's. */
|
|
2
|
+
export const DEFAULT_LIGHT = {
|
|
3
|
+
angle: 315,
|
|
4
|
+
height: 45,
|
|
5
|
+
size: 0.5,
|
|
6
|
+
color: 0xfff4e0,
|
|
7
|
+
brightness: 1,
|
|
8
|
+
ambient: 0.35,
|
|
9
|
+
opacity: 1,
|
|
10
|
+
bands: 0,
|
|
11
|
+
};
|
|
12
|
+
const RAD = Math.PI / 180;
|
|
13
|
+
/** `0xrrggbb` from a number or `"#rrggbb"`. */
|
|
14
|
+
export function colorNumber(color) {
|
|
15
|
+
if (typeof color === 'number')
|
|
16
|
+
return color & 0xffffff;
|
|
17
|
+
const m = /^#?([0-9a-f]{6})$/i.exec(color);
|
|
18
|
+
if (!m)
|
|
19
|
+
throw new Error(`Light colour should be "#rrggbb", not "${color}"`);
|
|
20
|
+
return parseInt(m[1], 16);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Unit vector toward the light in screen space (x right, y down, z toward the viewer), exactly as
|
|
24
|
+
* SpriteBuddy computes it.
|
|
25
|
+
*/
|
|
26
|
+
export function lightDirection(angle, height) {
|
|
27
|
+
const flat = Math.cos(height * RAD);
|
|
28
|
+
return [Math.sin(angle * RAD) * flat, -Math.cos(angle * RAD) * flat, Math.sin(height * RAD)];
|
|
29
|
+
}
|
|
30
|
+
export const LIT_VERTEX = /* glsl */ `
|
|
31
|
+
in vec2 aPosition;
|
|
32
|
+
in vec2 aUV;
|
|
33
|
+
|
|
34
|
+
out vec2 vUV;
|
|
35
|
+
out vec4 vColor;
|
|
36
|
+
out vec2 vNormal0;
|
|
37
|
+
out vec2 vNormal1;
|
|
38
|
+
|
|
39
|
+
uniform mat3 uProjectionMatrix;
|
|
40
|
+
uniform mat3 uWorldTransformMatrix;
|
|
41
|
+
uniform vec4 uWorldColorAlpha;
|
|
42
|
+
uniform vec2 uResolution;
|
|
43
|
+
|
|
44
|
+
uniform mat3 uTransformMatrix;
|
|
45
|
+
uniform vec4 uColor;
|
|
46
|
+
uniform float uRound;
|
|
47
|
+
|
|
48
|
+
vec2 roundPixels(vec2 position, vec2 targetSize) {
|
|
49
|
+
return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void main(void) {
|
|
53
|
+
mat3 model = uWorldTransformMatrix * uTransformMatrix;
|
|
54
|
+
gl_Position = vec4((uProjectionMatrix * model * vec3(aPosition, 1.0)).xy, 0.0, 1.0);
|
|
55
|
+
if (uRound == 1.0) gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
|
|
56
|
+
vUV = aUV;
|
|
57
|
+
vColor = uColor * uWorldColorAlpha;
|
|
58
|
+
// The inverse transpose of the sprite's 2D transform turns its normals to face the screen, so
|
|
59
|
+
// flipped, rotated and scaled sprites are lit from the right side.
|
|
60
|
+
mat2 m = mat2(model);
|
|
61
|
+
float det = m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
|
62
|
+
vNormal0 = vec2(m[1][1], -m[1][0]) / det;
|
|
63
|
+
vNormal1 = vec2(-m[0][1], m[0][0]) / det;
|
|
64
|
+
}
|
|
65
|
+
`;
|
|
66
|
+
export const LIT_FRAGMENT = /* glsl */ `
|
|
67
|
+
in vec2 vUV;
|
|
68
|
+
in vec4 vColor;
|
|
69
|
+
in vec2 vNormal0;
|
|
70
|
+
in vec2 vNormal1;
|
|
71
|
+
|
|
72
|
+
out vec4 finalColor;
|
|
73
|
+
|
|
74
|
+
uniform sampler2D uTexture;
|
|
75
|
+
uniform sampler2D uNormals;
|
|
76
|
+
|
|
77
|
+
uniform vec3 uLightDir;
|
|
78
|
+
uniform vec3 uLightColor;
|
|
79
|
+
// ambient, brightness, opacity, wrap
|
|
80
|
+
uniform vec4 uLightParams;
|
|
81
|
+
uniform float uBands;
|
|
82
|
+
|
|
83
|
+
uniform float uRotated;
|
|
84
|
+
|
|
85
|
+
void main(void) {
|
|
86
|
+
vec4 c = texture(uTexture, vUV);
|
|
87
|
+
if (c.a <= 0.0) {
|
|
88
|
+
finalColor = vec4(0.0);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Textures are premultiplied on upload; the normal map's alpha is the sheet's.
|
|
92
|
+
vec4 t = texture(uNormals, vUV);
|
|
93
|
+
vec3 n = t.a > 0.0 ? t.rgb / t.a * 2.0 - 1.0 : vec3(0.0, 0.0, 1.0);
|
|
94
|
+
// A rotated frame's normals were turned clockwise with its pixels; turn them back (y up).
|
|
95
|
+
if (uRotated > 0.5) n.xy = vec2(-n.y, n.x);
|
|
96
|
+
vec2 local = vec2(n.x, -n.y);
|
|
97
|
+
vec2 screen = mat2(vNormal0, vNormal1) * local;
|
|
98
|
+
float len = length(screen);
|
|
99
|
+
if (len > 0.0) screen *= length(local) / len;
|
|
100
|
+
vec3 N = vec3(screen, n.z);
|
|
101
|
+
|
|
102
|
+
float wrap = uLightParams.w;
|
|
103
|
+
float d = clamp((dot(N, uLightDir) + wrap) / (1.0 + wrap), 0.0, 1.0);
|
|
104
|
+
if (uBands > 1.0) {
|
|
105
|
+
float steps = uBands - 1.0;
|
|
106
|
+
d = floor(d * steps + 0.5) / steps;
|
|
107
|
+
}
|
|
108
|
+
vec3 C = c.rgb / c.a;
|
|
109
|
+
vec3 lit = min(vec3(1.0), C * (uLightParams.x + uLightParams.y * d * uLightColor));
|
|
110
|
+
finalColor = vec4(mix(C, lit, uLightParams.z) * c.a, c.a) * vColor;
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
const internals = new WeakMap();
|
|
114
|
+
/** The light's uniform group, or undefined for something that isn't a light made by `light()`. */
|
|
115
|
+
export function lightInternals(light) {
|
|
116
|
+
return typeof light === 'object' && light !== null ? internals.get(light) : undefined;
|
|
117
|
+
}
|
|
118
|
+
/** Makes a light whose fields write straight into a PixiJS 8 uniform group. */
|
|
119
|
+
export function createLight(PIXI, settings) {
|
|
120
|
+
const group = new PIXI.UniformGroup({
|
|
121
|
+
uLightDir: { value: new Float32Array(3), type: 'vec3<f32>' },
|
|
122
|
+
uLightColor: { value: new Float32Array(3), type: 'vec3<f32>' },
|
|
123
|
+
uLightParams: { value: new Float32Array(4), type: 'vec4<f32>' },
|
|
124
|
+
uBands: { value: 0, type: 'f32' },
|
|
125
|
+
});
|
|
126
|
+
const state = { ...DEFAULT_LIGHT };
|
|
127
|
+
const u = group.uniforms;
|
|
128
|
+
function sync() {
|
|
129
|
+
u.uLightDir.set(lightDirection(state.angle, state.height));
|
|
130
|
+
const c = state.color;
|
|
131
|
+
u.uLightColor.set([((c >> 16) & 255) / 255, ((c >> 8) & 255) / 255, (c & 255) / 255]);
|
|
132
|
+
u.uLightParams.set([state.ambient, state.brightness, state.opacity, 0.6 * state.size]);
|
|
133
|
+
u.uBands = state.bands;
|
|
134
|
+
}
|
|
135
|
+
const light = {};
|
|
136
|
+
for (const key of Object.keys(DEFAULT_LIGHT)) {
|
|
137
|
+
Object.defineProperty(light, key, {
|
|
138
|
+
enumerable: true,
|
|
139
|
+
get: () => state[key],
|
|
140
|
+
set: (value) => {
|
|
141
|
+
state[key] = key === 'color' ? colorNumber(value) : Number(value);
|
|
142
|
+
sync();
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
light.set = function (s) {
|
|
147
|
+
for (const [key, value] of Object.entries(s ?? {})) {
|
|
148
|
+
if (key in DEFAULT_LIGHT && value !== undefined)
|
|
149
|
+
light[key] = value;
|
|
150
|
+
}
|
|
151
|
+
return light;
|
|
152
|
+
};
|
|
153
|
+
sync();
|
|
154
|
+
light.set(settings);
|
|
155
|
+
internals.set(light, { uniforms: group });
|
|
156
|
+
return light;
|
|
157
|
+
}
|
|
158
|
+
/** Shader programs are compiled once per PixiJS namespace. */
|
|
159
|
+
const programs = new WeakMap();
|
|
160
|
+
export function createLitPart(PIXI, image, normalMap, light) {
|
|
161
|
+
let glProgram = programs.get(PIXI);
|
|
162
|
+
if (!glProgram) {
|
|
163
|
+
glProgram = PIXI.GlProgram.from({ vertex: LIT_VERTEX, fragment: LIT_FRAGMENT, name: 'sb-lit' });
|
|
164
|
+
programs.set(PIXI, glProgram);
|
|
165
|
+
}
|
|
166
|
+
const part = new PIXI.UniformGroup({ uRotated: { value: 0, type: 'f32' } });
|
|
167
|
+
const shader = new PIXI.Shader({
|
|
168
|
+
glProgram,
|
|
169
|
+
resources: {
|
|
170
|
+
uTexture: image.source,
|
|
171
|
+
uNormals: normalMap.source,
|
|
172
|
+
lightUniforms: light.uniforms,
|
|
173
|
+
partUniforms: part,
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
const geometry = new PIXI.MeshGeometry({
|
|
177
|
+
positions: new Float32Array(8),
|
|
178
|
+
uvs: new Float32Array(8),
|
|
179
|
+
indices: new Uint32Array([0, 1, 2, 0, 2, 3]),
|
|
180
|
+
});
|
|
181
|
+
const mesh = new PIXI.Mesh({ geometry, shader, texture: PIXI.Texture.EMPTY });
|
|
182
|
+
let shown = null;
|
|
183
|
+
return {
|
|
184
|
+
mesh,
|
|
185
|
+
setFrame(texture, rotated) {
|
|
186
|
+
if (texture === shown)
|
|
187
|
+
return;
|
|
188
|
+
shown = texture;
|
|
189
|
+
const t = texture;
|
|
190
|
+
const box = t.trim ?? { x: 0, y: 0, width: t.orig.width, height: t.orig.height };
|
|
191
|
+
const { x, y, width: w, height: h } = box;
|
|
192
|
+
geometry.positions = new Float32Array([x, y, x + w, y, x + w, y + h, x, y + h]);
|
|
193
|
+
const uv = t.uvs;
|
|
194
|
+
geometry.uvs = new Float32Array([uv.x0, uv.y0, uv.x1, uv.y1, uv.x2, uv.y2, uv.x3, uv.y3]);
|
|
195
|
+
part.uniforms.uRotated = rotated ? 1 : 0;
|
|
196
|
+
mesh.texture = texture;
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=lit.js.map
|
package/dist/lit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lit.js","sourceRoot":"","sources":["../src/lit.ts"],"names":[],"mappings":"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"}
|
package/dist/pixi-types.d.ts
CHANGED
|
@@ -22,4 +22,10 @@ export interface PixiNamespace {
|
|
|
22
22
|
readonly ExtensionType?: any;
|
|
23
23
|
/** PixiJS 5 to 7. */
|
|
24
24
|
readonly SCALE_MODES?: any;
|
|
25
|
+
/** PixiJS 8, for lit sprites. */
|
|
26
|
+
readonly Mesh?: any;
|
|
27
|
+
readonly MeshGeometry?: any;
|
|
28
|
+
readonly Shader?: any;
|
|
29
|
+
readonly GlProgram?: any;
|
|
30
|
+
readonly UniformGroup?: any;
|
|
25
31
|
}
|
package/package.json
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@spritebuddy/pixi",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Play SpriteBuddy animations in PixiJS 5, 6, 7 and 8: per-frame timing, offsets and live layers.",
|
|
5
|
-
"license": "ISC",
|
|
6
|
-
"author": "Patrick Hammond",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/Patrick-Hammond/spritebuddy-runtimes.git",
|
|
10
|
-
"directory": "packages/pixi"
|
|
11
|
-
},
|
|
12
|
-
"keywords": [
|
|
13
|
-
"spritebuddy",
|
|
14
|
-
"pixi",
|
|
15
|
-
"pixijs",
|
|
16
|
-
"spritesheet",
|
|
17
|
-
"animation",
|
|
18
|
-
"gamedev"
|
|
19
|
-
],
|
|
20
|
-
"type": "module",
|
|
21
|
-
"sideEffects": false,
|
|
22
|
-
"main": "./dist/index.js",
|
|
23
|
-
"module": "./dist/index.js",
|
|
24
|
-
"types": "./dist/index.d.ts",
|
|
25
|
-
"exports": {
|
|
26
|
-
".": {
|
|
27
|
-
"types": "./dist/index.d.ts",
|
|
28
|
-
"import": "./dist/index.js"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"files": [
|
|
32
|
-
"dist"
|
|
33
|
-
],
|
|
34
|
-
"dependencies": {
|
|
35
|
-
"@spritebuddy/core": "^0.
|
|
36
|
-
},
|
|
37
|
-
"peerDependencies": {
|
|
38
|
-
"pixi.js": ">=5.3.0 <9"
|
|
39
|
-
},
|
|
40
|
-
"peerDependenciesMeta": {
|
|
41
|
-
"pixi.js": {
|
|
42
|
-
"optional": true
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"devDependencies": {
|
|
46
|
-
"pixi5": "npm:pixi.js@5.3.12",
|
|
47
|
-
"pixi6": "npm:pixi.js@6.5.10",
|
|
48
|
-
"pixi7": "npm:pixi.js@7.4.3",
|
|
49
|
-
"pixi8": "npm:pixi.js@8.22.0"
|
|
50
|
-
},
|
|
51
|
-
"scripts": {
|
|
52
|
-
"build": "tsc -p tsconfig.build.json",
|
|
53
|
-
"prepack": "npm run build",
|
|
54
|
-
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
55
|
-
}
|
|
56
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@spritebuddy/pixi",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Play SpriteBuddy animations in PixiJS 5, 6, 7 and 8: per-frame timing, offsets and live layers.",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"author": "Patrick Hammond",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Patrick-Hammond/spritebuddy-runtimes.git",
|
|
10
|
+
"directory": "packages/pixi"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"spritebuddy",
|
|
14
|
+
"pixi",
|
|
15
|
+
"pixijs",
|
|
16
|
+
"spritesheet",
|
|
17
|
+
"animation",
|
|
18
|
+
"gamedev"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"sideEffects": false,
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@spritebuddy/core": "^0.3.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"pixi.js": ">=5.3.0 <9"
|
|
39
|
+
},
|
|
40
|
+
"peerDependenciesMeta": {
|
|
41
|
+
"pixi.js": {
|
|
42
|
+
"optional": true
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"pixi5": "npm:pixi.js@5.3.12",
|
|
47
|
+
"pixi6": "npm:pixi.js@6.5.10",
|
|
48
|
+
"pixi7": "npm:pixi.js@7.4.3",
|
|
49
|
+
"pixi8": "npm:pixi.js@8.22.0"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "tsc -p tsconfig.build.json",
|
|
53
|
+
"prepack": "npm run build",
|
|
54
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
55
|
+
}
|
|
56
|
+
}
|