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; } }