From 74ca79bd0c8e5f82478efafd40a202f49a0e7ddf Mon Sep 17 00:00:00 2001 From: ideen1 Date: Sat, 27 Jan 2024 11:46:45 -0700 Subject: [PATCH] Added basic stuff for car indication flashing Co-authored-by: JenniferJa --- .../HeroMolecules/CarGraphicComponent.tsx | 76 +++++++++---------- .../CarMolecules/CarModelComponent.tsx | 7 +- 2 files changed, 44 insertions(+), 39 deletions(-) diff --git a/app/src/renderer/code/components/molecules/HeroMolecules/CarGraphicComponent.tsx b/app/src/renderer/code/components/molecules/HeroMolecules/CarGraphicComponent.tsx index 620fa06a..595bf107 100644 --- a/app/src/renderer/code/components/molecules/HeroMolecules/CarGraphicComponent.tsx +++ b/app/src/renderer/code/components/molecules/HeroMolecules/CarGraphicComponent.tsx @@ -7,13 +7,13 @@ import { ContactShadows, OrbitControls } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import * as TWEEN from "@tweenjs/tween.js"; -enum IndicationStates { +export enum IndicationStates { RED, ORANGE, CLEAR, } -type IndicationLocations = { +export type IndicationLocations = { leftMotor: IndicationStates; rightMotor: IndicationStates; battery: IndicationStates; @@ -33,45 +33,40 @@ function CarGraphicComponent(props: any) { solarPanel: IndicationStates.CLEAR, }); - const [errorMaterial, setErrorMaterial] = useState( - new THREE.MeshStandardMaterial({ color: 0xff0000 }), - ); - const [warningMaterial, setWarningMaterial] = useState( - new THREE.MeshStandardMaterial({ color: 0xffa500 }), - ); + const errorMaterial = new THREE.MeshStandardMaterial({ + color: 0xff0000, + transparent: true, + opacity: 0.8, + }); - useEffect(() => { - animateEmissive(); - }, []); + const warningMaterial = new THREE.MeshStandardMaterial({ + color: 0xffa500, + transparent: true, + opacity: 0.8, + }); + + const initialIntensity = 0.1; + const targetIntensity = 0.8; + const duration = 500; - // new TWEEN.Tween(errorMaterial) - // .to({ r: 1, g: 0, b: 0 }, 1000) - // .easing(TWEEN.Easing.Quartic.In) - // .onUpdate(function () { - // setErrorMaterial(new THREE.MeshStandardMaterial({ color: 0xff0000 })); - // }) - // .start(); + const tween = new TWEEN.Tween({ intensity: initialIntensity }) + .to({ intensity: targetIntensity }, duration) + .easing(TWEEN.Easing.Quadratic.InOut) - const animateEmissive = () => { - const initialIntensity = 0.5; - const targetIntensity = 2.0; - const duration = 1000; + .onUpdate(({ intensity }) => { + errorMaterial.opacity = intensity; + warningMaterial.opacity = intensity; + }) + .yoyo(true) + .start() + .repeat(Infinity); - new TWEEN.Tween({ intensity: initialIntensity }) - .to({ intensity: targetIntensity }, duration) - .easing(TWEEN.Easing.Quadratic.InOut) - .start() - .onUpdate(({ intensity }) => { - console.log("Intensity:", intensity); - // setErrorMaterial((prevMaterial) => { - // const newMaterial = prevMaterial.clone(); - // newMaterial.emissiveIntensity = intensity; - // return newMaterial; - // }); - }) - .yoyo(true) - .repeat(-1); - }; + // Setup the animation loop. + function animate(time: number) { + tween.update(time); + requestAnimationFrame(animate); + } + animate(1); return ( <> @@ -82,7 +77,12 @@ function CarGraphicComponent(props: any) { shadow-mapSize={[512, 512]} castShadow /> - +