• Stars
    star
    115
  • Rank 297,289 (Top 6 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

PIXI.js advanced color modes, sprites, meshes

pixi-heaven

Build npm version

This is heaven for sprites. Want to color them better? Wanna use advanced colors? Its all here!

Works with PixiJS v7

For v6 please see v6.x branch, npm version 0.3.3

For v5 please see v5.x branch, npm version 0.2.3

For v4 please see v4.x branch, npm version 0.1.21

Examples

Done:

  • Advanced color modes
  • Polygon packing
  • Mesh with trimmed textures

Migration

To use es6 modules in IDE, its better to have distinct class names. That's why PIXI.heaven.Sprite is now SpriteH, same with SimpleMeshH and BitmapTextH

How to use

Just add pixi-heaven.js file in your build.

import { SpriteH } from 'pixi-heaven';

var sprite = new SpriteH();
// good old sprite tint
sprite.color.setLight(0.5, 1.0, 0.5);

// dark tint - new feature
sprite.color.setDark(0.2, 0.2, 0.2);

// change single component, useful for tweening
sprite.color.darkG = 0.1;

Or convert PIXI sprite. In that case, make sure that you actually use heaven Sprite somewhere, or it'll be tree-shaken away.

import { Sprite } from 'pixi.js';

var sprite = new Sprite(someTexture);

// pixi vanilla way, optional
sprite.tint = 0x80ff80;

// activate the plugin!
sprite.convertToHeaven();

Useful example: invert the colors

sprite.color.setLight(0, 0, 0);
sprite.color.setDark(1, 1, 1);

Make whole sprite of one color:

sprite.tint = 0xffaacc;
sprite.color.dark[0] = sprite.color.light[0];
sprite.color.dark[1] = sprite.color.light[1];
sprite.color.dark[2] = sprite.color.light[2];
//dont forget to invalidate, after you changed dark DIRECTLY
sprite.color.invalidate();

Meshes

Heaven meshes SimpleMeshH can be used with trimmed textures.

Unfortunately, meshes cant be converted, you have to create mesh instead of PIXI.SimpleMesh

That adds extra shader switched, and disables batching, but it shows correct result!

To switch it off, set

import {settings, CLAMP_OPTIONS} from 'pixi-heaven';
// Default, PixiJS vanilla mode
settings.MESH_CLAMP = heaven.CLAMP_OPTIONS.NEVER;

To always use the trimmed texture shader, set

import {settings, CLAMP_OPTIONS} from 'pixi-heaven';
// Default, PixiJS vanilla mode
settings.MESH_CLAMP = CLAMP_OPTIONS.ALWAYS;

Mesh batching works the same way as in pixi.

PIXI.Mesh.BATCHABLE_SIZE = 1000; // bigger meshes now are batched too!
PIXI.Mesh.BATCHABLE_SIZE = 1; // or not.

How to use with spine

This plugin enables light-dark tint of spine >= 3.6.

Mixin can be applied to any spine prototype class: SpineBase, Spine or your own extended class. Usually its applied to SpineBase.

Light-dark tint works like in sprites.

import {SpineBase} from '@pixi-spine/base';
import {applySpineMixin} from 'pixi-heaven';

applySpineMixin(SpineBase.prototype);

spine = new Spine();
spine.color.setLight(0.5, 1.0, 0.5);
spine.color.setDark(0.2, 0.2, 0.2);

batch ADD blending mode with NORMAL

This feature comes from unity spine runtime - ADD can be emulated by NORMAL with zero tint alpha. It reduces number of batches and drawcalls.

import {settings} from 'pixi-heaven';
settings.BLEND_ADD_UNITY = true;

Animation

Thanks to @finscn, unlike pixiJS vanilla AnimatedSprite, here animation is a component:

import {AnimationState} from 'pixi-heaven';

new AnimationState(frames).bind(sprite);
sprite.animState.gotoAndStop(2);

It still uses PIXI.Ticker.shared if you dont specify autoUpdate=false. It will be stopped and destroyed with the bound element.

How to mask sprites with sprites

Plugin adds special renderer that has faster masks than just sprite.mask. It also works on heaven meshes.

import {SpriteH} from 'pixi-heaven';

sprite = new SpriteH();
sprite.maskSprite = sprite2; //set it
sprite.pluginName = 'batchMasked'; //enable special plugin rendering
sprite2.renderable = false; //turn off rendering

Batching works with spine, just enable maskSprite in any sprite or mesh of spine instance, all pluginName's will be adjusted automagically.

Look at Spine file to see how it actually works.

Vanilla JS, UMD build

All pixiJS v6 plugins has special umd build suited for vanilla. Navigate pixi-heaven npm package, take dist/pixi-heaven.umd.js file.

<script src='lib/pixi.js'></script>
<script src='lib/pixi-heaven.umd.js'></script>

all classes can be accessed through PIXI.heaven package.

Building

You will need to have node setup on your machine.

Then you can install dependencies and build:

npm i
npm run build

That will output the built distributables to ./dist.

More Repositories

1

pixijs

The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.
TypeScript
42,668
star
2

pixi-react

Write PIXI apps using React declarative style
JavaScript
2,167
star
3

filters

Collection of community-authored custom display filters for PixiJS
TypeScript
886
star
4

particle-emitter

A particle system for PixiJS
TypeScript
777
star
5

spine

Pixi.js plugin that enables Spine support.
TypeScript
538
star
6

examples

Rendering examples using PixiJS and related plugins
JavaScript
469
star
7

sound

WebAudio API playback library, with filters. Modern audio playback for modern browsers.
TypeScript
376
star
8

pixi-ui

Provide a definitive user experience in your PixiJS application without any frontend library!
JavaScript
299
star
9

tilemap

Rectangular tilemap implementation for PixiJS
TypeScript
275
star
10

pixi-typescript

Typescript definitions for Pixi.js
TypeScript
238
star
11

layers

Separate the z-hierarchy of your scene tree from its canonical structure.
TypeScript
220
star
12

animate

PixiJS runtime library for content from Adobe Animate CC
JavaScript
198
star
13

lights

Adds dynamic lighting via deferred shading to PixiJS
TypeScript
191
star
14

open-games

TypeScript
190
star
15

pixi-projection

TypeScript
186
star
16

pixi-haxe

Externs of Pixi.js for Haxe
Haxe
179
star
17

graphics-smooth

Drop-in replacement for Graphics but with anti-aliasing
TypeScript
151
star
18

ui

Commonly used UI components for PixiJS
TypeScript
149
star
19

animate-extension

Custom Platform Plugin for Adobe Animate CC (Formerly Adobe Flash CC) - to export animation for the PixiJS renderer
C++
124
star
20

pixi-compressed-textures

Compressed textures and retina support for pixijs. Loader can choose textures depends on platform and rendering mode.
TypeScript
92
star
21

pixi-native

A native version of pixi
Kotlin
85
star
22

pixi-gl-core

A set of tidy little pixi objects that make working with WebGL simpler
JavaScript
83
star
23

assetpack

TypeScript
77
star
24

pixi-extra-filters

[deprecated] Please see https://github.com/pixijs/pixi-filters
JavaScript
66
star
25

pixi-particles-editor

PIXI-based particle editor
JavaScript
65
star
26

picture

A plugin that includes a sprite renderer that reduces border artifacts and 3 blend mode implementations for WebGL
TypeScript
61
star
27

layout

Library for arranging/resizing pixiJS rendered elements basing on css like configs
TypeScript
53
star
28

html-text

Multi-Style Text Rendering Plugin for PixiJS
TypeScript
38
star
29

gif

Plugin to support playback of animated GIF images in PixiJS.
TypeScript
35
star
30

pixi-jsdoc-template

PixiJS Flavored JSDoc Template
JavaScript
30
star
31

extension-boilerplate

Pixi.js example renderer plugin. Clamps textures to reduce border artifacts.
TypeScript
30
star
32

pixijs.com

JavaScript
30
star
33

pixi-text-style

PIXI.TextStyle Generator
JavaScript
30
star
34

floss

Unit-testing for those hard to reach places
TypeScript
28
star
35

storybook

TypeScript
27
star
36

node

Run PixiJS but in Node.js environments, no browser required!
TypeScript
25
star
37

bunny-mark

Simulation for performance testing PIXI releases
JavaScript
20
star
38

devtools

TypeScript
18
star
39

batch

PixiJS batch rendering plugin library
TypeScript
17
star
40

pixify

Browserify bundle process for PIXI libraries
JavaScript
16
star
41

guides

PixiJS User Guides
SCSS
12
star
42

customize

Customize the list of packages to use for PixiJS v5
TypeScript
11
star
43

animate-examples

Document Examples for testing PixiAnimate publishing
10
star
44

docs

API Documentation container
HTML
9
star
45

examples-v4

Rendering examples using PixiJS v4 and related plugins
JavaScript
9
star
46

spine-v8

TypeScript
9
star
47

extension-scripts

Build-time scripts for setting up extensions
JavaScript
6
star
48

pixi-closure-compiler

closure compiler externs for pixijs
JavaScript
6
star
49

eslint-config

ESLint config for pixi.js plugin/integration libraries
JavaScript
5
star
50

webdoc-template

PixiJS template ported to webdoc
TypeScript
4
star
51

generator-pixi-plugin

A Yeoman generator for creating pixi.js plugins.
JavaScript
4
star
52

bundler

Bundle all release into a single package
JavaScript
3
star
53

pixi-animate-tests-tool

Used to generate unit tests solutions for PixiAnimate
JavaScript
3
star
54

legacy.pixijs.com

SCSS
3
star
55

examples-v5

Rendering examples using PixiJS and related plugins
JavaScript
2
star
56

webworker-plugins

TypeScript
1
star
57

examples-v7

JavaScript
1
star