import { Object3D } from 'three' import TextSprite from 'three.textsprite' import datasetList from './datasetList' import { choice } from '../../util' import { CLOUD_COLORS, CLOUD_ROTATION_SPEED, CLOUD_MAX_COUNT, CLOUD_TEXT_MIN_SIZE, CLOUD_TEXT_MAX_SIZE, } from '../constants' import { scene } from '../renderer' export const fontFamily = 'Helvetica, Arial, sans-serif' let cloud = new Object3D() export function init() { let sprites = Array.from({ length: Math.min(datasetList.length, CLOUD_MAX_COUNT) }, (t, i) => { const sprite = new TextSprite({ textSize: CLOUD_TEXT_MIN_SIZE + Math.random() * (CLOUD_TEXT_MAX_SIZE - CLOUD_TEXT_MIN_SIZE), redrawInterval: 1, material: { color: choice(CLOUD_COLORS), }, texture: { text: datasetList[i], fontFamily, }, }) sprite.position .setX(Math.random()) .setY(Math.random()) .setZ(Math.random()) .subScalar(1 / 2) .setLength(1 + Math.random()) .multiplyScalar(1) cloud.add(sprite) return sprite }) scene.add(cloud) return cloud } export function update() { cloud.rotation.y += CLOUD_ROTATION_SPEED }