"use strict"; cc._RF.push(module, 'b0432BA295DjIOcuitdGKO1', 'GameManager'); // Script/GameManager.ts "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); var Block_1 = require("./Block"); // 主游戏控制类 var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; var GameManager = /** @class */ (function (_super) { __extends(GameManager, _super); function GameManager() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.Map = null; _this.Block = null; return _this; } GameManager.prototype.onLoad = function () { }; GameManager.prototype.start = function () { this.fit(); this.init(); }; //初始化数据 GameManager.prototype.init = function () { this.initMap(); }; //初始化地图 GameManager.prototype.initMap = function () { this.block_Array = []; this.path_Array = []; this.map_Array = []; this.map_Array = cc.fx.GameConfig.LEVEL_INFO[0][0].map; //将地图x,y轴切换 for (var m = 0; m < Math.floor(this.map_Array.length / 2); m++) { for (var n = 0; n < this.map_Array[m].length; n++) { var temp = this.map_Array[m][n]; this.map_Array[m][n] = this.map_Array[n][m]; this.map_Array[n][m] = temp; } } for (var i = 0; i < this.map_Array.length; i++) { for (var j = 0; j < this.map_Array[i].length; j++) { var block = cc.instantiate(this.Block); block.parent = this.Map; block.getComponent("Block").initData(this.map_Array[i][j]); if (this.map_Array[i][j] == cc.Enum(Block_1.BlockType).Start) this.path_Array.push(cc.v3(i, j, cc.Enum(Block_1.BlockType).Nomal)); block.setPosition(cc.v2(-block.width * 1.5 + i * block.width, block.height * 1.5 - j * block.height)); this.block_Array.push(block); } } }; //开始后,按玩家操作,将路径中地图块放入数组中 GameManager.prototype.setMap = function (data) { for (var i = 0; i < data.length; i++) { var start = this.path_Array[this.path_Array.length - 1]; switch (data[i]) { case "up": this.path_Array.push(cc.v3(start.x, start.y - 1, cc.Enum(Block_1.BlockType).Nomal)); break; case "down": this.path_Array.push(cc.v3(start.x, start.y + 1, cc.Enum(Block_1.BlockType).Nomal)); break; case "left": this.path_Array.push(cc.v3(start.x - 1, start.y, cc.Enum(Block_1.BlockType).Nomal)); break; case "right": this.path_Array.push(cc.v3(start.x + 1, start.y, cc.Enum(Block_1.BlockType).Nomal)); break; case "reinforce": this.path_Array.push(cc.v3(0, 0, cc.Enum(Block_1.BlockType).Reinforce)); break; case "soil": this.path_Array.push(cc.v3(0, 0, cc.Enum(Block_1.BlockType).Xi_Soil)); break; } } this.runWater(0); }; GameManager.prototype.setModel = function () { var time = 0.3; var block2 = this.node.getChildByName("Block1").getChildByName("icon").getComponent(cc.Sprite); var block = this.node.getChildByName("Block2").getChildByName("icon").getComponent(cc.Sprite); var head = this.node.getChildByName("Head"); var block3 = this.node.getChildByName("Block3").getChildByName("icon").getComponent(cc.Sprite); var block4 = this.node.getChildByName("Block4").getChildByName("icon").getComponent(cc.Sprite); cc.tween(head) .to(time, { position: cc.v3(-48, 48, 0) }) .to(time, { rotation: -90 }) .to(time, { position: cc.v3(-144, 48, 0) }) .to(time, { rotation: -180 }) .start(); cc.tween(block) .delay(time) .to(time, { fillRange: 0.25 }) .start(); cc.tween(block2) .to(time, { fillRange: 1 }) .start(); cc.tween(block3) .delay(time * 2) .to(time, { fillRange: 1 }) .start(); cc.tween(block4) .delay(time * 3) .to(time, { fillRange: 0.25 }) .start(); }; //开始执行洪峰来了的动画 GameManager.prototype.runWater = function (order) { order = parseInt(order); if (order <= this.path_Array.length - 1) { var i = this.path_Array[order].x * this.map_Array[0].length + this.path_Array[order].y; var direction = ""; var circulate = true; if (order == this.path_Array.length - 1) { circulate = false; direction = this.getDirection(order - 1); if (direction == "up" || direction == "right_up" || direction == "left_up") { direction = "up"; } else if (direction == "down" || direction == "left_down" || direction == "right_down") { direction = "down"; } else if (direction == "left" || direction == "up_left" || direction == "down_left") { direction = "left"; } else if (direction == "right" || direction == "up_right" || direction == "down_right") { direction = "right"; } } else { direction = this.getDirection(order); } var target = this.block_Array[i].getComponent("Block"); target.setPath(direction); var data = { order: order, time: 0.3, type: this.path_Array[order].z, circulate: circulate }; target.runWater(data); } }; //获取洪峰方向 GameManager.prototype.getDirection = function (order) { var name = ""; //入海口比较复杂单独判断 if (order == 0) { var nextX = this.path_Array[order + 1].x - this.path_Array[order].x; var nextY = this.path_Array[order].y - this.path_Array[order + 1].y; //在底边 if (this.path_Array[order].y == this.map_Array.length - 1) { if (nextX == 0) { if (nextY == 1) name = "up"; else if (nextY == -1) name = "err"; } else if (nextX == 1) name = "up_right"; else if (nextX == -1) name = "up_left"; } //在顶边 else if (this.path_Array[order].y == 0) { if (nextX == 0) { if (nextY == 1) name = "err"; else if (nextY == -1) name = "down"; } else if (nextX == 1) name = "down_right"; else if (nextX == -1) name = "down_left"; } //在左边 else if (this.path_Array[order].x == 0) { if (nextX == 0) { if (nextY == 1) name = "right_up"; else if (nextY == -1) name = "right_down"; } else if (nextX == 1) name = "right"; else if (nextX == -1) name = "err"; } //在右边 else if (this.path_Array[order].x == this.map_Array[0].length - 1) { if (nextX == 0) { if (nextY == 1) name = "left_up"; else if (nextY == -1) name = "left_down"; } else if (nextX == 1) name = "err"; else if (nextX == -1) name = "left"; } } //不是第一步,已经走过一步 else if (order > 0) { //用于判断此点的上一个点,是为了判断当前方块洪水七点,以及下一个移动方向,判断洪终点方向 var nextX = this.path_Array[order + 1].x - this.path_Array[order].x; var nextY = this.path_Array[order].y - this.path_Array[order + 1].y; var previousX = this.path_Array[order].x - this.path_Array[order - 1].x; var previousY = this.path_Array[order - 1].y - this.path_Array[order].y; if (previousX == 0 && previousY == 1) { if (nextX == 0) { if (nextY == 1) name = "up"; else if (nextY == -1) name = "err"; } else if (nextX == 1) name = "up_right"; else if (nextX == -1) name = "up_left"; } else if (previousX == 0 && previousY == -1) { if (nextX == 0) { if (nextY == 1) name = "err"; else if (nextY == -1) name = "down"; } else if (nextX == 1) name = "down_right"; else if (nextX == -1) name = "down_left"; } else if (previousX == 1 && previousY == 0) { if (nextX == 0) { if (nextY == 1) name = "right_up"; else if (nextY == -1) name = "right_down"; } else if (nextX == 1) name = "right"; else if (nextX == -1) name = "err"; } else if (previousX == -1 && previousY == 0) { if (nextX == 0) { if (nextY == 1) name = "left_up"; else if (nextY == -1) name = "left_down"; } else if (nextX == 1) name = "err"; else if (nextX == -1) name = "left"; } } return name; }; //根据是否全面屏,做独立适配方面 GameManager.prototype.fit = function () { var jg = this.setFit(); if (!jg) { } }; //判断全面屏 GameManager.prototype.getSetScreenResolutionFlag = function () { var size = cc.winSize; var width = size.width; var height = size.height; if ((height / width) > (16.2 / 9)) return false; return true; }; //判断全面屏适配 GameManager.prototype.setFit = function () { var flag = this.getSetScreenResolutionFlag(); if (flag) { } else { } return flag; }; //返回首页 GameManager.prototype.backScene = function () { cc.director.loadScene("LoadScene"); }; //下一关,或者重新开始,或者返回上一关,根据level决定 GameManager.prototype.reStart = function (type) { }; //获取时间戳 GameManager.prototype.getTime = function () { var timestamp = new Date().getTime(); return timestamp; }; //获胜 GameManager.prototype.passLevel = function () { }; //失败 GameManager.prototype.loseLevel = function (type) { //1: 1649 //2: 3646 //3: 5546 //4: 2600 //5: 694 }; //开始游戏 GameManager.prototype.startGame = function (data) { this.setMap(data); }; //如果是倒计时 调用此方法 GameManager.prototype.updateCountDownTime = function () { if (this.countTime > 0) { this.countTime -= 1; // this.time.string = cc.fx.GameTool.getTimeMargin(this.countTime); if (this.countTime < 5) { var over = this.node.getChildByName("Over"); cc.tween(over) .to(0.2, { opacity: 255 }) .delay(0.1) .to(0.2, { opacity: 0 }) .start(); } if (this.countTime <= 0) { this.unschedule(this.updateCountDownTime); var time = 0; this.gameOver(time); } } }; //上传每次操作数据 GameManager.prototype.setData = function () { cc.fx.GameTool.setGameData(); }; //上传排行榜数据 GameManager.prototype.gameOver = function (time) { cc.fx.GameTool.setRank(time); this.node.getChildByName("GameOver").active = true; this.node.getChildByName("GameOver").opacity = 0; cc.tween(this.node.getChildByName("GameOver")) .to(0.4, { opacity: 255 }) .delay(2) .to(0.4, { opacity: 50 }) .call(function () { cc.director.loadScene("OverScene"); }) .start(); }; GameManager.prototype.clickSun = function (data) { }; GameManager.prototype.nextWater = function () { }; GameManager.prototype.onEnable = function () { cc.fx.Notifications.on(cc.fx.Message.control, this.clickSun, this); cc.fx.Notifications.on(cc.fx.Message.next, this.runWater, this); cc.fx.Notifications.on(cc.fx.Message.startGame, this.startGame, this); }; GameManager.prototype.onDisable = function () { cc.fx.Notifications.off(cc.fx.Message.control, this.clickSun); cc.fx.Notifications.off(cc.fx.Message.next, this.runWater); cc.fx.Notifications.off(cc.fx.Message.startGame, this.startGame); }; GameManager.prototype.update = function (dt) { }; __decorate([ property(cc.Node) ], GameManager.prototype, "Map", void 0); __decorate([ property(cc.Prefab) ], GameManager.prototype, "Block", void 0); GameManager = __decorate([ ccclass ], GameManager); return GameManager; }(cc.Component)); exports.default = GameManager; cc._RF.pop();