89 lines
2.8 KiB
TypeScript
89 lines
2.8 KiB
TypeScript
import gsap from "gsap";
|
|
import getDecorators from "inversify-inject-decorators";
|
|
import { Chip } from "../../chip/scripts/chip";
|
|
import { container } from "../../plugins/core";
|
|
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
const { lazyInject } = getDecorators(container, false);
|
|
|
|
@ccclass
|
|
export class ChipHandlerAnim extends cc.Component
|
|
{
|
|
@property(cc.Node)
|
|
private winNode: cc.Node = null;
|
|
@property(cc.Node)
|
|
private collectNode: cc.Node = null;
|
|
|
|
public hide(nodeTween: cc.Node): void
|
|
{
|
|
gsap.to(nodeTween, {
|
|
duration: 0.2,
|
|
opacity: 0,
|
|
onComplete: () =>
|
|
{
|
|
nodeTween.active = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
public place(nodeTween: cc.Node): void
|
|
{
|
|
nodeTween.setPosition(this.getRandomRadianPosition(cc.Vec2.ZERO));
|
|
var currentPos = nodeTween.position;
|
|
var newPos = new cc.Vec2(currentPos.x, currentPos.y);
|
|
newPos.y += 40;
|
|
nodeTween.setPosition(newPos);
|
|
gsap.to(nodeTween, {
|
|
duration: 0.2,
|
|
x: currentPos.x,
|
|
y: currentPos.y,
|
|
});
|
|
}
|
|
|
|
public collect(chip: Chip, isDelayRandomTime: boolean): void
|
|
{
|
|
var startPos = chip.node.parent.convertToNodeSpaceAR(chip.node.convertToWorldSpaceAR(cc.Vec2.ZERO));
|
|
var endPos = chip.node.parent.convertToNodeSpaceAR(this.collectNode.convertToWorldSpaceAR(cc.Vec2.ZERO));
|
|
this.move(chip.node, startPos, this.getRandomRadianPosition(endPos), true, isDelayRandomTime);
|
|
}
|
|
|
|
public win(nodeTween: cc.Node): void
|
|
{
|
|
var startPos = nodeTween.parent.convertToNodeSpaceAR(this.winNode.convertToWorldSpaceAR(cc.Vec2.ZERO));
|
|
var endPos = nodeTween.parent.convertToNodeSpaceAR(this.node.convertToWorldSpaceAR(cc.Vec2.ZERO));
|
|
this.move(nodeTween, this.getRandomRadianPosition(startPos), this.getRandomRadianPosition(endPos), false, true);
|
|
}
|
|
|
|
private move(nodeTween: cc.Node, startPos: cc.Vec2, endPos: cc.Vec2, isHideOnComplete: Boolean = false, isRandomTime: Boolean = false)
|
|
{
|
|
nodeTween.setPosition(startPos);
|
|
var timeRandom = isRandomTime ? Math.random() * 1.5 : 0;
|
|
timeRandom += 0.5;
|
|
const timeline = gsap.timeline();
|
|
|
|
nodeTween.setPosition(startPos);
|
|
|
|
timeline.to(nodeTween, {
|
|
duration: timeRandom,
|
|
x: endPos.x,
|
|
y: endPos.y,
|
|
});
|
|
|
|
if (isHideOnComplete == true)
|
|
{
|
|
timeline.add(() =>
|
|
{
|
|
this.hide(nodeTween);
|
|
});
|
|
}
|
|
}
|
|
|
|
private getRandomRadianPosition(pos: cc.Vec2): cc.Vec2
|
|
{
|
|
var randomRadianPos = cc.v2(pos.x, pos.y);
|
|
randomRadianPos.x += Math.random() * 50 - 25;
|
|
randomRadianPos.y += Math.random() * 50 - 25;
|
|
return randomRadianPos;
|
|
}
|
|
} |