|
|
@@ -13,6 +13,8 @@ export class PropsData {
|
|
|
public angle: number = 0;
|
|
|
@property({ displayName: "缩放" })
|
|
|
public scale: number = 1;
|
|
|
+ @property({displayName: "显示隐藏", tooltip: '打勾是显示'})
|
|
|
+ public active: boolean = true;
|
|
|
}
|
|
|
/**
|
|
|
* 缓动数据
|
|
|
@@ -29,11 +31,11 @@ export class TweenData {
|
|
|
@property({ displayName: "是否为差值" })
|
|
|
public isOffset: boolean = false;
|
|
|
@property({ displayName: '完成回调', tooltip: "缓动完成时触发", type: cc.Component.EventHandler })
|
|
|
- public onComplete: cc.Component.EventHandler = new cc.Component.EventHandler();
|
|
|
+ public onComplete: cc.Component.EventHandler[] = [];
|
|
|
@property({ displayName: '开始回调', tooltip: "缓动启动时触发", type: cc.Component.EventHandler })
|
|
|
- public onStart: cc.Component.EventHandler = new cc.Component.EventHandler();
|
|
|
+ public onStart: cc.Component.EventHandler[] = [];
|
|
|
@property({ displayName: '过程回调', tooltip: "缓动更新时触发", type: cc.Component.EventHandler })
|
|
|
- public onUpdate: cc.Component.EventHandler = new cc.Component.EventHandler();
|
|
|
+ public onUpdate: cc.Component.EventHandler[] = [];
|
|
|
}
|
|
|
/**
|
|
|
* 缓动组件,目前只支持节点的三个基础属性
|
|
|
@@ -50,13 +52,13 @@ export class UITween extends cc.Component {
|
|
|
@property({ displayName: '缓动节点', tooltip: "要播放缓动动画的目标,不填则是当前节点", type: cc.Node })
|
|
|
public target: cc.Node = null;
|
|
|
@property({ displayName: "缓动效果", type: cc.Enum(TweenEasing) })
|
|
|
- public tweenEasing: TweenEasing = TweenEasing.linear;
|
|
|
+ public tweenEasing: TweenEasing = TweenEasing.sineInOut;
|
|
|
@property({ displayName: '执行次数', tooltip: "为0则一直重复执行" })
|
|
|
public repeat: number = 1;
|
|
|
@property({ displayName: "单次完成回调", tooltip: '单次缓动序列执行完毕时触发', type: cc.Component.EventHandler })
|
|
|
public onOneRepeatComplete: cc.Component.EventHandler = new cc.Component.EventHandler();
|
|
|
@property({ displayName: "自动播放" })
|
|
|
- public playOnLoad: boolean = false;
|
|
|
+ public playOnLoad: boolean = true;
|
|
|
|
|
|
private _edit_play: boolean = false;
|
|
|
@property({ displayName: "编辑器预览" })
|
|
|
@@ -70,10 +72,38 @@ export class UITween extends cc.Component {
|
|
|
set edit_play(v: boolean) {
|
|
|
this._edit_play = v;
|
|
|
if (this.target && v) {
|
|
|
- this.target.stopAllActions();
|
|
|
+ cc.Tween.stopAllByTarget(this.target);
|
|
|
}
|
|
|
if (!v) this.edit_playing = false;
|
|
|
}
|
|
|
+
|
|
|
+ private resetProperty: boolean = false;
|
|
|
+ @property({displayName: '重置基础属性'})
|
|
|
+ get reset_property():boolean{
|
|
|
+
|
|
|
+ if(this.resetProperty)
|
|
|
+ {
|
|
|
+ this.fromData.position = cc.v2(this.node.position.x, this.node.position.y);
|
|
|
+ this.fromData.angle = this.node.angle;
|
|
|
+ this.fromData.scale = this.node.scale;
|
|
|
+
|
|
|
+ for(let i = 0; i != this.targetData.length; ++i)
|
|
|
+ {
|
|
|
+ let target = this.targetData[i];
|
|
|
+ target.propsData.position = cc.v2(this.node.position.x, this.node.position.y);
|
|
|
+ target.propsData.angle = this.node.angle;
|
|
|
+ target.propsData.scale = this.node.scale;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.resetProperty = false;
|
|
|
+ }
|
|
|
+ return this.resetProperty;
|
|
|
+ }
|
|
|
+
|
|
|
+ set reset_property(v){
|
|
|
+ this.resetProperty = v;
|
|
|
+ }
|
|
|
+
|
|
|
/** 编辑器是否正在播放 */
|
|
|
private edit_playing = false;
|
|
|
|
|
|
@@ -107,6 +137,8 @@ export class UITween extends cc.Component {
|
|
|
}
|
|
|
else {
|
|
|
this.t = null;
|
|
|
+ this.currentRepeat = this.repeat;
|
|
|
+ this.edit_play = false;
|
|
|
}
|
|
|
}
|
|
|
public readyPlay() {
|
|
|
@@ -115,6 +147,7 @@ export class UITween extends cc.Component {
|
|
|
this.node.setPosition(this.fromData.position.clone());
|
|
|
this.node.scale = this.fromData.scale;
|
|
|
this.node.angle = this.fromData.angle;
|
|
|
+ this.node.active = this.fromData.active;
|
|
|
}
|
|
|
if (this.targetData.length) {
|
|
|
for (let i = 0; i < this.targetData.length; i++) {
|
|
|
@@ -122,10 +155,20 @@ export class UITween extends cc.Component {
|
|
|
if (targetData.delay != 0) {
|
|
|
this.t = this.t.delay(targetData.delay);
|
|
|
}
|
|
|
+ if(targetData.propsData.active)
|
|
|
+ {
|
|
|
+ this.t = this.t.call(()=>{
|
|
|
+ this.node.active = true;
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.t = this.t.call(()=>{
|
|
|
+ this.node.active = false;
|
|
|
+ });
|
|
|
+ }
|
|
|
let toData = {
|
|
|
position: targetData.propsData.position,
|
|
|
scale: targetData.propsData.scale,
|
|
|
- angle: targetData.propsData.angle
|
|
|
+ angle: targetData.propsData.angle,
|
|
|
}
|
|
|
if (targetData.isOffset) {
|
|
|
toData.position = this.node.getPosition().add(targetData.propsData.position);
|
|
|
@@ -138,12 +181,37 @@ export class UITween extends cc.Component {
|
|
|
{
|
|
|
easing: TweenEasing[this.tweenEasing] as any,
|
|
|
onComplete: (target: cc.Node) => {
|
|
|
- targetData.onComplete && targetData.onComplete.emit([target]);
|
|
|
- this.edit_playing = false;
|
|
|
- this._edit_play = false;
|
|
|
+ if(targetData.onComplete && targetData.onComplete.length > 0)
|
|
|
+ {
|
|
|
+ for(let i = 0; i != targetData.onComplete.length; ++i)
|
|
|
+ {
|
|
|
+ targetData.onComplete[i].emit([target]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //targetData.onComplete && targetData.onComplete.emit([target]);
|
|
|
+ // this.edit_playing = false;
|
|
|
+ // this._edit_play = false;
|
|
|
+ },
|
|
|
+ onStart: (target: cc.Node) => {
|
|
|
+ //targetData.onStart && targetData.onStart.emit([target])
|
|
|
+ if(targetData.onStart && targetData.onStart.length > 0)
|
|
|
+ {
|
|
|
+ for(let i = 0; i != targetData.onStart.length; ++i)
|
|
|
+ {
|
|
|
+ targetData.onStart[i].emit([target]);
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
- onStart: (target: cc.Node) => { targetData.onStart && targetData.onStart.emit([target]) },
|
|
|
- onUpdate: (target: cc.Node, ratio: number) => { targetData.onUpdate && targetData.onUpdate.emit([target, ratio]) }
|
|
|
+ onUpdate: (target: cc.Node, ratio: number) => {
|
|
|
+ //targetData.onUpdate && targetData.onUpdate.emit([target, ratio])
|
|
|
+ if(targetData.onUpdate && targetData.onUpdate.length > 0)
|
|
|
+ {
|
|
|
+ for(let i = 0; i != targetData.onUpdate.length; ++i)
|
|
|
+ {
|
|
|
+ targetData.onUpdate[i].emit([target]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
);
|
|
|
}
|