123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import HomeView from "./HomeView";
- import LayerPanel, {UrlInfo} from "../../Common/manage/Layer/LayerPanel";
- import CacheMgr from "../../Common/manage/CacheMgr";
- import GameView from "./GameView";
- import LayerMgr from "../../Common/manage/Layer/LayerMgr";
- import AudioMgr from "../../Common/manage/AudioMgr";
- import PanelMgr, {Layer} from "../../Common/manage/PanelMgr";
- import ShowConfig from "../../Common/ShowConfig";
- import Global from "../../Common/Global";
- import QgBanner from "../../Common/manage/Api/QgBanner";
- import Emit from "../../Common/manage/Emit/Emit";
- import EmitData from "../../Common/manage/Emit/EmitData";
- const {ccclass, property} = cc._decorator;
- @ccclass
- export default class EndView extends LayerPanel {
- public static getUrl(): UrlInfo {
- return {
- bundle: "endView",
- name: "endView"
- }
- }
- private _paramData: any = {};
- private _button: cc.Node = null;
- @property(cc.Prefab)
- private coinPrefab: cc.Prefab = null
- coinPool: cc.NodePool = null; //星星对象金币对象池
- getGold: cc.Node = null
- getScore: cc.Node = null
- gameBox: cc.Node = null
- maxScore: cc.Node = null
- newMax: cc.Node = null
- caiDai: cc.Node = null
- home_btn: cc.Node = null
- game_btn: cc.Node = null
- isNewMax: boolean = false
- score: number = null
- public initUI() {
- //todo logic
- this.getGold = this.getNode("topUi/huodejinbi/getGlod")
- this.gameBox = this.getNode("gameBox")
- this.getScore = this.getNode("topUi/getNum")
- this.maxScore = this.getNode("history/history_num")
- this.newMax = this.getNode("xinjilu")
- this.caiDai = this.getNode("caidai")
- this.game_btn = this.getNode("bottomUI/continue")
- this.onTouch(this.game_btn, this.handle_continue)
- this.home_btn = this.getNode("bottomUI/home")
- this.onTouch(this.home_btn, this.handle_home)
- this.coinPool = new cc.NodePool();
- this.initCoinPool();
- }
- public show(param: any) {
- //todo 逻辑
- this.isNewMax = param.isNewMax;
- this.getScore.getComponent(cc.Label).string = param.score;
- this.getGold.getComponent(cc.Label).string = "+" + param.score;
- this.score = Number(param.score);
- this.maxScore.getComponent(cc.Label).string = CacheMgr.checkpoint.toString();
- ShowConfig.show('endConfig').then((res) => {
- if (Global.config.endConfig.bannerShow == 1) {
- QgBanner.showBanner();
- } else {
- QgBanner.hideBanner();
- }
- });
- }
- public hide() {
- CacheMgr.updateData();
- if (Global.config.gameConfig.nativeConfig.type == 2) {
- Emit.instance().emit(EmitData.CLOSE_NATIVE) ;
- }
- }
- //todo logic 方法
- /** 初始化金币对象池 */
- initCoinPool(count: number = 20) {
- for (let i = 0; i < count; i++) {
- let coin = cc.instantiate(this.coinPrefab);
- this.coinPool.put(coin);
- }
- }
- /** 播放动画 */
- playAnim() {
- AudioMgr.play("get_coins")
- /** 随机金币数量 */
- let randomCount = Math.random() * 15 + 10;
- /** 起始位置 */
- let startPos = this.node.convertToNodeSpaceAR(this.getGold.parent.parent.convertToWorldSpaceAR(this.getGold.parent.position))
- /** 结束位置 */
- let endPos = LayerMgr.gameInfoLayer.children[0].children[0].position
- this.playCoinFlyAnim(randomCount, cc.v2(startPos), cc.v2(endPos));
- }
- /**
- * 播放金币飞出动画
- * @param count 金币数量
- * @param startPos 起始位置
- * @param endPos 结束位置
- * @param r 半径
- */
- playCoinFlyAnim(count: number, startPos: cc.Vec2, endPos: cc.Vec2, r: number = 200) {
- //确保当前节点池有足够的金币
- const poolSize = this.coinPool.size();
- const reCreateCoinCount = poolSize > count ? 0 : count - poolSize;
- this.initCoinPool(reCreateCoinCount);
- //生成园, 并且对圆上的点进行排序
- let points = this.getCirclePoints(r, startPos, count);
- let coinNodeList = points.map(pos => {
- let coin = this.coinPool.get();
- coin.setPosition(startPos);
- this.node.addChild(coin);
- return {
- node: coin,
- startPos: startPos,
- mdPos: pos,
- endPos: endPos,
- /** sub 用于把字符串显示为下标 */
- dis: (pos as any).sub(endPos).mag()
- };
- });
- coinNodeList = coinNodeList.sort((a, b) => {
- if (a.dis - b.dis > 0) return 1;
- if (a.dis - b.dis < 0) return -1;
- return 0;
- })
- //执行金币落袋的动画
- coinNodeList.forEach((item, index) => {
- item.node.runAction(
- cc.sequence(
- cc.moveTo(0.3, item.mdPos),
- cc.delayTime(index * 0.01),
- cc.moveTo(0.5, item.endPos),
- cc.callFunc(() => {
- this.coinPool.put(item.node);
- })
- )
- );
- });
- }
- /**
- *
- * @param r 半径
- * @param pos 圆心坐标
- * @param count 等分点数量
- * @param randomScope 等分点的随机播动范围
- */
- getCirclePoints(r: number, pos: cc.Vec2, count: number, randomScope: number = 60): cc.Vec2[] {
- let points = [];
- //弧度
- let radians = (Math.PI / 180) * Math.round(360 / count);
- for (let i = 0; i < count; i++) {
- let x = pos.x + r * Math.sin(radians * i);
- let y = pos.y + r * Math.cos(radians * i);
- points.unshift(cc.v3(x + Math.random() * randomScope, y + Math.random() * randomScope, 0));
- }
- return points;
- }
- handle_home() {
- PanelMgr.INS.openPanel({
- panel : HomeView,
- layer : Layer.gameLayer,
- call : ()=>{
- PanelMgr.INS.closePanel(EndView) ;
- }
- })
- }
- handle_continue() {
- console.log('zh: hammer 继续游戏')
- PanelMgr.INS.openPanel({
- panel : GameView,
- layer : Layer.gameLayer,
- call : ()=>{
- console.log('zh:call handle_continue')
- PanelMgr.INS.closePanel(EndView) ;
- }
- })
- }
- }
|