From f4244d5913e10eae526a621889ac8491286ae658 Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 6 Nov 2025 16:15:28 +0900 Subject: [PATCH] =?UTF-8?q?fix(live-room):=20Path=EB=A1=9C=20=EA=B7=B8?= =?UTF-8?q?=EB=A6=AC=EB=8A=94=20=ED=95=98=ED=8A=B8=20=EB=AA=A8=EC=96=91=20?= =?UTF-8?q?=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/LiveRoomActivity.kt | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt index 2b6dd7c5..dd737c38 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt @@ -2416,18 +2416,19 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB } private val baseHeartPath: Path = Path().apply { - // 하트 경로(정규화 좌표계 [-1,1]) + // Swift HeartShape와 동일한 하트 경로 (정규화 좌표 [-1,1]에 0.9 스케일 반영) reset() - moveTo(0f, -0.2f) + val S = 0.9f + moveTo(0f, -0.45f * S) cubicTo( - 0.85f, -1.0f, - 1.35f, 0.2f, - 0f, 1f + 0.62f * S, -1.02f * S, + 1.22f * S, -0.04f * S, + 0f, 0.65f * S ) cubicTo( - -1.35f, 0.2f, - -0.85f, -1.0f, - 0f, -0.2f + -1.22f * S, -0.04f * S, + -0.62f * S, -1.02f * S, + 0f, -0.45f * S ) close() } @@ -2604,22 +2605,19 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB private val particles = mutableListOf() private val baseHeartPath: Path = Path().apply { - // 하트 실루엣(정규화 좌표: x,y ∈ [-1,1]) - // 상단 중앙 노치가 있고 좌우 로브가 둥글며 하단 포인트가 뾰족한 형태 - // y 범위 [-1, 1] 유지(halfSize 기반 착지/충돌 판정과 정합) + // Swift HeartShape와 동일한 하트 경로 (정규화 좌표 [-1,1]에 0.9 스케일 반영) reset() - moveTo(0f, -0.2f) // top notch - // right lobe → bottom tip + val S = 0.9f + moveTo(0f, -0.45f * S) cubicTo( - 0.85f, -1.0f, // control1: right lobe top - 1.35f, 0.2f, // control2: right shoulder - 0f, 1f // bottom tip + 0.62f * S, -1.02f * S, + 1.22f * S, -0.04f * S, + 0f, 0.65f * S ) - // left lobe → back to notch cubicTo( - -1.35f, 0.2f, // control1: left shoulder - -0.85f, -1.0f, // control2: left lobe top - 0f, -0.2f // notch + -1.22f * S, -0.04f * S, + -0.62f * S, -1.02f * S, + 0f, -0.45f * S ) close() } @@ -2722,22 +2720,19 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB private val drops = mutableListOf() private val baseHeartPath: Path = Path().apply { - // 하트 실루엣(정규화 좌표: x,y ∈ [-1,1]) - // 상단 중앙 노치가 있고 좌우 로브가 둥글며 하단 포인트가 뾰족한 형태 - // y 범위 [-1, 1] 유지(halfSize 기반 착지/충돌 판정과 정합) + // Swift HeartShape와 동일한 하트 경로 (정규화 좌표 [-1,1]에 0.9 스케일 반영) reset() - moveTo(0f, -0.2f) // top notch - // right lobe → bottom tip + val S = 0.9f + moveTo(0f, -0.45f * S) cubicTo( - 0.85f, -1.0f, // control1: right lobe top - 1.35f, 0.2f, // control2: right shoulder - 0f, 1f // bottom tip + 0.62f * S, -1.02f * S, + 1.22f * S, -0.04f * S, + 0f, 0.65f * S ) - // left lobe → back to notch cubicTo( - -1.35f, 0.2f, // control1: left shoulder - -0.85f, -1.0f, // control2: left lobe top - 0f, -0.2f // notch + -1.22f * S, -0.04f * S, + -0.62f * S, -1.02f * S, + 0f, -0.45f * S ) close() }