Files
2020-08-24 23:16:53 +07:00

101 lines
2.8 KiB
JavaScript
Vendored

gaf.Sprite = gaf.Object.extend
({
_className: "GAFSprite",
_hasCtx: false,
_hasFilter: false,
ctor : function(gafSpriteProto, usedScale)
{
this._super(usedScale);
cc.assert(gafSpriteProto, "Error! Missing mandatory parameter.");
this._gafproto = gafSpriteProto;
},
// Private
_init : function()
{
var frame = this._gafproto.getFrame();
cc.assert(frame instanceof cc.SpriteFrame, "Error. Wrong object type.");
// Create sprite with custom render command from frame
this._sprite = new cc.Sprite();
this._sprite._renderCmd = this._gafCreateRenderCmd(this._sprite);
this._sprite.initWithSpriteFrame(frame);
this._sprite.setAnchorPoint(this._gafproto.getAnchor());
this.addChild(this._sprite);
//this._sprite.setCascadeColorEnabled(true);
//this._sprite.setCascadeOpacityEnabled(true);
this._sprite.setOpacityModifyRGB(true);
if(cc._renderType === cc.game.RENDER_TYPE_WEBGL)
this._sprite.setBlendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
},
_applyState : function(state, parent)
{
this._applyStateSuper(state, parent);
if(this._needsCtx)
{
// Enable ctx state if wasn't enabled
if(!this._hasCtx)
{
this._enableCtx();
this._hasCtx = true;
}
// Set ctx shader
this._applyCtxState(state);
}
else
{
// Disable ctx state if was enabled
if(this._hasCtx)
{
this._disableCtx();
this._hasCtx = false;
}
// Apply color
if(!cc.colorEqual(this._sprite._realColor, this._cascadeColorMult))
{
this._sprite.setColor(this._cascadeColorMult);
}
// Apply opacity
if(this._sprite.getOpacity() != this._cascadeColorMult.a)
{
this._sprite.setOpacity(this._cascadeColorMult.a);
}
}
},
_enableCtx: function()
{
this._sprite._renderCmd._enableCtx();
},
_disableCtx: function()
{
this._sprite._renderCmd._disableCtx();
},
_applyCtxState: function(state){
this._sprite._renderCmd._applyCtxState(this);
},
getBoundingBoxForCurrentFrame: function ()
{
var result = this._sprite.getBoundingBox();
return cc._rectApplyAffineTransformIn(result, this.getNodeToParentTransform());
},
_gafCreateRenderCmd: function(item){
if(cc._renderType === cc.game.RENDER_TYPE_CANVAS)
return new gaf.Sprite.CanvasRenderCmd(item);
else
return new gaf.Sprite.WebGLRenderCmd(item);
}
});