mirror of
https://github.com/cocos/cocos-engine.git
synced 2026-09-07 00:02:53 +08:00
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { EDITOR } from 'internal:constants';
|
|
import { Material } from '../../../asset/assets';
|
|
import { property, serializable } from '../../../core/data/class-decorator';
|
|
import { ccclass, disallowMultiple, executeInEditMode, help, menu } from '../../../core/data/decorators';
|
|
import { PostProcessSetting } from './post-process-setting';
|
|
|
|
@ccclass('cc.BlitScreenMaterial')
|
|
class BlitScreenMaterial {
|
|
@property(Material)
|
|
@serializable
|
|
protected _material: Material | undefined;
|
|
|
|
@property(Material)
|
|
get material (): Material | undefined {
|
|
return this._material;
|
|
}
|
|
set material (v) {
|
|
this._material = v;
|
|
}
|
|
|
|
@property({
|
|
serializable: true
|
|
})
|
|
enable = true;
|
|
}
|
|
|
|
@ccclass('cc.BlitScreen')
|
|
@help('cc.BlitScreen')
|
|
@menu('PostProcess/BlitScreen')
|
|
@disallowMultiple
|
|
@executeInEditMode
|
|
export class BlitScreen extends PostProcessSetting {
|
|
@property(Material)
|
|
@serializable
|
|
protected _activeMaterials: Material[] = [];
|
|
@property({ type: Material, visible: false })
|
|
get activeMaterials (): Material[] {
|
|
return this._activeMaterials;
|
|
}
|
|
set activeMaterials (v) {
|
|
this._activeMaterials = v;
|
|
for (let i = 0; i < this._materials.length; i++) {
|
|
for (let j = 0; j < v.length; j++) {
|
|
if (this._materials[i] && v[j]) {
|
|
if (this._materials[i].material?.uuid === v[j].uuid) {
|
|
this._materials[i].material = v[j];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@property(BlitScreenMaterial)
|
|
@serializable
|
|
protected _materials: BlitScreenMaterial[] = [];
|
|
|
|
@property(BlitScreenMaterial)
|
|
get materials (): BlitScreenMaterial[] {
|
|
return this._materials;
|
|
}
|
|
set materials (v) {
|
|
this._materials = v;
|
|
if (EDITOR) {
|
|
setTimeout(() => {
|
|
globalThis.cce.Engine.repaintInEditMode();
|
|
}, 50);
|
|
}
|
|
this.updateActiveMaterials();
|
|
}
|
|
|
|
updateActiveMaterials (): void {
|
|
const materials = this._materials;
|
|
this._activeMaterials.length = 0;
|
|
for (let i = 0; i < materials.length; i++) {
|
|
const m = materials[i];
|
|
if (m.enable && m.material) {
|
|
this._activeMaterials.push(m.material);
|
|
}
|
|
}
|
|
}
|
|
|
|
onLoad (): void {
|
|
this.updateActiveMaterials();
|
|
}
|
|
}
|