feat(game): 添加动物精灵图像变体支持并优化揭示动画
- 引入 light-animal-sprite 图像资源和 variant 属性支持 - 在动物组件中实现正常和浅色精灵图像切换功能 - 重构桌面和移动版动物组件的揭示动画逻辑 - 移除冗余的运动偏好检测和布局效果钩子 - 调整揭示动画的时间参数和平滑度曲线 - 更新资源预加载配置以包含浅色动物图像 - 修改控制组件中的投注数量调整状态管理 - 优化脚本生成精灵图像的复用性
This commit is contained in:
@@ -102,6 +102,7 @@ export function useGameControlVm() {
|
||||
amount: chip.amount,
|
||||
id: chip.id,
|
||||
isSelected: chip.id === activeChipId,
|
||||
isDisabled: tableLimitMax > 0 && chip.amount > tableLimitMax,
|
||||
src: CHIP_IMAGE_MAP.get(chip.id) ?? CHIP_IMAGE_OPTIONS[0]?.src ?? '',
|
||||
valueLabel: formatChipDisplayValue(chip.amount),
|
||||
}))
|
||||
@@ -113,7 +114,7 @@ export function useGameControlVm() {
|
||||
|
||||
return left.isSelected ? 1 : -1
|
||||
})
|
||||
}, [activeChipId, chips])
|
||||
}, [activeChipId, chips, tableLimitMax])
|
||||
|
||||
const selectedChip =
|
||||
chipItems.find((chip) => chip.id === activeChipId) ?? chipItems[0] ?? null
|
||||
@@ -126,6 +127,30 @@ export function useGameControlVm() {
|
||||
const hasInsufficientBalance = hasSelections && totalBetAmount > balance
|
||||
const hasExceededBetLimit =
|
||||
hasSelections && tableLimitMax > 0 && totalBetAmount > tableLimitMax
|
||||
const canIncreaseBetQuantity = useMemo(() => {
|
||||
if (!hasSelections) {
|
||||
return true
|
||||
}
|
||||
|
||||
const activeChip = chips.find((chip) => chip.id === activeChipId)
|
||||
|
||||
if (!activeChip) {
|
||||
return false
|
||||
}
|
||||
|
||||
const nextQuantity = activeBetQuantity + 1
|
||||
const nextTotalPerSelection = activeChip.amount * nextQuantity
|
||||
const nextTotal = nextTotalPerSelection * selections.length
|
||||
|
||||
return tableLimitMax <= 0 || nextTotal <= tableLimitMax
|
||||
}, [
|
||||
hasSelections,
|
||||
chips,
|
||||
activeChipId,
|
||||
activeBetQuantity,
|
||||
selections.length,
|
||||
tableLimitMax,
|
||||
])
|
||||
const confirmState: ConfirmState =
|
||||
isSubmitting || isAutoHosting
|
||||
? 'submitting'
|
||||
@@ -292,6 +317,7 @@ export function useGameControlVm() {
|
||||
!hasSubmittedCurrentRound &&
|
||||
!isAutoHosting,
|
||||
canDecreaseBetQuantity: activeBetQuantity > 1,
|
||||
canIncreaseBetQuantity,
|
||||
confirmLabel:
|
||||
confirmState === 'idle'
|
||||
? t('gameDesktop.control.selectNumbers')
|
||||
@@ -306,7 +332,14 @@ export function useGameControlVm() {
|
||||
isConfirmClickable: confirmState === 'ready' && !isAutoHosting,
|
||||
onChipSelect: selectChip,
|
||||
onDecreaseBetQuantity: () => adjustBetQuantity(-1),
|
||||
onIncreaseBetQuantity: () => adjustBetQuantity(1),
|
||||
onIncreaseBetQuantity: () => {
|
||||
if (!canIncreaseBetQuantity) {
|
||||
notify.warning(t('commonUi.toast.betLimitExceeded'))
|
||||
return
|
||||
}
|
||||
|
||||
adjustBetQuantity(1)
|
||||
},
|
||||
onConfirm: handleConfirm,
|
||||
onClearSelections: clearSelections,
|
||||
onOpenAutoSetting: handleOpenAutoSetting,
|
||||
|
||||
Reference in New Issue
Block a user