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-12-13 02:46:21 +03:00
import { AuctionMainPopups } from '../../Auction/AuctionMainPopups' ;
import { useAuctionData } from '../../hooks/useAuctionData' ;
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-12 23:01:22 +03:00
const [ clickTime , setClickTime ] = useState ( 0 ) ;
const [ closeAutoClick , setCloseAutoClick ] = useState ( true ) ;
const [ sameCoords , setSameCoords ] = useState ( false ) ;
2024-12-13 02:46:21 +03:00
const [ sameInterval , setSameInterval ] = useState ( false ) ;
useAuctionData ( ) ;
useEffect ( ( ) = > {
const html = document . querySelector ( 'html' ) ;
if ( html ) {
2024-12-13 12:17:17 +03:00
html . style . overflowY = 'scroll' ;
2024-12-13 02:46:21 +03:00
}
} , [ ] ) ;
2024-12-12 18:42:33 +03:00
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-13 02:46:21 +03:00
{ ! closePoints && < PointsZoom sameInterval = { sameInterval } setSameInterval = { setSameInterval } sameCoords = { sameCoords } setSameCoords = { setSameCoords } setCloseAutoClick = { setCloseAutoClick } setClickTime = { setClickTime } clickTime = { clickTime } 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-13 02:46:21 +03:00
< ClickerBtn setSameInterval = { setSameInterval } closeAutoClick = { closeAutoClick } sameCoords = { sameCoords } setSameCoords = { setSameCoords } clickTime = { clickTime } setClickTime = { setClickTime } 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-12-12 23:01:22 +03:00
{ ! closeAutoClick && < ModalWindow removeBtn = { true } setCloseAnimOut = { setAnimClose } closeAnimOut = { animClose } setClose = { setCloseAutoClick } modalBlock = {
< DevPopup setClose = { setAnimClose } title = 'Кажется, вы используете автокликер...' text = 'Ваши клики не отправлены. Давайте играть честно.' img = 'assets/police.gif' / >
} / > }
2024-12-13 02:46:21 +03:00
< AuctionMainPopups / >
2024-11-18 16:33:44 +03:00
< / div >
) ;
}