Spaces:
Sleeping
Sleeping
| import * as THREE from 'three'; | |
| import { PALETTE_3D } from '../engine/palette.js'; | |
| export function createLabelSprite(text, x, y, z, color) { | |
| const canvas = document.createElement('canvas'); | |
| const ctx = canvas.getContext('2d'); | |
| // High res canvas for crisp text | |
| canvas.width = 512; | |
| canvas.height = 128; | |
| // 1. Clear Canvas (Ensure transparency) | |
| ctx.clearRect(0, 0, canvas.width, canvas.height); | |
| // 2. Draw White Text (Base for tinting) | |
| ctx.fillStyle = 'white'; | |
| ctx.font = 'Bold 32px "Courier New", monospace'; // Smaller font | |
| ctx.textAlign = 'left'; | |
| ctx.textBaseline = 'middle'; | |
| ctx.fillText(text, 10, 64); | |
| const texture = new THREE.CanvasTexture(canvas); | |
| texture.needsUpdate = true; // Ensure texture is uploaded | |
| // 3. Create Material with Tint Color | |
| const material = new THREE.SpriteMaterial({ | |
| map: texture, | |
| color: new THREE.Color(color || PALETTE_3D.AMBIENT_LIGHT), // Safety fallback | |
| transparent: true, | |
| depthWrite: false, | |
| depthTest: false // <--- CRITICAL FIX: Always render on top | |
| }); | |
| const sprite = new THREE.Sprite(material); | |
| // Scale sprite to match canvas aspect ratio (Reduced by 50% for cleaner look) | |
| sprite.scale.set(3.0, 0.8, 1); | |
| sprite.renderOrder = 99999; // <--- CRITICAL FIX: Draw last | |
| sprite.position.set(x, y, z); | |
| return sprite; | |
| } | |