| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { _decorator, Color, Component, Node, Sprite, UIOpacity, Vec3 } from 'cc';
- import { BlockConfig, BlockOffset } from './BlockData';
- import { GridBlockMgr } from '../GridBlockMgr';
- import ResSprite from '../../ResSprite';
- const { ccclass, property } = _decorator;
- @ccclass('BlockController')
- export class BlockController extends Component {
- @property(Node)
- blockSet: Node = null; // 25个子节点的父节点
- public curBlockConfig: BlockConfig = null;
- /**
- * 根据二维数组配置显示/隐藏子节点
- * @param detect 是否检测
- * @param blockConfig 数据
- * @param opacity 透明度
- * @returns
- */
- updateBlockSet(detect: boolean, blockConfig?: BlockConfig, opacity?: number) {
- if (blockConfig) {
- this.curBlockConfig = blockConfig;
- }
- const curbBlockArr = this.curBlockConfig.block_arr
- const children = this.blockSet.children;
- // 确保有25个子节点
- if (children.length !== 25) {
- console.error('blockSet should have exactly 25 children');
- return;
- }
- for (let i = 0; i < 5; i++) {
- for (let j = 0; j < 5; j++) {
- const index = i * 5 + j;
- const node = children[index];
- if (curbBlockArr[i][j] === 1) {
- node.getComponent(ResSprite).setSpriteFrame(blockConfig.block_color + '/spriteFrame');
- node.active = true; // 显示节点
- if (opacity) {
- node.getComponent(UIOpacity).opacity = opacity;
- node.getComponent(Sprite).color = new Color().fromHEX('#B9B9B9');
- } else {
- node.getComponent(UIOpacity).opacity = 255;
- }
- } else {
- node.active = false; // 隐藏节点
- // node.getComponent(UIOpacity).opacity = 100;
- }
- }
- }
- if (detect) {
- this.checkGray();
- }
- }
- /**
- * 检测是否可以放置
- * @param blockConfig 块配置
- */
- checkGray() {
- GridBlockMgr.ins.detectIsCanPlaced(this.curBlockConfig.block_arr, this.node)
- }
- /**
- * 根据数据调整偏移
- * @param scaleZoom 缩放比例
- */
- addBlockOffset(scaleZoom: number) {
- if (!this.curBlockConfig) {
- // console.error("curBlockConfig is null or undefined");
- return;
- }
- const blockOffset = this.curBlockConfig.block_offset;
- // console.log("Block offset:", blockOffset);
- // console.log("Original Position:", this.node.position);
- let offset = new Vec3();
- if (blockOffset === BlockOffset.UP) {
- offset = new Vec3(0, 122.5 / scaleZoom, 0);
- } else if (blockOffset === BlockOffset.DOWN) {
- offset = new Vec3(0, -122.5 / scaleZoom, 0);
- } else if (blockOffset === BlockOffset.LEFT) {
- offset = new Vec3(-122.5 / scaleZoom, 0, 0);
- } else if (blockOffset === BlockOffset.RIGHT) {
- offset = new Vec3(122.5 / scaleZoom, 0, 0);
- } else if (blockOffset === BlockOffset.LEFTANDDOWN) {
- offset = new Vec3(-122.5 / scaleZoom, -122.5 / scaleZoom, 0);
- } else if (blockOffset === BlockOffset.LEFTANDUP) {
- offset = new Vec3(-122.5 / scaleZoom, 122.5 / scaleZoom, 0);
- } else if (blockOffset === BlockOffset.RIGHTANDDOWN) {
- offset = new Vec3(122.5 / scaleZoom, -122.5 / scaleZoom, 0);
- } else if (blockOffset === BlockOffset.RIGHTANDUP) {
- offset = new Vec3(122.5 / scaleZoom, 122.5 / scaleZoom, 0);
- }
- // console.log("Offset to be added:", offset);
- this.node.position = this.node.position.add(offset);
- // console.log("New Position:", this.node.position);
- }
- start() {
- // 示例图块配置
- // const blockConfig = [
- // [0, 0, 0, 0, 0],
- // [0, 0, 1, 0, 0],
- // [0, 0, 1, 1, 0],
- // [0, 0, 0, 0, 0],
- // [0, 0, 0, 0, 0]
- // ];
- // 更新 blockSet
- // this.updateBlockSet(blockConfig);
- }
- }
|