Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wellsousaaa
GitHub Repository: wellsousaaa/Five-Nights-at-Freddys-Web
Path: blob/main/src/CustomNight.js
270 views
1
import React from 'react';
2
import styles from "./css/CustomNight.module.css"
3
4
import Freddy from "./media/Textures/CustomNight/freddy.png";
5
import Bonnie from "./media/Textures/CustomNight/bonnie.png";
6
import Chica from "./media/Textures/CustomNight/chica.png";
7
import Foxy from "./media/Textures/CustomNight/foxy.png";
8
9
import goldenFreddyJumpscare from "./media/Sounds/golden_freddy.ogg";
10
11
const images = {
12
Freddy,
13
Bonnie,
14
Chica,
15
Foxy
16
}
17
18
const AnimatronicContainer = (props) => {
19
const {range, changeRange, character} = props;
20
21
return (
22
<div className={styles.animatronic}>
23
<img
24
alt="Five Nights At Freddy's"
25
src={images[character]}
26
title={character}
27
alt={character}
28
/>
29
30
<div className={styles.range_buttons}>
31
<button onClick={() => {changeRange(-1, character)}} disabled={range === 0}> {"<"} </button>
32
<span> {range} </span>
33
<button onClick={() => {changeRange(+1, character)}} disabled={range === 20}> {">"} </button>
34
</div>
35
</div>
36
)
37
};
38
39
const CustomNight = ({state, setStart}) => {
40
const [goldenFreddy, setGoldenFreddy] = React.useState(false);
41
const changeMode = (value) => {
42
43
let animatronics = {};
44
45
switch(value) {
46
case "EASY":
47
animatronics = {Bonnie: 2, Freddy: 2, Chica: 2, Foxy: 2};
48
break;
49
case "NORMAL":
50
animatronics = {Bonnie: 10, Freddy: 10, Chica: 10, Foxy: 10};
51
break;
52
case "HARD":
53
animatronics = {Bonnie: 15, Freddy: 15, Chica: 15, Foxy: 15};
54
break;
55
case "IMPOSSIBLE":
56
animatronics = {Bonnie: 20, Freddy: 20, Chica: 20, Foxy: 20};
57
break;
58
default:
59
return;
60
}
61
62
state.setStages((stages) => ({...animatronics, mode: value}));
63
};
64
65
const changeRange = (value, character) => {
66
const handleValue = (state, value) =>
67
(state === 0 && value < 0) || (state === 20 && value > 0) ? state : state + value
68
69
70
state.setStages((stages) => ({...stages, mode: "CUSTOM", [character]: handleValue(stages[character], value)}));
71
}
72
73
const hasWon = (mode) => {
74
const victories = JSON.parse(localStorage.getItem("victories")) || {};
75
76
return victories[mode] || " ";
77
}
78
79
const handleStart = () => {
80
if (
81
state.ranges.Freddy === 1 &&
82
state.ranges.Bonnie === 9 &&
83
state.ranges.Chica === 8 &&
84
state.ranges.Foxy === 7
85
) {
86
const golden = new Audio(goldenFreddyJumpscare);
87
golden.play();
88
return setGoldenFreddy(true);
89
}
90
setStart(true);
91
}
92
93
if(goldenFreddy) return <GoldenFreddy setGoldenFreddy={setGoldenFreddy} />;
94
95
return (
96
<div className={styles.custom_night_container}>
97
98
<a href="https://github.com/wellsousaaa/Five-Nights-at-Freddys-Web" target="_blank" className={styles.github_icon}>
99
<img src="https://icon-library.com/images/github-icon-white/github-icon-white-6.jpg" width="50" height="50" />
100
</a>
101
102
<h1>{"Five Nights at Freddy's Web"}</h1>
103
104
<div className={styles.animatronics_container}>
105
<AnimatronicContainer character={"Freddy"} range={state.ranges.Freddy} {...{changeRange}} />
106
<AnimatronicContainer character={"Bonnie"} range={state.ranges.Bonnie} {...{changeRange}} />
107
<AnimatronicContainer character={"Chica"} range={state.ranges.Chica} {...{changeRange}} />
108
<AnimatronicContainer character={"Foxy"} range={state.ranges.Foxy} {...{changeRange}} />
109
</div>
110
111
112
<div className={styles.start_screen} style={{margin: "2% auto 1% auto"}}>
113
<button className={styles.ready_button} onClick={handleStart}>
114
READY {"▶"}
115
</button>
116
</div>
117
118
<div className={styles.start_screen}>
119
<button onClick={() => {
120
changeMode("EASY")
121
}} data-selected={state.ranges.mode === "EASY"}>
122
EASY {hasWon("EASY")}
123
</button>
124
<button onClick={() => {
125
changeMode("NORMAL")
126
}} data-selected={state.ranges.mode === "NORMAL"}>
127
NORMAL {hasWon("NORMAL")}
128
</button>
129
<button onClick={() => {
130
changeMode("HARD")
131
}} data-selected={state.ranges.mode === "HARD"}>
132
HARD {hasWon("HARD")}
133
</button>
134
<button onClick={() => {
135
changeMode("IMPOSSIBLE")
136
}} data-selected={state.ranges.mode === "IMPOSSIBLE"}>
137
IMPOSSIBLE {hasWon("IMPOSSIBLE")}
138
</button>
139
</div>
140
141
<footer className={styles.footer}>
142
<p>Made by Wendell de Sousa | 2021 </p>
143
{/* <p>Five Nights at Freddy's © Scott Cawthon</p> */}
144
</footer>
145
</div>
146
)
147
};
148
149
export default CustomNight;
150
151
function GoldenFreddy({setGoldenFreddy}) {
152
React.useEffect(() => {
153
setTimeout(() => {
154
window.open("about:blank", "_self");
155
window.close();
156
setGoldenFreddy(false);
157
}, 5000);
158
}, [])
159
160
return <div className={styles.golden_freddy} />
161
}
162