Остывающее лавовое поле: тёмная корка с рельефом разбита на плиты, трещины между ними светятся от тёмно-красного до почти белого, а жар медленно «дышит» и перетекает по полю. Там, где проходит палец (или курсор в вебе), корка снова плавится, трещины расширяются и вверх летят искры. Стоит отпустить — горячая точка сама блуждает по полю.
Шейдер считается целиком на GPU через Skia, время и сглаженное положение пальца живут на UI-потоке Reanimated — React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения», приложение свёрнуто или передан paused. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerpnpm add @shopify/react-native-skia react-native-reanimated react-native-gesture-handleryarn add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerbun add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerСкопируйте эти файлы в src/shared/components/organisms/magma/:
Код доступен по подпискеPro
Исходник «Магма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Магма» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
По умолчанию компонент занимает ширину родителя и высоту height. Чтобы растянуть его фоном на весь экран, передайте fill.
speed?Тип number
heat?Тип number
color?Тип string
cells?Тип number
interactive?Тип boolean
paused?Тип boolean
fill?Тип boolean
width?Тип number
height?Тип number
borderRadius?Тип number
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>