import React, { useEffect, useState } from 'react'; import styles from './clickerbtn.module.css'; import { ModalWindow } from '../../ModalWindow'; import { ClickerPopup } from '../ClickerPopup'; import { getGradient } from '../../../utils/getGradient'; import { useAppSelector } from '../../hooks/useAppSelector'; import { useDispatch } from 'react-redux'; import { updateEnergyRequestAsync } from '../../../store/me/actions'; import axios from 'axios'; import { DevPopup } from '../../Elements/DevPopup'; import { saveMult } from '../../../store/mult'; import { Spinner } from '../../Elements/Spinner'; interface IClickerBtn { coins: number, setCoins(a: number): void, energy: number, setMult(a: number): void } export function ClickerBtn({ setCoins, energy, setMult, coins }: IClickerBtn) { const urlClick = useAppSelector(state => state.urlClick); const token = useAppSelector(state => state.token); const [fill, setFill] = useState(0); const [size, setSize] = useState(240); const circumference = 2 * Math.PI * 125; const dashArray = fill * circumference / 100; const img = fill < 100 ? '/assets/imgBtn1.png' : '/assets/imgBtn2.png'; const [close, setClose] = useState(true); const [gradient, setGradient] = useState(getGradient()); let styleIndex = useAppSelector(state => state.styleIndex); const [initEnergy, setEnergy] = useState(energy); //const maxEnergy = Number(localStorage.getItem('eg')); const [maxEnergy, setMaxEnergy] = useState(500); const [closeError, setCloseError] = useState(true); const [error, setError] = useState(false); const [animClose, setAnimClose] = useState(false); const dispatch = useDispatch(); const [loading, setLoading] = useState(false); useEffect(() => { const savedEnergy = sessionStorage.getItem('eg'); if(savedEnergy) { const encodeEnergy = atob(savedEnergy); setMaxEnergy(Number(encodeEnergy)); } setFill((maxEnergy - initEnergy) / maxEnergy * 100); }, []); useEffect(() => { if (initEnergy === 0 || fill === 100) { setCloseError(true); } }, [initEnergy, fill]); useEffect(() => { setGradient(getGradient()) }, [styleIndex]); const btnClick = () => { if (!(initEnergy === 0)) { sendClick(); } else { setClose(false); } }; const sendClick = () => { if (token && !loading) { setLoading(true); axios.post(`${urlClick}/api/v1/click/`, {}, { headers: { "Authorization": `TelegramToken ${token}` } } ).then((resp) => { //console.log(resp); if(resp.data) { setLoading(false); const click = Number(resp.data.click.value); // const encodeMult = btoa(click.toString()); sessionStorage.setItem('mt', encodeMult); // const newEnergy = Number(resp.data.energy); setMult(Number(click.toFixed(2))) dispatch(saveMult(Number(click.toFixed(2)))); const newFill = (maxEnergy - newEnergy) / maxEnergy * 100; if (newFill <= 100) { const newCoins = Number(coins + click); dispatch(updateEnergyRequestAsync(newEnergy)) setCoins(newCoins); setEnergy(newEnergy) setFill(newFill); } else { setFill(100); } if (newFill < 100) { setSize(220); const timer = setTimeout(() => { setSize(240); clearTimeout(timer); }, 100); } else { setClose(false); } // } if(error) { setError(false) } }).catch((err) => { setLoading(false); setCloseError(false); setError(true); console.log(err); }) } }; const hotCards = [ { title: 'Ты большой молодец', text: Твоя концентрация на высоте, ты перегрел кнопку на 15% сильнее остальных игроков, на столько же уголь Max Flow дает жар сильнее, чем остальные., img: 'assets/Biceps.png' }, { title: 'Как продолжить кликать', text: Чтобы охладиться, нужно закрыть приложение, нажав по кнопке ниже., img: 'assets/Monocle.png' }, { title: 'Что дальше', text: Затем ты сможешь открыть приложение заново и продолжить поддерживать свою большую концентрацию., img: 'assets/Rocket.png' }, ]; return (
{!loading &&
} {loading &&
} {gradient} {!close && } />} {!closeError && } />}
); }