-
Notifications
You must be signed in to change notification settings - Fork 718
/
textruntimeobject-pixi-renderer.js
166 lines (142 loc) · 5.48 KB
/
textruntimeobject-pixi-renderer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
gdjs.TextRuntimeObjectPixiRenderer = function(runtimeObject, runtimeScene)
{
this._object = runtimeObject;
this._fontManager = runtimeScene.getGame().getFontManager();
if ( this._text === undefined ) this._text = new PIXI.Text(" ", {align:"left"});
this._text.anchor.x = 0.5;
this._text.anchor.y = 0.5;
runtimeScene.getLayer("").getRenderer().addRendererObject(this._text, runtimeObject.getZOrder());
this._text.text = runtimeObject._str.length === 0 ? " " : runtimeObject._str;
this._justCreated = true; //Work around a PIXI.js bug. See updateTime method.
this.updateStyle();
this.updatePosition();
};
gdjs.TextRuntimeObjectRenderer = gdjs.TextRuntimeObjectPixiRenderer; //Register the class to let the engine use it.
gdjs.TextRuntimeObjectPixiRenderer.prototype.getRendererObject = function() {
return this._text;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.ensureUpToDate = function() {
if (this._justCreated) { //Work around a PIXI.js bug:
this._text.updateText();
this.updatePosition(); //Width seems not to be correct when text is not rendered yet.
this._justCreated = false;
}
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.updateStyle = function() {
var fontName = "\"" + this._fontManager.getFontFamily(this._object._fontName) + "\"";
var style = this._text.style;
style.fontStyle = this._object._italic ? 'italic' : 'normal';
style.fontWeight = this._object._bold ? 'bold' : 'normal';
style.fontSize = this._object._characterSize;
style.fontFamily = fontName;
if (this._object._useGradient){
style.fill = this._getGradientHex();
} else {
style.fill = this._getColorHex();
}
if (this._object._gradientType === 'LINEAR_VERTICAL'){
style.fillGradientType = PIXI.TEXT_GRADIENT.LINEAR_VERTICAL;
} else {
style.fillGradientType = PIXI.TEXT_GRADIENT.LINEAR_HORIZONTAL;
}
style.align = this._object._textAlign;
style.wordWrap = this._object._wrapping;
style.wordWrapWidth = this._object._wrappingWidth;
style.breakWords = true;
style.stroke = gdjs.rgbToHexNumber(
this._object._outlineColor[0],
this._object._outlineColor[1],
this._object._outlineColor[2]
);
style.strokeThickness = this._object._outlineThickness;
style.dropShadow = this._object._shadow;
style.dropShadowColor = gdjs.rgbToHexNumber(
this._object._shadowColor[0],
this._object._shadowColor[1],
this._object._shadowColor[2]
);
style.dropShadowBlur = this._object._shadowBlur;
style.dropShadowAngle = this._object._shadowAngle;
style.dropShadowDistance = this._object._shadowDistance;
style.padding = this._object._padding;
// Prevent spikey outlines by adding a miter limit
style.miterLimit = 3;
this.updatePosition();
// Manually ask the PIXI object to re-render as we changed a style property
// see http://www.html5gamedevs.com/topic/16924-change-text-style-post-render/
this._text.dirty = true;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.updatePosition = function() {
this._text.position.x = this._object.x+this._text.width/2;
this._text.position.y = this._object.y+this._text.height/2;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.updateAngle = function() {
this._text.rotation = gdjs.toRad(this._object.angle);
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.updateOpacity = function() {
this._text.alpha = this._object.opacity / 255;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.updateString = function() {
this._text.text = this._object._str.length === 0 ? " " : this._object._str;
this._text.updateText(); //Work around a PIXI.js bug.
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.getWidth = function() {
return this._text.width;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype.getHeight = function() {
return this._text.height;
};
gdjs.TextRuntimeObjectPixiRenderer.prototype._getColorHex = function() {
return gdjs.rgbToHexNumber(
this._object._color[0],
this._object._color[1],
this._object._color[2]
);
}
gdjs.TextRuntimeObjectPixiRenderer.prototype._getGradientHex = function() {
var gradient = [];
for (var colorIndex = 0; colorIndex < this._object._gradient.length; colorIndex++){
gradient.push(
'#' + gdjs.rgbToHex(
this._object._gradient[colorIndex][0],
this._object._gradient[colorIndex][1],
this._object._gradient[colorIndex][2]
)
);
}
return gradient;
}
/**
* Get y-scale of the text.
*/
gdjs.TextRuntimeObjectPixiRenderer.prototype.getScaleX = function() {
return this._text.scale.x;
};
/**
* Get x-scale of the text.
*/
gdjs.TextRuntimeObjectPixiRenderer.prototype.getScaleY = function() {
return this._text.scale.y;
};
/**
* Set the text object scale.
* @param {number} newScale The new scale for the text object.
*/
gdjs.TextRuntimeObjectPixiRenderer.prototype.setScale = function(newScale) {
this._text.scale.x = newScale;
this._text.scale.y = newScale;
};
/**
* Set the text object x-scale.
* @param {number} newScale The new x-scale for the text object.
*/
gdjs.TextRuntimeObjectPixiRenderer.prototype.setScaleX = function(newScale) {
this._text.scale.x = newScale;
};
/**
* Set the text object y-scale.
* @param {number} newScale The new y-scale for the text object.
*/
gdjs.TextRuntimeObjectPixiRenderer.prototype.setScaleY = function(newScale) {
this._text.scale.y = newScale;
};