push skin alteration down from renderwebgl
This commit is contained in:
parent
27c70a7542
commit
ab603ffa92
@ -3,7 +3,6 @@ const twgl = require('twgl.js');
|
|||||||
const Rectangle = require('./Rectangle');
|
const Rectangle = require('./Rectangle');
|
||||||
const RenderConstants = require('./RenderConstants');
|
const RenderConstants = require('./RenderConstants');
|
||||||
const ShaderManager = require('./ShaderManager');
|
const ShaderManager = require('./ShaderManager');
|
||||||
const Skin = require('./Skin');
|
|
||||||
const EffectTransform = require('./EffectTransform');
|
const EffectTransform = require('./EffectTransform');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,8 +100,6 @@ class Drawable {
|
|||||||
/** @todo move convex hull functionality, maybe bounds functionality overall, to Skin classes */
|
/** @todo move convex hull functionality, maybe bounds functionality overall, to Skin classes */
|
||||||
this._convexHullPoints = null;
|
this._convexHullPoints = null;
|
||||||
this._convexHullDirty = true;
|
this._convexHullDirty = true;
|
||||||
|
|
||||||
this._skinWasAltered = this._skinWasAltered.bind(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,13 +138,7 @@ class Drawable {
|
|||||||
*/
|
*/
|
||||||
set skin (newSkin) {
|
set skin (newSkin) {
|
||||||
if (this._skin !== newSkin) {
|
if (this._skin !== newSkin) {
|
||||||
if (this._skin) {
|
|
||||||
this._skin.removeListener(Skin.Events.WasAltered, this._skinWasAltered);
|
|
||||||
}
|
|
||||||
this._skin = newSkin;
|
this._skin = newSkin;
|
||||||
if (this._skin) {
|
|
||||||
this._skin.addListener(Skin.Events.WasAltered, this._skinWasAltered);
|
|
||||||
}
|
|
||||||
this._skinWasAltered();
|
this._skinWasAltered();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ const EventEmitter = require('events');
|
|||||||
const hull = require('hull.js');
|
const hull = require('hull.js');
|
||||||
const twgl = require('twgl.js');
|
const twgl = require('twgl.js');
|
||||||
|
|
||||||
|
const Skin = require('./Skin');
|
||||||
const BitmapSkin = require('./BitmapSkin');
|
const BitmapSkin = require('./BitmapSkin');
|
||||||
const Drawable = require('./Drawable');
|
const Drawable = require('./Drawable');
|
||||||
const Rectangle = require('./Rectangle');
|
const Rectangle = require('./Rectangle');
|
||||||
@ -290,6 +291,20 @@ class RenderWebGL extends EventEmitter {
|
|||||||
this.emit(RenderConstants.Events.NativeSizeChanged, {newSize: this._nativeSize});
|
this.emit(RenderConstants.Events.NativeSizeChanged, {newSize: this._nativeSize});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify Drawables whose skin is the skin that changed.
|
||||||
|
* @param {Skin} skin - the skin that changed.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
_skinWasAltered (skin) {
|
||||||
|
for (let i = 0; i < this._allDrawables.length; i++) {
|
||||||
|
const drawable = this._allDrawables[i];
|
||||||
|
if (drawable && drawable._skin === skin) {
|
||||||
|
drawable._skinWasAltered();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new bitmap skin from a snapshot of the provided bitmap data.
|
* Create a new bitmap skin from a snapshot of the provided bitmap data.
|
||||||
* @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} bitmapData - new contents for this skin.
|
* @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} bitmapData - new contents for this skin.
|
||||||
@ -302,6 +317,7 @@ class RenderWebGL extends EventEmitter {
|
|||||||
const skinId = this._nextSkinId++;
|
const skinId = this._nextSkinId++;
|
||||||
const newSkin = new BitmapSkin(skinId, this);
|
const newSkin = new BitmapSkin(skinId, this);
|
||||||
newSkin.setBitmap(bitmapData, costumeResolution, rotationCenter);
|
newSkin.setBitmap(bitmapData, costumeResolution, rotationCenter);
|
||||||
|
newSkin.addListener(Skin.Events.WasAltered, this._skinWasAltered.bind(this, newSkin));
|
||||||
this._allSkins[skinId] = newSkin;
|
this._allSkins[skinId] = newSkin;
|
||||||
return skinId;
|
return skinId;
|
||||||
}
|
}
|
||||||
@ -317,6 +333,7 @@ class RenderWebGL extends EventEmitter {
|
|||||||
const skinId = this._nextSkinId++;
|
const skinId = this._nextSkinId++;
|
||||||
const newSkin = new SVGSkin(skinId, this);
|
const newSkin = new SVGSkin(skinId, this);
|
||||||
newSkin.setSVG(svgData, rotationCenter);
|
newSkin.setSVG(svgData, rotationCenter);
|
||||||
|
newSkin.addListener(Skin.Events.WasAltered, this._skinWasAltered.bind(this, newSkin));
|
||||||
this._allSkins[skinId] = newSkin;
|
this._allSkins[skinId] = newSkin;
|
||||||
return skinId;
|
return skinId;
|
||||||
}
|
}
|
||||||
@ -328,6 +345,7 @@ class RenderWebGL extends EventEmitter {
|
|||||||
createPenSkin () {
|
createPenSkin () {
|
||||||
const skinId = this._nextSkinId++;
|
const skinId = this._nextSkinId++;
|
||||||
const newSkin = new PenSkin(skinId, this);
|
const newSkin = new PenSkin(skinId, this);
|
||||||
|
newSkin.addListener(Skin.Events.WasAltered, this._skinWasAltered.bind(this, newSkin));
|
||||||
this._allSkins[skinId] = newSkin;
|
this._allSkins[skinId] = newSkin;
|
||||||
return skinId;
|
return skinId;
|
||||||
}
|
}
|
||||||
@ -344,6 +362,7 @@ class RenderWebGL extends EventEmitter {
|
|||||||
const skinId = this._nextSkinId++;
|
const skinId = this._nextSkinId++;
|
||||||
const newSkin = new TextBubbleSkin(skinId, this);
|
const newSkin = new TextBubbleSkin(skinId, this);
|
||||||
newSkin.setTextBubble(type, text, pointsLeft);
|
newSkin.setTextBubble(type, text, pointsLeft);
|
||||||
|
newSkin.addListener(Skin.Events.WasAltered, this._skinWasAltered.bind(this, newSkin));
|
||||||
this._allSkins[skinId] = newSkin;
|
this._allSkins[skinId] = newSkin;
|
||||||
return skinId;
|
return skinId;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user