Files
GDevelop/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js
T

150 lines
5.4 KiB
JavaScript

/*
* GDevelop JS Platform
* 2013 Florian Rival (Florian.Rival@gmail.com)
*/
/**
* The ShapePainterRuntimeObject allows to draw graphics shapes on screen.
*
* @class ShapePainterRuntimeObject
* @extends RuntimeObject
* @namespace gdjs
*/
gdjs.ShapePainterRuntimeObject = function(runtimeScene, objectData)
{
gdjs.RuntimeObject.call(this, runtimeScene, objectData);
if ( this._graphics === undefined ) {
this._graphics = new PIXI.Graphics();
}
this._fillColor = parseInt(gdjs.rgbToHex(objectData.fillColor.r, objectData.fillColor.g, objectData.fillColor.b), 16);
this._outlineColor = parseInt(gdjs.rgbToHex(objectData.outlineColor.r, objectData.outlineColor.g, objectData.outlineColor.b), 16);
this._fillOpacity = objectData.fillOpacity;
this._outlineOpacity = objectData.outlineOpacity;
this._outlineSize = objectData.outlineSize;
this._absoluteCoordinates = objectData.absoluteCoordinates;
this._runtimeScene = runtimeScene;
runtimeScene.getLayer("").addChildToPIXIContainer(this._graphics, this.zOrder);
};
gdjs.ShapePainterRuntimeObject.prototype = Object.create( gdjs.RuntimeObject.prototype );
gdjs.ShapePainterRuntimeObject.thisIsARuntimeObjectConstructor = "PrimitiveDrawing::Drawer";
gdjs.ShapePainterRuntimeObject.prototype.onDeletedFromScene = function(runtimeScene) {
runtimeScene.getLayer(this.layer).removePIXIContainerChild(this._graphics);
};
gdjs.ShapePainterRuntimeObject.prototype.stepAutomatismsPreEvents = function(runtimeScene) {
//We redefine stepAutomatismsPreEvents just to clear the graphics before running events.
this._graphics.clear();
this._graphics.lineStyle(this._outlineSize, this._outlineColor, this._outlineOpacity/255);
gdjs.RuntimeObject.prototype.stepAutomatismsPreEvents.call(this, runtimeScene);
};
gdjs.ShapePainterRuntimeObject.prototype.drawRectangle = function(x1, y1, x2, y2) {
this._graphics.beginFill(this._fillColor, this._fillOpacity / 255);
this._graphics.drawRect(x1, y1, x2 - x1,y2 - y1);
this._graphics.endFill();
};
gdjs.ShapePainterRuntimeObject.prototype.drawCircle = function(x, y, radius) {
this._graphics.beginFill(this._fillColor, this._fillOpacity / 255);
this._graphics.drawCircle(x, y, radius);
this._graphics.endFill();
};
gdjs.ShapePainterRuntimeObject.prototype.drawLine = function(x1, y1, x2, y2, thickness) {
this._graphics.beginFill(this._fillColor, this._fillOpacity / 255);
if (y2 === y1) {
this._graphics.drawRect(x1, y1 - thickness / 2, x2 - x1, thickness);
} else {
var angle = Math.atan2(y2 - y1, x2 - x1);
var xIncrement = Math.sin(angle) * thickness;
var yIncrement = Math.cos(angle) * thickness;
this._graphics.drawPolygon(x1 + xIncrement, y1 - yIncrement, x1 - xIncrement, y1 + yIncrement,
x2 - xIncrement, y2 + yIncrement, x2 + xIncrement, y2 - yIncrement);
}
this._graphics.endFill();
};
gdjs.ShapePainterRuntimeObject.prototype.setFillColor = function(rgbColor) {
var colors = rgbColor.split(";");
if ( colors.length < 3 ) return;
this._fillColor = parseInt(gdjs.rgbToHex(parseInt(colors[0], 10), parseInt(colors[1], 10), parseInt(colors[2], 10)), 16);
};
gdjs.ShapePainterRuntimeObject.prototype.setOutlineColor = function(rgbColor) {
var colors = rgbColor.split(";");
if ( colors.length < 3 ) return;
this._outlineColor = parseInt(gdjs.rgbToHex(parseInt(colors[0], 10), parseInt(colors[1], 10), parseInt(colors[2], 10)), 16);
this._graphics.lineStyle(this._outlineSize, this._outlineColor, this._outlineOpacity / 255);
};
gdjs.ShapePainterRuntimeObject.prototype.setOutlineSize = function(size) {
this._outlineSize = size;
this._graphics.lineStyle(this._outlineSize, this._outlineColor, this._outlineOpacity / 255);
};
gdjs.ShapePainterRuntimeObject.prototype.getOutlineSize = function() {
return this._outlineSize;
};
gdjs.ShapePainterRuntimeObject.prototype.setFillOpacity = function(opacity) {
this._fillOpacity = opacity;
};
gdjs.ShapePainterRuntimeObject.prototype.getFillOpacity = function() {
return this._fillOpacity;
};
gdjs.ShapePainterRuntimeObject.prototype.setOutlineOpacity = function(opacity) {
this._outlineOpacity = opacity;
this._graphics.lineStyle(this._outlineSize, this._outlineColor, this._outlineOpacity / 255);
};
gdjs.ShapePainterRuntimeObject.prototype.getOutlineOpacity = function() {
return this._outlineOpacity;
};
gdjs.ShapePainterRuntimeObject.prototype.setX = function(x) {
this.x = x;
if (!this._absoluteCoordinates) {
this._graphics.position.x = x;
}
};
gdjs.ShapePainterRuntimeObject.prototype.setY = function(y) {
this.y = y;
if (!this._absoluteCoordinates) {
this._graphics.position.y = y;
}
};
gdjs.ShapePainterRuntimeObject.prototype.setLayer = function(name) {
//We need to move the object from the pixi container of the layer
this._runtimeScene.getLayer(this.layer).removePIXIContainerChild(this._graphics);
this.layer = name;
this._runtimeScene.getLayer(this.layer).addChildToPIXIContainer(this._graphics, this.zOrder);
};
gdjs.ShapePainterRuntimeObject.prototype.getWidth = function() {
return 32;
};
gdjs.ShapePainterRuntimeObject.prototype.getHeight = function() {
return 32;
};
gdjs.ShapePainterRuntimeObject.prototype.setZOrder = function(z) {
if ( z !== this.zOrder ) {
this._runtimeScene.getLayer(this.layer).changePIXIContainerChildZOrder(this._graphics, z);
this.zOrder = z;
}
};