Path: blob/main/src/components/Camera.js
270 views
import React, { useState, useEffect, useRef } from "react";1import { connect } from "react-redux";2import getCam from "./Images";34import AnimatronicsMoving from "../media/Sounds/garble1.mp3";5import AnimatronicsMoving2 from "../media/Sounds/garble2.mp3";6import Static from "../media/Textures/Static-Cam.webp";7import Black from "../media/Textures/black.jpg";8import Media from "./Media";910import CameraMap from "../components/CameraMap";11import CameraButton from "../components/CameraButton";1213function Camera({14animatronics,15areAnimatronicsMoving,16isCameraOpen,17office,18camera,19cameraButtonDisappear,20dispatch,21}) {22const [Image, setImage] = useState(Media.Images.Stage);2324const closeCameraRef = useRef(null);25const cameraDivRef = useRef(null);2627const handleCameraButton = () => {28dispatch({ type: "SET_IS_OPEN" });29};3031const handleCameraChange = (e) => {32e.preventDefault();33Media.Sounds.CameraChange.play();34dispatch({ type: "CHANGE_CAMERA", content: e.target.title });35};3637useEffect(() => {38if (cameraDivRef.current) {39if (isCameraOpen)40setTimeout(() => {41cameraDivRef.current.style.display = "flex";42}, 350);43else44setTimeout(() => {45cameraDivRef.current.style.display = "none";46}, 100);47}48}, [isCameraOpen]);4950useEffect(() => {51const { Bonnie, Chica, Freddy, Foxy } = animatronics;52let result = "";53if (Bonnie.camera === camera) result += "_b";54if (Chica.camera === camera) result += "_c";55if (Freddy.camera === camera) result += "_f";5657const newCamera = getCam(result, camera, Foxy.camera);58setImage(newCamera);59}, [camera, animatronics, areAnimatronicsMoving, animatronics.Foxy.camera]);6061useEffect(() => {62if (areAnimatronicsMoving && isCameraOpen) {63let MusicNumber = Math.floor(Math.random() * 2);64let Sound;65if (MusicNumber == 1 || MusicNumber == 2) {66Sound = new Audio(AnimatronicsMoving);67} else {68Sound = new Audio(AnimatronicsMoving2);69}70Sound.play();71}72}, [areAnimatronicsMoving]);7374return (75<div>76{cameraButtonDisappear ? null : (77<CameraButton78handleCameraButton={handleCameraButton}79style={{ zIndex: "1" }}80/>81)}82{isCameraOpen ? (83<>84<img85draggable="false"86className="camera opening animation"87data-left-door={office.leftDoor}88data-right-door={office.rightDoor}89id="camera"90src={Media.Images.Up}91alt="Opening camera"92style={{93margin: 0,94width: "100vw",95height: "100vh",96position: "absolute",97top: 0,98}}99/>100<div101className="camera-container"102style={{ display: "none" }}103ref={cameraDivRef}104>105<CameraMap handleCameraChange={handleCameraChange} />106{areAnimatronicsMoving ? (107<img108draggable="false"109src={Black}110alt="Animatronics are moving"111className="animatronics-true"112style={{113height: "100vh",114width: "100vw",115backgroundColor: "black",116position: "absolute",117}}118/>119) : (120<img121src={Image}122alt="Camera"123className="camera-img"124style={{125width: "100vw",126position: "absolute",127}}128/>129)}130<img131alt="Static"132src={Static}133style={{134opacity: "0.1",135width: "100vw",136height: "100vh",137}}138draggable="false"139className="static-open"140/>141</div>142</>143) : (144<img145draggable="false"146className={`camera opening`}147id="camera"148ref={closeCameraRef}149src={Media.Images.Down}150alt="Closing camera"151style={{152width: "100vw",153height: "100vh",154position: "absolute",155}}156/>157)}158</div>159);160}161162const mapStateToProps = (state) => {163return {164animatronics: state.animatronicsReducer,165camera: state.cameraReducer.camera,166office: state.officeReducer,167isCameraOpen: state.cameraReducer.isCameraOpen,168areAnimatronicsMoving: state.cameraReducer.areAnimatronicsMoving,169jumpscare: state.configReducer.jumpscare,170cameraButtonDisappear: state.configReducer.cameraButtonDisappear,171};172};173174export default connect(mapStateToProps)(Camera);175176177