mirror of
https://github.com/tiennm99/fbird.git
synced 2026-06-17 04:47:53 +00:00
426 lines
14 KiB
JavaScript
Vendored
426 lines
14 KiB
JavaScript
Vendored
/**
|
|
*
|
|
* Copyright (c) 2008-2010 Ricardo Quesada
|
|
* Copyright (c) 2011-2012 cocos2d-x.org
|
|
* Copyright (c) 2013-2014 Chukong Technologies Inc.
|
|
*
|
|
* Copyright 2011 Yannick Loriot. All rights reserved.
|
|
* http://yannickloriot.com
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
/**
|
|
* CCControlSwitch: Switch control ui component
|
|
* @class
|
|
* @extends cc.Control
|
|
*/
|
|
cc.ControlSwitch = cc.Control.extend(/** @lends cc.ControlSwitch# */{
|
|
/** Sprite which represents the view. */
|
|
_switchSprite:null,
|
|
_initialTouchXPosition:0,
|
|
|
|
_moved:false,
|
|
/** A Boolean value that determines the off/on state of the switch. */
|
|
_on:false,
|
|
_className:"ControlSwitch",
|
|
ctor:function (maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel) {
|
|
cc.Control.prototype.ctor.call(this);
|
|
|
|
offLabel && this.initWithMaskSprite(maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel);
|
|
},
|
|
|
|
/** Creates a switch with a mask sprite, on/off sprites for on/off states, a thumb sprite and an on/off labels. */
|
|
initWithMaskSprite:function (maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel) {
|
|
if(!maskSprite)
|
|
throw new Error("cc.ControlSwitch.initWithMaskSprite(): maskSprite should be non-null.");
|
|
if(!onSprite)
|
|
throw new Error("cc.ControlSwitch.initWithMaskSprite(): onSprite should be non-null.");
|
|
if(!offSprite)
|
|
throw new Error("cc.ControlSwitch.initWithMaskSprite(): offSprite should be non-null.");
|
|
if(!thumbSprite)
|
|
throw new Error("cc.ControlSwitch.initWithMaskSprite(): thumbSprite should be non-null.");
|
|
if (this.init()) {
|
|
this._on = true;
|
|
|
|
this._switchSprite = new cc.ControlSwitchSprite();
|
|
this._switchSprite.initWithMaskSprite(maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel);
|
|
this._switchSprite.setPosition(this._switchSprite.getContentSize().width / 2, this._switchSprite.getContentSize().height / 2);
|
|
this.addChild(this._switchSprite);
|
|
|
|
this.ignoreAnchorPointForPosition(false);
|
|
this.setAnchorPoint(0.5, 0.5);
|
|
this.setContentSize(this._switchSprite.getContentSize());
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
setOn:function (isOn, animated) {
|
|
animated = animated || false;
|
|
this._on = isOn;
|
|
var xPosition = (this._on) ? this._switchSprite.getOnPosition() : this._switchSprite.getOffPosition();
|
|
if(animated){
|
|
this._switchSprite.runAction(new cc.ActionTween(0.2, "sliderXPosition", this._switchSprite.getSliderXPosition(),xPosition));
|
|
}else{
|
|
this._switchSprite.setSliderXPosition(xPosition);
|
|
}
|
|
this.sendActionsForControlEvents(cc.CONTROL_EVENT_VALUECHANGED);
|
|
},
|
|
|
|
isOn:function () {
|
|
return this._on;
|
|
},
|
|
|
|
hasMoved:function () {
|
|
return this._moved;
|
|
},
|
|
|
|
setEnabled:function (enabled) {
|
|
this._enabled = enabled;
|
|
|
|
this._switchSprite.setOpacity((enabled) ? 255 : 128);
|
|
},
|
|
|
|
locationFromTouch:function (touch) {
|
|
var touchLocation = touch.getLocation(); // Get the touch position
|
|
touchLocation = this.convertToNodeSpace(touchLocation); // Convert to the node space of this class
|
|
|
|
return touchLocation;
|
|
},
|
|
|
|
onTouchBegan:function (touch, event) {
|
|
if (!this.isTouchInside(touch) || !this.isEnabled()|| !this.isVisible()) {
|
|
return false;
|
|
}
|
|
|
|
this._moved = false;
|
|
|
|
var location = this.locationFromTouch(touch);
|
|
|
|
this._initialTouchXPosition = location.x - this._switchSprite.getSliderXPosition();
|
|
|
|
this._switchSprite.getThumbSprite().setColor(cc.color.GRAY);
|
|
this._switchSprite.needsLayout();
|
|
|
|
return true;
|
|
},
|
|
|
|
onTouchMoved:function (touch, event) {
|
|
var location = this.locationFromTouch(touch);
|
|
location = cc.p(location.x - this._initialTouchXPosition, 0);
|
|
|
|
this._moved = true;
|
|
|
|
this._switchSprite.setSliderXPosition(location.x);
|
|
},
|
|
|
|
onTouchEnded:function (touch, event) {
|
|
var location = this.locationFromTouch(touch);
|
|
|
|
this._switchSprite.getThumbSprite().setColor(cc.color.WHITE);
|
|
|
|
if (this.hasMoved()) {
|
|
this.setOn(!(location.x < this._switchSprite.getContentSize().width / 2), true);
|
|
} else {
|
|
this.setOn(!this._on, true);
|
|
}
|
|
},
|
|
|
|
onTouchCancelled:function (touch, event) {
|
|
var location = this.locationFromTouch(touch);
|
|
|
|
this._switchSprite.getThumbSprite().setColor(cc.color.WHITE);
|
|
|
|
if (this.hasMoved()) {
|
|
this.setOn(!(location.x < this._switchSprite.getContentSize().width / 2), true);
|
|
} else {
|
|
this.setOn(!this._on, true);
|
|
}
|
|
}
|
|
});
|
|
|
|
/** Creates a switch with a mask sprite, on/off sprites for on/off states and a thumb sprite.
|
|
* @deprecated
|
|
*/
|
|
cc.ControlSwitch.create = function (maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel) {
|
|
return new cc.ControlSwitch(maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel);
|
|
};
|
|
|
|
/**
|
|
* ControlSwitchSprite: Sprite switch control ui component
|
|
* @class
|
|
* @extends cc.Sprite
|
|
*
|
|
* @property {Number} sliderX - Slider's x position
|
|
* @property {cc.Point} onPos - The position of slider when switch is on
|
|
* @property {cc.Point} offPos - The position of slider when switch is off
|
|
* @property {cc.Texture2D} maskTexture - The texture of the mask
|
|
* @property {cc.Point} texturePos - The position of the texture
|
|
* @property {cc.Point} maskPos - The position of the mask
|
|
* @property {cc.Sprite} onSprite - The sprite of switch on
|
|
* @property {cc.Sprite} offSprite - The sprite of switch off
|
|
* @property {cc.Sprite} thumbSprite - The thumb sprite of the switch control
|
|
* @property {cc.LabelTTF} onLabel - The sprite of switch on
|
|
* @property {cc.LabelTTF} offLabel - The sprite of switch off
|
|
* @property {Number} onSideWidth - <@readonly> The width of the on side of the switch control
|
|
* @property {Number} offSideWidth - <@readonly> The width of the off side of the switch control
|
|
*/
|
|
cc.ControlSwitchSprite = cc.Sprite.extend({
|
|
_sliderXPosition:0,
|
|
_onPosition:0,
|
|
_offPosition:0,
|
|
|
|
_textureLocation:0,
|
|
_maskLocation:0,
|
|
_maskSize:null,
|
|
|
|
_onSprite:null,
|
|
_offSprite:null,
|
|
_thumbSprite:null,
|
|
_onLabel:null,
|
|
_offLabel:null,
|
|
_clipper:null,
|
|
_stencil:null,
|
|
_backRT:null,
|
|
|
|
ctor:function () {
|
|
cc.Sprite.prototype.ctor.call(this);
|
|
this._sliderXPosition = 0;
|
|
this._onPosition = 0;
|
|
this._offPosition = 0;
|
|
this._maskLocation = 0;
|
|
this._maskSize = cc.size(0, 0);
|
|
this._onSprite = null;
|
|
this._offSprite = null;
|
|
this._thumbSprite = null;
|
|
this._onLabel = null;
|
|
this._offLabel = null;
|
|
},
|
|
|
|
initWithMaskSprite:function (maskSprite, onSprite, offSprite, thumbSprite, onLabel, offLabel) {
|
|
if (cc.Sprite.prototype.init.call(this)) {
|
|
this.setSpriteFrame(maskSprite.displayFrame());
|
|
// Sets the default values
|
|
this._onPosition = 0;
|
|
this._offPosition = -onSprite.getContentSize().width + thumbSprite.getContentSize().width / 2;
|
|
this._sliderXPosition = this._onPosition;
|
|
|
|
this.setOnSprite(onSprite);
|
|
this.setOffSprite(offSprite);
|
|
this.setThumbSprite(thumbSprite);
|
|
this.setOnLabel(onLabel);
|
|
this.setOffLabel(offLabel);
|
|
|
|
// Set up the mask with the Mask shader
|
|
this._stencil = maskSprite;
|
|
var maskSize = this._maskSize = this._stencil.getContentSize();
|
|
this._stencil.setPosition(0, 0);
|
|
|
|
// Init clipper for mask
|
|
this._clipper = new cc.ClippingNode();
|
|
this._clipper.setAnchorPoint(0.5, 0.5);
|
|
this._clipper.setPosition(maskSize.width / 2, maskSize.height / 2);
|
|
this._clipper.setStencil(this._stencil);
|
|
this.addChild(this._clipper);
|
|
|
|
this._clipper.addChild(onSprite);
|
|
this._clipper.addChild(offSprite);
|
|
this._clipper.addChild(onLabel);
|
|
this._clipper.addChild(offLabel);
|
|
|
|
this.addChild(this._thumbSprite);
|
|
|
|
this.needsLayout();
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
needsLayout:function () {
|
|
var maskSize = this._maskSize;
|
|
this._onSprite.setPosition(
|
|
this._onSprite.getContentSize().width / 2 + this._sliderXPosition - maskSize.width / 2,
|
|
this._onSprite.getContentSize().height / 2 - maskSize.height / 2
|
|
);
|
|
this._offSprite.setPosition(
|
|
this._onSprite.getContentSize().width + this._offSprite.getContentSize().width / 2 + this._sliderXPosition - maskSize.width / 2,
|
|
this._offSprite.getContentSize().height / 2 - maskSize.height / 2
|
|
);
|
|
|
|
if (this._onLabel) {
|
|
this._onLabel.setPosition(
|
|
this._onSprite.getPositionX() - this._thumbSprite.getContentSize().width / 6,
|
|
this._onSprite.getContentSize().height / 2 - maskSize.height / 2
|
|
);
|
|
}
|
|
if (this._offLabel) {
|
|
this._offLabel.setPosition(
|
|
this._offSprite.getPositionX() + this._thumbSprite.getContentSize().width / 6,
|
|
this._offSprite.getContentSize().height / 2 - maskSize.height / 2
|
|
);
|
|
}
|
|
this._thumbSprite.setPosition(
|
|
this._onSprite.getContentSize().width + this._sliderXPosition,
|
|
this._maskSize.height / 2
|
|
);
|
|
},
|
|
|
|
setSliderXPosition:function (sliderXPosition) {
|
|
if (sliderXPosition <= this._offPosition) {
|
|
// Off
|
|
sliderXPosition = this._offPosition;
|
|
} else if (sliderXPosition >= this._onPosition) {
|
|
// On
|
|
sliderXPosition = this._onPosition;
|
|
}
|
|
|
|
this._sliderXPosition = sliderXPosition;
|
|
|
|
this.needsLayout();
|
|
},
|
|
getSliderXPosition:function () {
|
|
return this._sliderXPosition;
|
|
},
|
|
|
|
_getOnSideWidth:function () {
|
|
return this._onSprite.getContentSize().width;
|
|
},
|
|
|
|
_getOffSideWidth:function () {
|
|
return this._offSprite.getContentSize().height;
|
|
},
|
|
|
|
updateTweenAction:function (value, key) {
|
|
if (key === "sliderXPosition")
|
|
this.setSliderXPosition(value);
|
|
},
|
|
|
|
setOnPosition:function (onPosition) {
|
|
this._onPosition = onPosition;
|
|
},
|
|
getOnPosition:function () {
|
|
return this._onPosition;
|
|
},
|
|
|
|
setOffPosition:function (offPosition) {
|
|
this._offPosition = offPosition;
|
|
},
|
|
getOffPosition:function () {
|
|
return this._offPosition;
|
|
},
|
|
|
|
setMaskTexture:function (maskTexture) {
|
|
this._stencil.setTexture(maskTexture);
|
|
},
|
|
getMaskTexture:function () {
|
|
return this._stencil.getTexture();
|
|
},
|
|
|
|
setTextureLocation:function (textureLocation) {
|
|
this._textureLocation = textureLocation;
|
|
},
|
|
getTextureLocation:function () {
|
|
return this._textureLocation;
|
|
},
|
|
|
|
setMaskLocation:function (maskLocation) {
|
|
this._maskLocation = maskLocation;
|
|
},
|
|
getMaskLocation:function () {
|
|
return this._maskLocation;
|
|
},
|
|
|
|
setOnSprite:function (onSprite) {
|
|
this._onSprite = onSprite;
|
|
},
|
|
getOnSprite:function () {
|
|
return this._onSprite;
|
|
},
|
|
|
|
setOffSprite:function (offSprite) {
|
|
this._offSprite = offSprite;
|
|
},
|
|
getOffSprite:function () {
|
|
return this._offSprite;
|
|
},
|
|
|
|
setThumbSprite:function (thumbSprite) {
|
|
this._thumbSprite = thumbSprite;
|
|
},
|
|
getThumbSprite:function () {
|
|
return this._thumbSprite;
|
|
},
|
|
|
|
setOnLabel:function (onLabel) {
|
|
this._onLabel = onLabel;
|
|
},
|
|
getOnLabel:function () {
|
|
return this._onLabel;
|
|
},
|
|
|
|
setOffLabel:function (offLabel) {
|
|
this._offLabel = offLabel;
|
|
},
|
|
getOffLabel:function () {
|
|
return this._offLabel;
|
|
}
|
|
});
|
|
|
|
var _p = cc.ControlSwitchSprite.prototype;
|
|
|
|
/** @expose */
|
|
_p.sliderX;
|
|
cc.defineGetterSetter(_p, "sliderX", _p.getSliderXPosition, _p.setSliderXPosition);
|
|
/** @expose */
|
|
_p.onPos;
|
|
cc.defineGetterSetter(_p, "onPos", _p.getOnPosition, _p.setOnPosition);
|
|
/** @expose */
|
|
_p.offPos;
|
|
cc.defineGetterSetter(_p, "offPos", _p.getOffPosition, _p.setOffPosition);
|
|
/** @expose */
|
|
_p.maskTexture;
|
|
cc.defineGetterSetter(_p, "maskTexture", _p.getMaskTexture, _p.setMaskTexture);
|
|
/** @expose */
|
|
_p.maskPos;
|
|
cc.defineGetterSetter(_p, "maskPos", _p.getMaskLocation, _p.setMaskLocation);
|
|
/** @expose */
|
|
_p.onSprite;
|
|
cc.defineGetterSetter(_p, "onSprite", _p.getOnSprite, _p.setOnSprite);
|
|
/** @expose */
|
|
_p.offSprite;
|
|
cc.defineGetterSetter(_p, "offSprite", _p.getOffSprite, _p.setOffSprite);
|
|
/** @expose */
|
|
_p.thumbSprite;
|
|
cc.defineGetterSetter(_p, "thumbSprite", _p.getThumbSprite, _p.setThumbSprite);
|
|
/** @expose */
|
|
_p.onLabel;
|
|
cc.defineGetterSetter(_p, "onLabel", _p.getOnLabel, _p.setOnLabel);
|
|
/** @expose */
|
|
_p.offLabel;
|
|
cc.defineGetterSetter(_p, "offLabel", _p.getOffLabel, _p.setOffLabel);
|
|
/** @expose */
|
|
_p.onSideWidth;
|
|
cc.defineGetterSetter(_p, "onSideWidth", _p._getOnSideWidth);
|
|
/** @expose */
|
|
_p.offSideWidth;
|
|
cc.defineGetterSetter(_p, "offSideWidth", _p._getOffSideWidth);
|
|
|
|
_p = null;
|