WaterControl/library/imports/b0/b0432040-dbde-438c-839c-ba2b5d18a3b5.js
2024-08-07 19:03:37 +08:00

1384 lines
57 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"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;
_this.Time = null;
_this.Countdown = null;
_this.Guide = null;
return _this;
}
GameManager.prototype.onLoad = function () {
};
GameManager.prototype.start = function () {
cc.fx.GameConfig.CLICK_init();
this.fit();
this.init();
};
//处理地图数据 第一关完全随机从第二关开始赢了根据5秒洪峰来临增加难度步数输了当前难度减步数
GameManager.prototype.getMap = function () {
// var temp = [];
// for(let k=0; k<cc.fx.GameConfig.LEVEL_INFO.length; k++){
// temp[k] = [];
// for(let j=0; j<cc.fx.GameConfig.LEVEL_INFO[k].length; j++){
// temp[k].push(cc.fx.GameConfig.LEVEL_INFO[k][j].min_steps);
// }
// }
// console.log(temp);
var custom = 0;
var map = [];
if (cc.fx.GameConfig.GM_INFO.level == 1) {
custom = Math.floor(Math.random() * cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level].length);
}
else {
var arr = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level];
if (cc.fx.GameConfig.GM_INFO.min_Time == -1) {
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps - 1, false);
}
else if (cc.fx.GameConfig.GM_INFO.min_Time >= 5) {
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps + 2, true);
}
else {
map = this.getMapArray(arr, cc.fx.GameConfig.GM_INFO.min_Steps + 1, true);
}
var random = Math.floor(Math.random() * map.length);
custom = map[random];
console.log(custom, map);
}
//记录当前最小步数
cc.fx.GameConfig.GM_INFO.min_Steps = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][custom].min_steps;
cc.fx.GameConfig.GM_INFO.min_Time = 0;
return custom;
};
//获取下一关难度步数增加2或者1如果没有则降到有.
GameManager.prototype.getMapArray = function (arr, min_steps, type) {
var map = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].min_steps == min_steps) {
map.push(i);
}
}
if (map.length == 0) {
if (type)
map = this.getMapArray(arr, min_steps - 1, type);
else
map = this.getMapArray(arr, min_steps + 1, type);
}
return map;
};
//初始化数据
GameManager.prototype.init = function () {
var name = cc.fx.GameConfig.GM_INFO.gameId + "_guide";
var data = JSON.parse(localStorage.getItem(name));
if (data != false) {
cc.fx.GameConfig.GM_INFO.guide = true;
cc.fx.StorageMessage.setStorage(name, cc.fx.GameConfig.GM_INFO.guide);
}
else {
cc.fx.GameConfig.GM_INFO.guide = cc.fx.StorageMessage.getStorage(name);
}
this.initMap();
this.finishiTime = 0;
this.scoreTime = 0;
this.replaceTime = 0;
this.startTime = cc.fx.GameTool.getTime();
this.countTime = cc.fx.GameConfig.TIME_INFO.totalTime;
this.waterTime = cc.fx.GameConfig.TIME_INFO.waterTime[cc.fx.GameConfig.GM_INFO.level];
// if(this.countTime < this.waterTime) this.replaceTime = this.countTime;
this.Time.string = cc.fx.GameTool.getTimeMargin(this.countTime);
if (!cc.fx.GameConfig.GM_INFO.guide) {
this.Guide.active = false;
this.step = 0;
var head = this.node.getChildByName("Top").getChildByName("head");
var progress = this.node.getChildByName("Top").getChildByName("progress").getComponent(cc.Sprite);
head.runAction(cc.moveTo(this.waterTime, cc.v2(310, head.y)));
this.waterTween = cc.tween(progress)
.to(this.waterTime, { fillRange: 1 })
.start();
this.schedule(this.updateWaterTime, 1);
this.schedule(this.updateCountDownTime, 1);
}
else {
this.Guide.active = true;
this.guideNext();
}
};
//初始化地图
GameManager.prototype.initMap = function () {
cc.fx.GameConfig.GM_INFO.round += 1;
cc.fx.GameConfig.GM_INFO.fen = 0;
this.block_Array = [];
this.path_Array = [];
this.water_Array = [];
this.map_Array = [];
this.tip_Array = [];
this.plan_over = false;
this.map_Hight = 0;
this.map_Width = 0;
this.step = 0;
this.bgClick = false;
this.btnClick = false;
this.custom = 0; //9
if (!cc.fx.GameConfig.GM_INFO.guide && cc.fx.GameConfig.GM_INFO.level == 0) {
cc.fx.GameConfig.GM_INFO.level = 1;
this.custom = this.getMap();
}
else if (!cc.fx.GameConfig.GM_INFO.guide) {
this.custom = this.getMap();
}
console.log(this.custom);
var arr = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].map;
if (cc.fx.GameConfig.GM_INFO.level == 0) {
this.Map.scale = 1.2;
}
this.node.getChildByName("Top").getChildByName("id").getComponent(cc.Label).string =
cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].id;
//将地图x,y轴切换
this.map_Array = arr[0].map(function (item, i) {
return arr.map(function (val) { return val[i]; });
});
this.map_Width = this.map_Array.length;
this.map_Hight = this.map_Array[0].length;
this.Map.x = (6 - this.map_Array.length) * 48;
this.Map.y = (this.map_Array[0].length - 6.5) * 48;
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], cc.v2(i, j), cc.v2(this.map_Width, this.map_Hight));
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));
// this.water_Array.push(cc.v3(i,j,cc.Enum(BlockType).Nomal));
}
block.setPosition(cc.v2(-block.width * 2.5 + i * block.width, block.height * 4 - 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(start.x, start.y, cc.Enum(Block_1.BlockType).Reinforce));
break;
case "soil":
this.path_Array.push(cc.v3(start.x, start.y, cc.Enum(Block_1.BlockType).Xi_Soil));
break;
}
}
if (this.path_Array[this.path_Array.length - 1].z != 0) {
this.path_Array.pop();
}
this.runRoad(0);
};
//开始执行洪峰来了的动画
GameManager.prototype.runRoad = function (order) {
var _this = this;
order = parseInt(order);
if (order > 0) {
if (this.path_Array[order - 1].z == 0) {
//console.log("1正常放入",this.path_Array[order-1].x,this.path_Array[order-1].y,this.path_Array[order-1].z)
this.changeWater(cc.v3(this.path_Array[order - 1].x, this.path_Array[order - 1].y, 0));
if (order == this.path_Array.length - 1) {
this.changeWater(cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0));
// console.log("最后放入",this.path_Array[order].x,this.path_Array[order].y)
}
}
else {
//console.log("2插入",this.path_Array[order].x,this.path_Array[order].y,this.path_Array[order].z)
this.changeWater(cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0));
}
}
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 = "End";
// console.log("进入结束");
if (this.path_Array.length > 1) {
// console.log("准备出水");
setTimeout(function () {
if (!_this.plan_over) {
_this.plan_over = true;
_this.unschedule(_this.updateWaterTime);
var head = _this.node.getChildByName("Top").getChildByName("head");
var progress = _this.node.getChildByName("Top").getChildByName("progress").getComponent(cc.Sprite);
head.stopAllActions();
head.setPosition(310, head.y);
if (_this.waterTween)
_this.waterTween.stop();
progress.fillRange = 1;
cc.fx.GameConfig.GM_INFO.min_Time = _this.waterTime;
_this.runWater(0);
}
}, 500);
}
else {
direction = "err";
console.log("进入结束err");
}
}
else {
if (this.path_Array[order].z == 6 && order + 1 < this.path_Array.length) {
direction = "Reinforce";
i = this.path_Array[order + 1].x * this.map_Array[0].length + this.path_Array[order + 1].y;
}
else if (order + 1 < this.path_Array.length) {
if (this.path_Array[order + 1].z == 5) {
direction = "Xi_Soil";
}
else if (this.path_Array[order + 1].z == 6 && order == 0 && order + 1 < this.path_Array.length) {
direction = this.getDirection(order + 1, this.path_Array);
}
else {
direction = this.getDirection(order, this.path_Array);
}
}
else {
direction = this.getDirection(order, this.path_Array);
}
}
// console.log(order,this.path_Array[order].x,this.path_Array[order].y,i);
// console.log("步骤:",order,"方向",direction);
var jg = this.getBoundary(order, this.path_Array[order].x, this.path_Array[order].y, direction, this.path_Array);
// if(direction == "" || jg == false) return;
if (direction == "err" || direction == "" || jg == false) {
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
return;
}
var target = this.block_Array[i].getComponent("Block");
target.setPath(direction);
if (order > 0 && order < this.path_Array.length - 1) {
if (this.path_Array[order + 1].z == 5) {
this.set_Soil(order + 1, this.path_Array, "road");
circulate = false;
return;
}
else if (order == 1 && this.path_Array[order].z == 5) {
this.set_Soil(order, this.path_Array, "road");
circulate = false;
return;
}
}
var pos = cc.v2();
if (direction == "End") {
if (order > 0) {
// if(this.path_Array[order-1].z == 0){
pos = cc.v2(this.path_Array[order - 1].x, this.path_Array[order - 1].y);
// }
}
}
var data = {
order: order,
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[cc.fx.GameConfig.GM_INFO.level],
type: this.path_Array[order].z,
circulate: circulate,
last: pos
};
target.runRoad(data);
}
};
//判断边界。或者撞山,或者湿地没有加固
GameManager.prototype.getBoundary = function (order, x, y, direction, road) {
var jg = true;
if (x < 0 || x >= this.map_Width || y < 0 || y >= this.map_Hight) {
jg = false;
// console.log("超过边界,游戏结束");
// alert("超过边界,治水失败");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
else {
var i = road[order].x * this.map_Array[0].length + road[order].y;
var target = this.block_Array[i].getComponent("Block");
if (target.block_Type == 3) {
jg = false;
// console.log("修筑山峰,游戏结束");
// alert("修筑山峰,治水失败");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
else if (target.block_Type == 2 && direction != "Reinforce") {
jg = false;
// console.log("修筑未加固湿地,游戏结束");
// alert("修筑未加固湿地,游戏结束");
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
}
return jg;
};
//开始执行洪峰来了的动画
GameManager.prototype.runWater = function (order) {
order = parseInt(order);
if (order <= this.water_Array.length - 1) {
var i = this.water_Array[order].x * this.map_Array[0].length + this.water_Array[order].y;
var direction = "";
var circulate = true;
//最后一步结束
if (order == this.water_Array.length - 1) {
circulate = false;
direction = "End";
}
else {
if (this.water_Array[order].z == 6 && order + 1 < this.water_Array.length && order != 1) {
direction = "Reinforce";
i = this.water_Array[order + 1].x * this.map_Array[0].length + this.water_Array[order + 1].y;
}
else if (order + 1 < this.water_Array.length) {
if (this.water_Array[order + 1].z == 5) {
direction = "Xi_Soil";
}
else if (this.water_Array[order + 1].z == 6 && order == 0) {
direction = "Reinforce";
}
else {
direction = this.getDirection(order, this.water_Array);
}
}
else {
direction = this.getDirection(order, this.water_Array);
}
}
var jg = this.getBoundary(order, this.water_Array[order].x, this.water_Array[order].y, direction, this.water_Array);
if (direction == "" || jg == false || direction == "err") {
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
return;
}
var target = this.block_Array[i].getComponent("Block");
target.setPath(direction);
if (order > 0 && order < this.water_Array.length - 1) {
if (this.water_Array[order + 1].z == 5) {
this.set_Soil(order + 1, this.water_Array, "water");
circulate = false;
return;
}
else if (order == 1 && this.water_Array[order].z == 5) {
this.set_Soil(order, this.water_Array, "water");
circulate = false;
return;
}
}
var pos = cc.v2();
if (direction == "End") {
if (order > 0) {
if (this.water_Array[order - 1].z == 0) {
pos = cc.v2(this.water_Array[order - 1].x, this.water_Array[order - 1].y);
}
}
}
var data = {
order: order,
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[cc.fx.GameConfig.GM_INFO.level],
type: this.water_Array[order].z,
circulate: circulate,
last: pos
};
target.runWater(data);
}
};
//获取息壤的格子的方向
GameManager.prototype.getXi_Soil = function (order, road) {
var direction = null;
//如果息壤后面还有下一步的话
if (order + 1 < road.length) {
direction = this.getDirection(order, road);
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";
}
}
return direction;
};
//设置息壤
GameManager.prototype.set_Soil = function (order, road, name) {
var direction = this.getXi_Soil(order, road);
var length = 0;
if (direction == "right") {
length = this.map_Width - 1;
for (var i = road[order].x; i <= length; i++) {
var n = i * this.map_Array[0].length + road[order].y;
var target = this.block_Array[n].getComponent("Block");
if (target.block_Type == 3 || target.block_Type == 4) {
length = i - 1;
if (target.block_Type == 4) {
length += 1;
}
i = 10000;
break;
}
}
this.scheduleOnce;
}
else if (direction == "left") {
length = 0;
for (var i = road[order].x; i >= length; i--) {
var n = i * this.map_Array[0].length + road[order].y;
var target = this.block_Array[n].getComponent("Block");
if (target.block_Type == 3 || target.block_Type == 4) {
length = i + 1;
if (target.block_Type == 4) {
length -= 1;
}
i = -1;
break;
}
}
}
else if (direction == "up") {
length = 0;
for (var i = road[order].y; i >= length; i--) {
var n = road[order].x * this.map_Array[0].length + i;
var target = this.block_Array[n].getComponent("Block");
if (target.block_Type == 3 || target.block_Type == 4) {
length = i + 1;
if (target.block_Type == 4) {
length -= 1;
}
i = -1;
break;
}
}
}
else if (direction == "down") {
length = this.map_Hight - 1;
for (var i = road[order].y; i <= length; i++) {
var n = road[order].x * this.map_Array[0].length + i;
var target = this.block_Array[n].getComponent("Block");
if (target.block_Type == 3 || target.block_Type == 4) {
length = i - 1;
if (target.block_Type == 4) {
length += 1;
}
i = 10000;
break;
}
}
}
// if(length == 0){
// }
this.soil_Find(direction, order, length, road, name);
};
//查找息壤蛮遗憾路径
GameManager.prototype.soil_Find = function (direction, order, length, road, name) {
var start = road[order].x;
if (direction == "right") {
for (var i = start; i <= length; i++) {
var n = i * this.map_Array[0].length + road[order].y;
var target = this.block_Array[n].getComponent("Block");
if (i == start) {
if (i == start && i == length)
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
else
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
if (this.water_Array[this.water_Array.length - 1] != value) {
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
this.changeWater(value);
}
}
else {
var jg = null;
if (i == length) {
var number = i - start - 1;
this.changePath(order, number, false, road);
jg = order;
}
target.set_Xi_SoilType(direction, jg, name);
}
}
}
else if (direction == "left") {
for (var i = start; i >= length; i--) {
var n = i * this.map_Array[0].length + road[order].y;
var target = this.block_Array[n].getComponent("Block");
if (i == start) {
if (i == start && i == length)
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
else
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
if (this.water_Array[this.water_Array.length - 1] != value) {
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
this.changeWater(value);
}
}
else {
var jg = null;
if (i == length) {
var number = i - start + 1;
this.changePath(order, number, false, road);
jg = order;
}
target.set_Xi_SoilType(direction, jg, name);
}
}
}
else if (direction == "up") {
start = road[order].y;
for (var i = start; i >= length; i--) {
var n = road[order].x * this.map_Array[0].length + i;
var target = this.block_Array[n].getComponent("Block");
if (i == start) {
if (i == start && i == length)
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
else
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
if (this.water_Array[this.water_Array.length - 1] != value) {
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
this.changeWater(value);
}
}
else {
var jg = null;
if (i == length) {
var number = i - start + 1;
this.changePath(order, number, true, road);
jg = order;
}
// console.log("想上息壤插入:",this.path_Array[order].x,i);
target.set_Xi_SoilType(direction, jg, name);
}
}
}
else if (direction == "down") {
start = road[order].y;
for (var i = start; i <= length; i++) {
var n = road[order].x * this.map_Array[0].length + i;
var target = this.block_Array[n].getComponent("Block");
if (i == start) {
if (i == start && i == length)
target.set_Xi_SoilType(this.getDirection(order, road), order, name);
else
target.set_Xi_SoilType(this.getDirection(order, road), null, name);
var value = cc.v3(this.path_Array[order].x, this.path_Array[order].y, 0);
if (this.water_Array[this.water_Array.length - 1] != value) {
// console.log("特别插入:",this.path_Array[order].x,this.path_Array[order].y);
this.changeWater(value);
}
}
else {
var jg = null;
if (i == length) {
var number = i - start - 1;
this.changePath(order, number, true, road);
jg = order;
}
target.set_Xi_SoilType(direction, jg, name);
}
}
}
};
//改变水流地图
GameManager.prototype.changeWater = function (value) {
var jg = true;
if (this.water_Array.length > 0) {
if (this.water_Array[this.water_Array.length - 1].x == value.x && this.water_Array[this.water_Array.length - 1].y == value.y) {
jg = false;
}
}
if (jg)
this.water_Array.push(value);
};
//息壤过后改变修筑路径
GameManager.prototype.changePath = function (order, number, direction, road) {
for (var i = (order + 1); i < road.length; i++) {
if (!direction) {
road[i].x += (number);
}
else {
road[i].y += (number);
}
}
if (direction) {
if (number < 0) {
for (var n = -number; n > 0; n--) {
this.changeWater(cc.v3(this.path_Array[order + 1].x, this.path_Array[order + 1].y + n, 0));
// console.log("1特殊放入:",this.path_Array[order+1].x,this.path_Array[order+1].y+n)
}
}
else {
for (var n = number; n > 0; n--) {
this.changeWater(cc.v3(this.path_Array[order + 1].x, this.path_Array[order + 1].y - n, 0));
// console.log("2特殊放入:",this.path_Array[order+1].x,this.path_Array[order+1].y-n)
}
}
}
else {
if (number < 0) {
for (var m = -number; m > 0; m--) {
this.changeWater(cc.v3(this.path_Array[order + 1].x + m, this.path_Array[order + 1].y, 0));
// console.log("3特殊放入:",this.path_Array[order+1].x+m,this.path_Array[order+1].y)
}
}
else {
for (var m = number; m > 0; m--) {
this.changeWater(cc.v3(this.path_Array[order + 1].x - m, this.path_Array[order + 1].y, 0));
// console.log("4特殊放入:",this.path_Array[order+1].x-m,this.path_Array[order+1].y)
}
}
}
};
//获取洪峰方向
GameManager.prototype.getDirection = function (order, road) {
var name = "";
//入海口比较复杂单独判断
if (order == 0) {
var nextX = road[order + 1].x - road[order].x;
var nextY = road[order].y - road[order + 1].y;
//在底边
if (road[order].y == this.map_Array[0].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 (road[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 (road[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 (road[order].x == this.map_Array.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 next = 1;
if (order + 2 < road.length) {
if (road[order + 1].z == 6)
next = 2;
}
//用于判断此点的上一个点,是为了判断当前方块洪水七点,以及下一个移动方向,判断洪终点方向
var nextX = road[order + next].x - road[order].x;
var nextY = road[order].y - road[order + next].y;
var previousX = road[order].x - road[order - 1].x;
var previousY = road[order - 1].y - road[order].y;
if (previousX == 0 && previousY == 0) {
if (order > 1) {
previousX = road[order].x - road[order - 2].x;
previousY = road[order - 2].y - road[order].y;
}
else if (order + 1 < road.length) {
previousX = road[order + 1].x - road[order].x;
previousY = road[order].y - road[order + 1].y;
// console.log("息壤,上下坐标差距",previousX,previousY);
}
}
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) {
this.Map.scale = 1.2;
}
else {
this.Map.scale = 1;
}
};
//判断全面屏
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");
};
//开始游戏
GameManager.prototype.startGame = function (data) {
for (var i = 0; i < this.block_Array.length; i++) {
this.block_Array[i].getChildByName("tipWin").active = false;
this.block_Array[i].getChildByName("tipLose").active = false;
}
this.unschedule(this.updateCountDownTime);
var now = cc.fx.GameTool.getTime();
var finishi = now - this.finishiTime;
var totalTime = now - this.startTime;
this.scoreTime = this.waterTime;
if (this.waterTime <= 0.5)
finishi = -1;
// console.log("submitTime:",finishi,this.finishiTime);
cc.fx.GameConfig.CLICK_SET("submitTime", finishi);
if (finishi == -1)
cc.fx.GameConfig.CLICK_SET("duration", cc.fx.GameConfig.TIME_INFO.waterTime[cc.fx.GameConfig.GM_INFO.level]);
else
cc.fx.GameConfig.CLICK_SET("duration", totalTime);
cc.fx.GameConfig.CLICK_SET("usedSteps", data.length);
this.setMap(data);
var arr = this.changeStep(data);
cc.fx.GameConfig.CLICK_SET("stepList", arr);
};
//用于埋点记录
GameManager.prototype.changeStep = function (data) {
var arr = [];
if (data.length > 0) {
for (var i = 0; i < data.length; i++) {
if (data[i] == "up")
arr[i] = "U";
else if (data[i] == "down")
arr[i] = "D";
else if (data[i] == "left")
arr[i] = "L";
else if (data[i] == "right")
arr[i] = "R";
else if (data[i] == "soil")
arr[i] = "X";
else if (data[i] == "reinforce")
arr[i] = "F";
}
}
return arr;
};
//洪峰倒计时,计时器
GameManager.prototype.updateWaterTime = function () {
var _this = this;
if (this.waterTime > 0) {
this.waterTime -= 1;
this.Countdown.string = cc.fx.GameTool.getTimeMargin(this.waterTime);
if (this.waterTime <= 0) {
this.unschedule(this.updateWaterTime);
if (!this.plan_over) {
this.waterTime = 0;
this.plan_over = true;
setTimeout(function () {
if (_this.water_Array.length == 0) {
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
cc.fx.Notifications.emit(cc.fx.Message.setData, false);
}
else {
cc.fx.GameConfig.GM_INFO.min_Time = _this.waterTime;
_this.runWater(0);
}
}, 500);
}
}
}
};
//如果是倒计时 调用此方法
GameManager.prototype.updateCountDownTime = function () {
if (this.countTime > 0) {
this.countTime -= 1;
cc.fx.GameConfig.TIME_INFO.totalTime = this.countTime;
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.countTime = 0;
this.setData(false);
this.unschedule(this.updateCountDownTime);
this.gameOver();
}
}
};
//上传每次操作数据
GameManager.prototype.setData = function (success) {
//设置埋点数据
cc.fx.GameConfig.CLICK_SET("mapId", cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].id);
cc.fx.GameConfig.CLICK_SET("difficulty", cc.fx.GameConfig.GM_INFO.level);
cc.fx.GameConfig.CLICK_SET("optimizedSteps", cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].min_steps);
cc.fx.GameConfig.CLICK_SET("round", cc.fx.GameConfig.GM_INFO.round);
cc.fx.GameConfig.CLICK_SET("timer", cc.fx.GameConfig.TIME_INFO.totalTime);
cc.fx.GameConfig.CLICK_SET("cumulativeScore", cc.fx.GameConfig.GM_INFO.score);
if (success != null) {
cc.fx.GameConfig.CLICK_SET("success", success);
cc.fx.GameConfig.GM_INFO.fen = this.getScore();
if (!success)
cc.fx.GameConfig.GM_INFO.fen = 0;
cc.fx.GameConfig.CLICK_SET("getScore", cc.fx.GameConfig.GM_INFO.fen);
cc.fx.GameConfig.GM_INFO.score += cc.fx.GameConfig.GM_INFO.fen;
cc.fx.GameConfig.CLICK_SET("cumulativeScore", cc.fx.GameConfig.GM_INFO.score);
if (this.countTime != 0)
cc.fx.GameConfig.GM_INFO.successList.push(success);
}
cc.fx.GameTool.setGameData();
};
//计算得分
GameManager.prototype.getScore = function () {
//最小步数
var min = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.level][this.custom].min_steps;
//实际使用步数
var now = this.path_Array.length - 1;
if (now <= 0)
now = 0;
var x = (2.5 * min - now) / min;
var score = Math.pow(Math.pow(min, x), 0.5);
score = score * (this.scoreTime + 10) * 100;
return Math.floor(score);
};
//上传排行榜数据
GameManager.prototype.gameOver = function () {
var rate = 0;
var successList = cc.fx.GameConfig.GM_INFO.successList;
if (successList.length > 0) {
var success = 0;
for (var i = 0; i < successList.length; i++) {
if (successList[i] == true)
success += 1;
}
rate = success / successList.length;
}
rate = Math.floor(rate * 1000) / 10;
var data = {
score: cc.fx.GameConfig.GM_INFO.score,
rate: rate
};
cc.fx.GameTool.setRank(data);
this.node.getChildByName("GameOver").active = true;
this.node.getChildByName("GameOver").opacity = 0;
cc.tween(this.node.getChildByName("GameOver"))
.to(0.4, { opacity: 255 })
.delay(1)
.to(0.4, { opacity: 50 })
.call(function () {
cc.director.loadScene("OverScene");
})
.start();
};
//展示结果
GameManager.prototype.showResult = function (data) {
if (data == "lose") {
cc.fx.AudioManager._instance.playEffect("lose", null);
cc.fx.GameConfig.GM_INFO.min_Time = -1;
}
else {
cc.fx.AudioManager._instance.playEffect("win", null);
}
this.node.getChildByName("Window").active = true;
this.node.getChildByName("Window").getComponent("Window").init(data);
};
//记录反应时长,以及做步骤提示
GameManager.prototype.clickSun = function (data) {
//如果没有记录过 回合开始到操作反应时长,则第一次记录, 后面不记录
if (cc.fx.GameConfig.CLICK_DATA.startTime == 0) {
this.finishiTime = cc.fx.GameTool.getTime();
var now = this.finishiTime - this.startTime;
// console.log("startTime:",now,this.startTime);
cc.fx.GameConfig.CLICK_SET("startTime", now);
}
if (cc.fx.GameConfig.GM_INFO.level > 3)
return;
//步骤提示
var nowPos = this.path_Array[0];
if (this.tip_Array.length != 0) {
if (this.tip_Array[this.tip_Array.length - 1] == null) {
this.tip_Array.push(null);
return;
}
nowPos = this.tip_Array[this.tip_Array.length - 1][this.tip_Array[this.tip_Array.length - 1].length - 1];
if (nowPos) {
var n = nowPos.x * this.map_Array[0].length + nowPos.y;
var targetNode = this.block_Array[n];
if (targetNode.getChildByName("tipLose").active == true) {
this.tip_Array.push(null);
return;
}
}
else {
return;
}
}
if (data == "up") {
var n = cc.v2(nowPos.x, nowPos.y - 1);
this.tipCan(n, data);
}
else if (data == "down") {
var n = cc.v2(nowPos.x, nowPos.y + 1);
this.tipCan(n, data);
}
else if (data == "left") {
var n = cc.v2(nowPos.x - 1, nowPos.y);
this.tipCan(n, data);
}
else if (data == "right") {
var n = cc.v2(nowPos.x + 1, nowPos.y);
this.tipCan(n, data);
}
else if (data == "reinforce") {
var n = cc.v3(nowPos.x, nowPos.y, 2);
this.tip_Array.push([n]);
}
else if (data == "soil") {
var n = cc.v3(nowPos.x, nowPos.y, 3);
this.tip_Array.push([n]);
}
};
//提示是否错误
GameManager.prototype.tipCan = function (pos, data) {
//先判断是否出边界
if (pos.x < 0 || pos.x > this.map_Array.length - 1 || pos.y < 0 || pos.y > this.map_Array[0].length - 1) {
this.tip_Array.push(null);
return;
}
var n = pos.x * this.map_Array[0].length + pos.y;
var target = this.block_Array[n].getComponent("Block");
target.node.getChildByName("tipWin").active = true;
// target.node.getChildByName("tipWin").opacity = 255;
// target.node.getChildByName("tipLose").opacity = 255;
//重复路回头路,或者山峰
if (target.repeatRoad(false, null) == true || target.block_Type == 3) {
target.node.getChildByName("tipLose").active = true;
target.node.getChildByName("tipWin").active = false;
}
//湿地 上一步如果没用息壤或者加固
else if (target.block_Type == 2) {
if (this.tip_Array.length > 1) {
if (this.tip_Array[this.tip_Array.length - 1][0].z == 0) {
target.node.getChildByName("tipLose").active = true;
target.node.getChildByName("tipWin").active = false;
}
}
}
if (this.tip_Array.length > 0) {
if (this.tip_Array[this.tip_Array.length - 1][0].z == 3) {
if (data == "up") {
var arr = [];
for (var i = pos.y; i >= 0; i--) {
var block = this.block_Array[pos.x * this.map_Array[0].length + i].getComponent("Block");
if (block.block_Type == 3) {
i = -10000;
}
else {
block.node.getChildByName("tipWin").active = true;
arr.push(cc.v3(pos.x, i, 0));
if (block.block_Type == 4)
i = -10000;
}
}
this.tip_Array.push(arr);
}
else if (data == "down") {
var arr = [];
for (var i = pos.y; i < this.map_Array[0].length; i++) {
var block = this.block_Array[pos.x * this.map_Array[0].length + i].getComponent("Block");
if (block.block_Type == 3) {
i = 10000;
}
else {
block.node.getChildByName("tipWin").active = true;
arr.push(cc.v3(pos.x, i, 0));
if (block.block_Type == 4)
i = 10000;
}
}
this.tip_Array.push(arr);
}
else if (data == "right") {
var arr = [];
for (var i = pos.x; i < this.map_Array.length; i++) {
var block = this.block_Array[i * this.map_Array[0].length + pos.y].getComponent("Block");
if (block.block_Type == 3) {
i = 10000;
}
else {
block.node.getChildByName("tipWin").active = true;
arr.push(cc.v3(i, pos.y, 0));
if (block.block_Type == 4)
i = 10000;
}
}
this.tip_Array.push(arr);
}
else if (data == "left") {
var arr = [];
for (var i = pos.x; i >= 0; i--) {
var block = this.block_Array[i * this.map_Array[0].length + pos.y].getComponent("Block");
if (block.block_Type == 3) {
i = -10000;
}
else {
block.node.getChildByName("tipWin").active = true;
arr.push(cc.v3(i, pos.y, 0));
if (block.block_Type == 4)
i = -10000;
}
}
this.tip_Array.push(arr);
}
}
else {
var posJg_1 = cc.v3(pos.x, pos.y, 0);
if (data == "reinforce")
pos.z = 2;
if (data == "soil")
pos.z = 3;
this.tip_Array.push([posJg_1]);
}
// console.log(this.tip_Array);
return;
}
var posJg = cc.v3(pos.x, pos.y, 0);
if (data == "reinforce")
pos.z = 2;
if (data == "soil")
pos.z = 3;
this.tip_Array.push([posJg]);
// console.log(this.tip_Array);
};
//移除提示
GameManager.prototype.removeTip = function (data) {
if (cc.fx.GameConfig.GM_INFO.level > 3)
return;
//分为撤回一步 和全部清空
if (this.tip_Array.length > 0) {
if (data == "back") {
var target = this.tip_Array[this.tip_Array.length - 1];
if (target == null) {
this.tip_Array.pop();
}
else {
this.tip_Array.pop();
for (var i = 0; i < target.length; i++) {
if (target[i]) {
if (target[0].z == 0) {
var n = target[i].x * this.map_Array[0].length + target[i].y;
var node = this.block_Array[n];
node.getChildByName("tipWin").active = false;
node.getChildByName("tipLose").active = false;
}
}
}
}
}
else if (data == "remove") {
for (var j = 0; j < this.tip_Array.length; j++) {
var target = this.tip_Array[j];
if (target != null) {
for (var i = 0; i < target.length; i++) {
if (target[i]) {
var n = target[i].x * this.map_Array[0].length + target[i].y;
var node = this.block_Array[n];
node.getChildByName("tipWin").active = false;
node.getChildByName("tipLose").active = false;
}
}
}
}
this.tip_Array = [];
}
}
};
//获取引导名字
GameManager.prototype.getGuideName = function () {
var name = "one";
switch (this.step) {
case 1:
name = "one";
this.btnClick = false;
this.bgClick = true;
break;
case 2:
name = "two";
this.btnClick = false;
this.bgClick = true;
break;
case 3:
name = "three";
this.btnClick = false;
this.bgClick = true;
break;
case 4:
name = "four";
this.btnClick = false;
this.bgClick = true;
break;
case 5:
name = "five";
this.btnClick = true;
this.bgClick = false;
break;
case 6:
name = "six";
this.btnClick = true;
this.bgClick = false;
break;
case 7:
name = "seven";
this.btnClick = false;
this.bgClick = true;
break;
case 8:
name = "eight";
this.btnClick = false;
this.bgClick = true;
break;
case 9:
name = "nine";
this.btnClick = false;
this.bgClick = true;
break;
case 10:
name = "ten";
this.btnClick = true;
this.bgClick = false;
break;
case 11:
name = "eleven";
this.btnClick = false;
this.bgClick = true;
break;
case 12:
name = "twelve";
this.btnClick = true;
this.bgClick = false;
break;
case 13:
name = "thirteen";
this.btnClick = true;
this.bgClick = false;
break;
case 14:
name = "fourteen";
this.btnClick = true;
this.bgClick = false;
break;
case 15:
name = "fiveteen";
this.btnClick = true;
this.bgClick = false;
break;
case 16:
name = "sixteen";
this.btnClick = true;
this.bgClick = false;
break;
case 17:
name = "last";
this.btnClick = true;
this.bgClick = false;
break;
}
return name;
};
//引导下一步
GameManager.prototype.guideNext = function () {
//每次先把所有的
console.log(this.step, this.Guide.children.length);
if (this.step + 1 == this.Guide.children.length) {
cc.fx.GameConfig.GM_INFO.guide = false;
// cc.director.loadScene("GameScene");
var name_1 = cc.fx.GameConfig.GM_INFO.gameId + "_guide";
cc.fx.StorageMessage.setStorage(name_1, cc.fx.GameConfig.GM_INFO.guide);
}
if (this.step > 0)
this.Guide.children[this.step - 1].active = false;
this.step += 1;
var name = this.getGuideName();
var target = this.Guide.getChildByName(name);
target.active = true;
var size = cc.winSize;
if (size.height > 1334) {
var height = (size.height - 1334) / 2;
target.getChildByName("sp").height += height;
}
};
GameManager.prototype.onEnable = function () {
cc.fx.Notifications.on(cc.fx.Message.control, this.clickSun, this);
cc.fx.Notifications.on(cc.fx.Message.next, this.runRoad, this);
cc.fx.Notifications.on(cc.fx.Message.nextWater, this.runWater, this);
cc.fx.Notifications.on(cc.fx.Message.startGame, this.startGame, this);
cc.fx.Notifications.on(cc.fx.Message.changePath, this.changePath, this);
cc.fx.Notifications.on(cc.fx.Message.setData, this.setData, this);
cc.fx.Notifications.on(cc.fx.Message.guideNext, this.guideNext, this);
cc.fx.Notifications.on(cc.fx.Message.showResult, this.showResult, this);
cc.fx.Notifications.on(cc.fx.Message.removeTip, this.removeTip, this);
};
GameManager.prototype.onDisable = function () {
cc.fx.Notifications.off(cc.fx.Message.control, this.clickSun);
cc.fx.Notifications.off(cc.fx.Message.next, this.runRoad);
cc.fx.Notifications.off(cc.fx.Message.nextWater, this.runWater);
cc.fx.Notifications.off(cc.fx.Message.startGame, this.startGame);
cc.fx.Notifications.off(cc.fx.Message.changePath, this.changePath);
cc.fx.Notifications.off(cc.fx.Message.setData, this.setData);
cc.fx.Notifications.off(cc.fx.Message.guideNext, this.guideNext);
cc.fx.Notifications.off(cc.fx.Message.showResult, this.showResult);
cc.fx.Notifications.off(cc.fx.Message.removeTip, this.removeTip);
};
GameManager.prototype.update = function (dt) {
};
__decorate([
property(cc.Node)
], GameManager.prototype, "Map", void 0);
__decorate([
property(cc.Prefab)
], GameManager.prototype, "Block", void 0);
__decorate([
property(cc.Label)
], GameManager.prototype, "Time", void 0);
__decorate([
property(cc.Label)
], GameManager.prototype, "Countdown", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Guide", void 0);
GameManager = __decorate([
ccclass
], GameManager);
return GameManager;
}(cc.Component));
exports.default = GameManager;
cc._RF.pop();