Path: blob/main/src/CustomNight.js
270 views
import React from 'react';1import styles from "./css/CustomNight.module.css"23import Freddy from "./media/Textures/CustomNight/freddy.png";4import Bonnie from "./media/Textures/CustomNight/bonnie.png";5import Chica from "./media/Textures/CustomNight/chica.png";6import Foxy from "./media/Textures/CustomNight/foxy.png";78import goldenFreddyJumpscare from "./media/Sounds/golden_freddy.ogg";910const images = {11Freddy,12Bonnie,13Chica,14Foxy15}1617const AnimatronicContainer = (props) => {18const {range, changeRange, character} = props;1920return (21<div className={styles.animatronic}>22<img23alt="Five Nights At Freddy's"24src={images[character]}25title={character}26alt={character}27/>2829<div className={styles.range_buttons}>30<button onClick={() => {changeRange(-1, character)}} disabled={range === 0}> {"<"} </button>31<span> {range} </span>32<button onClick={() => {changeRange(+1, character)}} disabled={range === 20}> {">"} </button>33</div>34</div>35)36};3738const CustomNight = ({state, setStart}) => {39const [goldenFreddy, setGoldenFreddy] = React.useState(false);40const changeMode = (value) => {4142let animatronics = {};4344switch(value) {45case "EASY":46animatronics = {Bonnie: 2, Freddy: 2, Chica: 2, Foxy: 2};47break;48case "NORMAL":49animatronics = {Bonnie: 10, Freddy: 10, Chica: 10, Foxy: 10};50break;51case "HARD":52animatronics = {Bonnie: 15, Freddy: 15, Chica: 15, Foxy: 15};53break;54case "IMPOSSIBLE":55animatronics = {Bonnie: 20, Freddy: 20, Chica: 20, Foxy: 20};56break;57default:58return;59}6061state.setStages((stages) => ({...animatronics, mode: value}));62};6364const changeRange = (value, character) => {65const handleValue = (state, value) =>66(state === 0 && value < 0) || (state === 20 && value > 0) ? state : state + value676869state.setStages((stages) => ({...stages, mode: "CUSTOM", [character]: handleValue(stages[character], value)}));70}7172const hasWon = (mode) => {73const victories = JSON.parse(localStorage.getItem("victories")) || {};7475return victories[mode] || " ";76}7778const handleStart = () => {79if (80state.ranges.Freddy === 1 &&81state.ranges.Bonnie === 9 &&82state.ranges.Chica === 8 &&83state.ranges.Foxy === 784) {85const golden = new Audio(goldenFreddyJumpscare);86golden.play();87return setGoldenFreddy(true);88}89setStart(true);90}9192if(goldenFreddy) return <GoldenFreddy setGoldenFreddy={setGoldenFreddy} />;9394return (95<div className={styles.custom_night_container}>9697<a href="https://github.com/wellsousaaa/Five-Nights-at-Freddys-Web" target="_blank" className={styles.github_icon}>98<img src="https://icon-library.com/images/github-icon-white/github-icon-white-6.jpg" width="50" height="50" />99</a>100101<h1>{"Five Nights at Freddy's Web"}</h1>102103<div className={styles.animatronics_container}>104<AnimatronicContainer character={"Freddy"} range={state.ranges.Freddy} {...{changeRange}} />105<AnimatronicContainer character={"Bonnie"} range={state.ranges.Bonnie} {...{changeRange}} />106<AnimatronicContainer character={"Chica"} range={state.ranges.Chica} {...{changeRange}} />107<AnimatronicContainer character={"Foxy"} range={state.ranges.Foxy} {...{changeRange}} />108</div>109110111<div className={styles.start_screen} style={{margin: "2% auto 1% auto"}}>112<button className={styles.ready_button} onClick={handleStart}>113READY {"▶"}114</button>115</div>116117<div className={styles.start_screen}>118<button onClick={() => {119changeMode("EASY")120}} data-selected={state.ranges.mode === "EASY"}>121EASY {hasWon("EASY")}122</button>123<button onClick={() => {124changeMode("NORMAL")125}} data-selected={state.ranges.mode === "NORMAL"}>126NORMAL {hasWon("NORMAL")}127</button>128<button onClick={() => {129changeMode("HARD")130}} data-selected={state.ranges.mode === "HARD"}>131HARD {hasWon("HARD")}132</button>133<button onClick={() => {134changeMode("IMPOSSIBLE")135}} data-selected={state.ranges.mode === "IMPOSSIBLE"}>136IMPOSSIBLE {hasWon("IMPOSSIBLE")}137</button>138</div>139140<footer className={styles.footer}>141<p>Made by Wendell de Sousa | 2021 </p>142{/* <p>Five Nights at Freddy's © Scott Cawthon</p> */}143</footer>144</div>145)146};147148export default CustomNight;149150function GoldenFreddy({setGoldenFreddy}) {151React.useEffect(() => {152setTimeout(() => {153window.open("about:blank", "_self");154window.close();155setGoldenFreddy(false);156}, 5000);157}, [])158159return <div className={styles.golden_freddy} />160}161162