@@ -6,13 +6,15 @@ interface OrbProps {
66 hoverIntensity ?: number ;
77 rotateOnHover ?: boolean ;
88 forceHoverState ?: boolean ;
9+ isHover ?: boolean ;
910}
1011
1112export default function Orb ( {
1213 hue = 0 ,
1314 hoverIntensity = 0.2 ,
1415 rotateOnHover = true ,
1516 forceHoverState = false ,
17+ isHover = false ,
1618} : OrbProps ) {
1719 const ctnDom = useRef < HTMLDivElement > ( null ) ;
1820
@@ -162,8 +164,10 @@ export default function Orb({
162164 float c = cos(angle);
163165 uv = vec2(c * uv.x - s * uv.y, s * uv.x + c * uv.y);
164166
165- uv.x += hover * hoverIntensity * 0.1 * sin(uv.y * 10.0 + iTime);
166- uv.y += hover * hoverIntensity * 0.1 * sin(uv.x * 10.0 + iTime);
167+ // hover 상태를 반전시켜서 적용
168+ float invertedHover = 1.0 - hover;
169+ uv.x += invertedHover * hoverIntensity * 0.1 * sin(uv.y * 10.0 + iTime);
170+ uv.y += invertedHover * hoverIntensity * 0.1 * sin(uv.x * 10.0 + iTime);
167171
168172 return draw(uv);
169173 }
@@ -263,11 +267,13 @@ export default function Orb({
263267 program . uniforms . hue . value = hue ;
264268 program . uniforms . hoverIntensity . value = hoverIntensity ;
265269
266- const effectiveHover = forceHoverState ? 1 : targetHover ;
270+ // isHover prop이 true이면 hover 상태로, forceHoverState나 targetHover도 고려
271+ const effectiveHover = forceHoverState || isHover ? 1 : targetHover ;
267272 program . uniforms . hover . value +=
268273 ( effectiveHover - program . uniforms . hover . value ) * 0.1 ;
269274
270- if ( rotateOnHover && effectiveHover > 0.5 ) {
275+ // rotateOnHover 로직도 반전 - hover 상태가 아닐 때 회전
276+ if ( rotateOnHover && effectiveHover < 0.5 ) {
271277 currentRot += dt * rotationSpeed ;
272278 }
273279 program . uniforms . rot . value = currentRot ;
@@ -284,7 +290,7 @@ export default function Orb({
284290 container . removeChild ( gl . canvas ) ;
285291 gl . getExtension ( "WEBGL_lose_context" ) ?. loseContext ( ) ;
286292 } ;
287- } , [ hue , hoverIntensity , rotateOnHover , forceHoverState ] ) ;
293+ } , [ hue , hoverIntensity , rotateOnHover , forceHoverState , isHover ] ) ;
288294
289295 return < div ref = { ctnDom } className = "w-full h-full" /> ;
290296}
0 commit comments