You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.1 KiB
96 lines
3.1 KiB
import { _decorator, CCBoolean, CCFloat, Component, Node, NodeEventType } from 'cc';
|
|
import { SceneLightMgr } from './SceneLightMgr';
|
|
import { GEvent } from 'db://assets/mx/module/event/GEvent';
|
|
import { TableNames } from '../../game/ConfigTableData';
|
|
import { ObstacleType } from '../BattleGame/MapObstacle';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
/**
|
|
* 2D简易光照-点光源
|
|
*/
|
|
@ccclass('SceneLightComp')
|
|
export class SceneLightComp extends Component {
|
|
@property({type:CCFloat, tooltip: '内圈半径'})
|
|
radius: number = 100;
|
|
|
|
@property({type:CCFloat, tooltip: '外扩宽度'})
|
|
outLen: number = 30;
|
|
|
|
@property({tooltip: '是否生成阴影'})
|
|
isShadow: boolean = false;
|
|
|
|
public onUpdatePos() {
|
|
if (!this.node.active) return;
|
|
|
|
SceneLightMgr.addLightPos(this.node.uuid, this.node.worldPosition, this.radius, this.outLen, this.isShadow);
|
|
}
|
|
|
|
private _timer = null;
|
|
public onEnable(): void {
|
|
//获取灯塔数据配置
|
|
// let id = ObstacleType.灯塔
|
|
// let config = gg.data.table.getTableList<ITablePlaymode>(TableNames.Playmode).find(x => x.id == id)
|
|
// let par1 = config.par1.split('|')
|
|
// //副本
|
|
// if(gg.game.CurentBattle.IsReplica){
|
|
// let data = par1[1].split(',').map(Number)
|
|
// this.radius = data[0]
|
|
// this.outLen = data[1]
|
|
// }else{
|
|
// let data = par1[0].split(',').map(Number)
|
|
// this.radius = data[0]
|
|
// this.outLen = data[1]
|
|
// }
|
|
|
|
// console.log('onEnable SceneLightComp')
|
|
// this._timer = setTimeout(() => {
|
|
// this._timer = null;
|
|
// this.onUpdatePos();
|
|
// }, 100);
|
|
// // this.onUpdatePos();
|
|
// SceneLightMgr.addComp(this);
|
|
|
|
// // 节点位置变化监听(可根据自己项目实际调整)
|
|
// // 出于性能和操作简便考虑,目前仅监听自己和父节点
|
|
|
|
// GEvent.Ins.on(GEvent.UpdateLight, this.updateLight, this);
|
|
}
|
|
|
|
public onDisable(): void {
|
|
console.log('onDisable SceneLightComp')
|
|
SceneLightMgr.cleanComp(this);
|
|
SceneLightMgr.removeLight(this.node.uuid);
|
|
|
|
// this.node.off(NodeEventType.TRANSFORM_CHANGED, this.onUpdatePos, this);
|
|
// this.node.parent.off(NodeEventType.TRANSFORM_CHANGED, this.onUpdatePos, this);
|
|
GEvent.Ins.off(GEvent.UpdateLight, this.updateLight, this);
|
|
}
|
|
|
|
autoUpdateCom(){
|
|
this._timer = setTimeout(() => {
|
|
this._timer = null;
|
|
this.onUpdatePos();
|
|
}, 100);
|
|
// this.onUpdatePos();
|
|
SceneLightMgr.addComp(this);
|
|
GEvent.Ins.on(GEvent.UpdateLight, this.updateLight, this);
|
|
}
|
|
|
|
|
|
updateLight() {
|
|
console.log('updateLight SceneLightComp')
|
|
this.node.active = false
|
|
this.scheduleOnce(() => {
|
|
this.node.active = true
|
|
}, 0.03)
|
|
}
|
|
public onDestroy(): void {
|
|
if (this._timer) {
|
|
clearTimeout(this._timer);
|
|
this._timer = null;
|
|
}
|
|
SceneLightMgr.removeLight(this.node.uuid);
|
|
}
|
|
}
|
|
|
|
|
|
|