// Learn TypeScript: // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html // Learn Attribute: // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html import { MapView } from "../kernel/battle/map/MapView"; import { RectBlockData } from "../kernel/battle/map/RectBlockData"; import BlockView from "./BlockView"; import RectBlockCollider from "./RectBlockCollider"; const { ccclass, property } = cc._decorator; @ccclass export default class RectBlockView extends BlockView { get owner(): RectBlockData { return this._owner as RectBlockData } private _offsetX: number = 0; private _offsetY: number = 0; private _colliderNode: cc.Node; //#region LIFE-CYCLE CALLBACKS: // onLoad () {} init(owner: RectBlockData, mapView: MapView): void { this._offsetX = owner.viewPixelPosX - owner.pixelPos.x; this._offsetY = owner.viewPixelPosY - owner.pixelPos.y; this._colliderNode = this.node.getChildByName('collider'); this._colliderNode.removeFromParent(); this._colliderNode.setPosition(owner.viewPixelPosX, owner.viewPixelPosY); mapView.colliderLayer.addChild(this._colliderNode); this._colliderNode.getComponent(RectBlockCollider).setMainNode(this.node); this._colliderNode.getComponent(cc.PhysicsBoxCollider).size.width = owner.widthPixel - 2; //大格子碰撞体缩小一些,避免被三角格子包围时穿透 this._colliderNode.getComponent(cc.PhysicsBoxCollider).size.height = owner.heightPixel - 2; super.init(owner, mapView); this._light && this._light.setContentSize(this.owner.widthPixel, this.owner.heightPixel); } protected onImageLoaded(): void { this._img.setContentSize(this.owner.widthPixel + 6, this.owner.heightPixel + 6); //格子图片边缘有3像素的空白,撑满 } protected onUpdateMoveState() { this._needMove = (this.node.position.y != (this.owner as RectBlockData).viewPixelPosY); } protected onPositionChange(x: number, y: number): void { super.onPositionChange(x, y); let viewPosX = x + this._offsetX; let viewPosY = y + this._offsetY; this._img.setPosition(viewPosX + this._imgOffset.x, viewPosY + this._imgOffset.y); this._imgEffect.setPosition(viewPosX, viewPosY); this._txt.setPosition(viewPosX + this._txtOffset.x, viewPosY + this._txtOffset.y); this._imgSkillIcon.setPosition(viewPosX, viewPosY); this._colliderNode.setPosition(viewPosX, viewPosY); this._light && this._light.setPosition(viewPosX, viewPosY); } onDead(): void { this._colliderNode.destroy(); super.onDead(); } // protected onDestroy(): void { // this._colliderNode = null; // } // update (dt) {} //#endregion //#region public setColliderEnable(value: boolean) { this._colliderNode.getComponent(cc.PhysicsCollider).enabled = value; } //#endregion }