Spaces:
Running
Running
Update pages/GameLucky.tsx
Browse files- pages/GameLucky.tsx +51 -14
pages/GameLucky.tsx
CHANGED
|
@@ -137,23 +137,60 @@ const LuckyWheel = ({ config, isSpinning, result, onSpin }: {
|
|
| 137 |
const largeArcFlag = slice.angle > 180 ? 1 : 0;
|
| 138 |
const pathData = `M 0 0 L ${startX} ${startY} A 1 1 0 ${largeArcFlag} 0 ${endX} ${endY} Z`;
|
| 139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
return (
|
| 141 |
<g key={i}>
|
| 142 |
<path d={pathData} fill={slice.color} stroke="white" strokeWidth="0.01" />
|
| 143 |
-
|
| 144 |
-
<g transform={`rotate(${
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
</g>
|
| 158 |
</g>
|
| 159 |
);
|
|
|
|
| 137 |
const largeArcFlag = slice.angle > 180 ? 1 : 0;
|
| 138 |
const pathData = `M 0 0 L ${startX} ${startY} A 1 1 0 ${largeArcFlag} 0 ${endX} ${endY} Z`;
|
| 139 |
|
| 140 |
+
// Text Layout Logic
|
| 141 |
+
// If slice is narrow (<45 deg) OR text is long (>4 chars), use Vertical Stack
|
| 142 |
+
const isVertical = slice.angle < 45 || slice.name.length > 4;
|
| 143 |
+
const midAngle = (slice.startAngle + slice.endAngle) / 2;
|
| 144 |
+
const displayText = slice.name.length > 8 ? slice.name.substring(0,7)+'..' : slice.name;
|
| 145 |
+
|
| 146 |
return (
|
| 147 |
<g key={i}>
|
| 148 |
<path d={pathData} fill={slice.color} stroke="white" strokeWidth="0.01" />
|
| 149 |
+
|
| 150 |
+
<g transform={`rotate(${midAngle})`}>
|
| 151 |
+
{isVertical ? (
|
| 152 |
+
// Vertical Stack Mode (Characters stacked radially)
|
| 153 |
+
displayText.split('').map((char, idx) => {
|
| 154 |
+
const charSize = 0.08;
|
| 155 |
+
const spacing = 0.09;
|
| 156 |
+
// Center the stack around radius ~0.6
|
| 157 |
+
const totalHeight = displayText.length * spacing;
|
| 158 |
+
const startR = 0.65 - (totalHeight / 2) + (spacing/2);
|
| 159 |
+
const r = startR + idx * spacing;
|
| 160 |
+
|
| 161 |
+
return (
|
| 162 |
+
<text
|
| 163 |
+
key={idx}
|
| 164 |
+
x={r}
|
| 165 |
+
y={0}
|
| 166 |
+
fill="white"
|
| 167 |
+
fontSize={charSize}
|
| 168 |
+
fontWeight="bold"
|
| 169 |
+
textAnchor="middle"
|
| 170 |
+
dominantBaseline="middle"
|
| 171 |
+
transform={`rotate(90, ${r}, 0)`}
|
| 172 |
+
style={{ textShadow: '1px 1px 2px rgba(0,0,0,0.3)' }}
|
| 173 |
+
>
|
| 174 |
+
{char}
|
| 175 |
+
</text>
|
| 176 |
+
);
|
| 177 |
+
})
|
| 178 |
+
) : (
|
| 179 |
+
// Horizontal Mode (Tangential)
|
| 180 |
+
<text
|
| 181 |
+
x={0.65}
|
| 182 |
+
y={0}
|
| 183 |
+
fill="white"
|
| 184 |
+
fontSize="0.09"
|
| 185 |
+
fontWeight="bold"
|
| 186 |
+
textAnchor="middle"
|
| 187 |
+
dominantBaseline="middle"
|
| 188 |
+
transform="rotate(90, 0.65, 0)"
|
| 189 |
+
style={{ textShadow: '1px 1px 2px rgba(0,0,0,0.3)' }}
|
| 190 |
+
>
|
| 191 |
+
{displayText}
|
| 192 |
+
</text>
|
| 193 |
+
)}
|
| 194 |
</g>
|
| 195 |
</g>
|
| 196 |
);
|