2024-11-18 16:33:44 +03:00
|
|
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
|
import styles from './clickerpage.module.css';
|
|
|
|
|
import { ClickerBtn } from '../../Clicker/ClickerBtn';
|
|
|
|
|
import { Profile } from '../../Clicker/Profile';
|
|
|
|
|
import { ETextStyles } from '../../texts';
|
|
|
|
|
import { SectionsBlock } from '../../Clicker/SectionsBlock';
|
|
|
|
|
import { ClickerFooter } from '../../Clicker/ClickerFooter';
|
|
|
|
|
import { StyleElements } from '../../Clicker/StyleElements';
|
2024-12-11 05:02:21 +03:00
|
|
|
|
import { PointsZoom } from '../../Clicker/PointsZoom';
|
|
|
|
|
import { useWindowSize } from 'usehooks-ts';
|
|
|
|
|
import { useAppSelector } from '../../hooks/useAppSelector';
|
2024-12-12 18:42:33 +03:00
|
|
|
|
import { ModalWindow } from '../../ModalWindow';
|
|
|
|
|
import { DevPopup } from '../../Elements/DevPopup';
|
2024-11-18 16:33:44 +03:00
|
|
|
|
|
|
|
|
|
interface IClickerPageInterface {
|
|
|
|
|
name: string,
|
|
|
|
|
points: number,
|
|
|
|
|
energy: number,
|
|
|
|
|
img: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function ClickerPage({ name, points, img, energy }: IClickerPageInterface) {
|
|
|
|
|
const styleIndex = Number(localStorage.getItem('selectedStyle'));
|
2024-12-12 15:21:19 +03:00
|
|
|
|
const [coins, setCoins] = useState(0);
|
2024-12-11 05:02:21 +03:00
|
|
|
|
const [mult, setMult] = useState(1);
|
|
|
|
|
const [closePoints, setClosePoints] = useState(true);
|
|
|
|
|
const [closePointsAnim, setClosePointsAnim] = useState(false);
|
|
|
|
|
const { width, height } = useWindowSize();
|
|
|
|
|
const savedMult = useAppSelector<number>(state => state.mult);
|
2024-12-12 18:42:33 +03:00
|
|
|
|
const [closeError, setCloseError] = useState(true);
|
|
|
|
|
const [animClose, setAnimClose] = useState(false);
|
|
|
|
|
const [initEnergy, setInitEnergy] = useState(energy);
|
|
|
|
|
|
2024-12-11 05:02:21 +03:00
|
|
|
|
useEffect(() => {
|
|
|
|
|
setMult(savedMult);
|
|
|
|
|
}, [savedMult]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
//@ts-ignore
|
|
|
|
|
let timer;
|
|
|
|
|
|
2024-12-12 15:21:19 +03:00
|
|
|
|
if (points !== coins && coins != 0) {
|
2024-12-11 05:02:21 +03:00
|
|
|
|
setClosePoints(false);
|
|
|
|
|
timer = setTimeout(() => {
|
|
|
|
|
setClosePointsAnim(true);
|
|
|
|
|
}, 2000);
|
|
|
|
|
}
|
|
|
|
|
return () => {
|
|
|
|
|
//@ts-ignore
|
|
|
|
|
clearTimeout(timer);
|
|
|
|
|
};
|
|
|
|
|
}, [coins]);
|
|
|
|
|
|
2024-11-18 16:33:44 +03:00
|
|
|
|
return (
|
|
|
|
|
<div className={styles.container}>
|
|
|
|
|
<div className={styles.records}>
|
2024-12-12 18:42:33 +03:00
|
|
|
|
{!closePoints && <PointsZoom setMult={setMult} setEnergy={setInitEnergy} setCloseError={setCloseError} setCoins={setCoins} points={coins} setClosePointsAnim={setClosePointsAnim} setClose={setClosePoints} className={styles.pointsAnim} closePointsAnim={closePointsAnim}/>}
|
2024-12-12 15:21:19 +03:00
|
|
|
|
<Profile name={name} className={styles.profile} img={img}/>
|
2024-11-18 16:33:44 +03:00
|
|
|
|
<h1 style={ETextStyles.RwSb24100} className={styles.title}>Мои рекорды</h1>
|
2024-12-11 05:02:21 +03:00
|
|
|
|
<SectionsBlock mult={mult}/>
|
2024-11-18 16:33:44 +03:00
|
|
|
|
</div>
|
2024-12-11 05:02:21 +03:00
|
|
|
|
<div className={styles.clicker} style={{height: `${height > 670 && 'calc(100vh - 355px)'}`}}>
|
2024-12-12 18:42:33 +03:00
|
|
|
|
<ClickerBtn setEnergy={setInitEnergy} coins={coins} setCoins={setCoins} energy={initEnergy} setMult={setMult}/>
|
2024-11-18 16:33:44 +03:00
|
|
|
|
</div>
|
|
|
|
|
<ClickerFooter />
|
|
|
|
|
{styleIndex != 0 && <div>
|
|
|
|
|
<StyleElements styleIndex={styleIndex}/>
|
|
|
|
|
</div>}
|
2024-12-12 18:42:33 +03:00
|
|
|
|
{!closeError && <ModalWindow removeBtn={true} setCloseAnimOut={setAnimClose} closeAnimOut={animClose} setClose={setCloseError} modalBlock={
|
|
|
|
|
<DevPopup setClose={setAnimClose} title='Возникла ошибка' text='Мы пока не можем принимать клики, но скоро всё починим.' />
|
|
|
|
|
} />}
|
2024-11-18 16:33:44 +03:00
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|