Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wellsousaaa
GitHub Repository: wellsousaaa/Five-Nights-at-Freddys-Web
Path: blob/main/src/components/Camera.js
270 views
1
import React, { useState, useEffect, useRef } from "react";
2
import { connect } from "react-redux";
3
import getCam from "./Images";
4
5
import AnimatronicsMoving from "../media/Sounds/garble1.mp3";
6
import AnimatronicsMoving2 from "../media/Sounds/garble2.mp3";
7
import Static from "../media/Textures/Static-Cam.webp";
8
import Black from "../media/Textures/black.jpg";
9
import Media from "./Media";
10
11
import CameraMap from "../components/CameraMap";
12
import CameraButton from "../components/CameraButton";
13
14
function Camera({
15
animatronics,
16
areAnimatronicsMoving,
17
isCameraOpen,
18
office,
19
camera,
20
cameraButtonDisappear,
21
dispatch,
22
}) {
23
const [Image, setImage] = useState(Media.Images.Stage);
24
25
const closeCameraRef = useRef(null);
26
const cameraDivRef = useRef(null);
27
28
const handleCameraButton = () => {
29
dispatch({ type: "SET_IS_OPEN" });
30
};
31
32
const handleCameraChange = (e) => {
33
e.preventDefault();
34
Media.Sounds.CameraChange.play();
35
dispatch({ type: "CHANGE_CAMERA", content: e.target.title });
36
};
37
38
useEffect(() => {
39
if (cameraDivRef.current) {
40
if (isCameraOpen)
41
setTimeout(() => {
42
cameraDivRef.current.style.display = "flex";
43
}, 350);
44
else
45
setTimeout(() => {
46
cameraDivRef.current.style.display = "none";
47
}, 100);
48
}
49
}, [isCameraOpen]);
50
51
useEffect(() => {
52
const { Bonnie, Chica, Freddy, Foxy } = animatronics;
53
let result = "";
54
if (Bonnie.camera === camera) result += "_b";
55
if (Chica.camera === camera) result += "_c";
56
if (Freddy.camera === camera) result += "_f";
57
58
const newCamera = getCam(result, camera, Foxy.camera);
59
setImage(newCamera);
60
}, [camera, animatronics, areAnimatronicsMoving, animatronics.Foxy.camera]);
61
62
useEffect(() => {
63
if (areAnimatronicsMoving && isCameraOpen) {
64
let MusicNumber = Math.floor(Math.random() * 2);
65
let Sound;
66
if (MusicNumber == 1 || MusicNumber == 2) {
67
Sound = new Audio(AnimatronicsMoving);
68
} else {
69
Sound = new Audio(AnimatronicsMoving2);
70
}
71
Sound.play();
72
}
73
}, [areAnimatronicsMoving]);
74
75
return (
76
<div>
77
{cameraButtonDisappear ? null : (
78
<CameraButton
79
handleCameraButton={handleCameraButton}
80
style={{ zIndex: "1" }}
81
/>
82
)}
83
{isCameraOpen ? (
84
<>
85
<img
86
draggable="false"
87
className="camera opening animation"
88
data-left-door={office.leftDoor}
89
data-right-door={office.rightDoor}
90
id="camera"
91
src={Media.Images.Up}
92
alt="Opening camera"
93
style={{
94
margin: 0,
95
width: "100vw",
96
height: "100vh",
97
position: "absolute",
98
top: 0,
99
}}
100
/>
101
<div
102
className="camera-container"
103
style={{ display: "none" }}
104
ref={cameraDivRef}
105
>
106
<CameraMap handleCameraChange={handleCameraChange} />
107
{areAnimatronicsMoving ? (
108
<img
109
draggable="false"
110
src={Black}
111
alt="Animatronics are moving"
112
className="animatronics-true"
113
style={{
114
height: "100vh",
115
width: "100vw",
116
backgroundColor: "black",
117
position: "absolute",
118
}}
119
/>
120
) : (
121
<img
122
src={Image}
123
alt="Camera"
124
className="camera-img"
125
style={{
126
width: "100vw",
127
position: "absolute",
128
}}
129
/>
130
)}
131
<img
132
alt="Static"
133
src={Static}
134
style={{
135
opacity: "0.1",
136
width: "100vw",
137
height: "100vh",
138
}}
139
draggable="false"
140
className="static-open"
141
/>
142
</div>
143
</>
144
) : (
145
<img
146
draggable="false"
147
className={`camera opening`}
148
id="camera"
149
ref={closeCameraRef}
150
src={Media.Images.Down}
151
alt="Closing camera"
152
style={{
153
width: "100vw",
154
height: "100vh",
155
position: "absolute",
156
}}
157
/>
158
)}
159
</div>
160
);
161
}
162
163
const mapStateToProps = (state) => {
164
return {
165
animatronics: state.animatronicsReducer,
166
camera: state.cameraReducer.camera,
167
office: state.officeReducer,
168
isCameraOpen: state.cameraReducer.isCameraOpen,
169
areAnimatronicsMoving: state.cameraReducer.areAnimatronicsMoving,
170
jumpscare: state.configReducer.jumpscare,
171
cameraButtonDisappear: state.configReducer.cameraButtonDisappear,
172
};
173
};
174
175
export default connect(mapStateToProps)(Camera);
176
177