All files / src/components/VirtualWalkthrough SplatRevealRain.tsx

0% Statements 0/6
0% Branches 0/17
0% Functions 0/2
0% Lines 0/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71                                                                                                                                             
import React, { useRef } from 'react';
 
import { Script } from '@playcanvas/react/components';
import { Color, Script as PcScript, Vec3 } from 'playcanvas';
import { GSplatRevealRain } from 'playcanvas/scripts/esm/gsplat/reveal-rain.mjs';
 
import { useRestartOnVr } from './useRestartOnVr';
 
interface SplatRevealRainProps {
  enabled?: boolean;
  restartOnVr?: boolean;
  scaleFactor?: number;
  center?: [number, number, number];
  distance?: number;
  speed?: number;
  acceleration?: number;
  flightTime?: number;
  rainSize?: number;
  rotation?: number;
  fallTint?: [number, number, number];
  fallTintIntensity?: number;
  hitTint?: [number, number, number];
  hitDuration?: number;
  endRadius?: number;
}
 
const SplatRevealRain = ({
  enabled = true,
  restartOnVr = true,
  scaleFactor = 1,
  center = [0, 0, 0],
  distance = 3,
  speed = 1,
  acceleration = 5,
  flightTime = 0.25,
  rainSize = 0.0,
  rotation = 0,
  fallTint = [0, 0, 0],
  fallTintIntensity = 0,
  hitTint = [0, 0, 0],
  hitDuration = 0,
  endRadius = 5,
}: SplatRevealRainProps) => {
  const scale = (value: number) => value * scaleFactor;
  const scriptRef = useRef<PcScript | null>(null);
 
  useRestartOnVr(scriptRef, enabled && restartOnVr);
 
  return (
    <Script
      ref={scriptRef}
      script={GSplatRevealRain}
      enabled={enabled}
      center={new Vec3(...center).mulScalar(scaleFactor)}
      distance={scale(distance)}
      speed={scale(speed)}
      acceleration={scale(acceleration)}
      flightTime={flightTime}
      rainSize={scale(rainSize)}
      rotation={rotation}
      fallTint={new Color(...fallTint)}
      fallTintIntensity={fallTintIntensity}
      hitTint={new Color(...hitTint)}
      hitDuration={hitDuration}
      endRadius={scale(endRadius)}
    />
  );
};
 
export default SplatRevealRain;