import { RegisterComponent } from '@feng3d/ecs'; import { LineSegments, Material } from '../../thirdparty/three/imports'; import { BufferGeometry3D } from '../core/BufferGeometry3D'; import { Component3D } from '../core/Component3D'; import { Material3D } from '../materials/Material3D'; declare module '@feng3d/ecs' { interface ComponentMap { LineSegments3D: LineSegments3D; } } /** * 包装`three`中`LineSegments` */ @RegisterComponent({ name: 'LineSegments3D' }) export class LineSegments3D extends Component3D { declare _line: LineSegments; get geometry() { return this._geometry; } set geometry(v) { this._geometry = v; if (this._line) { this._line.geometry = this._geometry?._geometry; } } private _geometry: BufferGeometry3D; get material() { return Material3D.get(this._line.material as Material); } set material(v) { this._material = v; if (this._line) { this._line.material = this._material?._material; } } private _material: Material3D; get castShadow() { return this._line.castShadow; } set castShadow(v) { this._line.castShadow = v; } init() { super.init(); this._line = new LineSegments(this._geometry?._geometry, this._material?._material); this._entity._group.add(this._line); this._entity.isLineSegments = true; } destroy(): void { this._entity._group.remove(this._line); this._line = null; this._entity.isLineSegments = false; super.destroy(); } }