1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import GameDataCenter from "../../data/GameDataCenter";
- import UEBase from "../../frameWork/compment/UEBase";
- import EventMng from "../../manager/EventMng";
- import { GridEvent } from "./GridEvent";
- import UECube from "./UECube";
- import UEMergeTipItem from "./UEMergeTipItem";
- const { ccclass, property } = cc._decorator;
- export interface I_MergeTipData {
- idx: number;
- ueCube1: UECube;
- ueCube2: UECube;
- dir: number;//1左,2右
- }
- @ccclass
- export default class UEMergeTip extends UEBase {
- static readonly BundleKey: string = "gridMap";
- static readonly PrefabUrl: string = "UEMergeTip";
- static readonly CLS: string = "UEMergeTip";
- @property(cc.Prefab)
- prefab_item: cc.Prefab = null!;
- @property(cc.Node)
- node_content: cc.Node = null!;
- @property(cc.Node)
- bg: cc.Node = null!;
- data: I_MergeTipData = null!;
- Init(data: I_MergeTipData) {
- //检测是否重复位置和重复合成链
- // this.node.active = true;
- // EventMng.emit(GridEvent.HC_MERGE_TIP, true);
- // if (this.data && data.idx == this.data.idx) {
- // return;
- // }
- this.data = data;
- let mergeArr = GameDataCenter.gridMap.GetMergeItems(data.ueCube1, data.ueCube2);
- if (mergeArr.length > 0) {
- this.node.active = true;
- for (let i = 1; i <= 4; i++) {
- let itemNode = this.node_content.children[i - 1];
- if (!itemNode) {
- itemNode = cc.instantiate(this.prefab_item);
- this.node_content.addChild(itemNode);
- }
- let pos = this.GetCirclePosition(i - 1, mergeArr.length);
- itemNode.setPosition(pos);
- itemNode.getComponent(UEMergeTipItem).Init({ data: mergeArr[i - 1] });
- }
- EventMng.emit(GridEvent.HC_MERGE_TIP, { isShow: true, mergeArr: mergeArr });
- if (this.data.dir == 2) {
- //补充旋转角度
- this.bg.angle = 25;
- } else {
- this.bg.angle = -25;
- }
- } else {
- this.node.active = false;
- EventMng.emit(GridEvent.HC_MERGE_TIP, { isShow: false });
- }
- }
- Hide() {
- this.node.active = false;
- EventMng.emit(GridEvent.HC_MERGE_TIP, { isShow: false });
- }
- /** 计算圆上的位置 */
- private GetCirclePosition(index: number, total: number): cc.Vec2 {
- const radius = 120; // 圆的半径
- if (total === 1) {
- // 只有一个元素时,放在正上方
- return cc.v2(0, radius);
- }
- // 计算每个元素之间的角度
- const angleStep = 60; // 相邻两个元素之间的角度
- const startAngle = (this.data.dir == 1 ? 60 : 120) + -total * angleStep / 2 + angleStep / 2; // 从90度(正上方)开始,向右分布
- // 计算当前元素的角度(角度转弧度)
- const angle = (startAngle + index * angleStep) * Math.PI / 180; // 减去角度使其向右分布
- // 计算圆上的位置
- const x = radius * Math.cos(angle);
- const y = radius * Math.sin(angle);
- return cc.v2(x, y);
- }
- }
|