|
@@ -1,6 +1,9 @@
|
|
|
+import Gamecfg from "../../common/gameCfg";
|
|
|
+import { xlsChapterLayout } from "../../common/xlsConfig";
|
|
|
import UEBase from "../../frameWork/compment/UEBase";
|
|
|
import { GridConstant } from "./GridConstant";
|
|
|
-import UECell from "./UECell";
|
|
|
+import UECell, { I_CellData } from "./UECell";
|
|
|
+import UECube from "./UECube";
|
|
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
|
const DRAG_THRESHOLD: number = 10; // 拖动判定阈值(像素)
|
|
@@ -12,40 +15,22 @@ export default class UEGridMap extends UEBase {
|
|
|
static readonly CLS: string = "UEGridMap";
|
|
|
@property(cc.Prefab)
|
|
|
cellPrefab: cc.Prefab = null!;
|
|
|
- @property(cc.Node)
|
|
|
- gridCenter: cc.Node = null;
|
|
|
+ @property(cc.Prefab)
|
|
|
+ cubePrefab: cc.Prefab = null!;
|
|
|
@property(cc.Node)
|
|
|
gridLayer: cc.Node = null;
|
|
|
- gridMap: UECell[][] = [];
|
|
|
+ @property(cc.Node)
|
|
|
+ cellLayer: cc.Node = null;
|
|
|
+ @property(cc.Node)
|
|
|
+ cubeLayer: cc.Node = null;
|
|
|
+ cellMap: { [gid: number]: UECell } = {};
|
|
|
private isDragging: boolean = false;
|
|
|
private dragStartPos: cc.Vec2 = cc.v2(0, 0);
|
|
|
private selectedCell: UECell = null!;
|
|
|
private clickCnt: number = 0;
|
|
|
Init() {
|
|
|
- const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
|
|
|
- const startY = (GridConstant.COL * GridConstant.CELL_HEIGHT) / 2;
|
|
|
this.gridLayer.setContentSize(GridConstant.CELL_WIDTH * GridConstant.ROW, GridConstant.CELL_HEIGHT * GridConstant.COL);
|
|
|
- let idx = 0;
|
|
|
- for (let i = 0; i < GridConstant.COL; i++) {
|
|
|
- let row = [];
|
|
|
- for (let j = 0; j < GridConstant.ROW; j++) {
|
|
|
- let cell = cc.instantiate(this.cellPrefab).getComponent(UECell);
|
|
|
- this.gridLayer.addChild(cell.node);
|
|
|
- cell.node.width = GridConstant.CELL_WIDTH;
|
|
|
- cell.node.height = GridConstant.CELL_HEIGHT;
|
|
|
- cell.node.setPosition(cc.v2(
|
|
|
- startX + j * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
|
|
|
- startY - i * GridConstant.CELL_HEIGHT - GridConstant.CELL_HEIGHT / 2
|
|
|
- ));
|
|
|
- row.push(cell);
|
|
|
- cell.Init({
|
|
|
- id: idx, type: 1,
|
|
|
- zIndex: idx
|
|
|
- }, idx);
|
|
|
- idx++;
|
|
|
- }
|
|
|
- this.gridMap.push(row);
|
|
|
- }
|
|
|
+ this.LoadMapData();
|
|
|
this.InitEvent();
|
|
|
}
|
|
|
|
|
@@ -56,6 +41,71 @@ export default class UEGridMap extends UEBase {
|
|
|
this.gridLayer.on(cc.Node.EventType.TOUCH_CANCEL, this.OnTouchEnd, this);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /** 加载地图数据 */
|
|
|
+ private LoadMapData() {
|
|
|
+ let chapterInfoCfg = Gamecfg.chapterInfo.getItem("1");
|
|
|
+ let layoutCfg = Gamecfg.chapterLayoutList.getItemList("1");
|
|
|
+ let layoutGridMap: { [grid: number]: xlsChapterLayout } = {};
|
|
|
+ layoutCfg.forEach(element => {
|
|
|
+ layoutGridMap[element.grid] = element;
|
|
|
+ });
|
|
|
+ const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
|
|
|
+ const startY = (GridConstant.COL * GridConstant.CELL_HEIGHT) / 2;
|
|
|
+ this.cellMap = {};
|
|
|
+ for (let i = 0; i < GridConstant.COL; i++) {
|
|
|
+ let rowCells = [];
|
|
|
+ let rowCubes = [];
|
|
|
+ for (let j = 0; j < GridConstant.ROW; j++) {
|
|
|
+ let idx = (i + 1) * 10 + (j + 1);
|
|
|
+ if (chapterInfoCfg.grid.indexOf(idx) != -1) {
|
|
|
+ let cell = this.CreateCell(i, j);
|
|
|
+ rowCells.push(cell);
|
|
|
+ let cellCfg: xlsChapterLayout = layoutGridMap[idx];
|
|
|
+ let cube = null;
|
|
|
+ if (cellCfg) {
|
|
|
+ cube = cc.instantiate(this.cubePrefab).getComponent(UECube);
|
|
|
+ rowCubes.push(cube);
|
|
|
+ this.cubeLayer.addChild(cube.node);
|
|
|
+ cube.node.width = GridConstant.CELL_WIDTH;
|
|
|
+ cube.node.height = GridConstant.CELL_HEIGHT;
|
|
|
+ cube.node.setPosition(cc.v2(
|
|
|
+ startX + j * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
|
|
|
+ startY - i * GridConstant.CELL_HEIGHT - GridConstant.CELL_HEIGHT / 2
|
|
|
+ ));
|
|
|
+ cube.Init({
|
|
|
+ type: cellCfg.type,
|
|
|
+ id: cellCfg.correlationId,
|
|
|
+ zIndex: idx,
|
|
|
+ unlock: cellCfg.unlock
|
|
|
+ }, idx)
|
|
|
+ }
|
|
|
+ cell.Init({
|
|
|
+ zIndex: idx,
|
|
|
+ ueCube: cube
|
|
|
+ });
|
|
|
+ this.cellMap[idx] = cell;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 创建格子 */
|
|
|
+ private CreateCell(i: number, j: number) {
|
|
|
+ const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
|
|
|
+ const startY = (GridConstant.COL * GridConstant.CELL_HEIGHT) / 2;
|
|
|
+ let cell = cc.instantiate(this.cellPrefab).getComponent(UECell);
|
|
|
+ this.cellLayer.addChild(cell.node);
|
|
|
+ cell.node.width = GridConstant.CELL_WIDTH;
|
|
|
+ cell.node.height = GridConstant.CELL_HEIGHT;
|
|
|
+ cell.node.setPosition(cc.v2(
|
|
|
+ startX + j * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
|
|
|
+ startY - i * GridConstant.CELL_HEIGHT - GridConstant.CELL_HEIGHT / 2
|
|
|
+ ));
|
|
|
+ return cell;
|
|
|
+ }
|
|
|
+
|
|
|
private OnTouchStart(event: cc.Event.EventTouch): void {
|
|
|
const touchPos = this.gridLayer.convertToNodeSpaceAR(event.getLocation());
|
|
|
const cell = this.GetCellByPos(touchPos);
|
|
@@ -81,12 +131,12 @@ export default class UEGridMap extends UEBase {
|
|
|
// 只有当移动距离超过阈值时才开始拖动
|
|
|
if (!this.isDragging && distance >= DRAG_THRESHOLD) {
|
|
|
this.isDragging = true;
|
|
|
- this.selectedCell.StartDrag();
|
|
|
+ this.selectedCell.GetCube().StartDrag();
|
|
|
this.selectedCell.SetSelect(false);
|
|
|
}
|
|
|
|
|
|
if (this.isDragging) {
|
|
|
- this.selectedCell.UpdateDragPosition(cc.v3(touchPos.x, touchPos.y));
|
|
|
+ this.selectedCell.GetCube().UpdateDragPosition(cc.v3(touchPos.x, touchPos.y));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -96,11 +146,13 @@ export default class UEGridMap extends UEBase {
|
|
|
const targetCell = this.GetCellByPos(touchPos);
|
|
|
if (!this.isDragging && this.selectedCell === targetCell) {
|
|
|
//二次点击同一个格子
|
|
|
- targetCell.PlayJellyAnim();
|
|
|
- if (this.clickCnt >= 2) {
|
|
|
- console.log("二次点击同一个格子");
|
|
|
- } else {
|
|
|
- this.clickCnt++;
|
|
|
+ if (!targetCell.IsEmpty()) {
|
|
|
+ targetCell.GetCube().PlayJellyAnim();
|
|
|
+ if (this.clickCnt >= 2) {
|
|
|
+ console.log("二次点击同一个格子");
|
|
|
+ } else {
|
|
|
+ this.clickCnt++;
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
if (!this.isDragging) return;
|
|
@@ -109,7 +161,7 @@ export default class UEGridMap extends UEBase {
|
|
|
this.selectedCell.SetSelect(false);
|
|
|
targetCell.SetSelect(true);
|
|
|
}
|
|
|
- this.selectedCell.EndDrag();
|
|
|
+ this.selectedCell.GetCube().EndDrag();
|
|
|
this.isDragging = false;
|
|
|
this.selectedCell = targetCell;
|
|
|
}
|
|
@@ -124,22 +176,45 @@ export default class UEGridMap extends UEBase {
|
|
|
const col = Math.floor((startY - pos.y) / GridConstant.CELL_HEIGHT);
|
|
|
|
|
|
if (col >= 0 && col < GridConstant.COL && row >= 0 && row < GridConstant.ROW) {
|
|
|
- return this.gridMap[col][row];
|
|
|
+ let idx = (col + 1) * 10 + (row + 1);
|
|
|
+ return this.cellMap[idx];
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/** 尝试合成 */
|
|
|
private TryMergeItems(fromCell: UECell, toCell: UECell): void {
|
|
|
- if (fromCell.cellData.type == toCell.cellData.type &&
|
|
|
- fromCell.cellData.id != toCell.cellData.id &&
|
|
|
- fromCell.cellData.level == toCell.cellData.level) {
|
|
|
- toCell.PlayMergeAnim();
|
|
|
- }
|
|
|
+ // if (toCell.cellData.type == 0) {
|
|
|
+ // //格子上没有物品
|
|
|
+
|
|
|
+ // } else if (fromCell.cellData.type == toCell.cellData.type &&
|
|
|
+ // fromCell.cellData.id != toCell.cellData.id &&
|
|
|
+ // fromCell.cellData.level == toCell.cellData.level) {
|
|
|
+ // toCell.PlayMergeAnim();
|
|
|
+ // } else {
|
|
|
+
|
|
|
+ // }
|
|
|
+ }
|
|
|
+
|
|
|
+ private SwitchCell(fromCell: UECell, toCell: UECell): void {
|
|
|
+ //交换格子
|
|
|
+ const tempData = fromCell.cellData;
|
|
|
+ fromCell.cellData = toCell.cellData;
|
|
|
+ toCell.cellData = tempData;
|
|
|
+ // fromCell.UpdateCell();
|
|
|
+ // toCell.UpdateCell();
|
|
|
+ cc.tween(toCell.node)
|
|
|
+ .to(0.3, { position: fromCell.node.position })
|
|
|
+ .call(() => {
|
|
|
+ // fromCell.UpdateCell();
|
|
|
+ // toCell.UpdateCell();
|
|
|
+ })
|
|
|
+ .start();
|
|
|
}
|
|
|
|
|
|
/** 抛出新的物品 */
|
|
|
- private JumpNewItem() {
|
|
|
+ private ThrowNewItem() {
|
|
|
|
|
|
}
|
|
|
+
|
|
|
}
|