.
All checks were successful
All checks were successful
This commit is contained in:
parent
af3dd97f97
commit
7a183a192a
@ -22,7 +22,7 @@ import { useAuth } from '../auth/PlayerAuth';
|
||||
import RublocsLogo from '../components/RublocsLogo/RublocsLogo';
|
||||
import useDeviceType from '../hooks/useDeviceType';
|
||||
import KubikonMobileControls from './KubikonMobileControls';
|
||||
|
||||
// загрузка плейсов начинается на строке 1163
|
||||
// Плеер живёт на player.rublox.pro — он не знает SPA-роутов Майнкрафтии
|
||||
// (/kubikon, /login, /auth). Поэтому вместо navigate(...) делаем
|
||||
// явный window.location.assign на внешний домен.
|
||||
@ -252,6 +252,9 @@ const KubikonPlayer = () => {
|
||||
// Появляется после submitLeaderboard если бэк выдал rating_award текущему юзеру.
|
||||
// null | { place: 1|2|3, amount: number }
|
||||
const [ratingToast, setRatingToast] = useState(null);
|
||||
const [placeName, setPlaceName] = useState('Загрузка игры…');
|
||||
const [placeImage, setPlaceImage] = useState(null);
|
||||
const [studioName, setStudioName] = useState(null);
|
||||
const timerRafRef = useRef(null);
|
||||
/** Кэш загруженного project_data для soft-restart игры. */
|
||||
const initialStateRef = useRef(null);
|
||||
@ -684,6 +687,47 @@ const KubikonPlayer = () => {
|
||||
return () => { alive = false; clearInterval(t); };
|
||||
}, [projectId, userId, sessionId, loading]);
|
||||
|
||||
// Загрузка названия и картинки плейса с сервера
|
||||
// Загрузка названия, картинки и автора плейса с сервера
|
||||
// Загрузка названия, картинки и автора плейса
|
||||
useEffect(() => {
|
||||
if (!projectId) return;
|
||||
if (!userId) {
|
||||
console.log('[Loading] Ждём userId...');
|
||||
return; // Ждём пока userId загрузится
|
||||
}
|
||||
|
||||
async function loadPlaceData() {
|
||||
try {
|
||||
// Пытаемся загрузить данные через API
|
||||
const response = await Kubikon3DApi.getProjectForPlay(projectId, userId);
|
||||
const title = response?.data?.title;
|
||||
const thumbnail = response?.data?.thumbnail;
|
||||
const author = response?.data?.author_username;
|
||||
|
||||
if (title) {
|
||||
setPlaceName(title);
|
||||
} else {
|
||||
setPlaceName(`Плейс ${projectId}`);
|
||||
}
|
||||
|
||||
if (thumbnail) {
|
||||
setPlaceImage(thumbnail);
|
||||
}
|
||||
|
||||
if (author) {
|
||||
setStudioName(author);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.warn('[KubikonPlayer] Не удалось загрузить данные плейса:', error);
|
||||
setPlaceName(`Плейс ${projectId}`);
|
||||
}
|
||||
}
|
||||
|
||||
loadPlaceData();
|
||||
}, [projectId, userId]); // Убрал meta из зависимостей!
|
||||
|
||||
// Хоткеи 1-5 для слотов инвентаря.
|
||||
// Babylon ловит ввод на canvas — слушаем в capture-phase на window
|
||||
// и не привязываемся к isPlaying (state-флаг может быть ещё false на старте).
|
||||
@ -1132,13 +1176,14 @@ const KubikonPlayer = () => {
|
||||
}}
|
||||
/>
|
||||
{/* Loading-оверлей */}
|
||||
{/*не меняйте пожалуйста загрузку, работаю над ней*/}
|
||||
{loading && (
|
||||
<div style={{
|
||||
position: 'absolute', inset: 0,
|
||||
display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center',
|
||||
background:
|
||||
'radial-gradient(ellipse at center, rgba(51,87,255,0.22) 0%, rgba(7,10,20,0.96) 60%)',
|
||||
background: 'radial-gradient(ellipse at center, rgba(51,87,255,0.22) 0%, rgba(7,10,20,0.96) 60%)',
|
||||
gap: 18, color: HUD.text,
|
||||
zIndex: 50,
|
||||
}}>
|
||||
<div style={{
|
||||
position: 'relative',
|
||||
@ -1149,8 +1194,28 @@ const KubikonPlayer = () => {
|
||||
borderRadius: 20,
|
||||
animation: 'hudPulseRing 1.6s ease-out infinite',
|
||||
}} />
|
||||
<RublocsLogo size={72} />
|
||||
{placeImage ? (
|
||||
<img
|
||||
src={placeImage}
|
||||
alt={placeName}
|
||||
style={{
|
||||
width: 90, height: 90,
|
||||
borderRadius: 16,
|
||||
objectFit: 'cover',
|
||||
boxShadow: '0 6px 20px rgba(0,0,0,0.4)',
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
<RublocsLogo size={90} />
|
||||
)}
|
||||
</div>
|
||||
{/* Полупрозрачный тёмно-серый пузырь для текста */}
|
||||
<div style={{
|
||||
background: 'rgba(30, 35, 55, 0.6)',
|
||||
borderRadius: 60,
|
||||
padding: '10px 24px',
|
||||
marginTop: 8,
|
||||
}}>
|
||||
<div style={{
|
||||
display: 'flex', alignItems: 'center', gap: 10,
|
||||
fontSize: 15, fontWeight: 700, letterSpacing: 0.3,
|
||||
@ -1158,20 +1223,25 @@ const KubikonPlayer = () => {
|
||||
<div style={{
|
||||
width: 14, height: 14,
|
||||
border: `2.5px solid ${HUD.accentBg}`,
|
||||
borderTopColor: HUD.accent,
|
||||
borderTopColor: "#ffffff",
|
||||
borderRadius: '50%',
|
||||
animation: 'hudSpin 0.8s linear infinite',
|
||||
}} />
|
||||
Загрузка игры…
|
||||
{placeName || 'Загрузка игры…'}
|
||||
</div>
|
||||
|
||||
<div style={{
|
||||
fontSize: 11, color: HUD.textDim,
|
||||
fontSize: 13, color: HUD.textDim,
|
||||
textTransform: 'uppercase', letterSpacing: 1.4, fontWeight: 700,
|
||||
textAlign: 'center',
|
||||
marginTop: 6,
|
||||
}}>
|
||||
Рублокс • 3D
|
||||
{studioName || 'Имя автора'}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{/* Игровой UI (HUD, GUI, hotbar, прицел в первом лице) */}
|
||||
|
||||
{/* Игровой UI (HUD, GUI, hotbar, прицел в первом лице) */}
|
||||
{!loading && (
|
||||
@ -2426,3 +2496,4 @@ const voteBtnStyle = (active, kind) => {
|
||||
};
|
||||
|
||||
export default KubikonPlayer;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user