RectBlockView.ts
3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// 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
}