@combos-fun/plugin-renderer-3d-graphics 0.0.42 → 0.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/agent-skill.md +43 -11
- package/combos-plugin.json +1 -1
- package/dist/plugin-renderer-3d-graphics.cjs.js +656 -62
- package/dist/plugin-renderer-3d-graphics.cjs.js.map +1 -1
- package/dist/plugin-renderer-3d-graphics.cjs.prod.js +1 -1
- package/dist/plugin-renderer-3d-graphics.d.ts +36 -6
- package/dist/plugin-renderer-3d-graphics.esm.js +658 -64
- package/dist/plugin-renderer-3d-graphics.esm.js.map +1 -1
- package/package.json +8 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-renderer-3d-graphics.esm.js","sources":["../lib/component.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\n\nexport interface Graphics3DParams {\n shape?: string;\n color?: number;\n wireframe?: boolean;\n width?: number;\n height?: number;\n depth?: number;\n radius?: number;\n segments?: number;\n positionX?: number;\n positionY?: number;\n positionZ?: number;\n rotationX?: number;\n rotationY?: number;\n rotationZ?: number;\n scaleX?: number;\n scaleY?: number;\n scaleZ?: number;\n opacity?: number;\n}\n\nexport default class Graphics3D extends Component<Graphics3DParams> {\n static componentName: string = 'Graphics3D';\n\n @Field({\n\n type: 'string',\n\n group: 'Graphics3D',\n\n label: 'shape',\n\n description: 'Primitive shape kind.',\n\n editor: 'text',\n\n })\n\n shape: string = 'box';\n @Field({\n type: 'number',\n group: 'Graphics3D',\n label: 'color',\n description: 'Color value.',\n editor: 'number-stepper',\n })\n color: number = 0x00ff00;\n @Field({\n type: 'boolean',\n group: 'Graphics3D',\n label: 'wireframe',\n description: 'Draw as wireframe.',\n editor: 'toggle',\n })\n wireframe: boolean = false;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'width',\n description: 'Width.',\n editor: 'number-stepper',\n })\n width: number = 1;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'height',\n description: 'Height.',\n editor: 'number-stepper',\n })\n height: number = 1;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'depth',\n description: 'Depth.',\n editor: 'number-stepper',\n })\n depth: number = 1;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'radius',\n description: 'Radius.',\n editor: 'number-stepper',\n })\n radius: number = 0.5;\n @Field({\n type: 'number',\n step: 1,\n group: 'Graphics3D',\n label: 'segments',\n description: 'Mesh segment count.',\n editor: 'number-stepper',\n })\n segments: number = 32;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionX',\n description: 'Local X position.',\n editor: 'number-stepper',\n })\n positionX: number = 0;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionY',\n description: 'Local Y position.',\n editor: 'number-stepper',\n })\n positionY: number = 0;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionZ',\n description: 'Local Z position.',\n editor: 'number-stepper',\n })\n positionZ: number = 0;\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationX',\n description: 'Rotation around X in radians.',\n editor: 'number-stepper',\n })\n rotationX: number = 0;\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationY',\n description: 'Rotation around Y in radians.',\n editor: 'number-stepper',\n })\n rotationY: number = 0;\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationZ',\n description: 'Rotation around Z in radians.',\n editor: 'number-stepper',\n })\n rotationZ: number = 0;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleX',\n description: 'Scale on X.',\n editor: 'number-stepper',\n })\n scaleX: number = 1;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleY',\n description: 'Scale on Y.',\n editor: 'number-stepper',\n })\n scaleY: number = 1;\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleZ',\n description: 'Scale on Z.',\n editor: 'number-stepper',\n })\n scaleZ: number = 1;\n @Field({\n type: 'number',\n step: 0.01,\n min: 0,\n max: 1,\n group: 'Graphics3D',\n label: 'opacity',\n description: 'Opacity from 0 to 1.',\n editor: 'number-slider',\n })\n opacity: number = 1;\n\n init(obj?: Graphics3DParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE, GameObject } from '@combos-fun/engine';\nimport { Renderer3D, Renderer3DSystem, tagObject3D } from '@combos-fun/plugin-renderer-3d';\nimport {\n BoxGeometry,\n SphereGeometry,\n CylinderGeometry,\n PlaneGeometry,\n ConeGeometry,\n TorusGeometry,\n MeshStandardMaterial,\n Mesh,\n} from 'three';\nimport type { BufferGeometry } from 'three';\nimport Graphics3D from './component';\n\ninterface Graphics3DEntry {\n mesh: Mesh;\n}\n\nconst GEOMETRY_PROPS = ['shape', 'width', 'height', 'depth', 'radius', 'segments'];\nconst MATERIAL_PROPS = ['color', 'wireframe', 'opacity'];\n\n@decorators.componentObserver({\n Graphics3D: [\n 'shape', 'color', 'wireframe',\n 'width', 'height', 'depth', 'radius', 'segments',\n 'positionX', 'positionY', 'positionZ',\n 'rotationX', 'rotationY', 'rotationZ',\n 'scaleX', 'scaleY', 'scaleZ',\n 'opacity',\n ],\n})\nexport default class Graphics3DSystem extends Renderer3D {\n static systemName = 'Graphics3DSystem';\n name: string = 'Graphics3DSystem';\n\n private entries: Map<number, Graphics3DEntry> = new Map();\n\n init() {\n const renderer3DSystem = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem;\n renderer3DSystem.rendererManager.register(this);\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Graphics3D') return;\n\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.handleAdd(changed.gameObject, changed.component as Graphics3D);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n this.handleRemove(changed.gameObject.id);\n } else {\n this.handleChange(changed);\n }\n }\n\n rendererUpdate(gameObject: GameObject) {\n const component = gameObject.getComponent(Graphics3D) as Graphics3D;\n if (!component) return;\n\n const entry = this.entries.get(gameObject.id);\n if (!entry) return;\n\n entry.mesh.position.set(component.positionX, component.positionY, component.positionZ);\n entry.mesh.rotation.set(component.rotationX, component.rotationY, component.rotationZ);\n entry.mesh.scale.set(component.scaleX, component.scaleY, component.scaleZ);\n }\n\n private handleAdd(gameObject: GameObject, component: Graphics3D) {\n const geometry = this.createGeometry(component);\n const material = new MeshStandardMaterial({\n color: component.color,\n wireframe: component.wireframe,\n transparent: component.opacity < 1,\n opacity: component.opacity,\n });\n const mesh = new Mesh(geometry, material);\n tagObject3D(mesh, gameObject.id);\n mesh.position.set(component.positionX, component.positionY, component.positionZ);\n mesh.rotation.set(component.rotationX, component.rotationY, component.rotationZ);\n mesh.scale.set(component.scaleX, component.scaleY, component.scaleZ);\n\n this.threeContext.scene.add(mesh);\n this.entries.set(gameObject.id, { mesh });\n }\n\n private handleChange(changed: ComponentChanged) {\n const component = changed.component as Graphics3D;\n const changedProp = changed.prop?.prop?.[0];\n const entry = this.entries.get(changed.gameObject.id);\n if (!entry) return;\n\n if (GEOMETRY_PROPS.includes(changedProp)) {\n entry.mesh.geometry.dispose();\n entry.mesh.geometry = this.createGeometry(component);\n }\n\n if (MATERIAL_PROPS.includes(changedProp)) {\n const material = entry.mesh.material as MeshStandardMaterial;\n material.color.setHex(component.color);\n material.wireframe = component.wireframe;\n material.opacity = component.opacity;\n material.transparent = component.opacity < 1;\n }\n }\n\n private handleRemove(id: number) {\n const entry = this.entries.get(id);\n if (!entry) return;\n\n this.threeContext.scene.remove(entry.mesh);\n entry.mesh.geometry.dispose();\n (entry.mesh.material as MeshStandardMaterial).dispose();\n this.entries.delete(id);\n }\n\n private createGeometry(component: Graphics3D): BufferGeometry {\n switch (component.shape) {\n case 'sphere':\n return new SphereGeometry(component.radius, component.segments, component.segments);\n case 'cylinder':\n return new CylinderGeometry(\n component.radius, component.radius, component.height, component.segments,\n );\n case 'plane':\n return new PlaneGeometry(component.width, component.height);\n case 'cone':\n return new ConeGeometry(component.radius, component.height, component.segments);\n case 'torus':\n return new TorusGeometry(\n component.radius, component.radius * 0.4, 16, component.segments,\n );\n case 'box':\n default:\n return new BoxGeometry(component.width, component.height, component.depth);\n }\n }\n\n onDestroy() {\n for (const [id] of this.entries) {\n this.handleRemove(id);\n }\n this.entries.clear();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-renderer-3d-graphics.esm.js","sources":["../lib/component.ts","../lib/instances.ts","../lib/shapes.ts","../lib/resources.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\n\nexport type Graphics3DMaterialKind = 'standard' | 'basic' | 'lambert' | 'toon';\n\nexport type Graphics3DShape =\n | 'box'\n | 'sphere'\n | 'cylinder'\n | 'plane'\n | 'cone'\n | 'torus'\n | 'capsule';\n\nexport interface Graphics3DPartParams {\n shape?: Graphics3DShape | string;\n color?: number;\n wireframe?: boolean;\n width?: number;\n height?: number;\n depth?: number;\n radius?: number;\n segments?: number;\n tube?: number;\n positionX?: number;\n positionY?: number;\n positionZ?: number;\n rotationX?: number;\n rotationY?: number;\n rotationZ?: number;\n scaleX?: number;\n scaleY?: number;\n scaleZ?: number;\n opacity?: number;\n roughness?: number;\n metalness?: number;\n emissive?: number;\n map?: string;\n doubleSide?: boolean;\n material?: Graphics3DMaterialKind | string;\n}\n\nexport interface Graphics3DParams extends Graphics3DPartParams {\n instanced?: boolean;\n parts?: Graphics3DPartParams[];\n}\n\nexport default class Graphics3D extends Component<Graphics3DParams> {\n static componentName: string = 'Graphics3D';\n\n @Field({\n type: 'string',\n group: 'Graphics3D',\n label: 'shape',\n description: 'Primitive shape kind.',\n editor: 'enum',\n enumOptions: ['box', 'sphere', 'cylinder', 'plane', 'cone', 'torus', 'capsule'],\n })\n shape: string = 'box';\n\n @Field({\n type: 'number',\n group: 'Graphics3D',\n label: 'color',\n description: 'Color value.',\n editor: 'number-stepper',\n })\n color: number = 0x00ff00;\n\n @Field({\n type: 'boolean',\n group: 'Graphics3D',\n label: 'wireframe',\n description: 'Draw as wireframe.',\n editor: 'toggle',\n })\n wireframe: boolean = false;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'width',\n description: 'Width.',\n editor: 'number-stepper',\n })\n width: number = 1;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'height',\n description: 'Height.',\n editor: 'number-stepper',\n })\n height: number = 1;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'depth',\n description: 'Depth.',\n editor: 'number-stepper',\n })\n depth: number = 1;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'radius',\n description: 'Radius.',\n editor: 'number-stepper',\n })\n radius: number = 0.5;\n\n @Field({\n type: 'number',\n step: 1,\n group: 'Graphics3D',\n label: 'segments',\n description: 'Mesh segment count.',\n editor: 'number-stepper',\n })\n segments: number = 12;\n\n @Field({\n type: 'number',\n step: 0.05,\n group: 'Graphics3D',\n label: 'tube',\n description: 'Torus tube radius. 0 means 0.4 × radius.',\n editor: 'number-stepper',\n })\n tube: number = 0;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionX',\n description: 'Local X position.',\n editor: 'number-stepper',\n })\n positionX: number = 0;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionY',\n description: 'Local Y position.',\n editor: 'number-stepper',\n })\n positionY: number = 0;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'positionZ',\n description: 'Local Z position.',\n editor: 'number-stepper',\n })\n positionZ: number = 0;\n\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationX',\n description: 'Rotation around X in radians.',\n editor: 'number-stepper',\n })\n rotationX: number = 0;\n\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationY',\n description: 'Rotation around Y in radians.',\n editor: 'number-stepper',\n })\n rotationY: number = 0;\n\n @Field({\n type: 'number',\n step: 0.01,\n group: 'Graphics3D',\n label: 'rotationZ',\n description: 'Rotation around Z in radians.',\n editor: 'number-stepper',\n })\n rotationZ: number = 0;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleX',\n description: 'Scale on X.',\n editor: 'number-stepper',\n })\n scaleX: number = 1;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleY',\n description: 'Scale on Y.',\n editor: 'number-stepper',\n })\n scaleY: number = 1;\n\n @Field({\n type: 'number',\n step: 0.1,\n group: 'Graphics3D',\n label: 'scaleZ',\n description: 'Scale on Z.',\n editor: 'number-stepper',\n })\n scaleZ: number = 1;\n\n @Field({\n type: 'number',\n step: 0.01,\n min: 0,\n max: 1,\n group: 'Graphics3D',\n label: 'opacity',\n description: 'Opacity from 0 to 1.',\n editor: 'number-slider',\n })\n opacity: number = 1;\n\n @Field({\n type: 'number',\n step: 0.05,\n min: 0,\n max: 1,\n group: 'Graphics3D',\n label: 'roughness',\n description: 'PBR roughness (standard material).',\n editor: 'number-slider',\n })\n roughness: number = 1;\n\n @Field({\n type: 'number',\n step: 0.05,\n min: 0,\n max: 1,\n group: 'Graphics3D',\n label: 'metalness',\n description: 'PBR metalness (standard material).',\n editor: 'number-slider',\n })\n metalness: number = 0;\n\n @Field({\n type: 'number',\n group: 'Graphics3D',\n label: 'emissive',\n description: 'Emissive color (hex).',\n editor: 'number-stepper',\n })\n emissive: number = 0;\n\n @Field({\n type: 'string',\n group: 'Graphics3D',\n label: 'map',\n description: 'Named IMAGE resource used as a color map.',\n editor: 'text',\n })\n map: string = '';\n\n @Field({\n type: 'boolean',\n group: 'Graphics3D',\n label: 'doubleSide',\n description: 'Render both sides of the mesh.',\n editor: 'toggle',\n })\n doubleSide: boolean = false;\n\n @Field({\n type: 'string',\n group: 'Graphics3D',\n label: 'material',\n description: 'Surface shader.',\n editor: 'enum',\n enumOptions: ['standard', 'basic', 'lambert', 'toon'],\n })\n material: string = 'standard';\n\n @Field({\n type: 'boolean',\n group: 'Graphics3D',\n label: 'instanced',\n description: 'Share an InstancedMesh with identical primitives.',\n editor: 'toggle',\n })\n instanced: boolean = true;\n\n parts: Graphics3DPartParams[] | undefined;\n\n init(obj?: Graphics3DParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n","import { Euler, InstancedMesh, Matrix4, Quaternion, Vector3 } from 'three';\nimport type { BufferGeometry, Material, Scene } from 'three';\nimport { COMBOS_INSTANCE_GAME_OBJECT_IDS } from '@combos-fun/plugin-renderer-3d';\n\nconst _pos = new Vector3();\nconst _quat = new Quaternion();\nconst _scale = new Vector3();\nconst _euler = new Euler();\nconst _mat = new Matrix4();\nconst _swap = new Matrix4();\n\nexport function composePose(\n px: number, py: number, pz: number,\n rx: number, ry: number, rz: number,\n sx: number, sy: number, sz: number,\n target: Matrix4 = _mat,\n): Matrix4 {\n _pos.set(px, py, pz);\n _euler.set(rx, ry, rz);\n _quat.setFromEuler(_euler);\n _scale.set(sx, sy, sz);\n return target.compose(_pos, _quat, _scale);\n}\n\ninterface Bucket {\n mesh: InstancedMesh;\n ids: Array<number | undefined>;\n indexOf: Map<number, number>;\n live: number;\n capacity: number;\n geometry: BufferGeometry;\n material: Material;\n}\n\nexport class InstanceBuckets {\n private buckets = new Map<string, Bucket>();\n\n constructor(private scene: Scene, private shadows: boolean) {}\n\n add(\n key: string,\n id: number,\n geometry: BufferGeometry,\n material: Material,\n matrix: Matrix4,\n ): void {\n let bucket = this.buckets.get(key);\n if (!bucket) {\n bucket = this.create(key, geometry, material);\n }\n if (bucket.live >= bucket.capacity) {\n this.grow(bucket);\n }\n const index = bucket.live;\n bucket.ids[index] = id;\n bucket.indexOf.set(id, index);\n bucket.mesh.setMatrixAt(index, matrix);\n bucket.live += 1;\n bucket.mesh.count = bucket.live;\n bucket.mesh.instanceMatrix.needsUpdate = true;\n }\n\n setMatrix(key: string, id: number, matrix: Matrix4): void {\n const bucket = this.buckets.get(key);\n if (!bucket) return;\n const index = bucket.indexOf.get(id);\n if (index == null) return;\n bucket.mesh.setMatrixAt(index, matrix);\n bucket.mesh.instanceMatrix.needsUpdate = true;\n }\n\n remove(key: string, id: number): void {\n const bucket = this.buckets.get(key);\n if (!bucket) return;\n const index = bucket.indexOf.get(id);\n if (index == null) return;\n const last = bucket.live - 1;\n if (index !== last) {\n const lastId = bucket.ids[last];\n bucket.mesh.getMatrixAt(last, _swap);\n bucket.mesh.setMatrixAt(index, _swap);\n bucket.ids[index] = lastId;\n if (typeof lastId === 'number') {\n bucket.indexOf.set(lastId, index);\n }\n }\n bucket.ids[last] = undefined;\n bucket.indexOf.delete(id);\n bucket.live -= 1;\n bucket.mesh.count = bucket.live;\n bucket.mesh.instanceMatrix.needsUpdate = true;\n if (bucket.live <= 0) {\n this.scene.remove(bucket.mesh);\n bucket.mesh.dispose();\n this.buckets.delete(key);\n }\n }\n\n clear(): void {\n for (const bucket of this.buckets.values()) {\n this.scene.remove(bucket.mesh);\n bucket.mesh.dispose();\n }\n this.buckets.clear();\n }\n\n private create(key: string, geometry: BufferGeometry, material: Material): Bucket {\n const capacity = 8;\n const mesh = new InstancedMesh(geometry, material, capacity);\n mesh.count = 0;\n mesh.frustumCulled = false;\n mesh.castShadow = this.shadows;\n mesh.receiveShadow = this.shadows;\n const ids = new Array<number | undefined>(capacity);\n mesh.userData[COMBOS_INSTANCE_GAME_OBJECT_IDS] = ids;\n this.scene.add(mesh);\n const bucket: Bucket = {\n mesh,\n ids,\n indexOf: new Map(),\n live: 0,\n capacity,\n geometry,\n material,\n };\n this.buckets.set(key, bucket);\n return bucket;\n }\n\n private grow(bucket: Bucket): void {\n const capacity = bucket.capacity * 2;\n const mesh = new InstancedMesh(bucket.geometry, bucket.material, capacity);\n mesh.count = bucket.live;\n mesh.frustumCulled = false;\n mesh.castShadow = this.shadows;\n mesh.receiveShadow = this.shadows;\n const ids = new Array<number | undefined>(capacity);\n for (let i = 0; i < bucket.live; i++) {\n bucket.mesh.getMatrixAt(i, _swap);\n mesh.setMatrixAt(i, _swap);\n ids[i] = bucket.ids[i];\n }\n mesh.userData[COMBOS_INSTANCE_GAME_OBJECT_IDS] = ids;\n this.scene.remove(bucket.mesh);\n bucket.mesh.dispose();\n this.scene.add(mesh);\n bucket.mesh = mesh;\n bucket.ids = ids;\n bucket.capacity = capacity;\n }\n}\n","import {\n BoxGeometry,\n SphereGeometry,\n CylinderGeometry,\n PlaneGeometry,\n ConeGeometry,\n TorusGeometry,\n CapsuleGeometry,\n} from 'three';\nimport type { BufferGeometry } from 'three';\nimport type { Graphics3DPartParams } from './component';\n\nexport interface ResolvedPrimitive {\n shape: string;\n color: number;\n wireframe: boolean;\n width: number;\n height: number;\n depth: number;\n radius: number;\n segments: number;\n tube: number;\n positionX: number;\n positionY: number;\n positionZ: number;\n rotationX: number;\n rotationY: number;\n rotationZ: number;\n scaleX: number;\n scaleY: number;\n scaleZ: number;\n opacity: number;\n roughness: number;\n metalness: number;\n emissive: number;\n map: string;\n doubleSide: boolean;\n material: string;\n}\n\nexport function torusTube(radius: number, tube?: number): number {\n return tube && tube > 0 ? tube : radius * 0.4;\n}\n\nexport function resolvePrimitive(\n part: Graphics3DPartParams,\n fallback?: Graphics3DPartParams,\n): ResolvedPrimitive {\n const src = { ...fallback, ...part };\n const radius = src.radius ?? 0.5;\n return {\n shape: src.shape || 'box',\n color: src.color ?? 0x00ff00,\n wireframe: !!src.wireframe,\n width: src.width ?? 1,\n height: src.height ?? 1,\n depth: src.depth ?? 1,\n radius,\n segments: Math.max(3, Math.round(src.segments ?? 12)),\n tube: torusTube(radius, src.tube),\n positionX: src.positionX ?? 0,\n positionY: src.positionY ?? 0,\n positionZ: src.positionZ ?? 0,\n rotationX: src.rotationX ?? 0,\n rotationY: src.rotationY ?? 0,\n rotationZ: src.rotationZ ?? 0,\n scaleX: src.scaleX ?? 1,\n scaleY: src.scaleY ?? 1,\n scaleZ: src.scaleZ ?? 1,\n opacity: src.opacity ?? 1,\n roughness: src.roughness ?? 1,\n metalness: src.metalness ?? 0,\n emissive: src.emissive ?? 0,\n map: src.map || '',\n doubleSide: !!src.doubleSide,\n material: src.material || 'standard',\n };\n}\n\nexport function geometryKey(p: ResolvedPrimitive): string {\n switch (p.shape) {\n case 'sphere':\n return `sphere:${p.radius}:${p.segments}`;\n case 'cylinder':\n return `cylinder:${p.radius}:${p.height}:${p.segments}`;\n case 'cone':\n return `cone:${p.radius}:${p.height}:${p.segments}`;\n case 'plane':\n return `plane:${p.width}:${p.height}:${p.segments}`;\n case 'torus':\n return `torus:${p.radius}:${p.tube}:${p.segments}`;\n case 'capsule':\n return `capsule:${p.radius}:${p.height}:${p.segments}`;\n case 'box':\n default:\n return `box:${p.width}:${p.height}:${p.depth}`;\n }\n}\n\nexport function createGeometry(p: ResolvedPrimitive): BufferGeometry {\n const segs = p.segments;\n switch (p.shape) {\n case 'sphere':\n return new SphereGeometry(p.radius, segs, segs);\n case 'cylinder':\n return new CylinderGeometry(p.radius, p.radius, p.height, segs);\n case 'plane':\n return new PlaneGeometry(p.width, p.height, segs, segs);\n case 'cone':\n return new ConeGeometry(p.radius, p.height, segs);\n case 'torus':\n return new TorusGeometry(p.radius, p.tube, 8, segs);\n case 'capsule': {\n const length = Math.max(0, p.height - 2 * p.radius);\n return new CapsuleGeometry(p.radius, length, 4, segs);\n }\n case 'box':\n default:\n return new BoxGeometry(p.width, p.height, p.depth);\n }\n}\n\nexport function materialKey(p: ResolvedPrimitive): string {\n return [\n p.material,\n p.color,\n p.wireframe ? 1 : 0,\n p.opacity,\n p.roughness,\n p.metalness,\n p.emissive,\n p.map,\n p.doubleSide ? 1 : 0,\n ].join(':');\n}\n\nexport function poseKey(\n px: number, py: number, pz: number,\n rx: number, ry: number, rz: number,\n sx: number, sy: number, sz: number,\n): string {\n return `${px},${py},${pz},${rx},${ry},${rz},${sx},${sy},${sz}`;\n}\n","import {\n DoubleSide,\n FrontSide,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n MeshToonMaterial,\n} from 'three';\nimport type { BufferGeometry, Material, Texture } from 'three';\nimport { textureFromNamedImage } from '@combos-fun/plugin-renderer-3d';\nimport { createGeometry, geometryKey, materialKey } from './shapes';\nimport type { ResolvedPrimitive } from './shapes';\n\nclass RefCache<T> {\n private items = new Map<string, { value: T; refs: number }>();\n\n get(key: string): T | undefined {\n return this.items.get(key)?.value;\n }\n\n acquire(key: string, create: () => T): T {\n const hit = this.items.get(key);\n if (hit) {\n hit.refs += 1;\n return hit.value;\n }\n const value = create();\n this.items.set(key, { value, refs: 1 });\n return value;\n }\n\n release(key: string, dispose: (value: T) => void): void {\n const hit = this.items.get(key);\n if (!hit) return;\n hit.refs -= 1;\n if (hit.refs > 0) return;\n dispose(hit.value);\n this.items.delete(key);\n }\n\n clear(dispose: (value: T) => void): void {\n for (const hit of this.items.values()) {\n dispose(hit.value);\n }\n this.items.clear();\n }\n}\n\nexport class GeometryCache {\n private cache = new RefCache<BufferGeometry>();\n\n acquire(primitive: ResolvedPrimitive): { key: string; geometry: BufferGeometry } {\n const key = geometryKey(primitive);\n return { key, geometry: this.cache.acquire(key, () => createGeometry(primitive)) };\n }\n\n release(key: string): void {\n this.cache.release(key, (geometry) => geometry.dispose());\n }\n\n clear(): void {\n this.cache.clear((geometry) => geometry.dispose());\n }\n}\n\nclass TextureCache {\n private items = new Map<string, { texture: Texture; refs: number }>();\n private inflight = new Map<string, Promise<Texture>>();\n\n async acquire(name: string): Promise<Texture> {\n const hit = this.items.get(name);\n if (hit) {\n hit.refs += 1;\n return hit.texture;\n }\n let pending = this.inflight.get(name);\n if (!pending) {\n pending = textureFromNamedImage(name);\n this.inflight.set(name, pending);\n }\n const texture = await pending;\n this.inflight.delete(name);\n const existing = this.items.get(name);\n if (existing) {\n existing.refs += 1;\n return existing.texture;\n }\n this.items.set(name, { texture, refs: 1 });\n return texture;\n }\n\n release(name: string): void {\n if (!name) return;\n const hit = this.items.get(name);\n if (!hit) return;\n hit.refs -= 1;\n if (hit.refs > 0) return;\n hit.texture.dispose();\n this.items.delete(name);\n }\n\n clear(): void {\n for (const hit of this.items.values()) {\n hit.texture.dispose();\n }\n this.items.clear();\n this.inflight.clear();\n }\n}\n\nfunction createMaterial(p: ResolvedPrimitive, map: Texture | null): Material {\n const common = {\n color: p.color,\n wireframe: p.wireframe,\n transparent: p.opacity < 1 || !!map,\n opacity: p.opacity,\n side: p.doubleSide ? DoubleSide : FrontSide,\n map,\n };\n switch (p.material) {\n case 'basic':\n return new MeshBasicMaterial(common);\n case 'lambert':\n return new MeshLambertMaterial(common);\n case 'toon':\n return new MeshToonMaterial(common);\n case 'standard':\n default:\n return new MeshStandardMaterial({\n ...common,\n roughness: p.roughness,\n metalness: p.metalness,\n emissive: p.emissive,\n });\n }\n}\n\nexport class MaterialCache {\n private cache = new RefCache<Material>();\n private maps = new Map<string, string>();\n readonly textures = new TextureCache();\n\n async acquire(primitive: ResolvedPrimitive): Promise<{ key: string; material: Material }> {\n const key = materialKey(primitive);\n const hit = this.cache.get(key);\n if (hit) {\n this.cache.acquire(key, () => hit);\n return { key, material: hit };\n }\n const texture = primitive.map ? await this.textures.acquire(primitive.map) : null;\n const again = this.cache.get(key);\n if (again) {\n if (primitive.map) this.textures.release(primitive.map);\n this.cache.acquire(key, () => again);\n return { key, material: again };\n }\n const material = createMaterial(primitive, texture);\n this.cache.acquire(key, () => material);\n if (primitive.map) this.maps.set(key, primitive.map);\n return { key, material };\n }\n\n release(key: string): void {\n const mapName = this.maps.get(key);\n this.cache.release(key, (material) => {\n material.dispose();\n if (mapName) {\n this.textures.release(mapName);\n this.maps.delete(key);\n }\n });\n }\n\n clear(): void {\n this.cache.clear((material) => material.dispose());\n this.maps.clear();\n this.textures.clear();\n }\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE, GameObject } from '@combos-fun/engine';\nimport {\n Renderer3D,\n Renderer3DSystem,\n tagObject3D,\n is3DSceneParent,\n has3DChildGameObjects,\n Transform3D,\n VisualPoseBridge,\n} from '@combos-fun/plugin-renderer-3d';\nimport { Group, Mesh } from 'three';\nimport type { BufferGeometry, Material } from 'three';\nimport Graphics3D from './component';\nimport { InstanceBuckets, composePose } from './instances';\nimport { GeometryCache, MaterialCache } from './resources';\nimport { poseKey, resolvePrimitive } from './shapes';\nimport type { ResolvedPrimitive } from './shapes';\n\ninterface PreparedPart {\n primitive: ResolvedPrimitive;\n geoKey: string;\n matKey: string;\n geometry: BufferGeometry;\n material: Material;\n}\n\ninterface Graphics3DEntry {\n mode: 'instance' | 'group';\n bucketKey?: string;\n group?: Group;\n prepared: PreparedPart[];\n lastPose?: string;\n poseBridge: VisualPoseBridge;\n}\n\nconst POSE_PROPS = new Set([\n 'positionX', 'positionY', 'positionZ',\n 'rotationX', 'rotationY', 'rotationZ',\n 'scaleX', 'scaleY', 'scaleZ',\n]);\n\n@decorators.componentObserver({\n Graphics3D: [\n 'shape', 'color', 'wireframe',\n 'width', 'height', 'depth', 'radius', 'segments', 'tube',\n 'positionX', 'positionY', 'positionZ',\n 'rotationX', 'rotationY', 'rotationZ',\n 'scaleX', 'scaleY', 'scaleZ',\n 'opacity', 'roughness', 'metalness', 'emissive',\n 'map', 'doubleSide', 'material', 'instanced', 'parts',\n ],\n Transform: ['_parent'],\n})\nexport default class Graphics3DSystem extends Renderer3D {\n static systemName = 'Graphics3DSystem';\n name: string = 'Graphics3DSystem';\n\n private entries: Map<number, Graphics3DEntry> = new Map();\n private geos = new GeometryCache();\n private mats = new MaterialCache();\n private buckets: InstanceBuckets | null = null;\n\n init() {\n const renderer3DSystem = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem;\n renderer3DSystem.rendererManager.register(this);\n this.buckets = new InstanceBuckets(\n this.threeContext.scene,\n !!this.threeContext.shadows,\n );\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName === 'Transform') {\n this.handleHierarchyChange(changed.gameObject);\n return;\n }\n if (changed.componentName !== 'Graphics3D') return;\n\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.mount(changed.gameObject, changed.component as Graphics3D);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n this.handleRemove(changed.gameObject.id);\n } else {\n const changedProp = changed.prop?.prop?.[0];\n if (POSE_PROPS.has(changedProp)) return;\n this.handleRemove(changed.gameObject.id);\n this.mount(changed.gameObject, changed.component as Graphics3D);\n }\n }\n\n rendererUpdate(gameObject: GameObject) {\n const component = gameObject.getComponent(Graphics3D) as Graphics3D;\n if (!component) return;\n const entry = this.entries.get(gameObject.id);\n if (!entry) return;\n\n const transform = gameObject.getComponent(Transform3D) as Transform3D | undefined;\n const applyVisualPose = entry.poseBridge.sync(component, transform);\n const next = poseKey(\n component.positionX, component.positionY, component.positionZ,\n component.rotationX, component.rotationY, component.rotationZ,\n component.scaleX, component.scaleY, component.scaleZ,\n );\n\n if (!applyVisualPose) {\n entry.lastPose = next;\n if (entry.group) {\n entry.group.position.set(0, 0, 0);\n entry.group.rotation.set(0, 0, 0);\n entry.group.scale.set(1, 1, 1);\n }\n return;\n }\n\n if (entry.lastPose === next) return;\n entry.lastPose = next;\n\n if (entry.mode === 'instance' && entry.bucketKey) {\n this.buckets?.setMatrix(\n entry.bucketKey,\n gameObject.id,\n composePose(\n component.positionX, component.positionY, component.positionZ,\n component.rotationX, component.rotationY, component.rotationZ,\n component.scaleX, component.scaleY, component.scaleZ,\n ),\n );\n return;\n }\n\n if (entry.group) {\n entry.group.position.set(component.positionX, component.positionY, component.positionZ);\n entry.group.rotation.set(component.rotationX, component.rotationY, component.rotationZ);\n entry.group.scale.set(component.scaleX, component.scaleY, component.scaleZ);\n }\n }\n\n private async mount(gameObject: GameObject, component: Graphics3D) {\n const asyncId = this.increaseAsyncId(gameObject.id);\n let prepared: PreparedPart[];\n try {\n prepared = await this.prepare(component);\n } catch (err) {\n console.error(`Graphics3D prepare failed for ${gameObject.name}`, err);\n return;\n }\n if (!this.validateAsyncId(gameObject.id, asyncId)) {\n this.releasePrepared(prepared);\n return;\n }\n this.attach(gameObject, component, prepared);\n }\n\n private async prepare(component: Graphics3D): Promise<PreparedPart[]> {\n const specs = this.resolveParts(component);\n const prepared: PreparedPart[] = [];\n try {\n for (const primitive of specs) {\n const { key: geoKey, geometry } = this.geos.acquire(primitive);\n try {\n const { key: matKey, material } = await this.mats.acquire(primitive);\n prepared.push({ primitive, geoKey, matKey, geometry, material });\n } catch (err) {\n this.geos.release(geoKey);\n throw err;\n }\n }\n } catch (err) {\n this.releasePrepared(prepared);\n throw err;\n }\n return prepared;\n }\n\n private resolveParts(component: Graphics3D): ResolvedPrimitive[] {\n if (component.parts && component.parts.length > 0) {\n return component.parts.map((part) => resolvePrimitive(part, component));\n }\n return [resolvePrimitive(component)];\n }\n\n private handleHierarchyChange(gameObject: GameObject) {\n const parent = gameObject.parent;\n if (parent && parent !== gameObject.scene) {\n this.ensureGroupMode(parent);\n }\n this.ensureGroupMode(gameObject);\n this.threeContext.reparentGameObject(gameObject);\n }\n\n private ensureGroupMode(gameObject: GameObject) {\n const entry = this.entries.get(gameObject.id);\n if (!entry || entry.mode !== 'instance') return;\n const component = gameObject.getComponent(Graphics3D) as Graphics3D;\n if (!component) return;\n if (entry.bucketKey) {\n this.buckets?.remove(entry.bucketKey, gameObject.id);\n }\n this.attachGroup(gameObject, component, entry.prepared, entry.lastPose);\n }\n\n private attach(gameObject: GameObject, component: Graphics3D, prepared: PreparedPart[]) {\n const useInstance = component.instanced !== false\n && prepared.length === 1\n && is3DSceneParent(gameObject)\n && !has3DChildGameObjects(gameObject)\n && !gameObject.getComponent(Transform3D)\n && !this.threeContext.hasTransform3DRoot(gameObject.id);\n const lastPose = poseKey(\n component.positionX, component.positionY, component.positionZ,\n component.rotationX, component.rotationY, component.rotationZ,\n component.scaleX, component.scaleY, component.scaleZ,\n );\n\n if (useInstance) {\n const part = prepared[0];\n const bucketKey = `${part.geoKey}|${part.matKey}`;\n this.buckets?.add(\n bucketKey,\n gameObject.id,\n part.geometry,\n part.material,\n composePose(\n component.positionX, component.positionY, component.positionZ,\n component.rotationX, component.rotationY, component.rotationZ,\n component.scaleX, component.scaleY, component.scaleZ,\n ),\n );\n this.entries.set(gameObject.id, {\n mode: 'instance',\n bucketKey,\n prepared,\n lastPose,\n poseBridge: new VisualPoseBridge(),\n });\n return;\n }\n\n this.attachGroup(gameObject, component, prepared, lastPose);\n }\n\n private attachGroup(\n gameObject: GameObject,\n component: Graphics3D,\n prepared: PreparedPart[],\n lastPose?: string,\n ) {\n const group = new Group();\n const shadows = !!this.threeContext.shadows;\n for (const part of prepared) {\n const mesh = new Mesh(part.geometry, part.material);\n mesh.position.set(part.primitive.positionX, part.primitive.positionY, part.primitive.positionZ);\n mesh.rotation.set(part.primitive.rotationX, part.primitive.rotationY, part.primitive.rotationZ);\n mesh.scale.set(part.primitive.scaleX, part.primitive.scaleY, part.primitive.scaleZ);\n mesh.castShadow = shadows;\n mesh.receiveShadow = shadows;\n group.add(mesh);\n }\n tagObject3D(group, gameObject.id);\n const transform = gameObject.getComponent(Transform3D) as Transform3D | undefined;\n const poseBridge = new VisualPoseBridge();\n const applyVisualPose = poseBridge.sync(component, transform);\n if (applyVisualPose) {\n group.position.set(component.positionX, component.positionY, component.positionZ);\n group.rotation.set(component.rotationX, component.rotationY, component.rotationZ);\n group.scale.set(component.scaleX, component.scaleY, component.scaleZ);\n } else {\n group.position.set(0, 0, 0);\n group.rotation.set(0, 0, 0);\n group.scale.set(1, 1, 1);\n }\n this.threeContext.attachVisual(gameObject.id, group, gameObject);\n this.entries.set(gameObject.id, {\n mode: 'group',\n group,\n prepared,\n lastPose,\n poseBridge,\n });\n }\n\n private releasePrepared(prepared: PreparedPart[]): void {\n for (const part of prepared) {\n this.geos.release(part.geoKey);\n this.mats.release(part.matKey);\n }\n }\n\n private handleRemove(id: number) {\n this.increaseAsyncId(id);\n const entry = this.entries.get(id);\n if (!entry) return;\n\n if (entry.mode === 'instance' && entry.bucketKey) {\n this.buckets?.remove(entry.bucketKey, id);\n } else if (entry.group) {\n this.threeContext.detachVisual(id, entry.group);\n }\n this.releasePrepared(entry.prepared);\n this.entries.delete(id);\n }\n\n onDestroy() {\n for (const [id] of this.entries) {\n this.handleRemove(id);\n }\n this.entries.clear();\n this.buckets?.clear();\n this.geos.clear();\n this.mats.clear();\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@combos-fun/plugin-renderer-3d-graphics",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"description": "Procedural 3D primitive shapes",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "dist/plugin-renderer-3d-graphics.esm.js",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"three": "^0.172.0",
|
|
30
|
-
"@combos-fun/engine": "0.0.
|
|
31
|
-
"@combos-fun/inspector-decorator": "0.0.
|
|
32
|
-
"@combos-fun/plugin-renderer-3d": "0.0.
|
|
30
|
+
"@combos-fun/engine": "0.0.45",
|
|
31
|
+
"@combos-fun/inspector-decorator": "0.0.45",
|
|
32
|
+
"@combos-fun/plugin-renderer-3d": "0.0.45"
|
|
33
33
|
},
|
|
34
34
|
"keywords": [
|
|
35
35
|
"combos-fun",
|
|
@@ -39,7 +39,10 @@
|
|
|
39
39
|
"box",
|
|
40
40
|
"sphere",
|
|
41
41
|
"cylinder",
|
|
42
|
-
"plane"
|
|
42
|
+
"plane",
|
|
43
|
+
"cone",
|
|
44
|
+
"torus",
|
|
45
|
+
"capsule"
|
|
43
46
|
],
|
|
44
47
|
"scripts": {
|
|
45
48
|
"build": "node ../../scripts/build-package.mjs"
|